ktltbai20.cpp

/*
    Viết chương trình quản lý điểm môn học của sinh viên. 
    Mỗi sinh viên có các thông tin về mã sv, họ tên, lớp, điểm C.Cần, điểm kiểm tra, điểm thi, điểm môn học. 
    Điểm môn học = 0,1xC.Cần + 0,3xK.Tra + 0,6xThi. 
    Đọc vào danh sách n sinh viên từ tệp văn bản "sinhvien.txt". 
    Tìm và đưa ra thông tin về sinh viên có điểm MH cao nhất.
*/

#include<stdio.h>
typedef struct 
{
	int maSV;
	char hoTen[50];
	char lop[30];
	float chuyencan,kiemtra,thi,monhoc;
}SinhVien;

int main()
{
	SinhVien sv,sv_top;
	FILE *fp;
	int i,n;
	float diem_max = 0;
	fp = fopen("SinhVien.dat","wb");
	printf("Nhập số sinh viên n = ");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
	      printf("Nhập sinh viên thứ %d\n",i);
	      printf("Mã SV: ");
	      scanf("%d",&sv.maSV);
	      getchar();
	      printf("Họ tên: ");
	      gets(sv.hoTen);
	      printf("Lớp: ");
	      gets(sv.lop);
	      printf("Điểm chuyên cần: ");
	      scanf("%f",&sv.chuyencan);
	      printf("Điểm kiểm tra: ");
	      scanf("%f",&sv.kiemtra);
	      printf("Điểm thi: ");
	      scanf("%f",&sv.thi);
	      sv.monhoc = 0.1*sv.chuyencan + 0.3*sv.kiemtra + 0.6*sv.thi ;
	      fwrite(&sv,sizeof(SinhVien),1,fp);
	}
	fclose(fp);
	printf("Danh sách sinh viên trong file:\n");
	fp = fopen("SinhVien.dat","rb");
	while (fread(&sv,sizeof(SinhVien),1,fp)>0){
	    if(sv.monhoc > diem_max){
			diem_max = sv.monhoc;
			sv_top = sv;
	    }
	    printf("%-4d   %-20s   %-6s \t%-2.2f\t%-2.2f\t%-2.2f\t%-2.2f\n",sv.maSV,sv.hoTen,sv.lop,sv.chuyencan,sv.kiemtra,sv.thi,sv.monhoc);
	}
	printf("\nSinh vien co diem mon hoc cao nhat \n");
	printf("%-4d   %-20s   %-6s \t%-2.2f\t%-2.2f\t%-2.2f\t%-2.2f\n",sv_top.maSV,sv_top.hoTen,sv_top.lop,sv_top.chuyencan,sv_top.kiemtra,sv_top.thi,sv_top.monhoc);
	fclose(fp);
	
	return 0;

}

Bài này chúng ta chưa xử lý trường hợp có nhiều sinh viên bằng điểm nhau và cao nhất. Các bạn cần xử lý thêm trường hợp này.

Last updated