Chương trình quản lý sinh viên, quản lý nhân viên, cán bộ là những bài tập khá phổ biến và cần sử dụng kiến thức về struct để lập trình. Đây là những bài tập giúp các bạn sinh viên ôn luyện về kiểu cấu trúc struct. Tại bài viết này, Nguyễn Văn Hiếu Blog sẽ giải một bài tập struct minh họa – đó là chương trình quản lý sinh viên.

1. Đề bài chương trình quản lý sinh viên

  1. Khai báo kiểu dữ liệu SinhVien có các trường họ tên, giới tính, tuổi, điểm toán – lý – hóa và điểm trung bình.
  2. Nhập vào danh sách N sinh viên
  3. Xuất danh sách N sinh viên
  4. Tính điểm trung bình cho N sinh viên
  5. Sắp xếp N sinh viên theo thứ tự tăng dần của điểm trung bình
  6. Xếp loại N sinh viên
  7. Xuất danh sách N sinh viên ra file
  8. Viết chương trình dạng menu cho phép sử dụng các tính năng trên

2. Kiến thức cần có

  1. Kiến thức lập trình cơ bản
  2. Kiến thức về hàm con
  3. Struct trong C
  4. Cách sử dụng cấu trúc lặp: for, do while, while
  5. Cách sử dụng cấu trúc điều khiển & rẽ nhánh: if else, switch case
  6. Nhập xuất file

?Tham khảo ngay:Dịch vụ code thuê đồ án CNTT của Lập Trình Không Khó

3. Code chương trình quản lý sinh viên

Dưới đây là code tham khảo cho bài tập chương trình quản lý sinh viên đã nêu.

Các bạn có thể khai báo kiểu cấu trúc SinhVien như sau:

struct SinhVien{ char ten[30]; char gt[5]; int age; float dT, dL, dH; float dtb = 0; };

Viết lại tên kiểu dữ liệu để viết ngắn hơn

typedef SinhVien SV;

Khai báo các hàm sẽ sử dụng trong chương trình:

void nhap(SV &sv); void nhapN(SV a[], int n); void xuat(SV sv); void xuatN(SV a[], int n); void tinhDTB(SV &sv); void sapxep(SV a[], int n); void xeploai(SV a); void xeploaiN(SV a[], int n); void xuatFile(SV a[], int n, char fileName[]);

Ý tưởng nhập danh sách sinh viên: Viết hàm nhập thông tin của 1 sinh viên, sau đó viết hàm nhập nhiều sinh viên chỉ cần dùng for và gọi hàm nhập 1 sinh viên.

Ý tưởng xuất danh sách sinh viên tương tự ý tưởng nhập.

Các chức năng khác các bạn vui lòng xem code để hiểu rõ hơn.

