01/10/2018, 12:06

Em làm thế này thì sắp xếp danh sách mình phải làm sao... mò cả đêm vẫn mà viết vẫn bị lỗi

// DE TAI QUAN LY HOC SINH TRUNG HOC PHO THONG (GVCN)
 #include <stdio.h<stdio.h>>
 #include <<conio.h>conio.h>
 #include <<string.h>string.h>
typedef struct
{
       char ngay;
	char thang;
	int nam;	
}ngaythang;

typedef struct
{
	float van;
	float toan;
	float ly;
	float hoa;
	float sinh;
	float su;
	float dia;
	float anhvan;	
}diemcacmon;

typedef struct
{
	char mshs[100];
	char ten[100];
	ngaythang ngaysinh;
	char diachi[100];
    char sdt[100];
    char gioitinh[100];
    diemcacmon diemso;
	char xeploai[100]; 
}hocsinh;

void demsolan(int a)        // in so lan thuc hien chuong trinh
{
	FILE *f;
    f = fopen("dem.txt","a+b");
    int n;
    int c = fread(&n, sizeof(n), 1, f);
    fclose(f);
    f = fopen("dem.txt","w+b"); 
	if(c=0) n=0;  
	n=n+1;   
    fwrite(&n, sizeof(n), 1, 
	f);
    printf("Chuong trinh da thuc hien %d lan...
", n);
    fclose(f);
    getch();
}

void nhaphs(hocsinh s)   // Nhap thong tin hoc sinh
{
    FILE *f;
    f=fopen("DanhSachHocSinh.txt","wb"); 
	int n; 
	printf("Nhap bao nhieu HS:"); scanf("%d",&n);	
	for(int i=1;i<=n;i++)
	{	   
	   printf("Sinh vien thu %d
",i);
	   fflush(stdin);
	   printf("- MSHS:"); gets(s.mshs);
       printf("- HO VA TEN:"); gets(s.ten);
	   printf("- GIOI TINH:"); gets(s.gioitinh);
	   printf("- Ngay sinh:"); scanf("%d",&s.ngaysinh.ngay);
	   printf("- Thang sinh:"); scanf("%d",&s.ngaysinh.thang);
	   printf("- Nam sinh:"); scanf("%d",&s.ngaysinh.nam);
	   fflush(stdin);
	   printf("- SDT:"); gets(s.sdt);
	   printf("- DIA CHI:"); gets(s.diachi);
	   printf("NHAP DIEM CUA HOC SINH
");
	   printf("- Ngu Van:"); scanf("%f",&s.diemso.van);
       printf("- Toan:"); scanf("%f",&s.diemso.toan);
       printf("- Ly:"); scanf("%f",&s.diemso.ly);
   	   printf("- Hoa:"); scanf("%f",&s.diemso.hoa);
       printf("- Sinh:"); scanf("%f",&s.diemso.sinh);
       printf("- Su:"); scanf("%f",&s.diemso.su);
       printf("- Dia:"); scanf("%f",&s.diemso.dia);
       printf("- Anh Van:"); scanf("%1f",&s.diemso.anhvan);       
       fwrite(&s,sizeof(s),1,f);	   
	}
	printf("-----------------------------------------------------------------
");
	fclose(f);
	getch();
}


void indiemhs(hocsinh s)  // In diem hoc sinh ra man hinh	
{
	FILE *f;		
	f=fopen("DanhSachHocSinh.txt","rb");	
	printf("   MSHS   |	HO VA TEN	 |          NGU VAN  | TOAN |  LY  |  HOA  |  SINH  |  SU  |  DIA  | ANH VAN | TRUNG BINH | XEP LOAI
");
	fread(&s,sizeof(s),1,f);			
	while(!feof(f))
	{	
	float a=((s.diemso.van*2)+(s.diemso.toan*2)+s.diemso.ly+s.diemso.hoa+s.diemso.sinh+s.diemso.su+s.diemso.dia+s.diemso.anhvan)/10;	    		    	  									
	    if(a>=8 && s.diemso.van>=6.5 && s.diemso.toan>=6.5 && s.diemso.ly>=6.5 && s.diemso.hoa>=6.5 && s.diemso.sinh>=6.5 && s.diemso.su>=6.5 && s.diemso.dia>=6.5 && s.diemso.anhvan>=6.5) printf(" %s   %s      		%.1f     %.1f    %.1f    %.1f     %.1f      %.1f    %.1f      %.1f       %.1f      HSG
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
	    else if(a>=6.5 && s.diemso.van>=5 && s.diemso.toan>=5 && s.diemso.ly>=5 && s.diemso.hoa>=5 && s.diemso.sinh>=5 && s.diemso.su>=5 && s.diemso.dia>=5 && s.diemso.anhvan>=5) printf(" %s   %s      		%.1f     %.1f    %.1f    %.1f     %.1f      %.1f    %.1f      %.1f       %.1f      HSK
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
	            else if (a>=5 && s.diemso.van>=3.5 && s.diemso.toan>=3.5 && s.diemso.ly>=3.5 && s.diemso.hoa>=3.5 && s.diemso.sinh>=3.5 && s.diemso.su>=3.5 && s.diemso.dia>=3.5 && s.diemso.anhvan>=3.5) printf(" %s   %s      		%.1f     %.1f    %.1f    %.1f     %.1f      %.1f    %.1f      %.1f       %.1f      HSTB
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
	                    else if(a>=3.5 && s.diemso.van>=2 && s.diemso.toan>=2 && s.diemso.ly>=2 && s.diemso.hoa>=2 && s.diemso.sinh>=2 && s.diemso.su>=2 && s.diemso.dia>=2 && s.diemso.anhvan>=2) printf(" %s   %s      		%.1f     %.1f    %.1f    %.1f     %.1f      %.1f    %.1f      %.1f       %.1f       HSY
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
	                            else printf(" %s   %s      		%.1f     %.1f    %.1f    %.1f     %.1f      %.1f    %.1f      %.1f       %.1f       HSK
",s.mshs,s.ten,s.diemso.van,s.diemso.toan,s.diemso.ly,s.diemso.hoa,s.diemso.sinh,s.diemso.su,s.diemso.dia,s.diemso.anhvan,a);
						
		fread(&s,sizeof(s),1,f);
	}  	
	printf("-------------------------------------------------------------------------------------------------
");
    fclose(f);
	getch();
}

void inhs(hocsinh s)   // In thong tin hoc sinh ra man hinh
{
	FILE *f;
	f=fopen("DanhSachHocSinh.txt","rb");
	printf("  MSHS	|	HO VA TEN	| GIOI TINH |  NAM SINH  |     SDT     |  DIA CHI
");
	fread(&s,sizeof(s),1,f);	
	while(!feof(f))
	{
	  printf("%s   %s	   %s	      %d-%d-%d	   %s	   %s
",s.mshs,s.ten,s.gioitinh,s.ngaysinh.ngay,s.ngaysinh.thang,s.ngaysinh.nam,s.sdt,s.diachi);	  
	  fread(&s,sizeof(s),1,f);
    }
	printf("--------------------------------------------------------------------------------
");
    fclose(f);
	getch();
}

void timkiemhs(hocsinh s)    // Tim kiem bang ma so hoc sinh
{
	char maso[10];	
	fflush(stdin);
	FILE *f;
	f=fopen("DanhSachHocSinh.txt","rb");		
	int timkiem=0;
	printf("- Nhap MSHS can tim:"); gets(maso);
	fflush(stdin);
	while(timkiem==0 && !feof(f))
	{
		fread(&s,sizeof(s),1,f);
		if(strcmp(s.mshs,maso)==0) timkiem=1;
	}
	printf("-----------------------------------
");
	float a=((s.diemso.van*2)+(s.diemso.toan*2)+s.diemso.ly+s.diemso.hoa+s.diemso.sinh+s.diemso.su+s.diemso.dia+s.diemso.anhvan)/10;
	if(timkiem==1)
	{
		printf("Da tim thay hoc sinh co ma so:%s
",maso);	
        printf("- HO VA TEN: %s
",s.ten);
	    printf("- GIOI TINH: %s
",s.gioitinh); 
	    printf("- Nam sinh: %d-%d-%d
",s.ngaysinh.ngay,s.ngaysinh.thang,s.ngaysinh.nam); 	    
	    printf("- SDT: %s
",s.sdt); 
	    printf("- DIA CHI :%s
",s.diachi);
	    printf("------------------------
");
		printf("DIEM CUA HOC SINH""
");
	    printf("- Ngu Van: %.1f
",s.diemso.van);
        printf("- Toan: %.1f
",s.diemso.toan);
        printf("- Ly: %.1f
",s.diemso.ly);
   	    printf("- Hoa: %.1f
",s.diemso.hoa); 
        printf("- Sinh: %.1f
",s.diemso.sinh);
        printf("- Su: %.1f
",s.diemso.su);
        printf("- Dia: %.1f
",s.diemso.dia); 
        printf("- Anh Van: %.1f
",s.diemso.anhvan);
		printf("- Diem trung binh:%.1f
",a);
		if(a>=8 && s.diemso.van>=6.5 && s.diemso.toan>=6.5 && s.diemso.ly>=6.5 && s.diemso.hoa>=6.5 && s.diemso.sinh>=6.5 && s.diemso.su>=6.5 && s.diemso.dia>=6.5 && s.diemso.anhvan>=6.5) printf("- Xep loai: Hoc sinh gioi.
");
	    else if(a>=6.5 && s.diemso.van>=5 && s.diemso.toan>=5 && s.diemso.ly>=5 && s.diemso.hoa>=5 && s.diemso.sinh>=5 && s.diemso.su>=5 && s.diemso.dia>=5 && s.diemso.anhvan>=5) printf("- Xep loai: Hoc sinh kha.
");
	            else if (a>=5 && s.diemso.van>=3.5 && s.diemso.toan>=3.5 && s.diemso.ly>=3.5 && s.diemso.hoa>=3.5 && s.diemso.sinh>=3.5 && s.diemso.su>=3.5 && s.diemso.dia>=3.5 && s.diemso.anhvan>=3.5) printf("- Xep loai: Hoc sinh trung binh.
");
	                    else if(a>=3.5 && s.diemso.van>=2 && s.diemso.toan>=2 && s.diemso.ly>=2 && s.diemso.hoa>=2 && s.diemso.sinh>=2 && s.diemso.su>=2 && s.diemso.dia>=2 && s.diemso.anhvan>=2) printf("- Xep loai: Hoc sinh yeu.
");
	                            else printf("- Xep loai: Hoc sinh kem.
");		  
	} else printf("Khong tim thay hoc sinh co ma so %s
",maso);
	fclose(f);
	printf("-----------------------------------
");
	getch();	
}

void themhocsinh(hocsinh s)  //them hoc sinh vao danh sach
{
	FILE *f;
    f=fopen("DanhSachHocSinh.txt","ab");
	int n;
	printf("Them bao nhieu HS:"); scanf("%d",&n);
	fread(&s,sizeof(s),1,f);
	for(int i=1;i<=n;i++)
	{
	   fread(&s,sizeof(s),1,f);
	   printf("Hoc sinh thu %d
",i);
	   fflush(stdin);
	   printf("- MSHS:"); gets(s.mshs);
       printf("- HO VA TEN:"); gets(s.ten);
	   printf("- GIOI TINH:"); gets(s.gioitinh);
	   printf("- Ngay sinh:"); scanf("%d",&s.ngaysinh.ngay);
	   printf("- Thang sinh:"); scanf("%d",&s.ngaysinh.thang);
	   printf("- Nam sinh:"); scanf("%d",&s.ngaysinh.nam);
	   fflush(stdin);
	   printf("- SDT:"); gets(s.sdt);
	   printf("- DIA CHI:"); gets(s.diachi);
	   printf("NHAP DIEM CUA HOC SINH
");
	   printf("- Ngu Van:"); scanf("%f",&s.diemso.van);
       printf("- Toan:"); scanf("%f",&s.diemso.toan);
       printf("- Ly:"); scanf("%f",&s.diemso.ly);
   	   printf("- Hoa:"); scanf("%f",&s.diemso.hoa);
       printf("- Sinh:"); scanf("%f",&s.diemso.sinh);
       printf("- Su:"); scanf("%f",&s.diemso.su);
       printf("- Dia:"); scanf("%f",&s.diemso.dia);
       printf("- Anh Van:"); scanf("%1f",&s.diemso.anhvan);       
       fwrite(&s,sizeof(s),1,f);	   
	}
	printf("-----------------------------------------------------------------
");
	fclose(f);
	getch();
}

void sapxep(hocsinh s)
{
}

int main()
{
    int c; 	int a;
	FILE *f;
	f=fopen("DanhSachHocSinh.txt","ab");			
    hocsinh hs;	
	for(;;)
	{
	    printf("1. Nhap danh sach hoc sinh
");
	    printf("2. Xem danh sach hoc sinh
");
	    printf("3. Xem diem hoc sinh
");
	    printf("4. Tim kiem hoc sinh
");
		printf("5. Them hoc sinh
");
		printf("6. Xoa hoc sinh
");	    
	    printf("10. Thoat ra
");
	    scanf("%d",&c);	    
		if(c==1) nhaphs(hs); 
		 else if(c==2) inhs(hs);
		        else if(c==3) indiemhs(hs);
	                   else if(c==4) timkiemhs(hs);
	                           else if(c==5) themhocsinh(hs);
	                                  else if(c==6) sapxep(hs);
	                                         else if(c==10)	
	                                           {
	        	                                   demsolan(a);
	                                                break;
			                                   }
			 		    	       	         
	}
	fclose(f);
	getch();
	return 0;			
}
kiencon viết 14:13 ngày 01/10/2018

e đọc file txt vào ram rồi sắp xếp mảng vừa đọc theo 1 tiêu chí sắp xếp nào đó như giảm dần đtb, sau đó ghi lại ra file,

Vũ Phong viết 14:14 ngày 01/10/2018

sắp xếp 1 mảng trong cấu trúc là tất cả các trường còn lại đều sắp xếp theo lun hả a

rogp10 viết 14:13 ngày 01/10/2018

Mình thì mình trải thêm 1 dọc pointer (tạm) nữa, chứ vầy thì phê lắm

Vả lại phần xếp loại có thể viết lại.

HK boy viết 14:17 ngày 01/10/2018

Bạn phải viết 1 hàm so sánh 2 struct riêng, sau đó sort dựa trên kết quả so sánh.

Bài liên quan
0