Bài tập quản lý sinh viên trong C#

Viết chương trình C++ để giữ các bản ghi và thực hiện các trình phân tích thống kê cho một lớp gồm 20 sinh viên. Thông tin của mỗi sinh viên gồm id, tên, tuổi, điểm kiểm tra (hai điểm kiểm tra mỗi kỳ), điểm chuyên cần, điểm thi giữa kỳ, điểm thi cuối kỳ, và tổng điểm.

Chương trình của bạn sẽ nhắc người dùng lựa chọn các hành động có thể thực hiện trên các bản ghi từ menu có dạng sau:

==========================================================

MENU

==========================================================

1. Them ban ghi sinh vien

2. Xoa ban ghi sinh vien

3. Cap nhat ban ghi sinh vien

4. Quan sat tat ca ban ghi sinh vien

5. Tinh diem trung binh cua mot sinh vien da chon

6. Hien thi sinh vien co tong diem cao nhat

7. Hien thi sinh vien co tong diem thap nhat

8. Tim sinh vien boi ID

9. Sap xep cac ban ghi boi tong diem thi cua sinh vien

Nhap lua chon cua ban: 1

Ghi chú: Tất cả các bản ghi được lưu trữ trong một mảng.

Lời giải

Quảng cáo

Dưới đây là chương trình C++ để giải bài tập trên. Đây là một bài tập lớn và phức tạp, do đó chúng tôi chia lời giải thành các phần nhỏ và giải thích chi tiết từng phần một để giúp bạn dễ dàng theo dõi và hiểu nhanh hơn. Bạn theo dõi các bước sau:

Bước 1: Khai báo một Structure

Khai báo một Structure gọi là sinhvien để lưu trữ các bản ghi. Structure này gồm 9 thành viên, đó là:

  • mssv(string) để lưu trữ id của sinh viên

  • tensv(mảng ký tự) để lưu trữ tên sinh viên

  • sex(char) để lưu trữ giới tính

  • diemkt1(float) để lưu trữ điểm kiểm tra đầu tiên

  • diemkt2(float) để lưu trữ điểm kiểm tra thứ hai

  • diemcc(float) để lưu trữ điểm chuyên cần

  • diemgk(float) để lưu trữ điểm thi giữa kỳ

  • diemck(float) để lưu trữ điểm thi cuối kỳ

  • tongdiem(float) để lưu trữ tổng điểm

Dưới đây là code cho bước 1:

typedef struct sinhvien { string mssv; char tensv[20]; char sex; float diemkt1; float diemkt2; float diemcc; float diemgk; float diemck; float tongdiem; };

Bước 2: Hiển thị menu

Quảng cáo

Định nghĩa phương thức displaymenu() để hiển thị menu. Menu đơn giản này cung cấp 9 lựa chọn từ 1 tới 9 để làm việc với các bản ghi.

Dưới đây là code cho bước 2:

//Xay dung menu void displaymenu(){ cout<<"===========================================<<"\n"; cout<<" MENU "<<"\n"; cout<<"==========================================="<<"\n"; cout<<" 1. Them ban ghi sinh vien"<<"\n"; cout<<" 2. Xoa ban ghi sinh vien"<<"\n"; cout<<" 3. Cap nhat ban ghi sinh vien"<<"\n"; cout<<" 4. Quan sat tat ca ban ghi sinh vien"<<"\n"; cout<<" 5. Tinh diem trung binh cua mot sinh vien da chon"<<"\n"; cout<<" 6. Hien thi sinh vien co tong diem cao nhat"<<"\n"; cout<<" 7. Hien thi sinh vien co tong diem thap nhat"<<"\n"; cout<<" 8. Tim sinh vien boi ID"<<"\n"; cout<<" 9. Sap xep cac ban ghi boi tong diem thi cua sinh vien"<<"\n"; }

Bạn trở lại trang cha để tìm hiểu tiếp các bước.

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại //www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: //www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền //www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

bai_tap_struct_trong_cplusplus.jsp

Định nghĩa hàm để sắp xếp các bản ghi theo thứ tự tổng điểm thi tăng dần. Chúng ta sử dụng thuật toán sắp xếp nổi bọt (bubble sort).

Dưới đây là code cho bước 11:

Quảng cáo

void bubblesort(struct sinhvien dataset[], int n) { int i, j; for (i = 0; i < n; i++) for (j = n - 1; j > i; j--) if (dataset[j].tongdiem < dataset[j - 1].tongdiem ) { sinhvien temp = dataset[j]; dataset[j] = dataset[j - 1]; dataset[j - 1] = temp; } }

Sau khi đã theo dõi các bước từ 1 tới 11, đến giờ bạn đã hiểu lời giải cũng như đã khá thành thục với Structure và các khái niệm có liên quan trong bài như vòng lặp, lệnh IF-ELSE, định nghĩa hàm, phương thức, cách sử dụng mảng, … Bây giờ, kết hợp các bước trên để có lời giải hoàn chỉnh.

