Bài tập quản lý sinh viên trong C/C++ – Học hỏi Net

1. Đề bài

Đề bài : Viết chương trình quản lý sinh viên trong C / C + +. Mỗi đối tượng người tiêu dùng sinh viên có những thuộc tính sau : id, tên, giới tính, tuổi, điểm toán, điểm lý, điểm hóa, điểm trung bình và học lực .
Id là mã sinh viên tự động hóa tăng .
Khi khởi tạo, chương trình sẽ đọc file “ student.txt ” để lấy ra list sinh viên đã được lưu trước đó .

Điểm trung bình là giá trị trung bình của 3 môn toán, lý và hóa.

Học lực được tính như sau :

  • Giỏi: nếu điểm trung bình lớn hơn hoặc bằng 8.
  • Khá: nếu điểm trung bình nhỏ hơn 8 và lớn hơn hoặc bằng 6.5.
  • Trung Bình: nếu điểm trung bình nhỏ hơn 6.5 và lớn hơn hoặc bằng 5.
  • Yếu: nếu điểm trung bình nhỏ hơn 5.

Yêu cầu : tạo ra một menu với những tính năng sau :

  • 1. Thêm sinh viên.
  • 2. Cập nhật thông tin sinh viên bởi ID.
  • 3. Xóa sinh viên bởi ID.
  • 4. Tìm kiếm sinh viên theo tên.
  • 5. Sắp xếp sinh viên theo điểm trung bình (GPA).
  • 6. Sắp xếp sinh viên theo tên.
  • 7. Hiển thị danh sách sinh vien.
  • 8. Ghi danh sách sinh viên vào file “student.txt” .

2. Lời giải

Tạo cấu trúc sinh vien

Chúng ta sẽ tạo một cấu trúc sinh viên như sau, diemTB sẽ được tính bằng trung bình của những môn toán, lý và hóa. hocluc sẽ được thống kê giám sát dựa vào diemTB như nhu yếu của bài toán .

struct SinhVien {
    int id;
    char ten[30];
    char gioiTinh[5];
    int tuoi;
    float diemToan;
    float diemLy;
    float diemHoa;
    float diemTB = 0;
    char hocluc[10] = "-";
};

Bây giờ tất cả chúng ta hoàn toàn có thể sử dụng struct SinhVien với đơn thuần hơn bằng SV với từ khóa typedef, như sau :

typedef SinhVien SV;

Định nghĩa những hàmSau đây là list những hàm mà tất cả chúng ta sẽ sử dụng trong chương trình quản lý sinh viên, những hàm này sẽ được cung ứng thân hàm sau đó :

void printLine(int n);
int idLonNhat(SV a[], int n);
void nhapThongTinSV(SV &sv, int id);
void nhapSV(SV a[], int id, int n);
void capNhatThongTinSV(SV &sv);
void capNhatSV(SV a[], int id, int n);
int xoaTheoID(SV a[], int id, int n);
void timKiemTheoTen(SV a[], char ten[], int n);
void tinhDTB(SV &sv);
void xeploai(SV &sv);
void sapxepTheoDTB(SV a[], int n);
void sapXepTheoTen(SV a[], int n);
void showStudent(SV a[], int n);
int docFile(SV a[], char fileName[]);
void ghiFile(SV a[], int n, char fileName[]);
void pressAnyKey();

Hàm printLine(int n)

Hàm này in ra một dòng có n ký tự “ _ ” .
Tham số :

  • n: là số ký tự “_” sẽ được in ra màn hình.

Thân hàm printLine ( ) :

void printLine(int n) {
    cout 

Hàm idLonNhat(SV a[], int n)

Yêu cầu của bài toán là id của sinh viên tự động hóa tăng .
Nên tất cả chúng ta sẽ tạo hàm này để lấy ra id lớn nhất của list sinh viên a [ ] .
Tham số :

  • a[]: là danh sách sinh viên.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm idLonNhat ( ) :

int idLonNhat (SV a[], int n) {
    int idMax = 0;
    if (n > 0) {
        idMax = a[0].id;
        for(int i = 0;i  idMax) {
                idMax = a[i].id;
            }
        }
    }
    return idMax;
}

Hàm nhập thông tin sinh viên

