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

HuanBuiThanh

 


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ư:

          - Nhập danh sách sinh viên(NHAP)

          - In danh sách sinh viên(INRA)

            Với hai lớp đối tượng là Lớp Toán và Lớp Tin vì chứa các thuộc tính khách nhau nên ta có thể xây dựng các chức năng kế thừa từ chức năng NHAP và INRA để nhập xuất dữ liệu cho từng loại đối tượng.

          Sử dụng đặc tính kế thừa của lập trình hướng đối tượng, ta có thể xây dựng thêm các chức năng mở rộng cho bài toán như

          - Thống kê điểm trung bình của sinh viên.

          - Tìm kiếm sinh viên.

          - Sắp xếp danh sách sinh viên theo thứ tự điểm trung bình tăng dần….

          Để lưu trữ dữ liệu trong chương trình ta có thể đưa dữ liệu và các bản ghi, thực hiện duyệt mảng để lưu dữ liệu. Ngoài ra ta có thể lưu trữ dữ liệu thông qua việc đọc ghi dữ liệu trực tiếp trên ổ đĩa, phương pháp này giúp lưu trữ dữ liệu lâu dài hơn và có thể sử dụng lại dữ liệu trong những lần thực hiện chương trình sau. Vậy ta có thể bổ sung vào input của bài toán như sau:

          - Output :     TOAN.DAT chứa thông tin của sinh viên Lớp Toán

                             TIN.DAT chứa thông tin của sinh viên Lớp Tin

# 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);

        }

        }

}

 

Nhận xét: Chương trình quản lý sinh viên là dạng bài tập giúp chúng ta củng cố lại các kiến thức đã học về mảng, và các cấu trúc, thuật toán trong lập trình hướng đối tượng. Ngoài cách cài đặt như trên chúng ta có thể sử dụng các bản ghi, các con trỏ và nhiều hình thức khác nhau để lưu dữ liệu. Nắm chắc được các kiến thức này giúp chúng ta xử lý được những bài toán phức tạp hơn trong môn học và cả trong cuộc sống. Mỗi chương trình đều có một đặc trưng riêng tuy nhiên không thể không có những thiếu sót, trong tương lai chúng ta hoàn toàn có thể áp dụng những dạng toán tối ưu hơn để làm bài tập.


Getting Info...

تعليق واحد

  1. Do you need a deposit bonus?
    No Deposit Bonuses 잭팟시티 Are a Huge List 룰렛 사이트 of 토토 사이트 목록 Casino Deposits That You Can Use To 365벳 Win Cash At Casinos. The first thing we did in order to understand how to do 토토 사이트 this,
Cảm ơn bạn đã quan tâm và gửi nhận xét tại
http://huanbuithanh.blogspot.com
hãy ghé thăm blog hàng ngày để được cập nhật những thủ thuật mới nhất nhé . thân ái !
Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.