《C语言程序设计实训1》报告设计题目:基于数组的学生信息管理系统学院名称:信息科学技术学院专业:计算机科学与技术班级:姓名:学号指导教师:提交日期:2014年12月22日一、实验内容编写并调试程序,实现学校各专业班级学生信息的管理。10个学生的信息存储在文件studentInit.dat中。在头文件student.h中定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩;和符号常量N(学生数)。(同一班级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)二、实验要求(1)main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。STUstudent[N];//保存输入的N名学生信息(2)定义函数voidInput(STU*p,intn):从文件sutdentInit中输入n个学生的信息。(3)定义函数voidOutput(STU*p):将p所指的某个学生信息表格化屏幕输出。(4)定义函数STUFetch(intstudentIndex):从文件中随机读取第#defineN10structStudent{charnum[15];//学号charname[15];//姓名charmajor[10];//专业(computer,software,network)intclassNo;//班级(1-2)intscore[3];//3门课的成绩(0-2)};typedefstructStudentSTU;studentIndex个(0=studentIndex=N-1)学生的信息。(5)定义函数voidSearch(STU*p,intclassNo,chars,intscoreSum);:实现班级和成绩的综合查找(如1班,总分240的同学)。(6)定义函数intMax(STU*p,intscoreIndex):求所有学生、下标为scoreIndex的课程分数最高的学生序号(在数组中的下标),学生序号作为返回值。(7)定义函数voidSort_select(STU*p):对所有学生,按平均成绩由低到高进行简单选择排序。(8)定义函数voidSort_buble(STU*p,intn);对某个班级的学生,按平均成绩由高到低进行起泡排序。并调用Output输出。定义局部变量:STUstu_class_ave[N];//按平均成绩排序后的某个班级的学生信息;intcount;//实际元素个数(9)定义函数voidSort_insert(STU*p,intn,char*major):对某个专业的学生,按某门课程成绩由低到高进行直接插入排序。并调用Output输出。定义局部变量:STUstu_class_subject[N];//按某门课程成绩排序后的某个专业的学生信息;intcount;//实际元素个数(10)定义函数voidSave(STU*p,intn):将学生信息存入文件。四、程序清单(关键语句和变量加注释)1.头文件,类型定义,函数声明#includestdio.h#includestdlib.h#includestring.h#defineN10structStudent{charnum[15];charname[15];charmajor[10];intclassNo;intscore[3];};typedefstructStudentSTU;voidInput(STU*p,intn);//从文件sutdentInit中输入n个学生的信息voidOutput(STU*p);//将p所指的某个学生信息表格化屏幕输出STUFetch(intstudentIndex);//从文件中随机读取第studentIndex个(0=studentIndex=N-1)学生的信息voidSearch(STU*p,intclassNo,chars,intscoresum);//实现班级和成绩的综合查找(如1班,总分240的同学)intMax(STU*p,intscoreIndex);//求所有学生、下标为scoreIndex的课程分数最高的学生序号(在数组中的下标),学生序号作为返回值voidSort_select(STU*p);//对所有学生,按平均成绩由低到高进行简单选择排序voidSort_buble(STU*p,intn);//对某个班级的学生,按平均成绩由高到低进行起泡排序voidSort_insert(STU*p,intn,char*major);//对某个专业的学生,按某门课程成绩由低到高进行直接插入排序voidSave(STU*p,intn);//将学生信息存入文件2.主函数#includestudent.hvoidmain(){inti,n,id,num,m,sub,corse;//n,第几个结构体;id,菜单序号;num,班级号;sub,学生下标;corse,课程下标charmajorname;//专业名称STUstudents[N];STUtem;while(1){printf(\n请输入功能编号,运行相应功能\n);printf(\n1.您将从文件中读取10个人的信\n);printf(\n2.您将从文件中随机读取第n(0=n=9)个学生的信息\n)printf(\n3.您将根据某一班级某一专业总分超过多少进行查找\n);printf(\n4.您将求某一课程分数最高的学生序号的下标\n);printf(\n5.您将对平均成绩由低到高进行简单选择排序法\n);printf(\n6.您将对某一个班的平均成绩由低到高进行起泡排序法\n);printf(\n7.您将对某门专业的学生的某门课程成绩由低到高进行直接插入排序法\n);printf(\n8.您将把学生信息存入文件\n);scanf(%d,&id);getchar();switch(id){case1:{printf(\n从文件中读取信息\n);Input(students,sizeof(students)/sizeof(STU));//调用Input函数,sizeof(students)/sizeof(STU)表示要读取几个学生的信息printf(\n学号姓名专业班级课程1课程2课程3\n);for(i=0;iN;i++)Output(students+i);//调用Output函数break;}case2:{printf(\n请输入您想从文件中读取第几个结构体信息(%d)\n,N);scanf(%d,&n);tem=Fetch(n);//Fetchprintf(\n下面是第%d个结构体的信息\n,n);printf(\n学号姓名专业班级课程1课程2课程3\n);Output(&tem);//调用Output函数break;}case3:{printf(\n请输入班级号num(1或2)\n);printf(\n请输入专业名称majorname(computer=c,software=s,network=n)\n);printf(\n请输入一个分数m(0m300)\n);scanf(%d,&num);getchar();scanf(%c,&majorname);getchar();scanf(%d,&m);Search(students,num,majorname,m);//调用Search函数break;}case4:{printf(\n请输入某一课程下标corse(0,1,2)\n);scanf(%d,&corse);sub=Max(students,corse);//调用Max函数,返回值给subprintf(\n下面是课程%d最高分学生的信息\n,corse);printf(\n学号姓名专业班级课程0课程1课程2\n);Output(students+sub);//调用Output函数break;}case5:{printf(\n下面是对所有学生的平均成绩简单选择排序后的顺序:\n);Sort_select(students);//调用Sort_select函数break;}case6:{printf(\n请输入一个班级号num(1或2)\n);scanf(%d,&num);printf(\n下面是对某个班级起泡排序后顺序:\n);Sort_buble(students,num);//调用Sort_buble函数break;}case7:{printf(\n请输入某一课程下标corse(0,1,2)\n);printf(\n请输入专业名称majorname(computer=c,software=s,network=n)\n);scanf(%d,&corse);getchar();scanf(%c,&majorname);printf(\n下面是对某一专业学生的某一课程直接插入排序后的顺序:\n);Sort_insert(students,corse,&majorname);//调用Sort_insert函数break;}case8:{Save(students,sizeof(students)/sizeof(STU));//调用Save函数,sizeof(students)/sizeof(STU)表示要保存几个学生的信息break;}default:{break;}if((id1)||(id8))break;}}}3.Input函数#includestudent.hvoidInput(STU*p,intn){FILE*fp;charfilename[15];printf(\n请输入打开文件名:\n);gets(filename);fp=fopen(filename,r);fread(p,sizeof(STU),n,fp);fclose(fp);}4.Output函数#includestudent.hvoidOutput(STU*p){printf(\n%-5s%-10s%-8s%6d%6d%7d%7d\n,p-num,p-name,p-major,p-classNo,p-score[0],p-score[1],p-score[2]);}5.Fetch函数#includestudent.hSTUFetch(intstudentIndex){STUtem;FILE*fp;charfilename[15];if((studentIndex0)||(studentIndexN-1)){printf(studentIndexerror\n);exit(0);}getchar();printf(\n请输入打开文件名:\n);gets(filename);fp=fopen(filename,r);fseek(fp,(long)(studentIndex*sizeof(STU)),SEEK_SET);fread(&tem,sizeof(STU),1,fp);fclose(fp);returntem;}6.Search函数#includestudent.hvoidSearch(STU*p,intclassNo,chars,intscoreSum){inti;for(i=0;iN;i++){if((p+i)-classNo==classNo)if((p+i)-major[0]==s)if(((p+i)-score[0]+(p+i)-score[1]+(p+i)-score[2])scoreSum){printf(\n下面是班级%d专业%c超过%d分的学生信息\n,classNo,s,scoreSum);printf(\n学号姓名专业班级课程1课程2课程3\n);Output(p+i);}}}7.Max函数#includestudent.hintMax(STU*p,intscoreIndex){inti=0,max,result;max=(p+i)-score[scoreIndex];result=i;for(i=1;iN;i++){if((p+i)-scor