/*学生成绩管理主要要求:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单(5)系统以菜单方式工作*//*思路:学生成绩包括主要包括3门成绩数学,英语,C语言,以及学生本人的信息:即姓名以及班级号,同时需要用学期来定义每学期的成绩。于是可以定义结构体来实现上述信息。采用模块化程序设计思想,按照题目要求,对功能模块进行划分,设计多个函数分别实现各个功能,减少交叉使用,便于功能的实现和编程调试实现。主要功能有:voidPrint(char*File)//在屏幕上输出文件中的信息voidInsert(char*File)//实现插入某个学生相关信息的功能voidLuru(char*File)//实现对学生成绩的录入功能,并完成计算总分,和平均分的功能voidDelete(char*File)//实现删除学生相关信息的功能voidModify(char*File)//修改学生的信息voidSearch_number(char*File)//按学号查找学生成绩voidSearch_Fail(char*File)//查找出不及格学生的成绩voidexport_class(char*File)//按班级输出学生信息voidmain()//调用其他函数,实现各个功能选择intIsEmpty(FILE*fp)//判断文件是否为空文件voidPrintMenu()//输出修改选项菜单voidMenu()//输出主程序选择菜单voidSort(char*File)//按成绩由小到大排序并输出*/#includestdio.h#includemalloc.h#includestring.h#includestdlib.h#includeconio.h#defineN20//函数的声明voidPrintMenu();voidPrint(char*File);voidInsert(char*File);voidLuru(char*File);intIsEmpty(FILE*fp);voidSort(char*File);typedefstructstudent//定义结构体,记录学生信息{intterm[6];longxuehao;intClass[3];charname[N];floatscore[3];doubleaverage;floatsum;}stu;//使用stu代表structstudent结构类型voidPrint(char*File)//在屏幕上输出文件中的信息{stutemp;FILE*fp=fopen(File,r);if(fp==NULL){printf(打开文件%s失败!\n,File);return;}fseek(fp,0,SEEK_SET);//从文件开始读取printf(学号姓名高数英语C语言平均分总分:\n);while(fread(&temp,sizeof(stu),1,fp))printf(%10d%10s%10.2f%10.2f%10.2f%10.2lf%10.2f\n,temp.xuehao,temp.name,temp.score[0],temp.score[1],temp.score[2],temp.average,temp.sum);printf(\n);fclose(fp);}//实现排序功能voidSort(char*File){inti,j,k,len;stus[N],temp;FILE*fp=fopen(File,r);if(fp==NULL){printf(文件打开失败!);return;}if(IsEmpty(fp)){printf(文件为空,不需要排名,请先录入信息!);return;}fseek(fp,0,SEEK_END);len=ftell(fp)/sizeof(stu);fseek(fp,0,SEEK_SET);for(i=0;ilen;i++)fread(s+i,sizeof(stu),1,fp);fclose(fp);for(i=0;ilen;i++){k=i;for(j=i+1;jlen;j++)if(s[j].averages[k].average)k=j;if(k!=i){temp=s[i];s[i]=s[k];s[k]=temp;}}printf(以下是按学生平均成绩排序的学生信息:\n);printf(学号姓名高数英语C语言\n);for(i=0;ilen;i++){printf(%10d%10s%10.2f%10.2f%10.2f%10.2lf%10.2f\n,s[i].xuehao,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].average,s[i].sum);}remove(学生成绩管理);fp=fopen(File,w);for(i=0;ilen;i++)fwrite(s+i,sizeof(stu),1,fp);fclose(fp);}voidInsert(char*File)//实现插入某个学生相关信息的功能{intcount;inti;intm;stutemp,temp1;FILE*fp=fopen(File,a+);//以追加的方式打开if(fp==NULL){printf(打开文件%s失败!\n,File);return;}printf(您本次要插入几名学生的信息\n);scanf(%d,&count);for(i=0;icount;i++){printf(您现在录入的是第%d名学生的信息\n,i+1);Repeat:printf(请输入学号:\n);m=scanf(%d,&temp.xuehao);if(m==0){printf(您输入的学号有误\n);fflush(stdin);//清除文件缓冲区gotoRepeat;}fseek(fp,0,SEEK_SET);while(fread(&temp1,sizeof(stu),1,fp)){if(temp1.xuehao==temp.xuehao){printf(该学生的学号已经存在\n);gotoRepeat;}}printf(请输入学生姓名\n);scanf(%s,temp.name);printf(请输入高数成绩\n);scanf(%f,&temp.score[0]);printf(请输入英语成绩\n);scanf(%f,&temp.score[1]);printf(请输入C语言成绩\n);scanf(%f,&temp.score[2]);temp.average=0;temp.sum=0;temp.average=(temp.score[0]+temp.score[1]+temp.score[2])/3;temp.sum=temp.score[0]+temp.score[1]+temp.score[2];if(!fwrite(&temp,sizeof(stu),1,fp)){printf(向文件%s写入信息失败\n,File);return;}}printf(向文件%s写入信息成功\n,File);fclose(fp);}voidLuru(char*File)/*实现对学生成绩的录入功能,并完成计算总分,和平均分的功能*/{intcount;inti;intm;stutemp,temp1;FILE*fp=fopen(File,a+);//以写的方式打开if(fp==NULL){printf(打开文件%s失败!\n,File);return;}printf(您本次要输入几名学生的信息\n);scanf(%d,&count);for(i=0;icount;i++){printf(您现在录入的是第%d名学生的信息\n,i+1);Repeat:printf(请输入学号:\n);m=scanf(%d,&temp.xuehao);if(m==0){printf(您输入的学号有误\n);fflush(stdin);//清除文件缓冲区gotoRepeat;}fseek(fp,0,SEEK_SET);while(fread(&temp1,sizeof(stu),1,fp)){if(temp1.xuehao==temp.xuehao){printf(该学生的学号已经存在\n);gotoRepeat;}}printf(请输入学生姓名\n);scanf(%s,temp.name);printf(请输入高数成绩\n);scanf(%f,&temp.score[0]);printf(请输入英语成绩\n);scanf(%f,&temp.score[1]);printf(请输入C语言成绩\n);scanf(%f,&temp.score[2]);temp.average=0;temp.sum=0;temp.average=(temp.score[0]+temp.score[1]+temp.score[2])/3;temp.sum=temp.score[0]+temp.score[1]+temp.score[2];if(!fwrite(&temp,sizeof(stu),1,fp)){printf(向文件%s写入信息失败\n,File);return;}}printf(向文件%s写入信息成功\n,File);fclose(fp);}voidDelete(char*File)//实现删除学生相关信息的功能{inti=0,len,del;stus[N];FILE*fp=fopen(File,r);if(fp==NULL){printf(文件打开失败!);return;}if(IsEmpty(fp)){printf(文件为空,不需要查找,请先录入信息!);return;}printf(请输入您要删除的学生的学号:);scanf(%d,&del);fseek(fp,0,SEEK_SET);while(fread(s+i,sizeof(stu),1,fp)){if(s[i].xuehao==del){printf(下面的学号为%d的学生的信息:\n,del);printf(学号姓名高数英语C语言\n);printf(%5d,%10s,%10.2f,%10.2f,%10.2f\n,s[i].xuehao,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2]);i-=1;}i++;}fclose(fp);len=i;fp=fopen(File,w);fseek(fp,0,SEEK_SET);for(i=0;ilen;i++)//删除后重写文件fwrite(s+i,sizeof(stu),1,fp);fclose(fp);fp=fopen(File,r);printf(下面是剩余学生的信息\n);Print(File);//输出删除后文件中的学生的信息fclose(fp);}voidModify(char*File)//修改学生的信息{inti=0,len,flag=1,m,stuxuehao,xuanze;stutemp,s[N];FILE*fp=fopen(File,r);if(fp==NULL){printf(文件打开失败!);return;}if(IsEmpty(fp)){printf(文件为空,不需要查找,请先录入信息!);return;}printf(请输入需要修改的学生的学号\n);m=scanf(%d,&stuxuehao);while(m==0){printf(你输入的学号有误\n);fflush(stdin);printf(请再次输入你要修改的学号\n);m=scanf(%d,&stuxuehao);}fseek(fp,0,SEEK_SET);while(fread(s+i,sizeof(stu),1,fp)){if(s[i]