// Nếu bạn bị lỗi thư viện conio.h => Do bạn dùng C++ bản mới. // Hãy kéo xuống comment và lấy code update nhé. #include <stdio.h> #include <conio.h> #include <stdlib.h> struct SinhVien{ char ten[30]; char gt[5]; int age; float dT, dL, dH; float dtb = 0; }; typedef SinhVien SV; void nhap(SV &sv); void nhapN(SV a[], int n); void xuat(SV sv); void xuatN(SV a[], int n); void tinhDTB(SV &sv); void sapxep(SV a[], int n); void xeploai(SV a); void xeploaiN(SV a[], int n); void xuatFile(SV a[], int n, char fileName[]); int main(){ int key; char fileName[] = “DSSV.txt”; int n; bool daNhap = false; do{ printf(“nNhap so luong SV: “); scanf(“%d”, &n); }while(n <= 0); SV a[n]; while(true){ system(“cls”); printf(“******************************************n”); printf(“** CHUONG TRINH QUAN LY SINH VIEN **n”); printf(“** 1. Nhap du lieu **n”); printf(“** 2. In danh sach sinh vien **n”); printf(“** 3. Sap xep sinh vien theo DTB **n”); printf(“** 4. Xep loai sinh vien **n”); printf(“** 5. Xuat DS sinh vien **n”); printf(“** 0. Thoat **n”); printf(“******************************************n”); printf(“** Nhap lua chon cua ban **n”); scanf(“%d”,&key); switch(key){ case 1: printf(“nBan da chon nhap DS sinh vien!”); nhapN(a, n); printf(“nBan da nhap thanh cong!”); daNhap = true; printf(“nBam phim bat ky de tiep tuc!”); getch(); break; case 2: if(daNhap){ printf(“nBan da chon xuat DS sinh vien!”); xuatN(a, n); }else{ printf(“nNhap DS SV truoc!!!!”); } printf(“nBam phim bat ky de tiep tuc!”); getch(); break; case 3: if(daNhap){ printf(“nBan da chon sap xep SV theo STB!”); sapxep(a, n); xuatN(a, n); }else{ printf(“nNhap DS SV truoc!!!!”); } printf(“nBam phim bat ky de tiep tuc!”); getch(); break; case 4: if(daNhap){ printf(“nBan da chon thoat xep loai SV!”); xeploaiN(a, n); }else{ printf(“nNhap DS SV truoc!!!!”); } printf(“nBam phim bat ky de tiep tuc!”); getch(); break; case 5: if(daNhap){ printf(“nBan da chon xuat DS SV!”); xuatFile(a, n, fileName); }else{ printf(“nNhap DS SV truoc!!!!”); } printf(“nXuat DSSV thanh cong vao file %s!”, fileName); printf(“nBam phim bat ky de tiep tuc!”); getch(); break; case 0: printf(“nBan da chon thoat chuong trinh!”); getch(); return 0; default: printf(“nKhong co chuc nang nay!”); printf(“nBam phim bat ky de tiep tuc!”); getch(); break; } } } void tinhDTB(SV &sv){ sv.dtb = (sv.dH + sv.dL + sv.dT)/3; } void nhap(SV &sv){ printf(“nNhap ten: “); fflush(stdin); gets(sv.ten); printf(“nNhap gioi tinh: “); gets(sv.gt); printf(“nNhap tuoi: “); scanf(“%d”, &sv.age); printf(“nNhap diem 3 mon: “); scanf(“%f%f%f”, &sv.dT, &sv.dL, &sv.dH); tinhDTB(sv); } void nhapN(SV a[], int n){ printf(“n____________________________________n”); for(int i = 0; i< n; ++i){ printf(“nNhap SV thu %d:”, i+1); nhap(a[i]); } printf(“n____________________________________n”); } void xuat(SV sv){ printf(“nHo ten SV: %s”, sv.ten); printf(“nGioi tinh: %s”, sv.gt); printf(“nTuoi SV : %d”, sv.age); printf(“nDiem Toan – Ly – Hoa: %.2f – %.2f – %.2f”, sv.dT, sv.dL, sv.dH); printf(“nDiem TB: %.2f”, sv.dtb); } void xuatN(SV a[], int n){ printf(“n____________________________________n”); for(int i = 0;i < n;++i){ printf(“nThong tin SV thu %d:”, i+1); xuat(a[i]); } printf(“n____________________________________n”); } void sapxep(SV a[], int n){ //Sap xep theo DTB tang dan SV tmp; for(int i = 0;i < n;++i){ for(int j = i+1; j < n;++j){ if(a[i].dtb > a[j].dtb){ tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } } void xeploai(SV sv){ if(sv.dtb >= 8) printf(“Gioi”); else if(sv.dtb >= 6.5) printf(“Kha”); else if(sv.dtb >= 4) printf(“Trung binh”); else printf(“Yeu”); } void xeploaiN(SV a[], int n){ printf(“n____________________________________n”); for(int i = 0;i < n;++i){ printf(“nXep loai cua SV thu %d la: “, i+1); xeploai(a[i]); } printf(“n____________________________________n”); } void xuatFile(SV a[], int n, char fileName[]){ FILE * fp; fp = fopen (fileName,”w”); fprintf(fp, “%20s%5s%5s%10s%10s%10s%10sn”, “Ho Ten”,”GT”, “Tuoi”, “DT”, “DL”, “DH”, “DTB”); for(int i = 0;i < n;i++){ fprintf(fp, “%20s%5s%5d%10f%10f%10f%10fn”, a[i].ten,a[i].gt, a[i].age, a[i].dT, a[i].dL, a[i].dH, a[i].dtb); } fclose (fp); }

Kết quả chạy thử chương trình quản lý sinh viên:

4. Kết luận

Hầu hết các bài tập struct đều có mô típ khá giống nhau và giống với bài tập quản lý sinh viên phía trên. Do vậy, các bạn hoàn toàn có thể sửa lại để hoàn thành bài tập của mình. Hi vọng bài viết cung cấp cho các bạn thêm kiến thức bổ ích.

Theo dõi lập trình không khó tại:

  • Forum: https://www.facebook.com/groups/LapTrinhKhongKho/
  • Youtube: https://www.youtube.com/HieuNguyenVanOfficial

By Hà Phương

Với kinh nghiệm trên 7 năm trong lĩnh vực làm đẹp mình tạo nên EzBeauty là website chia sẻ kiến thức và thông tin cho mọi người!