Hàm này được sử dụng để thêm mới sinh viên vào list sinh viên. Với hàm này tất cả chúng ta sẽ tách ra thành 2 hàm sau :

  • void nhapThongTinSV(SV &sv, int id).
  • void nhapSV(SV a[], int id, int n).

Tham số :

  • &sv: nhập thông tin sinh viên sv. Sử dụng tham chiếu &, tức là thông tin sẽ được thay đổi cả bên trong và bên ngoài hàm.
  • a[]: là danh sách sinh viên.
  • id: là id (tự động tăng) của sinh viên.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm nhapThongTinSV ( ) :

void nhapThongTinSV(SV &sv, int id) {
    cout > sv.tuoi;
    cout > sv.diemToan;
    cout > sv.diemLy;
    cout > sv.diemHoa;
    sv.id = id;
    tinhDTB(sv);
    xeploai(sv);
}

Thân hàm nhapSV ( ) :

void nhapSV(SV a[], int id, int n) {
    printLine(40);
    printf("\n Nhap sinh vien thu %d:", n + 1);
    nhapThongTinSV(a[n], id);
    printLine(40);
}

Hàm cập nhật thông tin sinh viên

Hàm này được sử dụng để update thông tin sinh viên theo ID. Với hàm này tất cả chúng ta sẽ tách ra thành 2 hàm sau :

  • void capNhatThongTinSV(SV &sv).
  • void capNhatSV(SV a[], int id, int n).

Tham số :

  • &sv: nhập thông tin sinh viên sv. Sử dụng tham chiếu &, tức là thông tin sẽ được thay đổi cả bên trong và bên ngoài hàm.
  • a[]: là danh sách sinh viên.
  • id: là id (tự động tăng) của sinh viên.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm capNhatThongTinSV ( ) :

void capNhatThongTinSV(SV &sv) {
    cout > sv.tuoi;
    cout > sv.diemToan;
    cout > sv.diemLy;
    cout > sv.diemHoa;
    tinhDTB(sv);
    xeploai(sv);
}

Thân hàm capNhatSV ( ) :

