Chương trình quản lý sinh viên sử dụng struct trong C

This entry is part 67 of 69 in the series Học C Không Khó 86 / 100

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.

NỘI DUNG BÀI VIẾT

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:

012345678 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

012 typedef SinhVien SV;

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

012345678910 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.

0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 // 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:

Chương trình quản lý sinh viên sử dụng struct

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: friend.com.vn/groups/LapTrinhKhongKho/
  • Youtube: friend.com.vn/HieuNguyenVanOfficial

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *