成绩管理(链表+文件)(txt or bin)

本文提供了一次技术领域的全面探索,涵盖了前端、后端、移动、游戏、大数据、开发工具等核心领域,深入解读了AI音视频处理、自然语言处理、区块链等前沿技术,同时涉及了测试、基础运维、DevOps等关键实践。文章旨在为开发者提供一份技术概览,助力提升技能和职业发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

txt:

#include <stdio.h> 
#include <string.h>  
#include <math.h>  
#include <stdlib.h>  
#include <ctype.h>  
#define len 26  
#define num 3  
struct student *head;
int max[num]={0},min[num]={100,100,100},sum[num]={0};  
int count=0;
double average[num]={0};
char filename[20]; 
  
struct student   
{  
    char name[20]; 
	char xue[20]; 
    int chinese;  
    int math;  
    int english;  
    struct student *next;  
};   
void Fpri()
{	char name[20]; 
	char xue[20]; 
    int chinese;   
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"r+"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	printf("\t姓名\t学号\t语文\t数学\t英语\n");
 	printf("--------------------------------------------------\n");
 	while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
 	{	 	
 		printf("\t%s\t%s\t%d\t%d\t%d\n",name,xue,chinese,math,english);
 	}
	 	
 	fclose(fpp);
}  
void Fsum()
{
	sum[0]=sum[1]=sum[2]=0;
	char name[20]; 
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"r"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}	
 	while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
 	{	 	
 		sum[0]+=chinese;  
        sum[1]+=math;  
        sum[2]+=english; 
 	} 
	 	
 	fclose(fpp);
}
void Fmaxmin()
{
	char name[20]; 
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"r"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}	
 	while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
 	{	 	
 		if(chinese>max[0])  
        max[0]=chinese;  
          
        if(math>max[1])  
        max[1]=math;  
                        
        if(english>max[2])  
        max[2]=english;  
       
        if(chinese<min[0])  
        min[0]=chinese;  
          
        if(math<min[1])  
        min[1]=math;  
         
        if(english<min[2])  
        min[2]=english;     
    }  	
 	printf("\t   最值有奖励!\n");
    printf("\t语\t数\t英\n");
	printf("最高分:\n"); 
	printf("\t%d\t%d\t%d\n",max[0],max[1],max[2]);  
    printf("最低分:\n"); 
	printf("\t%d\t%d\t%d\n",min[0],min[1],min[2]);  
 	
 	fclose(fpp);
}
void Average(int n)  
{  
    average[0]=sum[0]*1./count;  
    average[1]=sum[1]*1./count;  
    average[2]=sum[2]*1./count;   
    printf("\t   各科平均分\n");
    printf("\t语\t数\t英\n");
    printf("----------------------------------------\n");
    printf("\t%.2lf\t%.2lf\t%.2lf\n",average[0],average[1],average[2]);  
}  
void Fcount()
{
	FILE *fpp;
    char name[20];  
    char xue[20];
	int chinese;  
    int math;  
    int english; 
    if((fpp=fopen(filename,"r"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
	{
		count++;
	}	
		      
    fclose(fpp);
}
void Add() 
{  
    struct student *pp;  
    FILE *fpp;
    char name[20];  
    char xue[20];
	int chinese;  
    int math;  
    int english; 
	    
	if((fpp=fopen(filename,"a"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	      
    printf("请输入该同学的姓名与学号:\n");
	getchar(); 
    scanf("%s %s",name,xue);
    fputs(name,fpp);
    fputc(' ',fpp);
    fputs(xue,fpp);
 	printf("请分别输入该同学的语数英成绩:\n");
    scanf("%d %d %d",&chinese,&math,&english);
    fputc(' ',fpp);
    fprintf(fpp,"%d %d %d",chinese,math,english);
    fputc('\n',fpp);
	      
    fclose(fpp);
    
    count++;
}    
void Fcollect(int a,int b)   
{
	char name[20];
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"r"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}	
 	while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
 	{	 		
        if((chinese+math+english)>=a && (chinese+math+english)<=b)  
        printf("%s:%d\n",name,(chinese+math+english));             
 	} 	
 	fclose(fpp);	
}
int Ffind(char s[])
{
	struct student *p5,*p1,*p2,*temp;
	char name[20];
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	int n1=0;	
	int flag=0,fen; 
	char course,col,pan;
	
	count=0;
	if((fpp=fopen(filename,"r"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
    {   
 		count++;
		p1=(struct student *)malloc(sizeof(struct student)); 
		 
        n1++;  
        if(n1==1)  
        head=p1;  
        else  
        p2->next=p1;  
         
       	strcpy(p1->name,name);
       	strcpy(p1->xue,xue);
       	p1->chinese=chinese;
       	p1->math=math;
       	p1->english=english;
       	          
        p2=p1;            
    }  
    
    p1=(struct student *)malloc(sizeof(struct student)); 
    p1->name[0]='0',p1->xue[0]='0';
    p2->next=p1;
    p1->next=NULL;  
	fclose(fpp);
										
	if((fpp=fopen(filename,"r"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
	{
		if(strcmp(name,s)==0)  
        {  
            printf("语:%d\n数:%d\n英:%d\n",chinese,math,english);  
            flag=1;  
            break;  
        }  	        
	}  
	if(flag==1)  
    {
		printf("已找到该同学\n");		
	}  
    else  
    {
    	printf("该同学不存在\n");
    	return 0;
    }   
	
	printf("请输入是否要修改成绩:(y/n)\n");
	getchar();
	scanf("%c",&pan);     
	
	if(pan=='n')
	return 0;
	else if(pan=='y')
	{
		p5=head;
		if((fpp=fopen(filename,"w"))==NULL)
		{
			printf("打开文件失败!\n");
			exit(0);
		}
		
		printf("请输入要改的科目的首字母:(c,m,e)\n");  
     	getchar();  
     	scanf("%c",&course);  
  		printf("请输入该科目的正确数据:\n");  
   	  	scanf("%d",&fen);
   	  	if(count==1)
   	  	{
 	   		if(course=='c')  
	        {  
	      	     p5->chinese=fen;  
	        }  
	        else if(course=='m')  
	        {  
	            p5->math=fen;  
	        }  
	        else if(course=='e')  
	        {  
	            p5->english=fen;  
	        }
	  	   	fputs(name,fpp);
	        fputc(' ',fpp);
	        fputs(xue,fpp);
			fputc(' ',fpp);
	        fprintf(fpp,"%d %d %d",p5->chinese,p5->math,p5->english);
	        fputc('\n',fpp);
	   	}
	   	else
	   	{
	   		while(p5->next!=NULL)    
		    {    
		        if(strcmp(p5->name,s)==0 || strcmp(p5->xue,s)==0)    
		        {    		               
		             if(course=='c')  
		             {  
		                p5->chinese=fen;  
		             }  
		             else if(course=='m')  
		             {  
		                p5->math=fen;  
		             }  
		             else if(course=='e')  
		             {  
		                p5->english=fen;  
		             }                 
		            break;    
		        }    
		        p5=p5->next;    
		    }  
		   
			p5=head;
			while(p5->next!=NULL)
			{
				fputs(p5->name,fpp);
		        fputc(' ',fpp);
		        fputs(p5->xue,fpp);
				fputc(' ',fpp);
		        fprintf(fpp,"%d %d %d",p5->chinese,p5->math,p5->english);
		        fputc('\n',fpp);
				
				p5=p5->next;
			}		   	
	   	}		
	}	
	else
	{
		printf("你输入的指令无效!\n");		
		return 0;
	}
		
 	fclose(fpp);
	p5=head;
	for(p5=head;p5!=NULL;p5=temp)
	{
	   temp=p5->next;
	   free(p5);
	} 
	if(p5==NULL)  
	{  
	    printf("内存释放成功!\n");  
	} 
}  
void comp(int n)  
{  
	char name[20],xue[20];
	int chinese;  
    int math;  
    int english;
	int n1=0;
	FILE *fp;
	struct student *p1,*p2,*temp;
	head=NULL;  
        
	if((fp=fopen(filename,"r"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}     		   
    while(fscanf(fp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
    {   
		 
		p1=(struct student *)malloc(sizeof(struct student)); 
		 
        n1++;  
        if(n1==1)  
        head=p1;  
        else  
        {  
            p2->next=p1;  
        }  
       	strcpy(p1->name,name);
       	strcpy(p1->xue,xue);
       	p1->chinese=chinese;
       	p1->math=math;
       	p1->english=english;
       	          
        p2=p1;            
    }  
    
    p1=(struct student *)malloc(sizeof(struct student)); 
    p1->name[0]='0',p1->xue[0]='0';
    p2->next=p1;
    p1->next=NULL;  
      
	fclose(fp);

    struct student *p5,*p6; 
	FILE *fpp; 
    char _name[20];  
    char _xue[20];
    int c,i;  
    for(i=1;i<n;i++)  
    {  
        p5=head;  
        
        while(p5->next!=NULL)  
        {  
        	p6=p5;  
            p5=p5->next;           
            if(p5->name[0]=='0' && p5->xue[0]=='0')
			break;  
            if((p6->chinese+p6->math+p6->english)>(p5->chinese+p5->math+p5->english))  
            {  
                strcpy(_name,p6->name);  
                strcpy(p6->name,p5->name);  
                strcpy(p5->name,_name);  
                strcpy(_xue,p6->xue);  
                strcpy(p6->xue,p5->xue);  
                strcpy(p5->xue,_xue); 
                c=p6->chinese;  
                p6->chinese=p5->chinese;  
                p5->chinese=c;  
                c=p6->math;  
                p6->math=p5->math;  
                p5->math=c;  
                c=p6->english;  
                p6->english=p5->english;  
                p5->english=c;  
            }          
        }  
    } 
    if((fpp=fopen(filename,"w"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	p5=head;
	while(p5->next!=NULL)
	{
		fputs(p5->name,fpp);
        fputc(' ',fpp);
        fputs(p5->xue,fpp);
		fputc(' ',fpp);
        fprintf(fpp,"%d %d %d",p5->chinese,p5->math,p5->english);
        fputc('\n',fpp);		
		p5=p5->next;
	} 
	fclose(fpp);
	p5=head;
	for(p5=head;p5!=NULL;p5=temp)
	{
	   temp=p5->next;
	   free(p5);
	} 
	if(p5==NULL)  
	{  
	    printf("内存释放成功!\n");  
	}
}  
  
int menu_select()  
{  
    char s;  
    int cn;  
    system("cls");  
    printf("\t*********************************\n");  
    printf("\t*\t 2B成绩系统\t\t*\n");  
    printf("\t*\t           \t\t*\n");  
    printf("\t*\t1. 打印所有成绩\t\t*\n");  
    printf("\t*\t2. 排序输出成绩\t\t*\n");  
    printf("\t*\t3. 各科平均成绩\t\t*\n");  
    printf("\t*\t4. 各科最高最低\t\t*\n");  
    printf("\t*\t5. 添加一条记录\t\t*\n");  
    printf("\t*\t6. 录入所有成绩\t\t*\n");  
    printf("\t*\t7. 总分区间筛选\t\t*\n");  
    printf("\t*\t8. 查改单人成绩\t\t*\n");   
    printf("\t*\t9. 退出\t\t\t*\n");    
    printf("\t*********************************\n");  
    printf("请输入数字1-9进入相应功能:");  
    getchar(); //
    do  
    {  
        s=getchar();  
        cn=(int)s-48;  
    }while(cn<0 || cn>9);  
    return cn;    
}   
void *creat()
{
	char name[20],xue[20];
	int n=0;
	FILE *fp;
	struct student *p1,*p2,*p,*temp;
	head=NULL;  
 
  	count=0;  
	if((fp=fopen(filename,"w"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}     
	
    printf("请输入该学生的名字与学号(以0 0结束):\n");  
   	getchar();
    while(scanf("%s %s",name,xue)!=EOF)  
    {   
		 
		p1=(struct student *)malloc(sizeof(struct student)); 
		 
        n++;  
        if(n==1)  
        head=p1;  
        else  
        {  
            p2->next=p1;  
        }  
        if(name[0]=='0' && xue[0]=='0')  
        {   
         	strcpy(p1->name,name);
         	strcpy(p1->xue,xue);
		    break;  
        }
        
        printf("请分别输入语数英成绩:\n");  
        strcpy(p1->name,name);
	 	strcpy(p1->xue,xue); 
        fputs(name,fp);
        fputc(' ',fp);
        fputs(xue,fp);
		scanf("%d %d %d",&p1->chinese,&p1->math,&p1->english);  
		fputc(' ',fp);
        fprintf(fp,"%d %d %d",p1->chinese,p1->math,p1->english);
        fputc('\n',fp);
        count++;  
        while(getchar()!='\n')  
        continue;  
        p2=p1;  
          
        printf("请输入该学生的名字与学号(以0 0结束):\n");  
    }  
    p1->next=NULL;  
    printf("总记录数:%d\n",count);  
	fclose(fp);
	p=head;
	for(p=head;p!=NULL;p=temp)
	{
	   temp=p->next;
	   free(p);
	} 
	if(p==NULL)  
	{  
	    printf("内存释放成功!\n");  
	} 
}
void menu_pri()
{	 
	int a,b; 
 	char mou[20];
	for(;;)  
    {  
        switch(menu_select())  
        {     
            case 1:      
                        Fpri();  
                        system("pause");  
                        break;  
              
            case 2:     
                        comp(count);  
                        Fpri();   
                        system("pause");  
                        break;  
              
            case 3:     
						count=0;
						Fcount();
                        Fsum();  
                        Average(count);  
                        system("pause");  
                        break;  
              
            case 4:       
                        Fmaxmin();  
                        system("pause");  
                        break;  
              
            case 5:       
                        Add();  
                        Fpri();   
                        system("pause");  
                        break;  
              
            case 6:    						
						creat(); 
						system("pause");  
                        break;  
              
            case 7:      
                        printf("请输入要选择成绩的区间:\n");  
                        scanf("%d %d",&a,&b);  
                        Fcollect(a,b);  
                        system("pause");  
                        break;  
                          
            case 8:      
                        printf("请输入该同学的名字:\n");  
                        scanf("%s",mou);  
                        Ffind(mou);  
                        system("pause");   
                        break;  
                          
            case 9:     
						printf("Goodbye!\n");  
                        exit(0);              
        }  
    }  
} 
int main()  
{    
	
   	printf("请输入保存成绩的文件名:\n");
    scanf("%s",filename);   
    menu_pri();
      
    return 0;  
}


bin:

#include <stdio.h> 
#include <string.h>  
#include <math.h>  
#include <stdlib.h>  
#include <ctype.h>  
#define len 26  
#define num 3  
struct student *head;
int max[num]={0},min[num]={100,100,100},sum[num]={0};  
int count=0;
double average[num]={0};
char filename[20]; 
  
struct student   
{  
    char name[20]; 
	char xue[20]; 
    int chinese;  
    int math;  
    int english;  
    struct student *next;  
}stu;   
void Fpri()
{	char name[20]; 
	char xue[20]; 
    int chinese;   
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"rb+"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	printf("\t姓名\t学号\t语文\t数学\t英语\n");
 	printf("--------------------------------------------------\n");
 	while(fread(name,sizeof(stu.name),1,fpp)==1 
		 && fread(xue,sizeof(stu.xue),1,fpp)==1 
		 && fread(&chinese,sizeof(int),1,fpp)==1
		 &&	fread(&math,sizeof(int),1,fpp)==1
		 && fread(&english,sizeof(int),1,fpp)==1)
 	{	 
	 
 		printf("\t%s\t%s\t%d\t%d\t%d\n",name,xue,chinese,math,english);
 	}	
 	
 	fclose(fpp);
}  
void Fsum()
{
	sum[0]=sum[1]=sum[2]=0;
	char name[20]; 
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"rb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	while(fread(name,sizeof(stu.name),1,fpp)==1 
		 && fread(xue,sizeof(stu.xue),1,fpp)==1 
		 && fread(&chinese,sizeof(int),1,fpp)==1
		 &&	fread(&math,sizeof(int),1,fpp)==1
		 && fread(&english,sizeof(int),1,fpp)==1)
 	{	 	 
 		sum[0]+=chinese;  
        sum[1]+=math;  
        sum[2]+=english;
 	}		
 		
 	fclose(fpp);
}
void Fmaxmin()
{
	char name[20]; 
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"rb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}	
	
 	while(fread(name,sizeof(stu.name),1,fpp)==1 
		 && fread(xue,sizeof(stu.xue),1,fpp)==1 
		 && fread(&chinese,sizeof(int),1,fpp)==1
		 &&	fread(&math,sizeof(int),1,fpp)==1
		 && fread(&english,sizeof(int),1,fpp)==1)
 	{	 	
 		if(chinese>max[0])  
        max[0]=chinese;  
          
        if(math>max[1])  
        max[1]=math;  
                        
        if(english>max[2])  
        max[2]=english;  
       
        if(chinese<min[0])  
        min[0]=chinese;  
          
        if(math<min[1])  
        min[1]=math;  
         
        if(english<min[2])  
        min[2]=english;     
    }  	
 	printf("\t   最值有奖励!\n");
    printf("\t语\t数\t英\n");
	printf("最高分:\n"); 
	printf("\t%d\t%d\t%d\n",max[0],max[1],max[2]);  
    printf("最低分:\n"); 
	printf("\t%d\t%d\t%d\n",min[0],min[1],min[2]);  
 	
 	fclose(fpp);
}
void Average(int n)  
{  
    average[0]=sum[0]*1./count;  
    average[1]=sum[1]*1./count;  
    average[2]=sum[2]*1./count;   
    printf("\t   各科平均分\n");
    printf("\t语\t数\t英\n");
    printf("----------------------------------------\n");
    printf("\t%.2lf\t%.2lf\t%.2lf\n",average[0],average[1],average[2]);  
}  
void Fcount()
{
	FILE *fpp;
    char name[20];  
    char xue[20];
	int chinese;  
    int math;  
    int english; 
    if((fpp=fopen(filename,"rb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	while(fread(name,sizeof(stu.name),1,fpp)==1 
		 && fread(xue,sizeof(stu.xue),1,fpp)==1 
		 && fread(&chinese,sizeof(int),1,fpp)==1
		 &&	fread(&math,sizeof(int),1,fpp)==1
		 && fread(&english,sizeof(int),1,fpp)==1)
	{
		count++;
	}	
	      
    fclose(fpp);
}
void Add() 
{  
    struct student *pp;  
    FILE *fpp;
    char name[20];  
    char xue[20];
	int chinese;  
    int math;  
    int english; 
	    
	if((fpp=fopen(filename,"ab"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	      
    printf("请输入该同学的姓名与学号:\n");
	getchar(); 
    scanf("%s %s",name,xue);
    
 	printf("请分别输入该同学的语数英成绩:\n");
    scanf("%d %d %d",&chinese,&math,&english);
    
	fwrite(name,sizeof(stu.name),1,fpp);
   	fwrite(xue,sizeof(stu.xue),1,fpp);  	
	fwrite(&chinese,sizeof(int),1,fpp);
	fwrite(&math,sizeof(int),1,fpp);
	fwrite(&english,sizeof(int),1,fpp);
        
    fclose(fpp);
    
    count++;
}    
void Fcollect(int a,int b)   
{
	char name[20];
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	if((fpp=fopen(filename,"rb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}	
 	while(fread(name,sizeof(stu.name),1,fpp)==1 
		 && fread(xue,sizeof(stu.xue),1,fpp)==1 
		 && fread(&chinese,sizeof(int),1,fpp)==1
		 &&	fread(&math,sizeof(int),1,fpp)==1
		 && fread(&english,sizeof(int),1,fpp)==1)
 	{	 		
        if((chinese+math+english)>=a && (chinese+math+english)<=b)  
        printf("%s:%d\n",name,(chinese+math+english));             
 	} 	
 	
 	fclose(fpp);	
}
int Ffind(char s[])
{
	struct student *p5,*p1,*p2,*temp;
	char name[20];
	char xue[20];  
    int chinese;  
    int math;  
    int english; 
	FILE *fpp;
	char pan;
	int n1=0;		
	int flag=0,fen; 
	char course,col;
	
	if((fpp=fopen(filename,"rb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}     
		   
    while(fread(name,sizeof(stu.name),1,fpp)==1 
		 && fread(xue,sizeof(stu.xue),1,fpp)==1 
		 && fread(&chinese,sizeof(int),1,fpp)==1
		 &&	fread(&math,sizeof(int),1,fpp)==1
		 && fread(&english,sizeof(int),1,fpp)==1)
    {   
		 
		p1=(struct student *)malloc(sizeof(struct student)); 
		 
        n1++;  
        if(n1==1)  
        head=p1;  
        else  
        {  
            p2->next=p1;  
        }  
       	strcpy(p1->name,name);
       	strcpy(p1->xue,xue);
       	p1->chinese=chinese;
       	p1->math=math;
       	p1->english=english;
       	          
        p2=p1;            
    }  
    
    p1=(struct student *)malloc(sizeof(struct student)); 
    p1->name[0]='0',p1->xue[0]='0';
    p2->next=p1;
    p1->next=NULL;  
      
	fclose(fpp);
	
	if((fpp=fopen(filename,"rb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
		while(fread(name,sizeof(stu.name),1,fpp)==1 
	 && fread(xue,sizeof(stu.xue),1,fpp)==1 
	 && fread(&chinese,sizeof(int),1,fpp)==1
	 &&	fread(&math,sizeof(int),1,fpp)==1
	 && fread(&english,sizeof(int),1,fpp)==1)
	{
		if(strcmp(name,s)==0)  
        {  
            printf("语:%d\n数:%d\n英:%d\n",chinese,math,english);  
            flag=1;  
            break;  
        }  	        
	}  
	if(flag==1)  
    {
		printf("已找到该同学\n");		
	}  
    else  
    {
    	printf("该同学不存在\n");
    	return 0;
	}         
	
	printf("请输入是否要修改成绩:(y/n)\n");
	getchar();
	scanf("%c",&pan);     
	
	if(pan=='n')
	return 0;
	else if(pan=='y')
	{
		p5=head;
		if((fpp=fopen(filename,"wb"))==NULL)
		{
			printf("打开文件失败!\n");
			exit(0);
		}
		
		printf("请输入要改的科目的首字母:(c,m,e)\n");  
     	getchar();  
     	scanf("%c",&course);  
  		printf("请输入该科目的正确数据:\n");  
   	  	scanf("%d",&fen);
   	  	if(count==1)
   	  	{
 	   		if(course=='c')  
	        {  
	      	     p5->chinese=fen;  
	        }  
	        else if(course=='m')  
	        {  
	            p5->math=fen;  
	        }  
	        else if(course=='e')  
	        {  
	            p5->english=fen;  
	        }
	  	   	fwrite(p5->name,sizeof(stu.name),1,fpp);
	       	fwrite(p5->xue,sizeof(stu.xue),1,fpp);	    	
			fwrite(&p5->chinese,sizeof(int),1,fpp);
			fwrite(&p5->math,sizeof(int),1,fpp);
			fwrite(&p5->english,sizeof(int),1,fpp);
	   	}
	   	else
	   	{
	   		while(p5->next!=NULL)    
		    {    
		        if(strcmp(p5->name,s)==0 || strcmp(p5->xue,s)==0)    
		        {    		               
		             if(course=='c')  
		             {  
		                p5->chinese=fen;  
		             }  
		             else if(course=='m')  
		             {  
		                p5->math=fen;  
		             }  
		             else if(course=='e')  
		             {  
		                p5->english=fen;  
		             }                 
		            break;    
		        }    
		        p5=p5->next;    
		    }  
		   
			p5=head;
			while(p5->next!=NULL)
			{
				fwrite(p5->name,sizeof(stu.name),1,fpp);
		       	fwrite(p5->xue,sizeof(stu.xue),1,fpp);		       	
				fwrite(&p5->chinese,sizeof(int),1,fpp);
				fwrite(&p5->math,sizeof(int),1,fpp);
				fwrite(&p5->english,sizeof(int),1,fpp);
				
				p5=p5->next;
			}		   	
	   	}		
	}	
	else
	{
		printf("你输入的指令无效!\n");		
		return 0;
	}
			
 	fclose(fpp);
 	
 	p5=head;
	for(p5=head;p5!=NULL;p5=temp)
	{
	   temp=p5->next;
	   free(p5);
	} 
	if(p5==NULL)  
	{  
	    printf("内存释放成功!\n");  
	} 
 	
}  
void comp(int n)  
{  
	char name[20],xue[20];
	int chinese;  
    int math;  
    int english;
	int n1=0;
	FILE *fp;
	struct student *p1,*p2,*temp;
	head=NULL;  
        
	if((fp=fopen(filename,"rb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}     
		   
    while(fread(name,sizeof(stu.name),1,fp)==1 
		 && fread(xue,sizeof(stu.xue),1,fp)==1 
		 && fread(&chinese,sizeof(int),1,fp)==1
		 &&	fread(&math,sizeof(int),1,fp)==1
		 && fread(&english,sizeof(int),1,fp)==1)
    {   
		 
		p1=(struct student *)malloc(sizeof(struct student)); 
		 
        n1++;  
        if(n1==1)  
        head=p1;  
        else  
        {  
            p2->next=p1;  
        }  
       	strcpy(p1->name,name);
       	strcpy(p1->xue,xue);
       	p1->chinese=chinese;
       	p1->math=math;
       	p1->english=english;
       	          
        p2=p1;            
    }  
    
    p1=(struct student *)malloc(sizeof(struct student)); 
    p1->name[0]='0',p1->xue[0]='0';
    p2->next=p1;
    p1->next=NULL;  
      
	fclose(fp);

    struct student *p5,*p6; 
	FILE *fpp; 
    char _name[20];  
    char _xue[20];
    int c,i;  
    for(i=1;i<n;i++)  
    {  
        p5=head;  
        
        while(p5->next!=NULL)  
        {  
        	p6=p5;  
            p5=p5->next;           
            if(p5->name[0]=='0' && p5->xue[0]=='0')
			break;  
            if((p6->chinese+p6->math+p6->english)>(p5->chinese+p5->math+p5->english))  
            {  
                strcpy(_name,p6->name);  
                strcpy(p6->name,p5->name);  
                strcpy(p5->name,_name);  
                strcpy(_xue,p6->xue);  
                strcpy(p6->xue,p5->xue);  
                strcpy(p5->xue,_xue); 
                c=p6->chinese;  
                p6->chinese=p5->chinese;  
                p5->chinese=c;  
                c=p6->math;  
                p6->math=p5->math;  
                p5->math=c;  
                c=p6->english;  
                p6->english=p5->english;  
                p5->english=c;  
            }          
        }  
    } 
    if((fpp=fopen(filename,"wb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	p5=head;
	while(p5->next!=NULL)
	{
		fwrite(p5->name,sizeof(stu.name),1,fp);
       	fwrite(p5->xue,sizeof(stu.xue),1,fp);
       	
		fwrite(&p5->chinese,sizeof(int),1,fp);
		fwrite(&p5->math,sizeof(int),1,fp);
		fwrite(&p5->english,sizeof(int),1,fp);
		
		p5=p5->next;
	} 
	fclose(fpp);
	p5=head;
	for(p5=head;p5!=NULL;p5=temp)
	{
	   temp=p5->next;
	   free(p5);
	} 
	if(p5==NULL)  
	{  
	    printf("内存释放成功!\n");  
	} 
	
}  
  
int menu_select()  
{  
    char s;  
    int cn;  
    system("cls");  
    printf("\t*********************************\n");  
    printf("\t*\t 2B成绩系统\t\t*\n");  
    printf("\t*\t           \t\t*\n");  
    printf("\t*\t1. 打印所有成绩\t\t*\n");  
    printf("\t*\t2. 排序输出成绩\t\t*\n");  
    printf("\t*\t3. 各科平均成绩\t\t*\n");  
    printf("\t*\t4. 各科最高最低\t\t*\n");  
    printf("\t*\t5. 添加一条记录\t\t*\n");  
    printf("\t*\t6. 录入所有成绩\t\t*\n");  
    printf("\t*\t7. 总分区间筛选\t\t*\n");  
    printf("\t*\t8. 查改单人成绩\t\t*\n");   
    printf("\t*\t9. 退出\t\t\t*\n");    
    printf("\t*********************************\n");  
    printf("请输入数字1-9进入相应功能:");  
    getchar(); //
    do  
    {  
        s=getchar();  
        cn=(int)s-48;  
    }while(cn<0 || cn>9);  
    return cn;    
}   
void *creat()
{
	char name[20],xue[20];
	int n=0;
	FILE *fp;
	struct student *p1,*p2,*p,*temp;
	head=NULL;  
    
	if((fp=fopen(filename,"wb"))==NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}     
	
    printf("请输入该学生的名字与学号(以0 0结束):\n");  
   	getchar();
    while(scanf("%s %s",name,xue)!=EOF)  
    {   
		 
		p1=(struct student *)malloc(sizeof(struct student)); 
		 
        n++;  
        if(n==1)  
        head=p1;  
        else  
        {  
            p2->next=p1;  
        }  
        if(name[0]=='0' && xue[0]=='0')  
        {   
         	strcpy(p1->name,name);
         	strcpy(p1->xue,xue);
		    break;  
        }
           
        printf("请分别输入语数英成绩:\n");  
        strcpy(p1->name,name);
	 	strcpy(p1->xue,xue); 
       
       	fwrite(p1->name,sizeof(stu.name),1,fp);
       	fwrite(p1->xue,sizeof(stu.xue),1,fp);
       	
		scanf("%d %d %d",&p1->chinese,&p1->math,&p1->english);  
	
		fwrite(&p1->chinese,sizeof(int),1,fp);
		fwrite(&p1->math,sizeof(int),1,fp);
		fwrite(&p1->english,sizeof(int),1,fp);
	
        count++;  
        while(getchar()!='\n')  
        continue;  
        p2=p1;  
          
        printf("请输入该学生的名字与学号(以0 0结束):\n");  
    }  
    p1->next=NULL;  
    printf("总记录数:%d\n",count); 
	 
	fclose(fp);
	
	p=head;
	for(p=head;p!=NULL;p=temp)
	{
	   temp=p->next;
	   free(p);
	} 
	if(p==NULL)  
	{  
	    printf("内存释放成功!\n");  
	} 
}
void menu_pri()
{	 
	int a,b; 
 	char mou[20];
	for(;;)  
    {  
        switch(menu_select())  
        {     
            case 1:      
                        Fpri();  
                        system("pause");  
                        break;  
              
            case 2:     
						count=0;
						Fcount();  
                        comp(count);  
                        Fpri();   
                        system("pause");  
                        break;  
              
            case 3:    
					 	count=0;
						Fcount();  
                        Fsum();  
                        Average(count);  
                        system("pause");  
                        break;  
              
            case 4:       
                        Fmaxmin();  
                        system("pause");  
                        break;  
              
            case 5:       
                        Add();  
                        Fpri();   
                        system("pause");  
                        break;  
              
            case 6:    	
						count=0;
						creat(); 
						system("pause");  
                        break;  
              
            case 7:      
                        printf("请输入要选择成绩的区间:\n");  
                        scanf("%d %d",&a,&b);  
                        Fcollect(a,b);  
                        system("pause");  
                        break;  
                          
            case 8:      
                        printf("请输入该同学的名字或学号:\n");  
                        scanf("%s",mou);  
                        Ffind(mou);  
                        system("pause");   
                        break;  
                          
            case 9:     
						printf("Goodbye!\n");  
                        exit(0);              
        }  
    }  
} 
int main()  
{    	
   	printf("请输入保存成绩的文件名:\n");
    scanf("%s",filename);    
    menu_pri();
      
    return 0;  
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值