void capNhatSV(SV a[], int id, int n) {
    int found = 0;
    for(int i = 0; i 

Hàm xóa sinh viên theo ID

Hàm này được sử dụng để xóa sinh viên khỏi list theo ID. Tình sinh viên có ID đã cho trong list, nếu sống sót thì triển khai xóa sinh viên .
Tham số :

  • a[]: là danh sách sinh viên.
  • id: là id của sinh viên sẽ bị xóa.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm xoaTheoID ( ) :

int xoaTheoID(SV a[], int id, int n) {
    int found = 0;
    for(int i = 0; i 

Hàm tìm kiếm sinh viên theo tên

Hàm này được sử dụng để tìm kiếm sinh viên trong list theo tên. Không phân biệt chữ hoa, chữ thường .
Tham số :

  • a[]: là danh sách sinh viên.
  • ten[]: là từ khóa để so sánh với tên sinh viên.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm timKiemTheoTen ( ) :

void timKiemTheoTen(SV a[], char ten[], int n) {
    SV arrayFound[MAX];
    char tenSV[30];
    int found = 0;
    for(int i = 0; i 

Hàm tính điểm trung bình và xếp loại học lực

Thân hàm tinhDTB ( ) :

void tinhDTB(SV &sv) {
    sv.diemTB = (sv.diemToan + sv.diemLy + sv.diemHoa) / 3;   
}

Thân hàm xeploai ( ) :

void xeploai(SV &sv) {
    if(sv.diemTB >= 8) strcpy(sv.hocluc, "Gioi");
    else if(sv.diemTB >= 6.5) strcpy(sv.hocluc, "Kha");
    else if(sv.diemTB >= 5) strcpy(sv.hocluc, "Trung binh");
    else strcpy(sv.hocluc, "Yeu");
}

Hàm sắp xếp list sinh viên theo điểm trung bình
Hàm này được sử dụng để sắp xếp sinh viên theo điểm trung bình theo thứ tự tăng dần .
Tham số :

  • a[]: là danh sách sinh viên.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm sapxepTheoDTB ( ) :

void sapxepTheoDTB(SV a[], int n) {
    //Sap xep theo DTB tang dan
    SV tmp;
    for(int i = 0;i  a[j].diemTB){
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

Hàm sắp xếp danh sách sinh viên theo tên

Hàm này được sử dụng để sắp xếp sinh viên theo tên theo thứ tự tăng dần và không phân biệt chữ hoa, chữ thường .
Tham số :

  • a[]: là danh sách sinh viên.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm sapXepTheoTen():

void sapXepTheoTen(SV a[], int n) {
    //Sap xep sinh vien theo ten theo thu tu tang dan
    SV tmp;
    char tenSV1[30];
    char tenSV2[30];
    for(int i = 0;i  0) {
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

Hàm hiện thị danh sách sinh viên ra màn hình

Hàm này được sử dụng để hiện thị list sinh viên ra màn hình hiển thị .
Tham số :

  • a[]: là danh sách sinh viên.
  • n: là số lượng sinh viên có trong danh sách.

Thân hàm showStudent ( ) :

void showStudent(SV a[], int n) {
    printLine(100);
    cout 

Hàm đọc danh sách sinh viên từ file

Hàm này được sử dụng để đọc list sinh viên từ file .
Tham số :

  • a[]: là danh sách sinh viên sẽ được đọc ra từ file.
  • fileName[]: là tên của file lưu trữ danh sách sinh viên.

Giá trị trả về của hàm là số lượng sinh viên có trong file và list sinh viên .
Thân hàm docFile ( ) :

int docFile(SV a[], char fileName[]) {
    FILE * fp;
    int i = 0;
    fp = fopen (fileName, "r");
    cout 

Hàm ghi danh sách sinh viên từ file

Hàm này được sử dụng để đọc list sinh viên từ file .
Tham số :

  • a[]: là danh sách sinh viên sẽ được ghi vào file.
  • n: là số lượng sinh viên.
  • fileName[]: là tên của file lưu trữ danh sách sinh viên.

Giá trị trả về của hàm là số lượng sinh viên có trong file và list sinh viên .
Thân hàm ghiFile ( ) :

void ghiFile(SV a[], int n, char fileName[]) {
    FILE * fp;
    fp = fopen (fileName,"w");
    for(int i = 0;i 

Hàm main của chương trình quản lý sinh vien trong C/C++

Hàm main của tất cả chúng ta được sử dụng để khởi tạo menu và điều khiển và tinh chỉnh chương trình quản lý sinh viên .
Giải thích ý nghĩa của những biến :

  • key: là giá trị bạn nhập để chọn tùy chọn trong menu.
  • fileName: tên của file lưu trữ danh sách sinh viên.
  • arraySV[]: lưu trữ một mảng các struct sinh viên.
  • soluongSV: số lượng sinh viên hiện tại của mảng arraySV.
  • idCount: là biến đếm id tự động tăng của sinh viên.

Khi khởi tạo chương trình tất cả chúng ta sẽ đọc list sinh viên có sẵn trong file sinhvien.txt, đồng thời lấy ra được số lượng sinh viên và id lớn nhất hiện tại của list sinh viên .
Sau đó menu điều khiển và tinh chỉnh sẽ được hiển thị lên .
Thân hàm main ( ) :

int main() {
    int key;
    char fileName[] = "sinhvien.txt";
    SV arraySV[MAX];
    int soluongSV = 0;
    int idCount = 0;
     
    // nhap danh sach sinh vien tu file
    soluongSV = docFile(arraySV, fileName);
    idCount = idLonNhat (arraySV, soluongSV);

    while(true) {
        cout > key;
        switch(key){
            case 1:
                cout  0) {
                    int id;
                    cout > id;
                    capNhatSV(arraySV, id, soluongSV);
                }else{
                    cout  0) {
                    int id;
                    cout > id;
                    if (xoaTheoID(arraySV, id, soluongSV) == 1) {
                        printf("\nSinh vien co id = %d da bi xoa.", &id);
                        soluongSV--;
                    }
                }else{
                    cout  0) {
                    cout  0) {
                    cout  0) {
                    cout  0){
                    cout  0){
                    cout 

Cài đặt chương trình quản lý sinh viên trong C/C++

Sau đây là hàng loạt code của chương trình quản lý sinh viên :
File : quanlysinhvien.cpp

#include
#include
#include 
#include 
#define MAX 100
using namespace std;

struct SinhVien {
    int id;
    char ten[30];
    char gioiTinh[5];
    int tuoi;
    float diemToan;
    float diemLy;
    float diemHoa;
    float diemTB = 0;
    char hocluc[10] = "-";
};

typedef SinhVien SV;

void printLine(int n);
void nhapThongTinSV(SV &sv, int id);
void nhapSV(SV a[], int id, int n);
void capNhatThongTinSV(SV &sv);
void capNhatSV(SV a[], int id, int n);
int xoaTheoID(SV a[], int id, int n);
void timKiemTheoTen(SV a[], char ten[], int n);
void tinhDTB(SV &sv);
void xeploai(SV &sv);
int idLonNhat(SV a[], int n);
void sapxepTheoDTB(SV a[], int n);
void sapXepTheoTen(SV a[], int n);
void showStudent(SV a[], int n);
int docFile(SV a[], char fileName[]);
void ghiFile(SV a[], int n, char fileName[]);
void pressAnyKey();

int main() {
    int key;
    char fileName[] = "sinhvien.txt";
    SV arraySV[MAX];
    int soluongSV = 0;
    int idCount = 0;
     
    // nhap danh sach sinh vien tu file
    soluongSV = docFile(arraySV, fileName);
    idCount = idLonNhat (arraySV, soluongSV);

    while(true) {
        cout > key;
        switch(key){
            case 1:
                cout  0) {
                    int id;
                    cout > id;
                    capNhatSV(arraySV, id, soluongSV);
                }else{
                    cout  0) {
                    int id;
                    cout > id;
                    if (xoaTheoID(arraySV, id, soluongSV) == 1) {
                        printf("\nSinh vien co id = %d da bi xoa.", &id);
                        soluongSV--;
                    }
                }else{
                    cout  0) {
                    cout  0) {
                    cout  0) {
                    cout  0){
                    cout  0){
                    cout = 8) strcpy(sv.hocluc, "Gioi");
    else if(sv.diemTB >= 6.5) strcpy(sv.hocluc, "Kha");
    else if(sv.diemTB >= 5) strcpy(sv.hocluc, "Trung binh");
    else strcpy(sv.hocluc, "Yeu");
}
  
void nhapThongTinSV(SV &sv, int id) {
    cout > sv.tuoi;
    cout > sv.diemToan;
    cout > sv.diemLy;
    cout > sv.diemHoa;
    sv.id = id;
    tinhDTB(sv);
    xeploai(sv);
}

void nhapSV(SV a[], int id, int n) {
    printLine(40);
    printf("\n Nhap sinh vien thu %d:", n + 1);
    nhapThongTinSV(a[n], id);
    printLine(40);
}

void capNhatThongTinSV(SV &sv) {
    cout > sv.tuoi;
    cout > sv.diemToan;
    cout > sv.diemLy;
    cout > sv.diemHoa;
    tinhDTB(sv);
    xeploai(sv);
}

void capNhatSV(SV a[], int id, int n) {
    int found = 0;
    for(int i = 0; i  a[j].diemTB) {
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

void sapXepTheoTen(SV a[], int n) {
    //Sap xep sinh vien theo ten theo thu tu tang dan
    SV tmp;
    char tenSV1[30];
    char tenSV2[30];
    for(int i = 0;i  0) {
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

int idLonNhat (SV a[], int n) {
    int idMax = 0;
    if (n > 0) {
        idMax = a[0].id;
        for(int i = 0;i  idMax) {
                idMax = a[i].id;
            }
        }
    }
    return idMax;
}

int docFile(SV a[], char fileName[]) {
    FILE * fp;
    int i = 0;
    fp = fopen (fileName, "r");
    cout 

Run chương trình quản lý sinh viên trong C / C + +
Chạy chương trình C trên cho hiệu quả khởi đầu như sau :

Nhập một vài sinh viên vào mạng lưới hệ thống :

Hiển thị list sinh viên :

Tìm kiếm sinh viên theo tên :

Sắp xếp sinh viên theo điểm trung bình :

Sắp xếp sinh viên theo tên :

Ghi list sinh viên vào file sinhvien.txt :

Nội dung file sinhvien.txt :

Trên đây là project Quản lý sinh viên bằng C + + khá là chi tiết cụ thể và khá đầy đủ. Bạn đọc hoàn toàn có thể tìm hiểu thêm và vận dụng tự tạo cho mình một project quản lý việc làm, quản lý nhân sự, tùy trường hợp mà linh động. Chúc những bạn thành công xuất sắc !