#include <stdio.h>#include <stdlib.h>#include <string.h>#define PF printf#include "time.h "#define LEN sizeof(struct St1)//定义结构体//typedef struct St1{char IDNumber[16];/*学号*/char FamilyName[16]; /*姓*/char GivenName[16]; /*名*/int sex; /*性别(0代表"女",1代表"男")*/int BirthYear; /*出生年*/int BirthMonth; /*出生月*/int BirthDay; /*出生日*/float score0,score1,score2,score3; /*成绩*/float sum; /*总分*/float average; /*平均分*/struct St1 *next;}StudentNode;int time(){struct tm* ptm;long ts;int y,m,d,h,n,s;ts = time(NULL);ptm = localtime(&ts);y = ptm-> tm_year+1900; //年m = ptm-> tm_mon+1; //月d = ptm-> tm_mday; //日h = ptm-> tm_hour; //时n = ptm-> tm_min; //分s = ptm-> tm_sec; //秒return(y);}StudentNode *head=NULL; //全局指针int n,i=0,c=0,d=0,j=0; //全局变量j在函数中作数组下标或循环变量c为总分数组中元素个数d为平均分数组元素个数float English=0.0,Math=0.0,C=0.0,Mazhe=0.0,Sum[100],Avr[100]; //全局变量//自定义函数//void show_menu(); //显示菜单void menu(); //执行菜单void creat_stu(); //建立链表void input_stu(); //输入学生信息void print_stu(); //显示链表中所有记录信息void search_NO(); //以学号方式查询信息void search_name(); //以姓方式查询信息void arrage_stu(); //学生成绩排名void del_stu(); //删除学生信息void revise_stu(); //修改学生信息void save(); //保存信息void jisuan(); //计算所有学生的以及各科总分和均分void search_clas(); //按班级查询显示学生信息void insert_stu(); //插入学生记录到表中void sort(float x[],int n); //对学生按总分进行从高到底排序void search_allscore(); //按学生总成绩查询,用来输出排名信息void jieduan(); //用来输出按平均分阶段输出信息,其中用了按平均分输出信息的程序。
void Loadf(); //从文件中读出所有学生记录void main(){ printf("********************************************************************* ***********");printf("\n");printf(" 欢迎来到学生管理系统!");printf("\n");printf("\n");printf(" 制作人:陈志52101610");creat_stu();menu();}//**************************************创建链表**************************************void creat_stu(){FILE *fp;long size;StudentNode *p1,*p2;head=(StudentNode *)malloc(sizeof(StudentNode));head->next=NULL;if((fp=fopen("fname.txt","r"))==NULL){printf("这是新表\n");return;}fseek(fp,0L,2);size=ftell(fp);if(!size){printf("这是空表\n");return;} //开始创建链表rewind(fp); //移动到文件首p2=head->next; //找到当前位置while(!feof(fp)){p1=(StudentNode *)malloc(sizeof(StudentNode));fscanf(fp,"%s %s %s %d %d %d %d %f %f %f %f %f %f\n",p1->IDNumber,p1->FamilyName,p1 ->GivenName,\&p1->sex,&p1->BirthYear,&p1->BirthMonth,&p1->BirthDay,&p1->score0,&p1->score1,&p1->s core2,&p1->score3,&p1->sum, &p1->average);p1->next=NULL;//创建节点完if(head->next==NULL)head->next=p1;elsep2->next=p1;p2=p1;n++;}p2->next=NULL;fclose(fp);}//******************************************执行菜单******************************************void menu(){int c;show_menu();while(1){scanf("%d",&c);switch(c){getchar();case 1:input_stu();break;case 2:del_stu(); break;case 3:print_stu();break;case 4:search_name(); break;case 5:save();break;case 6:Loadf();break;case 7:jisuan(); break;case 8:search_clas(); break;case 9:insert_stu() ; break;case 10:search_NO(); break;case 11:arrage_stu();break;case 12:revise_stu(); break;case 13:jieduan();break;case 0:exit(0);} //执行菜单选项show_menu();}}//******************************************显示菜单******************************************void show_menu(){PF("\n");PF("\n**************************************菜单**************************************\n");PF("\t\t* 1.输入学生信息*\n");PF("\t\t* 2.删除学生信息*\n");PF("\t\t* 3.显示链表中所有记录信息*\n");PF("\t\t* 4.按照学生的姓查找记录*\n");PF("\t\t* 5.将链表中记录保存到文件中*\n");PF("\t\t* 6.从文件中读入记录*\n");PF("\t\t* 7.计算所有学生以及各科总分和均分*\n");PF("\t\t* 8.按班级查询显示学生信息*\n");PF("\t\t* 9.插入记录到表中*\n");PF("\t\t* 10.按学号查询学生信息*\n");PF("\t\t* 11.学生成绩排名*\n");PF("\t\t* 12.修改学生信息*\n");PF("\t\t* 13.按平均分阶段输出学生信息*\n");PF("\t\t* 0. 退出*\n");PF("*************************************************************************** *****\n");PF("\n请选择\n");}//******************************************输入学生信息******************************************void input_stu() //输入学生信息{float a,b; //a,b分别用来存放该生的各科总成绩和平均成绩int y,j;y=time();n=0;StudentNode *p1=NULL,*p2=NULL;p1=( StudentNode *)malloc(sizeof(StudentNode));PF("\n**********************************输入学生信息**********************************\n"); //输入学生信息PF("\t\t输入学生学号:\t");scanf("%s",p1->IDNumber); //学号PF("\t\t输入学生的姓:\t");scanf("%s",p1->FamilyName); //姓PF("\t\t输入学生的名:\t");scanf("%s",p1->GivenName); //名PF("\t\t输入学生性别(0代表女,1代表男):\t");scanf("%d",&p1->sex); //性别for(j=0;;j++) //判断输入年份是否合理,假设人年龄在0-100岁之间为正常{PF("\t\t输入学生出生年:\t");scanf("%d",&p1->BirthYear); //出生年if((y-p1->BirthYear)>100||(p1->BirthYear>y))PF("\t\t年份输入错误不符合要求,请重新输入出生年份:\t");elsebreak;}for(j=0;;j++) //判断输入月份是否合理{PF("\t\t输入学生出生月:\t");scanf("%d",&p1->BirthMonth); //出生月if(p1->BirthMonth<1||p1->BirthMonth>12)PF("\t\t月份输入错误不符合要求,请重新输入出生月份:\t");elsebreak;}for(j=0;;j++) // 判断输入出生日是否合理{ PF("\t\t输入学生出生日:\t");scanf("%d",&p1->BirthDay); //出生日if(p1->BirthDay<1||p1->BirthDay>31)PF("\t\t出生日输入错误不符合要求,请重新输入出生日:\t");elsebreak;}PF("\t\t输入学生的外语成绩:\t");scanf("%f",&p1->score0); //各科成绩PF("\t\t输入学生的数学成绩:\t");scanf("%f",&p1->score1);PF("\t\t输入学生的C语言成绩:\t");scanf("%f",&p1->score2);PF("\t\t输入学生的马哲成绩:\t");scanf("%f",&p1->score3);a=p1->score0+p1->score1+p1->score2+p1->score3; //求该生的各科总成绩b=(a/4); //求该生的平均成绩p1->sum=a;p1->average=b;English=English+p1->score0; //求学生英语总分Math=Math+p1->score1; //求学生数学总分C=C+p1->score2; //求学生C语言总分Mazhe=Mazhe+p1->score3; //求学生马哲总分Sum[c++]=a; //将各学生的总成绩输入到一个全局数组当中,方便按成绩排序Avr[d++]=b; //将个学生的平均分输入到一个全局数组中存放n++;if(head->next==NULL){head=(StudentNode *)malloc(LEN);head->next=p1;}else{for(p2=head;p2->next!=NULL;p2=p2->next); /*找到最后的结点,然后将增加的结点挂在它上面*/p2->next=p1;}p1->next=NULL;save();//保存到文件}//******************************************显示链表中所有记录学生信息******************************************void print_stu() //学生信息浏览{StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}for(p=head->next;p!=NULL;p=p->next) //读出信息{PF("**************************************查看链表中所有记录学生信息**************************************\n");PF("\t学生学号:\t%s\n",p->IDNumber);PF("\t学生姓:\t%s\n",p->FamilyName);PF("\t学生名:\t%s\n",p->GivenName);PF("\t学生性别:\t%d\n",p->sex);PF("\t学生出生年:\t%d\n",p->BirthYear);PF("\t学生出生月:\t%d\n",p->BirthMonth);PF("\t学生出生日:\t%d\n",p->BirthDay);PF("\t学生英语成绩:\t%f\n",p->score0);PF("\t学生数学成绩:\t%f\n",p->score1);PF("\t学生C语言成绩:\t%f\n",p->score2);PF("\t学生马哲成绩:\t%f\n",p->score3);PF("\t学生总成绩:\t%f\n",p->sum);PF("\t学生平均成绩:\t%f\n",p->average);PF("\n");} //输出信息PF("\t各个学生总分分别为:");for(n=0;n<c;n++)PF("%f\t",Sum[n]);PF("\n");PF("\t各个学生平均分分别为:");for(n=0;n<d;n++)PF("%f\t",Avr[n]);}//******************************************按照学生姓查找记录******************************************void search_name() //按照学生姓查找记录{int i=0;StudentNode *p=NULL;char FamilyName[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("输入学生姓:");scanf("%s", FamilyName);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->FamilyName, FamilyName)){PF("\t\t您查找的学生有:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别:\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");i=1;}} //输出信息if(i!=1){PF("无该姓氏学生信息!请查证:"); } //没找到信息时的处理}//******************************************按照学生学号信息查找******************************************void search_NO() //学生学号信息查找{int i=0;StudentNode *p=NULL;char IDNumber[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("请输入学生学号:");scanf("%s",IDNumber);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->IDNumber,IDNumber)){PF("\t\t您查找的学生是:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别:\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");i=1;}} //输出信息if(!i){PF("无该生信息!请查证:"); } //没找到信息时的处理}//******************************************按照学生班级统计并输出总成绩******************************************void search_clas() //学生学号信息查找{int i=0,j=0;StudentNode *p=NULL;char a[6],b[6];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("请输入学生班级:");scanf("%s",a);for(p=head->next;p!=NULL;p=p->next) //读出信息{for(j=0;j<6;j++)b[j]=p->IDNumber[j];if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3]&&a[4]==b[4]&&a[5]==b[5]) {PF("\t\t您查找的班级学生有:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别:\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");i=1;}} //输出信息if(!i){PF("无该班级信息!请查证:"); } //没找到信息时的处理}//******************************************修改学生信息******************************************void revise_stu(){int y,j,k=0,m=0;int i=0;float a,b;y=time();StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}char IDNumber[20];PF("请输入学生的学号:\t");scanf("%s",IDNumber);for(p=head->next;p!=NULL;p=p->next){if(!strcmp(p->IDNumber,IDNumber)) //验证信息是否正确{PF("\t\t你要修改的学生是:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->IDNumber);PF("\t\t学生姓:\t%s\n",p->FamilyName);PF("\t\t学生名:\t%s\n",p->GivenName);PF("\t\t学生性别(0代表女,1代表男):\t%d\n",p->sex);PF("\t\t学生出生年:\t%d\n",p->BirthYear);PF("\t\t学生出生月:\t%d\n",p->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->score0);PF("\t\t学生数学成绩:\t%f\n",p->score1);PF("\t\t学生C语言成绩:\t%f\n",p->score2);PF("\t\t学生马哲成绩:\t%f\n",p->score3);PF("\t\t学生总成绩:\t%f\n",p->sum);PF("\t\t学生平均成绩:\t%f\n",p->average);PF("\n");//输出要修改信息i=1;for(k=0;k<c;k++) //记录被修改学生总分在数组中的位子{ if(p->sum==Sum[k])break;}for(m=0;m<d;m++) //记录被修改学生平均分在数组中的位子{ if(p->average==Avr[m])break;}English=English-p->score0; //修改学生英语总分Math=Math-p->score1; //修改学生数学总分C=C-p->score2; //修改学生C语言总分Mazhe=Mazhe-p->score3; //修改学生马哲总分PF("\t\t您修改学号为%s的学生:\n",IDNumber);PF("\n");strcpy(p->IDNumber,IDNumber);PF("\t\t输入修改学生姓:\t");scanf("%s",p->FamilyName);PF("\t\t输入修改学生名:\t");scanf("%s",p->GivenName);PF("\t\t输入修改学生性别(0代表女,1代表男):\t");scanf("%d",&p->sex);for(j=0;;j++) //判断输入年份是否合理,假设人年龄在0-100岁之间为正常{PF("\t\t输入学生出生年:\t");scanf("%d",&p->BirthYear); //出生年if((y-p->BirthYear)>100||(p->BirthYear>y))PF("\t\t年份输入错误不符合要求,请重新输入出生年份:\t");elsebreak;}for(j=0;;j++) //判断输入月份是否合理{PF("\t\t输入学生出生月:\t");scanf("%d",&p->BirthMonth); //出生月if(p->BirthMonth<1||p->BirthMonth>12)PF("\t\t月份输入错误不符合要求,请重新输入出生月份:\t");elsebreak;}for(j=0;;j++) // 判断输入出生日是否合理{ PF("\t\t输入学生出生日:\t");scanf("%d",&p->BirthDay); //出生日if(p->BirthDay<1||p->BirthDay>31)PF("\t\t出生日输入错误不符合要求,请重新输入出生日:\t");elsebreak;}PF("\t\t输入学生的外语成绩:\t");scanf("%f",&p->score0); //修改的各科成绩PF("\t\t输入学生的数学成绩:\t");scanf("%f",&p->score1);PF("\t\t输入学生的C语言成绩:\t");scanf("%f",&p->score2);PF("\t\t输入学生的马哲成绩:\t");scanf("%f",&p->score3);a=p->score0+p->score1+p->score2+p->score3; //求该生的各科总成绩b=(a/4); //求该生的平均成绩p->sum=a;p->average=b;Sum[k]=p->sum; //将新的总分修改原总分Avr[m]=p->average; //将新的平均分修改原平均分English=English+p->score0; //修改学生英语总分Math=Math+p->score1; //修改学生数学总分C=C+p->score2; //修改学生C语言总分Mazhe=Mazhe+p->score3; //修改学生马哲总分PF("\n"); //输入修改信息save();}}if(!i){PF("无该生信息!请查证:");} /*没找到信息时的处理*/}//******************************************删除学生信息******************************************void del_stu(){ int i=0;StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}else{char IDNumber[20];PF("请输入学生的学号:\t");scanf("%s",IDNumber);for(p=head;p!=NULL;p=p->next){if(!strcmp(p->next->IDNumber,IDNumber)) //验证信息是否正确{ PF("%s\n",IDNumber);PF("\t\t您要删除的学生是:\n");PF("\n");PF("\t\t学生学号:\t%s\n",p->next->IDNumber);PF("\t\t学生姓:\t%s\n",p->next->FamilyName);PF("\t\t学生名:\t%s\n",p->next->GivenName);PF("\t\t学生性别:\t%d\n",p->next->sex);PF("\t\t学生出生年:\t%d\n",p->next->BirthYear);PF("\t\t学生出生月:\t%d\n",p->next->BirthMonth);PF("\t\t学生出生日:\t%d\n",p->next->BirthDay);PF("\t\t学生英语成绩:\t%f\n",p->next->score0);PF("\t\t学生数学成绩:\t%f\n",p->next->score1);PF("\t\t学生C语言成绩:\t%f\n",p->next->score2);PF("\t\t学生马哲成绩:\t%f\n",p->next->score3);PF("\t\t学生总成绩:\t%f\n",p->next->sum);PF("\t\t学生平均成绩:\t%f\n",p->next->average);PF("\n"); //输出要删除的信息English=English-(p->next->score0); //修改学生英语总分Math=Math-(p->score1); //修改学生数学总分C=C-(p->next->score2); //修改学生C语言总分Mazhe=Mazhe-(p->next->score3); //修改学生马哲总分for(n=0;n<c;n++) //删除记录总分数组中该生记录,并且后面数据往前移一位{if(p->next->sum==Sum[n])for(j=n;j<c;j++)Sum[j]=Sum[j+1];break;}c--; //数据总数减一for(n=0;n<d;n++) //删除记录总平均分组中该生记录,并且后面数据往前移一位{if(p->next->average==Avr[n])for(j=n;j<d;j++)Avr[j]=Avr[j+1];break;}d--; //数据总数减一i=1;if(p->next->next){printf("第一个\n");p->next=p->next->next;}elsep->next=NULL;n--;save();return;} //if的括号} //大for循环的if(!i){PF("无该生信息!请查证:"); //没找到信息时的处理return;}} //else的括号save();}//******************************************将链表中记录保存到文件中******************************************void save(){printf("**************************************保存信息并结束**************************************\n");StudentNode *p=NULL;FILE *fp;char *filename="fname.txt";if((fp=fopen("fname.txt","w"))==NULL) //出错检测{printf("\n打不开文件!\n");return;}if(head->next==NULL){printf("\n信息为空!\n");return;}elsep=head->next;while(p!=NULL){fprintf(fp,"%s %s %s %d %d %d %d %f %f %f %f %f %f \n",p->IDNumber,p->FamilyName,p->GivenName,p->sex,p->BirthYear,p->BirthMonth,p->BirthDay,p->score0,p->score1,p->score2,p->score3,p->su m,p->average);//存入文件p=p->next;}printf("保存完毕!\n");fclose(fp);}//计算所有学生以及各科总分和均分,可评估学校教学质量void jisuan(){float sum=0,avr;int j;for(j=0;j<c;j++)sum=sum+Sum[j];avr=sum/c;PF("全部学生总成绩为:%f",sum);PF("\n");PF("\n");PF("全部学生平均成绩为:%f",avr);PF("\n");PF("\n");PF("所有学生英语成绩总和为:%f",English);PF("\n");PF("\n");PF("全校学生英语平均成绩为:%f",English/c);PF("\n");PF("\n");PF("所有学生数学成绩总和为:%f",Math);PF("\n");PF("\n");PF("全校学生数学平均成绩为:%f",Math/c);PF("\n");PF("\n");PF("所有学生C语言成绩总和为:%f",C);PF("\n");PF("\n");PF("全校学生C语言平均成绩为:%f",C/c);PF("\n");PF("\n");PF("所有学生马哲成绩总和为:%f",Mazhe);PF("\n");PF("\n");PF("全校学生马哲平均成绩为:%f",Mazhe/c);PF("\n");}//******************************************从文件中读出所有学生记录信息******************************************void Loadf() //读出学生信息{StudentNode *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}for(p=head->next;p!=NULL;p=p->next) //读出信息{PF("**************************************读出链表中所有记录学生信息**************************************\n");PF("\t学生学号:\t%s\n",p->IDNumber);PF("\t学生姓:\t%s\n",p->FamilyName);PF("\t学生名:\t%s\n",p->GivenName);PF("\t学生性别:\t%d\n",p->sex);PF("\t学生出生年:\t%d\n",p->BirthYear);PF("\t学生出生月:\t%d\n",p->BirthMonth);PF("\t学生出生日:\t%d\n",p->BirthDay);PF("\t学生英语成绩:\t%f\n",p->score0);PF("\t学生数学成绩:\t%f\n",p->score1);PF("\t学生C语言成绩:\t%f\n",p->score2);PF("\t学生马哲成绩:\t%f\n",p->score3);PF("\t学生总成绩:\t%f\n",p->sum);PF("\t学生平均成绩:\t%f\n",p->average);PF("\n");} //输出信息PF("\t各个学生总分分别为:");for(n=0;n<c;n++)PF("%f\t",Sum[n]);PF("\n");PF("\t各个学生平均分分别为:");for(n=0;n<d;n++)PF("%f\t",Avr[n]);}//******************************************插入学生信息******************************************void insert_stu() //插入学生信息{float a,b; //a,b分别用来存放该生的各科总成绩和平均成绩int y,j;y=time();n=0;StudentNode *p1=NULL,*p2=NULL;p1=( StudentNode *)malloc(sizeof(StudentNode));PF("\n**************************************插入学生信息**************************************\n"); //输入学生信息PF("\t\t输入插入学生学号:\t");scanf("%s",p1->IDNumber); //学号PF("\t\t输入插入学生的姓:\t");scanf("%s",p1->FamilyName); //姓PF("\t\t输入插入学生的名:\t");scanf("%s",p1->GivenName); //名PF("\t\t输入插入学生性别(0代表女,1代表男):\t");scanf("%d",&p1->sex); //性别for(j=0;;j++) //判断输入年份是否合理,假设人年龄在0-100岁之间为正常{PF("\t\t输入插入学生出生年:\t");scanf("%d",&p1->BirthYear); //出生年if((y-p1->BirthYear)>100||(p1->BirthYear>y))PF("\t\t年份输入错误不符合要求,请重新输入出生年份:\t");elsebreak;}for(j=0;;j++) //判断输入月份是否合理{PF("\t\t输入插入学生出生月:\t");scanf("%d",&p1->BirthMonth); //出生月if(p1->BirthMonth<1||p1->BirthMonth>12)PF("\t\t月份输入错误不符合要求,请重新输入出生月份:\t");elsebreak;}for(j=0;;j++) // 判断输入出生日是否合理{ PF("\t\t输入插入学生出生日:\t");scanf("%d",&p1->BirthDay); //出生日if(p1->BirthDay<1||p1->BirthDay>31)PF("\t\t出生日输入错误不符合要求,请重新输入出生日:\t");elsebreak;}PF("\t\t输入插入学生的外语成绩:\t");scanf("%f",&p1->score0); //各科成绩PF("\t\t输入插入学生的数学成绩:\t");scanf("%f",&p1->score1);PF("\t\t输入插入学生的C语言成绩:\t");scanf("%f",&p1->score2);PF("\t\t输入插入学生的马哲成绩:\t");scanf("%f",&p1->score3);a=p1->score0+p1->score1+p1->score2+p1->score3; //求该生的各科总成绩b=(a/4); //求该生的平均成绩p1->sum=a;p1->average=b;English=English+p1->score0; //求学生英语总分Math=Math+p1->score1; //求学生数学总分C=C+p1->score2; //求学生C语言总分Mazhe=Mazhe+p1->score3; //求学生马哲总分Sum[c++]=a; //将各学生的总成绩输入到一个全局数组当中,方便按成绩排序Avr[d++]=b; //将各学生的平均分输入到一个全局数组当中,方便按平均成绩阶段输出n++;if(head->next==NULL){head=(StudentNode *)malloc(LEN);head->next=p1;}else{for(p2=head;p2->next!=NULL;p2=p2->next); /*找到最后的结点,然后将增加的结点挂在它上面*/p2->next=p1;}p1->next=NULL;save();//保存到文件}//******************************************学生成绩排名及基本数据的统计计算******************************************void sort(float x[],int n) //数组排序函数{int i,j,k;float t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]>x[k])k=j;if(k!=i){t=x[i];x[i]=x[k];x[k]=t;}}}void search_allscore() //按学生总分查找,用来输出排名。