1、C语言程序设计实训报告设 计 题 目: 基于数组得学生信息管理系统 学 院 名 称: 信息科学技术学院 专 业: 计算机科学与技术 班 级: 姓 名: 学 号 指 导 教 师: 提 交 日 期: 2014年12月22日 一、实验内容编写并调试程序,实现学校各专业班级学生信息得管理。10个学生得信息存储在文件stdntIi、dt中。在头文件sudnt、中定义学生信息得结构体类型,包括:学号、姓名、专业、班级、门成绩;与符号常量(学生数)。(同一班级得学生可以属于不同得专业,同一专业得学生可以属于不同得班级)#define N 10struct Studentchar num15;/学号char
2、name15;/姓名char major10;/专业(puter,software,network)int classNo;/班级(1-2)int score3;/3门课得成绩(0-2);typedef struct Student STU;二、实验要求 (1) main函数:以菜单形式将各项功能提供给用户,根据用户得选择,调用相应得函数。STU tdnt; /保存输入得N名学生信息(2) 定义函数od Ipt(U p,nt n):从文件suentInit中输入n个学生得信息。(3) 定义函数vid Outpu(STU *p):将所指得某个学生信息表格化屏幕输出。(4) 定义函数etch(in
3、 studnInex):从文件中随机读取第sudentIndex个(0 stdentInex =N-1)学生得信息。(5) 定义函数voiSah(SU *p, nt clso, chr s, i scSm);:实现班级与成绩得综合查找(如1班,总分240得同学)。(6) 定义函数intax(STU , intsorenex):求所有学生、下标为scoreIne得课程分数最高得学生序号(在数组中得下标),学生序号作为返回值。(7) 定义函数voi Sort_sel(TU p):对所有学生,按平均成绩由低到高进行简单选择排序。(8) 定义函数oid Sorbu(STU *, intn); 对某个班
4、级得学生,按平均成绩由高到低进行起泡排序。并调用Ouput输出。定义局部变量:S sucas_aeN;/按平均成绩排序后得某个班级得学生信息;it oun; 实际元素个数(9) 定义函数void rtiet(STU *p, it n, a *mor):对某个专业得学生,按某门课程成绩由低到高进行直接插入排序。并调用tput输出。定义局部变量:STU st_clas sbject; /按某门课程成绩排序后得某个专业得学生信息;int un; /实际元素个数(10) 定义函数voav(Sp,n n) :将学生信息存入文件。四、程序清单(关键语句与变量加注释)1.头文件,类型定义,函数声明#icd
5、stdio、h#iudencld stri、hdefineN0sct Stutcar nu15;har me5;ch mao;nt cassN;itscore3;ydfstrctStudntST;vod Inut(STU p,in n);/从文件sutenit中输入个学生得信息oid tp(TU p);/将p所指得某个学生信息表格化屏幕输出STU Fech(it tudetIdex);/从文件中随机读取第tudentndex个(0240得同学)inMax(STU p,iscoreIndex);/求所有学生、下标为scorInex得课程分数最高得学生序号(在数组中得下标),学生序号作为返回值oi
6、Sort_selec(STU );/对所有学生,按平均成绩由低到高进行简单选择排序vod ort_bbe(SU *p,it n);/对某个班级得学生,按平均成绩由高到低进行起泡排序void Srt_nsert(TU *p,int n,a * major);/对某个专业得学生,按某门课程成绩由低到高进行直接插入排序voi Save(TU * ,in n);/将学生信息存入文件2、主函数inlude tudt、void ain()in i,n,id,num,sub,corse;/n,第几个结构体;i,菜单序号;num,班级号;ub,学生下标;cors,课程下标cha majona;/专业名称STU
7、suetsN;STte;while(1)prinf(n请输入功能编号,运行相应功能n);pintf(n1、您将从文件中读取0个人得信n);pritf(2、您将从文件中随机读取第(0=n)个学生得信息)pnt(n3、您将根据某一班级某一专业总分超过多少进行查找);print(4、您将求某一课程分数最高得学生序号得下标n);pin(5、您将对平均成绩由低到高进行简单选择排序法n);pintf(n6、您将对某一个班得平均成绩由低到高进行起泡排序法n);prntf(、您将对某门专业得学生得某门课程成绩由低到高进行直接插入排序法n);printf(n8、您将把学生信息存入文件n);can(%d,&i);
8、gechar();wth(id)a 1:ri(从文件中读取信息n);Int(sdts,ieof(stuent)/sieof(ST);/调用Int函数,sizeof(stut)/sizeof(STU)表示要读取几个学生得信息printf(学号 姓名 专业 班级 课程1 课程 课程3n);or(i=0;iN;i+)Output(tudensi);/调用Outpt函数brek;cas2:pintf(n请输入您想从文件中读取第几个结构体信息(%d)n,N);c(d,n);tem=Fech(n);/Ftchprnf(下面就是第d个结构体得信息n,n);rintf(学号 姓名 专业 班级 课程1 课程 课
9、程3);Ouput(te);/调用put函数bea;case 3:prinf(n请输入班级号u(或2)n);prinf(n请输入专业名称majorame(puter=c,softar=s,etwok)n);prntf(n请输入一个分数m(0m300)n);scaf(%d,&n);getcha();caf(c,&majoame);getchar();scanf(%d,&m);Sarh(tunts,num,majorname,m);/调用Search函数brek;case :pintf(n请输入某一课程下标cors(,1,2);sf(%d,&cose);sbMx(sdents,cose);/调用M
10、ax函数,返回值给subprintf(下面就是课程%d最高分学生得信息n,ors);prntf(n学号 姓名 专业 班级 课程0 课程1课程2n);Oupt(stuentsub);/调用utut函数re;cae :prntf(n下面就是对所有学生得平均成绩简单选择排序后得顺序:);Sort_selet(stdnt);/调用Sort_elect函数bre;cse 6:rintf(请输入一个班级号num(1或2)n);saf(%,&num);pntf(n下面就是对某个班级起泡排序后顺序:n);Sort_bub(tudents,um);/调用Sor_buble函数rak;cs7:prinf(请输入某
11、一课程下标orse(0,1,2)n);printf(n请输入专业名称arame(pute=c,sftwars,netork=n)n);sanf(%d,&corse);etchar();an(%,&majrnam);nf(下面就是对某一专业学生得某一课程直接插入排序后得顺序:n);or_iner(sudents,orse,&majrnme);调用Sorinser函数brak;se 8:Sa(stdets,zo(stuens)/izeof(ST);/调用Sve函数,sizf(stdents)/sieof(TU)表示要保存几个学生得信息break;deul:reak;if(id8)rek;3、Inp
12、u函数ine studn、hvoidnput(STU* ,int)FLE f;ca 1;rintf(n请输入打开文件名:n);gets();fp=on(,);frea(p,sieo(STU),p);close(p);4、Outpu函数#incude tudet、hvod Outp(ST *)pit(n%-5s-1s%-8s%6%dddn,p-nm,pnm,p-ajor,p-clasN,pscor0,p-score,p-sre);5、Ftch函数#includ stuen、hSTU Fet(n studentInd)STU tem;FL *p;c ;i((sudIndex)|(studnIxN-
13、1)rif(stentInerrn);exit(0);geca();print(n请输入打开文件名:n);ges();fp=oe(,r);seek(f,(lon)(studentdexszeof(STU),EE_ST);fad(&tem,sizeof(STU),1,);fclose(fp);retur tem;、earh函数#icudesudnt、hod earh(STU p,int clssN,char s,int soreSm)int i;for(i;mar0=s) i()core0+(p+i)-core1+(+)score)screSum)rintf(下面就是班级%d专业%c超过%d分得
14、学生信息n,lasNo,s,scoreSum);prinf(n学号姓名 专业 班级 课程1 课程 课程n);Outut();7.Max函数#inude stent、hntM(S*p,int scoIndex)int =0,mx,rel;max(p+)-screscoreIndx;resl=;for(i=1;icrcorenexmax)mx=(p+i)-scoresconex;reslt=;retun resul;8、 Sortelect函数#icud stuent、vd Sort_slect(SU* )ini,j,k;float sm,ae,t;STU tem;for(i=0;iN;i+)um
15、=0、0;sum=su+(+i)ore0(p+i)re1+(p+i)-core2;av=sum/3;for(i=0;N1;+)k=i;or(j=k;N;j+)f(vejae)=j;t=ae;vk=vei;ai=t;e=*(p+);*(p+k)=(p+i);(+i)t;pntf(学号 姓名 专业 班级 课程1 课程2 课程3n);or(i=0;clasNo=n)u+;stuclass_av=*(p+i);j+;um=、; sum=sum+(p)-coe+(p+i)-score+(p+i)-soe; avei=sum/3;for(i0;icut1;i+)for(j=0;vej+1)t=avej;
16、ve=vej+1;ave+t;tem=stu_css_ave;s_ass_avej=stu_clas_vj+1;u_ls_ave1=;rnt(n学号 姓名 专业 班级课程1 课程2课程3n);or(=0;jt;j+)utput(stu_ca_+j);、 Soisrt函数#inluesuent、hvodortiser(SU *p,int n,char* mjor)STU stuas_subjectN;nt i=0,j=1,cunt=;fo(i=;i;i+)if( majr=(p+i)-maor0)out+;st_ca_suectj=* (i);j+;fo(=2;i=cot;+)stu_clsub
17、jet0=s_class_sbecti;for(j=i-1;u_lass_suject、sorensu_clas_subjectj、soen;-)stu_class_subjecj+=stu_clss_subectj;su_lasssbjet+1=uclass_sujc0;pintf(n学号 姓名 专业 班级 课程1 课程 课程3);or(j=1;j=cot;j+)utt(tu_clas_subject+j);11、 Sv函数ncude stdet、hvoi ave(STU p,intn)L fp;char 5;inti;prntf(请输入保存得文件名:n);ges();if((fp=f(,wb)=NL)prnf(cnot opn filen);retr;for(i=0;n;i+)f(wrte(p+,sizef(TU),1,f)!=1)pint( eron);五、程序测试(Iut、Search、Max、rt_ble、Sot_insert函数得调用及执行结果得截图)1、Input 函数2、Srch函数3、Mx函数4、Sr_bubl函数5、or_nsrt函数