Bài toán Quản lý sinh viên ghi dữ liệu ra file C++

Bài toán quản lý
sinh viên là dạng bài toán thường gặp trong các ngôn ngữ lập trình, với những dữ
liệu đã có trong bài toán trên ta có thể xây dựng các chức năng cơ bản của bài
toán như:

# include <iostream>

# include <fstream>

# include <iomanip>

using namespace std;

class SINHVIEN

{

protected:

 

   
char masv[15];

   
char hoten[35];

   
char khoa[15];  

   
double T_Anh, Tin_CS;

 

 

public:

   
void NHAP();

   
void INRA();

};

class SV_TOAN : public SINHVIEN

{

protected:

   
double Giai_tich, Dai_so;   

public:

   
void NHAP_SV_TOAN();

   
void INRA_SV_TOAN();

   
void SUA_SV_TOAN();

   
void BS_SV_TOAN();

   
double DTB_SV_TOAN();

};

class SV_TIN : public SINHVIEN

{

protected:

   
double NN_C, CT_DL;   

public:

   
void NHAP_SV_TIN();

   
void INRA_SV_TIN();

   
void SUA_SV_TIN();

   
void BS_SV_TIN();

   
double DTB_SV_TIN();

};

void SINHVIEN::NHAP()

{

   
cout << “Ma sinh vien: “; cin.getline(masv, 15);

   
cout << “Ho va ten  : “;
cin.getline(hoten, 35);

   
cout << “Ten Khoa   : “;
cin.getline(khoa, 15);

   
cout << “Diem : T_Anh, Tin_CS; “;

   
cin >> T_Anh >> Tin_CS; cin.ignore();

}

void SINHVIEN::INRA()

{

   
cout << setw(11) << masv << setw(25) << hoten

        << setw(11) << khoa << setw(11)

        << setw(11) << T_Anh << setw(11) << Tin_CS;

}

void SV_TOAN::NHAP_SV_TOAN()

{

   
SV_TOAN pm;

   
fstream FW;

   
char ok;

   
FW.open(“TOAN.DAT”, ios::out);

   
cout << “\n Nhap ds sinh vien lop
SV_TOAN \n”;

   
while (1)

   
{

        pm.NHAP();     

        cout << ” Diem Giai tich : “; cin >> pm.Giai_tich; cin.ignore();

        cout << ” Diem Dai_so : “; cin >> pm.Dai_so; cin.ignore();

        FW.write((char*)&pm, sizeof(pm));

        cout << “\n Tiep tuc (C/K) ?”; cin >> ok; cin.ignore();

        if (ok == ‘k’ || ok ==
‘K’) break;

 

   
}

   
FW.close();

}

double SV_TOAN::DTB_SV_TOAN()

{

   
return (T_Anh * 3 + Tin_CS *
4  + Giai_tich * 3 + Dai_so * 3);

}

void SV_TOAN::INRA_SV_TOAN()

{

   
SV_TOAN pm;

   
fstream FR;

   
FR.open(“TOAN.DAT”, ios::in);

   
if (FR.fail()) { cout << “\n Loi
mo tep tin”; return; }

   
cout << “\n Danh sach sinh vien lop
SV_TOAN \n”;

   
cout << setw(3) << “STT” << setw(11) << “Ma SV” << setw(25) << “Ho Ten”

        << setw(11) << “Khoa ” << setw(11)

        << setw(11) << “T. Anh” << setw(11) << “Tin CS” << setw(11) << “Giai Tich” << setw(11) << “Dai So”

        << setw(15) << “Diem TB” << “\n”;

   
int TT = 1;

   
while (FR.read((char*)&pm, sizeof(pm)))

   
{

        cout << “\n” << setw(3) << TT << ” “;

        cout << setw(11) << pm.masv << setw(25) << pm.hoten << setw(11) << pm.khoa

             << setw(11) << pm.T_Anh << setw(11) << pm.Tin_CS << setw(11) << pm.Dai_so << setw(11) << pm.Giai_tich << setw(15) << DTB_SV_TOAN() << endl;

        //cin >>
T_Anh >> Tin_CS >> LTHDT;

        TT = TT + 1;

   
}

   
FR.close();

}

void SV_TOAN::SUA_SV_TOAN()

