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

Bài số 67 trong 69 bài của series Học C Không Khó

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:

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

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

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

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:

Các bài viết trong SeriesBài trước: Bài 68. Struct trong CBài sau: Bài 70. Đọc ghi file trong C

41 COMMENTS

    • vậy mà khi e khai báo biến daNhap này thì bị lôi. đây là chươn trình c++ của em.
      #include
      #include
      #include

      using namespace std;
      typedef struct sinhVien{
      string hoTen, gioiTinh;
      int age;
      float dT, dL, dH, dTB;
      } SV;
      //typedef sinhVien SV;
      void _tinhDTB(SV &sv){
      sv.dTB = (sv.dH + sv.dL + sv.dT)/3;
      }
      void _nhap(SV &sv){
      cout<<"Ho&ten: ";
      fflush(stdin);
      getline(std::cin,sv.hoTen);
      cout<<"Gioi tinh: ";
      fflush(stdin);
      getline(std::cin,sv.gioiTinh);
      cout<>sv.age;
      cout<>sv.dT;
      cout<>sv.dL;
      cout<>sv.dH;
      cout<<endl;
      _tinhDTB(sv);
      }
      void _nhapN(SV a[], int n){
      int i;
      for(i=0; i<n; i++){
      cout<<"Nhap thong tin sinh vien thu "<<(i+1)<<endl;
      _nhap(a[i]);
      }
      }
      void _xuat(SV &sv){
      int i;
      cout<<"——————————–"<<endl;
      cout<<"Thong tin sinh vien ban vua nhap"<<endl;
      cout<<"Ho&Ten: "<<sv.hoTen<<endl;
      cout<<"Gioi tinh: "<<sv.gioiTinh<<endl;
      cout<<"Tuoi: "<<sv.age<<endl;
      cout<<"Diem Toan: "<<sv.dT<<endl;
      cout<<"Diem Ly: "<<sv.dL<<endl;
      cout<<"Diem Hoa: "<<sv.dH<<endl;
      cout<<"Diem TB: "<<sv.dTB;
      cout<<endl;
      }
      void _xuatN(SV a[], int n){
      for(int i=0; i<n; i++){
      cout<<"Xuat thong tin thu "<<(i+1)<<endl;
      _xuat(a[i]);
      }
      }
      void _sapxep(SV a[], int n){
      float tam;
      for(int i=0; i<n; i++){
      for(int j=i+1; ja[j].dTB){
      tam=a[i].dTB;
      a[i].dTB=a[j].dTB;
      a[j].dTB=tam;
      }
      }
      }
      }

      int main(){
      int n, key;
      SV SV1[n];
      bool daNhap = false;

      do{
      cout<>n;
      } while(n<=0);

      while(true){
      cout<<"******************************************"<<endl;
      cout<<"** CHUONG TRINH QUAN LY SINH VIEN **"<<endl;
      cout<<"** 1. Nhap du lieu **"<<endl;
      cout<<"** 2. In danh sach sinh vien **"<<endl;
      cout<<"** 3. Sap xep sinh vien theo DTB **"<<endl;
      cout<<"** 4. Xep loai sinh vien **"<<endl;
      cout<<"** 5. Xuat DS sinh vien **"<<endl;
      cout<<"** 0. Thoat **"<<endl;
      cout<<"******************************************"<<endl;
      cout<<"** Nhap lua chon cua ban **"<>key;
      switch(key){
      case 1:
      cout<Ban da chon nhap DS sinh vien”<<endl;
      _nhapN(SV1,n);
      cout<<"Ban da nhap thanh cong"<<endl;
      daNhap = true;
      cout<<"Ban nhan phim bat ky de tiep tuc"<<endl;
      getch();
      break;
      case 2:
      if(daNhap){
      cout<In danh sach sinh vien***”<<endl;
      _xuatN(SV1,n);
      }
      else{
      cout<<"Nhap DS SV truoc!!!!"<<endl;
      }
      cout<<"\nBam phim bat ky de tiep tuc!"<<endl;
      getch();
      break;
      case 3:
      if(daNhap){
      cout<Sap xep sinh vien theo diem trung binh”<<endl;
      _sapxep(SV1, n);
      _xuatN(SV1,n);
      }
      else{
      cout<<"Nhap DS SV truoc!!!!"<<endl;
      }
      cout<<"\nBam phim bat ky de tiep tuc!"<<endl;
      getch();
      break;

      case 0:
      printf("\nBan da chon thoat chuong trinh!");
      getch();
      return 0;

      default:
      cout<<"Khong co chuc nang nay";
      getch();
      break;
      }
      }

      return 0;
      }
      Nhờ anh hướng dẫn em xem lỗi ở cho nào

  1. a ơi e hỏi chút ạ. với bài toán trên đề bài yêu cầu tìm và in ra thông tin của sinh viên có điểm tổng kết cao nhất. nếu e tìm đc điểm cao nhất là bao nhiêu r. vậy muốn xuất ra thông tin của sv đó thì làm thế nào ạ

  2. Có ai giúp em k ạ….em có 1 đồ án khó hiểu là làm về bánh sinh nhật có ai chỉ em giúp với được không ạ…?

  3. hiện tại code trên gặp vấn đề như sau:
    1. dòng SV a[n] biến n bị báo lỗi
    2. hàm fopen thì visual studio 2017 không hỗ trợ nữa anh ạ
    giờ mình làm sao anh ơi

    • Lỗi gì bạn phải nói rõ, nói lỗi tùm lum sao mình biết.
      Nếu là lỗi thư viện conio.h thì bạn sài code mới nhé.

  4. Cho em hỏi nếu không dùng typedef SinhVien SV; thì khi khai báo trong void nhapN(Sinhvien a[], int n) đúng không anh?

  5. anh cho e hỏi đoạn a dùng tmp để sap xep lớn -> bé
    khi e dùng
    tmp = a[i].mssv
    a[i].mssv = a[j].mssv
    a[j].mssv = a[i].mssv mssv ( mã số sinh viên )
    thì ko được vậy ạ

    e sử dụng
    Struct SV
    {
    string mssv ;
    }

    mong a giúp đỡ

  6. 1.Cho cấu trúc dữ liệu:
    struct SinhVien{
    int masv;
    string hoten;
    };
    Viết chương trình bằng C++ trong Dev C++ để làm các việc sau:
    a) Khai báo mảng SV gồm 100 phần tử, mỗi phần tử là một SinhVien;
    b) Viết chương trình cho phép người dùng nhập một danh sách sinh viên từ bàn phím.
    Sau khi nhập xong một sinh viên, hệ thống đưa ra gợi ý hỏi người dùng có muốn nhập tiếp không. Hệ thống dừng nhập khi người dùng nhập ký tự ‘n’. Số lượng phần tử đã nhập trong danh sách không vượt quá 100.
    c) Ghi danh sách sinh viên đã nhập xuống file SINHVIEN.TXT.
    2: Hãy thực hiện các công việc sau với file đã được tạo ở Câu 1 và in kết quả ra màn hình:
    a) Đọc nội dung từ tập tin “SINHVIEN.TXT” ra cấu trúc dữ liệu STACK
    b) Hiển thị dữ liệu của STACK ra màn hình
    có thể giải quyết cho e đc bài nay ko?

    • Em dùng IDE nào để chạy code? Em có thể copy lỗi lên đây để mình giúp em nhé.
      Có thể là do em dùng C++ version mới nên có một số hàm trong code này đã không còn được dùng nữa

  7. anh cho e hỏi là vì sao em dùng &n thì phải lưu thành đuôi .cpp còn khi lưu là đuôi .c thì k đc ạ. và anh co thể làm bài hướng dẫn nếu lưu là đuôi . c thì phải dùng như thế nào thì mới thay & đc ạ.
    em cảm ơn

LEAVE A REPLY

Please enter your comment!
Please enter your name here