#include <cstdlib> #include <iostream> #include <iomanip> #include <string.h> using namespace std; //khai bao sinhvien structure typedef struct sinhvien { string mssv; char tensv[20]; char sex; float diemkt1; float diemkt2; float diemcc; float diemgk; float diemck; float tongdiem; int soItem; }; //cac nguyen mau ham (function prototype) int search(struct sinhvien st[],string id, int biendem); void clean(struct sinhvien st[],int deleteitem); //ham de hien thi menu tuy chon void displaymenu(){ cout<<"=========================================="<<"\n"; cout<<" MENU "<<"\n"; cout<<"=========================================="<<"\n"; cout<<" 1. Them ban ghi sinh vien"<<"\n"; cout<<" 2. Xoa ban ghi sinh vien"<<"\n"; cout<<" 3. Cap nhat ban ghi sinh vien"<<"\n"; cout<<" 4. Quan sat tat ca ban ghi sinh vien"<<"\n"; cout<<" 5. Tinh diem trung binh cua sinh vien da chon"<<"\n"; cout<<" 6. Hien thi sinh vien co tong diem cao nhat"<<"\n"; cout<<" 7. Hien thi sinh vien co tong diem thap nhat"<<"\n"; cout<<" 8. Tim sinh vien boi ID"<<"\n"; cout<<" 9. Sap xep cac ban ghi boi tong diem"<<"\n"; } //ham de them cac ban ghi void them_banghi(struct sinhvien st[],int& biendem){ again: cout<<"\nNhap ID cua sinh vien: "; cin>>st[biendem].mssv; if(search(st,st[biendem].mssv,biendem)!=-1){ cout<<"ID nay da ton tai\n";goto again; } cout<<"Nhap ten sinh vien: "; cin>>st[biendem].tensv; cout<<"Nhap gioi tinh cua sinh vien (F hoac M): ";cin>>st[biendem].sex; cout<<"Nhap diem kiem tra 1: ";cin>>st[biendem].diemkt1; cout<<"Nhap diem kiem tra 2: ";cin>>st[biendem].diemkt2; cout<<"Nhap diem chuyen can: ";cin>>st[biendem].diemcc; cout<<"Nhap diem giua ky: ";cin>>st[biendem].diemgk; cout<<"Nhap diem cuoi ky: ";cin>>st[biendem].diemck; st[biendem].tongdiem=st[biendem].diemkt1+st[biendem].diemkt2+st[biendem].diemcc+st[biendem].diemgk+st[biendem].diemck; ++biendem; } //ham de tim vi tri ban ghi int search(struct sinhvien st[], string id,int biendem){ int found =-1; for (int i = 0; i < biendem && found==-1; i++) { if (st[i].mssv == id) found=i; else found=-1 ; } return found; } //ham de quan sat tat ca ban ghi void viewall(struct sinhvien st[], int biendem){ int i=0; cout<<left<<setw(5)<<"ID"<<setw(20)<<"TEN"<<setw(5)<<"GIOI TINH" <<setw(5)<<"DKT1" <<setw(5)<<"DKT2"<<setw(5)<<"DCC"<<setw(5)<<"DGK"<<setw(5)<<"DCK" <<setw(5)<<"TONG"<<"\n"; cout<<"==============================================\n"; while(i<=biendem){ if(st[i].mssv!=""){ cout<<left<<setw(5)<<st[i].mssv<<setw(20)<<st[i].tensv<<setw(5) <<st[i].sex; cout<<setw(5)<<st[i].diemkt1<<setw(5)<<st[i].diemkt2<<setw(5)<<st[i].diemcc <<setw(5)<<st[i].diemgk<<setw(5)<<st[i]. diemck<<setw(5) <<st[i].tongdiem; cout<<"\n";} i=i+1; } } //ham de xoa ban ghi void xoa_banghi(struct sinhvien st[], int& biendem){ string id; int index; if (biendem > 0) { cout<<"Nhap ID cua sinh vien: "; cin>>id; index = search(st, id,biendem); if ((index!=-1) && (biendem != 0)) { if (index == (biendem-1)) //Xoa ban ghi cuoi cung { clean(st, index); --biendem; cout<<"Ban ghi da duoc xoa.\n"; } else //xoa ban ghi dau tien hoac o giua { for (int i = index; i < biendem-1; i++) { st[i] = st[i + 1]; clean(st, biendem); --biendem ; } } } else cout<<"Ban ghi khong ton tai. Kiem tra ID va thu lai.\n"; } else cout<<"Khong co ban ghi nao duoc xoa\n"; } //ham de xoa sach ban ghi da bi xoa void clean(struct sinhvien st[],int index) { st[index].mssv =""; strcpy(st[index].tensv,""); st[index].sex =NULL; st[index].diemkt1 = 0; st[index].diemkt2 = 0; st[index].diemcc = 0; st[index].diemgk = 0; st[index].diemck = 0; st[index].tongdiem = 0; } //ham de cap nhat ban ghi void capnhat_banghi(struct sinhvien st[],int biendem){ string id; int column_index; cout<<"Nhap ID cua sinh vien: "; cin>>id; cout<<"Ban muon cap nhat truong nao (1-7) ?: "; cin>>column_index; int index = search(st, id,biendem); if (index != -1) { if (column_index == 1) { cout<<"Nhap ten sinh vien: "; cin>>st[index].tensv; } else if (column_index == 2) { cout<<"Nhap gioi tinh sinh vien (F hoac M): "; cin>>st[index].sex; } else if (column_index == 3) { cout<<"Nhap diem kiem tra 1: "; cin>>st[index].diemkt1; } else if (column_index == 4) { cout<<"Nhap diem kiem tra 2: "; cin>>st[index].diemkt2; } else if (column_index == 5) { cout<<"Nhap diem chuyen can: "; cin>>st[index].diemcc; } else if (column_index == 6) { cout<<"Nhap diem thi giua ky: "; cin>>st[index].diemgk; } else if (column_index == 7) { cout<<"Nhap diem thi cuoi ky: "; cin>>st[index].diemck; } else cout<<"Gia tri chi muc khong hop le"; st[index].tongdiem = st[index].diemkt1 + st[index].diemkt2 + st[index].diemcc + st[index].diemgk + st[index].diemck; } else cout<<"Ban ghi khong ton tai. Kiem tra ID va thu lai."; } //Ham de hien thi tong diem lon nhat void showmax(struct sinhvien st[], int biendem) { float max = st[0].tongdiem; int index=0; if (biendem >= 2) { for (int j = 0; j < biendem-1; ++j) if (max < st[j+1].tongdiem) { max = st[j+1].tongdiem; index = j+1; } } else if (biendem == 1) { index = 0; max = st[0].tongdiem; } else cout<<"Khong tim thay ban ghi nao!\n"; if (index != -1) cout<<"Sinh vien co ID la "<<st[index].mssv <<" dat tong diem cao nhat la "<<max<<endl; } //ham de hien thi tong diem nho nhat void showmin(struct sinhvien st[], int biendem) { float min = st[0].tongdiem; int index = 0; if (biendem >= 2) { for (int j = 0; j < biendem-1; ++j) if (min > st[j+1].tongdiem) { min = st[j+1].tongdiem; index = j+1; } } else if (biendem == 1) { index = 0; min = st[0].tongdiem; } else cout<<"Khong tim thay ban ghi nao!\n"; if (index != -1) cout<<"Sinh vien co ID la "<<st[index].mssv <<" co tong diem thap nhat la "<<min<<endl; } //ham de tim ban ghi void find(struct sinhvien st[], int biendem) { string id; cout<<"Nhap ID cua sinh vien: "; cin>>id; int index=search(st,id,biendem); if (index != -1) { //hien thi ban ghi da tim thay cout<<left<<setw(5)<<st[index].mssv<<setw(20)<<st[index].tensv<<setw(5)<<st[index].sex; cout<<setw(5)<<st[index].diemkt1<<setw(5)<<st[index].diemkt2<<setw(5) <<st[index].diemcc <<setw(5)<<st[index].diemgk<<setw(5)<<st[index].diemck<<setw(5) <<st[index].tongdiem; cout<<"\n"; } else cout<<"Ban ghi khong ton tai."; } //ham de sap xep cac ban ghi theo tong diem void bubblesort(struct sinhvien dataset[], int n) { int i, j; for (i = 0; i < n; i++) for (j = n - 1; j > i; j--) if (dataset[j].tongdiem < dataset[j - 1].tongdiem ) { sinhvien temp = dataset[j]; dataset[j] = dataset[j - 1]; dataset[j - 1] = temp; } } //ham de tinh diem trung binh cua mot sinh vien void average(struct sinhvien st[], int biendem) { string id; float avg=0; cout<<"Nhap ID cua sinh vien: "; cin>>id; int index = search(st, id,biendem); if (index != -1 && biendem>0) { st[index].tongdiem = st[index].diemkt1 + st[index].diemkt2 + st[index].diemcc + st[index].diemgk + st[index].diemck; avg = st[index].tongdiem /5; } cout<<"Diem trung binh la "<<avg; } //ham main int main(int argc, char *argv[]) { sinhvien st[80]; int biendem=0; //hien thi menu displaymenu(); int luachon; char confirm; do { cout<<"\nNhap lua chon cua ban (1-9): "; cin>>luachon; switch(luachon){ case 1:them_banghi(st, biendem);break; case 2:xoa_banghi(st, biendem);break; case 3:capnhat_banghi(st, biendem);break; case 4:viewall(st, biendem);break; case 5:average(st, biendem);break; case 6:showmax(st, biendem);break; case 7:showmin(st, biendem);break; case 8:find(st, biendem);break; case 9:bubblesort(st,biendem);break; default:cout<<"Khong hop le"; } cout<<"Nhan y hoac Y de tiep tuc: "; cin>>confirm; }while(confirm=='y'||confirm=='Y'); return 0; }

Chạy chương trình C++ trên sẽ cho kết quả như hình sau:

Quảng cáo

Đầu tiên, bạn lựa chọn 1 để cập nhật bản ghi, hình minh họa là:

Sau đó, với các lựa chọn tiếp theo sẽ là:

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại //www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: //www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền //www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

bai_tap_struct_trong_cplusplus.jsp

Video liên quan

Chủ đề