{

   
SV_TOAN pm;

   
fstream FW;

   
int n; char ok;

   
cout << “\n Nhap ban ghi can
sua:”;

   
cin >> n; cin.ignore();

   
FW.open(“TOAN.DAT”, ios::in | ios::out);

   
if (FW.fail()) { cout << ” \n Loi
mo tep “; return; }

   
cout << “\n nhap du lieu sua lai:\n
“;

   
cout << “Ma sinh vien: “; cin.getline(pm.masv, 10);

   
cout << “Ho va ten : “; cin.getline(pm.masv, 25);

   
cout << “Khoa : “; cin.getline(pm.khoa, 10);  

   
cout << “Diem : T_Anh, Tin_CS; “;

   
cin >> pm.T_Anh >> pm.Tin_CS; cin.ignore();

   
cout << ” Diem Giai tich : “; cin >> pm.Giai_tich; cin.ignore();

   
cout << ” Diem Dai_so : “; cin >> pm.Dai_so; cin.ignore();

   
cout << “\nNhap nua khong (C/K) ?
“;

   
cin >> ok; cin.ignore();

   
FW.seekp((n – 1) * sizeof(pm)); //chuyen con tron den ban ghi thu n

 

   
if (ok == ‘c’ || ok == ‘C’) FW.write((char*)&pm, sizeof(pm)); //ghi lai ban ghi

 

   
FW.close();

}

void SV_TOAN::BS_SV_TOAN()

{

   
SV_TOAN pm;

   
fstream FW;

   
int n = FW.tellp() / sizeof(pm) + 1;

  
char ok;

   
cout << “\n Nhap ban ghi Bo
sung:”;

   
cin >> n; cin.ignore();   

   
if (FW.fail()) { cout << ” \n Loi
mo tep “; return; }

   
FW.open(“TOAN.DAT”, ios::in | ios::out | ios::app);

   
FW.seekp(0, ios::end);   

   
while (1)

   
{

        cout << “\nNhap ban ghi thu: ” << n;

        cout << “Ma sinh vien: “; cin.getline(pm.masv, 10);

        cout << “Ho va ten : “; cin.getline(pm.masv, 25);

        cout << “Khoa : “; cin.getline(pm.khoa, 10);

        cout << “Diem : T_Anh, Tin_CS; “;

        cin >> pm.T_Anh >> pm.Tin_CS; cin.ignore();

        cout << ” Diem Giai tich : “; cin >> pm.Giai_tich; cin.ignore();

        cout << ” Diem Dai_so : “; cin >> pm.Dai_so; cin.ignore();

        FW.write((char*)&pm, sizeof(pm));

        cout << “\nNhap nua khong (C/K) ?
“;

  
     cin >> ok; cin.ignore();

        n = n + 1;

        if (ok == ‘k’ || ok ==
‘K’) break;

   
}

   
FW.close();

}

void SV_TIN::NHAP_SV_TIN()

{

   
SV_TIN tin;

   
fstream FW;

   
char ok;

   
FW.open(“TIN.DAT”, ios::out);

   
cout << “\n Nhap ds sinh vien lop
SV_TIN \n”;

   
while (1)

   
{

        tin.NHAP();       

        cout << ” Diem Ngon ngu C:  “; cin >> tin.NN_C; cin.ignore();

        cout << ” Diem Cau Truc DL: “; cin >> tin.CT_DL; cin.ignore();

        FW.write((char*)&tin, sizeof(tin));

 
      cout << “\n Tiep
tuc (C/K) ?”; cin >> ok; cin.ignore();

        if (ok == ‘k’ || ok ==
‘K’) break;

   
}

   
FW.close();

}

double SV_TIN::DTB_SV_TIN()

{

   
return (T_Anh * 3 + Tin_CS * 4 +
NN_C * 3 + CT_DL * 3);

}

void SV_TIN::INRA_SV_TIN()

{

   
SV_TIN tin;

   
fstream FR;

   
FR.open(“TIN.DAT”, ios::in);

   
if (FR.fail()) { cout << “\n Loi
mo tep tin”; return; }

   
cout << “\n Danh sach sinh vien lop SV_TIN
\n”;

   
cout << setw(3) << “STT” << setw(11) << “Ma SV” << setw(25) << “Ho Ten”

        << setw(11) << “Khoa ” << setw(11)

        << setw(11) << “T.Anh” << setw(11) << “Tin CS” << setw(11) << “Ngon Ngu C” << setw(11) << “Cau Truc DL”

        << setw(15) << “Diem TB” << “\n”;

   
int TT = 1;

   
while (FR.read((char*)&tin, sizeof(tin)))

   
{

        cout << “\n” << setw(3) << TT << ” “;

        cout << setw(11) << tin.masv << setw(25) << tin.hoten << setw(11) << tin.khoa

            << setw(11) << tin.T_Anh << setw(11) << tin.Tin_CS <<  setw(11) << tin.NN_C << setw(11) << tin.CT_DL << setw(15)  << DTB_SV_TIN() << endl;

        TT = TT + 1;

   
}

   
FR.close();

}

void SV_TIN::SUA_SV_TIN()

