Chương trình quản lý sinh viên là một bài tập khá phổ biến khi học lập trình. Tiếp tục chuyên mục giải bài tập với Struct trong C/C++ hôm nay chúng ta sẽ cùng làm lại bài tập này nhé. Chương trình quản lý sinh viênYêu cầu của bài toánCụ thể mình có thể phát biểu đề bài gồm có các ý như sau.
Xây dựng chương trìnhĐã có yêu cầu bài toán, bây giờ chúng ta hãy cùng viết chương trình Quản lý sinh viên. Xây dựng Struct Sinh viênĐịnh nghĩa struc sinh viên như sau: //Định nghĩa struct Sinh vien typedef struct SinhVien{ char name[100]; //biến tên sinh viên tối đa 100 ký tự char quequan[100]; //biên quê quán sinh viên tối đa 100 ký tự int namsinh; //Năm sinh float d_toan, d_ly, d_hoa; //Điểm toán, lý hóa }; Vậy là ta đã định nghĩa xong struct Sinh viên, bây giờ ta cùng đi viết hàm nhập n sinh viên. Xây dựng hàm nhập và tính điểm trung bình trong hàm nhập//Viết hàm nhập vào n sinh viên void nhap(int &n, SinhVien A[]){ printf("Nhap so sinh vien "); scanf("%d", &n); //Nhập vào n số lượng sinh viên //Sử dụng for để nhập vào thông tin n sinh viên for(int i = 0;i <n; i++){ }
}Vậy đã có hàm nhập, ta viết hàm xuất ra n sinh viên nhé. Xây dựng hàm xuất n sinh viên//Viết hàm xuất void xuat(int n, SinhVien A[]){ //Xuất tên cột printf("\n%-15s %-15s %-10s %-10s %-10s %-10s %-10s","Ten sinh vien","Que quan","Nam sinh", "Diem toan", "Diem ly", "Diem hoa", "Diem tb"); //Sử dụng vòng lặp for để xuất thông tin n sinh viên for(int i = 0;i <n; i++){ }
}Trong hàm printf %-15s, hay %-15d, dấu gạch 15(-15) có ý nghĩa là nó sẽ chiếm 1 khoảng vị trí gồm 15 ký tự. %-10.1f dấu (.1) có nghĩa là chỉ lấy 1 số sau dấu phẩy. Hàm xuất n sinh viên cũn đã được viết xong. Xây dựng hàm tìm kiếm sinh viên theo tênĐể tìm kiếm 1 sinh viên trong n sinh viên đã có, ta sẽ so sánh tên sinh viên đã nhập lần lượt với tất cả các sinh viên có trong dánh sách, sinh viên nào tên khớp thì ta đưa ra kết quả. Duyệt hết tất cả sinh viên mà không có sinh viên nào khớp tên thì không tìm thấy. Để so sánh nhanh 2 chuỗi khớp nhau không ta có thể sử dụng 2 hàm có sẵn trong thư viên string.h là hàm strcmp, hàm này thì có phân biệt chữ hoa chữ thường. Hoặc ta sẽ dùng hàm stricmp, hàm này sẽ tối ưu hơn vì nó không phân biệt hoa thường, tức là bạn nhập tên là Kiet thì khi tìm kiếm kien nó vẫn sẽ cho ra kết quả. Vậy ta có thể viết hàm tìm kiếm như sau: //HÀM tim kiếm sinh viên theo tên void timKiem(int n, SinhVien A[]){ //Nhập tên sinh viên cần tìm kiếm printf("Nhap ten sinh vien can tim: "); char name[100]; fflush(stdin); gets(name); bool check = false; //Biến để kiểm tra xem có sinh viên nào được tìm thấy hay không //Sử dụng vòng for để lần lượt tìm qua tất cả sinh viên for(int i = 0; i< n; i++){ }
if(check == false){ }
}Xây dựng hàm sắp xếp sinh viênXây dựng hàm sắp xếp sinh viên ta vẫn sẽ dùng cách sắp xếp đơn giản và phổ biến đối với những bạn mới học lập trình nhất sắp xếp tuần tự. //Hàm sắp xếp sinh viên void sapXep(int n, SinhVien A[]){ for(int i = 0; i<n-1;i++){ //kiểm tra xem sinh viên thứ nhất tên có tên đứng theo trước sinh viến thứ 2 theo alpha B không thì ta sẽ đảo vị trí của chúng }
xuat(n, A);
}Xây dựng hàm đếm số sinh viên yếu, trung bình, khá, giỏi//Hàm đếm số sinh viên trung bình, yếu, khá, giỏi void demYeuTbKhaGioi(int n, SinhVien A[]){ int yeu = 0, tb = 0, kha = 0, gioi = 0; for(int i = 0; i<n;i++){ }
printf("\nSo sinh vien yeu la: %d", yeu);
printf("\nSo sinh vien trung binh la: %d", tb);
printf("\nSo sinh vien kha la: %d", kha);
printf("\nSo sinh vien gioi la: %d", gioi);
}Hàm mainBiến n và biến danh sách Sinh viên ta sẽ khai báo trong hàm main như bên dưới. //Hàm main int main() { int n = 0; //Khai bao n SinhVien listSV[100]; //Khai báo danh sách SV tối đa la 100 }Chương trình hoàn chỉnhNhư vậy là ta đã xây dựng xong các hàm thành phần với tất cả các ý mà bài toán yêu cầu. Bây giờ việc đơn giản chỉ là ghép chúng lại thành một chương trình hoàn chỉnh và chạy chương trình. |