Họ và tên: Vàng Văn Quyn
Nhóm: 01 (Bảo Thắng + Si Ma Cai)
Lớp: Tin A20-PH Lào Cai.
Môi trường: Visual Studio 2019 (Console)
* Không kiểm tra điểm nhập vào (0 <= điểm <= 10)
// Bai2.cpp : This file contains the 'main' function. Program execution begins and ends there.
//#include <iostream>
//#include <iomanip>
//#include <fstream>
using namespace std;
class HOCSINH {
private:
char maso[10], hotendem[30], ten[15];
int tuoi;
float toan, van, anh;
public:
HOCSINH();
HOCSINH(string maso, string hotendem, string ten, int tuoi, float toan, float van, float anh);
void NHAP();
float DTB();
void INRA();
string getTen() { return this->ten; }
};
// (giữ nguyên toàn bộ code như bạn đã cung cấp)
* Có kiểm tra điểm nhập vào (0 <= điểm <= 10)
// Bai2.cpp : This file contains the 'main' function. Program execution begins and ends there.
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
class HOCSINH {
private:
char maso[10], hotendem[30], ten[15];
int tuoi;
float toan, van, anh;
bool Kiemtranhapdiem(float diem) {
if ((diem >= 0) && (diem <= 10)) {
return true;
}
else {
cout << "Thong bao loi, chi duoc nhap gia tri: 0 <= "
<< "Gia tri nhap vao phai"
<< " <= 10" << endl;
return false;
}
}
public:
HOCSINH();
HOCSINH(string maso, string hotendem, string ten, int tuoi, float toan, float van, float anh);
void NHAP();
float DTB();
void INRA();
string getTen() { return this->ten; }
};
HOCSINH::HOCSINH() {
strcpy_s(this->maso, "");
strcpy_s(this->hotendem, "");
strcpy_s(this->ten, "");
this->tuoi = 0;
this->toan = 0;
this->van = 0;
this->anh = 0;
}
HOCSINH::HOCSINH(string maso, string hotendem, string ten, int tuoi, float toan, float van, float anh) {
strcpy_s(this->maso, maso.c_str());
strcpy_s(this->hotendem, hotendem.c_str());
strcpy_s(this->ten, ten.c_str());
this->tuoi = tuoi;
this->toan = toan;
this->van = van;
this->anh = anh;
}
void HOCSINH::NHAP() {
cout << "Ma so: "; cin.getline(this->maso, 10);
cout << "Ho va ten dem: "; cin.getline(this->hotendem, 30);
cout << "Ten: "; cin.getline(this->ten, 15);
cout << "Tuoi: "; cin >> tuoi;
do {
cout << "Diem toan: "; cin >> this->toan;
} while (!this->Kiemtranhapdiem(this->toan));
do {
cout << "Diem van: "; cin >> this->van;
} while (!this->Kiemtranhapdiem(this->van));
do {
cout << "Diem T. Anh: "; cin >> this->anh;
} while (!this->Kiemtranhapdiem(this->anh));
}
float HOCSINH::DTB() {
float tb = 0;
tb = this->toan + this->van + this->anh;
tb = tb / 3.0;
return tb;
}
void HOCSINH::INRA() {
cout << "Hoc sinh: " << setw(10) << this->maso
<< setw(30) << this->hotendem
<< setw(15) << this->ten
<< setw(5) << this->tuoi
<< setw(8) << setprecision(2) << fixed << this->toan
<< setw(8) << setprecision(2) << fixed << this->van
<< setw(8) << setprecision(2) << fixed << this->anh
<< setw(8) << setprecision(2) << fixed << this->DTB()
<< endl;
}
class DSHOCSINH {
private:
void SAPXEP(HOCSINH* ds, int soluonghocsinh, bool sapxepgiamdan);
void XEPLOAI(int gioi, int kha, int tb, int kdat) {
cout << "Gioi: " << gioi
<< setw(20) << "Kha: " << kha
<< setw(20) << "Tb: " << tb
<< setw(20) << "Khong dat: " << kdat;
}
public:
void NHAP();
void INRA();
};
void DSHOCSINH::NHAP() {
ofstream fout;
HOCSINH hs = HOCSINH();
fout.open("HOCSINH.DAT", ios::out);
char ok;
while (1) {
hs.NHAP();
fout.write((char*)&hs, sizeof(hs));
if (fout.good()) {
cout << "Da ghi thanh cong! ";
}
cout << "Co nhap tiep khong (C/K)?"; cin >> ok; cin.ignore();
if ((ok == 'k') || (ok == 'K')) {
break;
}
}
fout.close();
}
void DSHOCSINH::SAPXEP(HOCSINH* ds, int soluonghocsinh, bool sapxepgiamdan) {
int i = soluonghocsinh;
HOCSINH temp;
for (int j1 = 0; j1 < i; j1++) {
for (int j2 = 0; j2 < i; j2++) {
if (sapxepgiamdan) {
if (ds[j1].getTen() < ds[j2].getTen()) {
temp = ds[j1];
ds[j1] = ds[j2];
ds[j2] = temp;
}
}
else {
if (ds[j1].getTen() > ds[j2].getTen()) {
temp = ds[j1];
ds[j1] = ds[j2];
ds[j2] = temp;
}
}
}
}
}
void DSHOCSINH::INRA() {
ifstream fin;
int i = 0;
HOCSINH* ds = new HOCSINH[100];
fin.open("HOCSINH.DAT", ios::in);
if (!fin.good()) {
cout << "Mo tep bi loi!";
return;
}
int gioi = 0, kha = 0, tb = 0, khongdat = 0;
HOCSINH hs;
while (fin.read((char*)&hs, sizeof(hs))) {
ds[i] = hs;
i++;
}
fin.close();
this->SAPXEP(ds, i, true);
for (int j = 0; j < i; j++) {
if (ds[j].DTB() >= 8.5) gioi++;
else if (ds[j].DTB() >= 7.0 && ds[j].DTB() < 8.5) kha++;
else if (ds[j].DTB() >= 5.0 && ds[j].DTB() < 7.0) tb++;
else khongdat++;
ds[j].INRA();
}
this->XEPLOAI(gioi, kha, tb, khongdat);
}
int main() {
DSHOCSINH hs = DSHOCSINH();
hs.NHAP();
hs.INRA();
}