{

   
SV_TIN tin;

   
fstream FW;

   
int n; char ok;

   
cout << “\n Nhap ban ghi can
sua:”;

   
cin >> n; cin.ignore();

   
FW.open(“TIN.DAT”, ios::in | ios::out);

   
if (FW.fail()) { cout << ” \n Loi
mo tep “; return; }

   
cout << “\n nhap du lieu sua lai:\n
“;

   
cout << “Ma sinh vien: “; cin.getline(tin.masv, 10);

   
cout << “Ho va ten : “; cin.getline(tin.masv, 25);

   
cout << “Khoa : “; cin.getline(tin.khoa, 10);   

   
cout << “Diem Toan RR, Tin_CS, LTHDT:
“;

   
cin >> tin.T_Anh >> tin.Tin_CS; cin.ignore();

   
cout << ” Diem mang CB : “; cin >> tin.NN_C; cin.ignore();

   
cout << ” Diem Mang NC : “; cin >> tin.CT_DL; cin.ignore();

   
cout << “\nNhap nua khong (C/K) ?
“;

   
cin >> ok; cin.ignore();

   
FW.seekp((n – 1) * sizeof(tin));

   
if (ok == ‘c’ || ok == ‘C’) FW.write((char*)&tin, sizeof(tin));

   
FW.close();

}

void SV_TIN::BS_SV_TIN()

{

   
SV_TIN tin;

   
fstream FW;

   
int n = FW.tellp() / sizeof(tin) + 1;

   
char ok;

   
cout << “\n Nhap ban ghi can Bo sung:
“;

   
cin >> n; cin.ignore();

   
if (FW.fail()) { cout << ” \n Loi
mo tep “; return; }

   
FW.open(“TOAN.DAT”, ios::in | ios::out | ios::app);

   
FW.seekp(0, ios::end);

   
while (1)

   
{

        cout << “\nNhap ban ghi thu: ” << n;

        cout << “Ma sinh vien: “; cin.getline(tin.masv, 10);

        cout << “Ho va ten : “; cin.getline(tin.masv, 25);

        cout << “Khoa : “; cin.getline(tin.khoa, 10);

        cout << “Diem : T_Anh, Tin_CS; “;

        cin >> tin.T_Anh >> tin.Tin_CS; cin.ignore();

        cout << ” Diem mang CB : “; cin >> tin.NN_C; cin.ignore();

        cout << ” Diem Mang NC : “; cin >> tin.CT_DL; cin.ignore();

        FW.write((char*)&tin, sizeof(tin));

        cout << “\nNhap nua khong (C/K) ?
“;

        cin >> ok; cin.ignore();

        n = n + 1;

        if (ok == ‘k’ || ok ==
‘K’) break;

   
}

   
FW.close();

}

void
luachon() {

   
cout << “\nChuong trinh quan ly sinh
vien K20A Lao Cai”;

   
cout << “\n—————————————–“;

   
cout << “\nNhap cac phim theo thu tu 1,
2, 3, 4…de thuc hien chuc nang “;

   
cout << “\nNhan phim 1: Nhap sinh
vien lop Toan”;

   
cout << “\nNhan phim 2: Nhap sinh
vien lop Tin”;

   
cout << “\nNhan phim 3: Sua thong tin
SV lop Toan”;

   
cout << “\nNhan phim 4: Sua thong tin
SV lop Tin”;

   
cout << “\nNhan phim 5: Bo sung  SV lop Toan”;

   
cout << “\nNhan phim 6: Bo sung SV
lop Tin”;

   
cout << “\nNhan phim 7: In tat ca
thong tin sinh vien”;

   
cout << “\nNhan phim 0: Thoat khoi
chuong trinh” << endl;

}

int main()

{

   
SV_TOAN pm;

   
SV_TIN tin;

   
char so;

   
while (1)

   
{

        luachon();

        cin >> so; cin.ignore();

        switch (so)

       {

        case ‘1’:

        {

            system(“cls”);

            pm.NHAP_SV_TOAN(); break;

        }

        case ‘2’:

        {

            system(“cls”);

            tin.NHAP_SV_TIN(); break;

        }

        case ‘3’:

        {

            system(“cls”);

            pm.SUA_SV_TOAN(); break;

        }

        case ‘4’:

        {

            system(“cls”);

            tin.SUA_SV_TIN(); break;

        }      

        case ‘5’:

        {

            system(“cls”);

            cout << “\n Thong tin Sinh Vien :
” << endl;

            pm.BS_SV_TOAN();

            break;

        }

        case ‘6’:

        {

   
        system(“cls”);

            cout << “\n Thong tin Sinh Vien :
” << endl;

            tin.BS_SV_TIN();

            break;

        }

        case ‘7’:

        {

            system(“cls”);

            cout << “\n Thong tin Sinh Vien :
” << endl;

            pm.INRA_SV_TOAN();

            tin.INRA_SV_TIN();

            break;

        }

        case ‘0’:

            exit(0);

        }

  
     }

}