学生管理系统课程设计-.pdf
重庆理工大学课程设计课程程序设计基础C题目C语言综合程序设计院系名称商贸信息学院班级计算机应用技术一班学生姓名一垦垦一学号20920310119指导教师评阅教师时间丘Z立2010年6月1 问题描述27 5.4题目五:学生成绩管理系统设计学生成绩信息包括学期,学号,朔:别,姓名,四门课程成绩。杏文、数学、英语和计算机)。主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能核朔:级统计学生的成绩,求学生的总分及平均分,设ti并输出统计报表(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成锁单(5)能按班级,拨课程,对学生成绩进行排序。要求:使用二迸帘l文伶方式存储数据,系统以菜单方式工作2系统分析2.1题目要求本系统可以对学生的成锁信息进行简单的管理操作主菜单包括9个远Jj)j:1.学生成锁浏览如果未导入学生成绩,系统会提示导入成绩,成绩导入后,可以用本功能浏览成绩。2.学生成锁录入二吕学生成绩米导入是会自动提示对学生成绩的录入,可以校学期,依班级完成对学生成绩的录入3.学生成锁修改;当需要修改学生成绩时,本功能可以修改学生的成锁,可以校学期,按班级完成对学生成绩的修改。4.核班级统ti学生成绩的总分和平均分可以对计算学生的成绩的总分和平均分,并放到E级统ii出来。5.学生成绩查询完成对学生成绩的查询,本功能是按照学号查询。27 6.学生成绩衍、存可以将学生成锁存入磁敛文伶,并从磁组:望读出学生成锁,信息保存在e:wh.dat.7.学生成锁米存盘时导入当磁盆文件不存在会提示J导入学生的成绩。8.f主班级输出学生成锁可以蚊班级输出学生的成绩单,其中包括学生的四门课的成绩不及格科目和学生的名单。9.学生成绩排序能按叨:级,核课程,对学生成锁进行排序。按班级排序时可以对某个班级学生的成绩排序,按课程排序时是对某一门课的体序。2.2算法设计模块一学生成锁浏览模块该模块实现对学生成绩的浏览功能,但前键是学生的信息已经衍、存,实现第法如下:输出学生信息的标题检索信息数组用循环实现对学生信息的对应输出模块二学生成锁录入模块该模块实现对学生成绩的录入功能,通过菜单的选择,调用两个子函数实现成绩的录入。输出核不同方式录入学生成绩的选梅菜单,一是钱学期录入,二是饺班级录入调用按学期录入的函数选择学期用循环完成对学生信息的录入仅存学生信息,fl二回到录入函数调用核班级录入的函数选择班级用循环完成对学生信息的录入、存学生信息,并回到录入函数院块三学生J我锁修改模块该楼块实现对学生成绩的修改功能,通过菜单的j在拌,调用两个子函数实现对学生的成绩的修改输出按不同方式修改学生成绩的远摔浆单,一是族学期修改,二是核班级修改浏阳校学期修改的函数选择学期用循环完成对学生成绩的修改,修改的科目包铅语文数学英语,ti算机!?、存学生成绩信息,并回到j修改函数27 调用核班级修改的函数选择班级用循环完成对学生成绩的修改,修改的科目包指语文,数学,英语,ti算机保存学生成绩信息,并回到j修改函数模块四按班级统il学生成绩的总分和平均分模:块该模块可以计算学生成绩的总分和平均分输出选择的班级i国过十盘索数组逃出某个JiI边过循环输出这个班的每个学生的总分和平均分模块五学生成锁查询筷块该模块白E通过学生的学号查询学生的成绩输入要查询的学生的学号边过十盘索4改组逃出xt应的学生调用输出函数输出学生相关的信息膜块六学生成绩保存筷块i亥模块可以保存学生信息的导入,修改,录入定义文件的衍、存位置通过数组写入要保存的文件关闭磁企文件模块七学生成锁为存必:时导入模块该模块可以在学生成绩为存鱼是完成对学生成绩的导入并存撒输出是否创建的提示选择是否创建提示已经导入,并关闭磁盆文件模块八按班级输出学生成绩模块i主模块可以从多个班级里.iz;择某班学生的成绩并输出输入要选挣的班级检索数组选出该到I输出该班学生的相关信息模块丸学生成绩排序模块该模块可以对学生的成绩核不同的方式仲序输出排序方式的菜单调用j安班级排序的函效输出菜单后用 商泡i去对总分j挂行比较,按从大ii小的顺序输出保存并回到排序函数27 调用核课程对学生排序的函数通过国泡法分别对话文,数学,英语,计算机的成绩进行对比,按从大到小输出保存并回到排序的函数模块十退出筷块退出系统2.3流程图口由严开读取文件是吐绩览川成浏按按按按按班级按学班班学统计和学班级期级级翔1与平均到1分查询按班按课查找级程哇绩入七成录7为8按班9学生存盘输出成绩时导成绩排序入生绩玫叫什成如生绩句叫什成IE也绩存成保分平分凸U和均保存输出从大到小的顺序排序2.4关键问题习这个系统最主要是要掌握各个函数退出k的录入,修改,成绩的查询等27 在对学生成绩的录入,修改,求平均分利总分,输出学生的成绩时都要求按不同的方式完成,比如录入,修改,输出成绩纯等。这里我写一个菜单,用一个主函数,分别调用两个子函数。在成绩修改时注意输出的数据的对应,最后哟啊保存修改的数据,这里最容易被忽略,如果不仅存的话,就白费心机啦。注意自己定义的头文牛的数据类型和i原文件里丽的数据类型要符合,这个函数有点大,随意这种细节一般容易出错。在输入一个函放数据的时候,应该i宵空键也区,很容易出销。总之来说,编译的时候会有很多销,但是经过改正过后,发现很多都是不必要的或是细节问题。3.1题目一llinclude llinclude !include llinclude llinclude student.h int number 3系统实现void view(struct student people)int i printf(”tttt学生成绩管理系统n).printf(气t t n);printf(飞t t n);printf(”学期t学号t班另1t姓名t语文t数学t英语t讨算机n);printf(飞忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡*n勺,for(i=O;i=number-1;i+)printf(”%st,peoplei.sem).printf(”%st,peoplei.num).printf(飞d t,peoplei.clas).27 printf(飞st,people i.name).printf(飞4dt,peoplei.chinese).printf(飞4dt,peoplei.math).printf(”%4dt,peoplei.english).printf(飞4dt,peoplei J.computer).printf(”n).printf(一一一一一一一一一一一一一一一一n)./*按班级统t才学生总分和平均分/*void grade(struct student people)int clas;int aver=O;int sum=O;scanf(飞d,&clas);for(int i=O;i(number;i+)i f(people i.clas=clas)查找班级sum=peoplei.chinese+peoplei.math+peoplei.english+puter.aver=sum/4;printf(”第%d个学生总分为:%dn,i+1,sum).printf(”第%d个学生的平均分为:%dn”,i+l,aver);27/*输出某一个学生的信息/*void prnt(struct student people,inti)printf(一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一n).printf(”姓名t语文t数学t英语ti才算机t不及格科目t学生名单n).printf(一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一n).for(i=O;i number;i+)绩成的生学的s u事咱及不出输,f,.)、J、JrehHe edcdE+L Oe、Jlu飞nhipe-tgm mhuano acmec n Ed.,国d、.J-1111、APEELFLEtM俨EELLeeeee1i1i1i1i-inynynvnv poooo oeeee enynvnynv ny,“HUHUHUH UHEEWL在LB目怡EW飞飞飞、1、飞、飞飞、gi2icig俨、d唱EA唱EA嘈EA唱EA飞%低%飞UHUHUHUH、BEJt、,、Jt、,、唱AEWZicigziJt、ntttte innnnI r-111l nvrrrrtn ppppwft if(peoplei.chinese60)printf(语文,丁,if(peoplei.math60)printf(”数学,),if(people i.english(60)printf(”英语,).if(people puter(60)printf(i.i算机怡),break:27 print f(”%s,peoplei.name).printf(飞n);printf(一一一一一一一一一一一一一一一一一一一一一一n).输出学生的名单/*/按照学号查询学生信息/*void search(struct student people)char num20;inti printf(”n请输入你要查询的学生学号:丁,fflush(stdin);gets(num);for(i=O;i number;i+)if(strcmp(peoplei.num,num)=O)prnt(people,i);/*/按班级输出学生的成绩单/*void search_clas(struct student people)27 int clas printf(ll请输入班级:);fflush(stdin);scanf(飞d”,clas);for(int i=O;i(number;i+)if(peoplei.clas=clas)prnt(people,i);调用prnt函数输出成绩单/*/将信息存入磁盘文件/*void save(struct student people)FILE*fp;int i fp=fopen(飞:wh.dat”,、b丁;for(i=O;i number;i+)fwr i te(&peoplei,sizeof(student),l,fp).fclose(fp);关闭磁组;文件/*/按学期修改学生成绩/*void xiugai_sem(struct student people)27 int chinese,math,english,computer;char sem20;printf(”输入学期:,)fflush(stdin);scanf(飞s”,sem);for(int i=O;i(number;i+)i f(strcmp(peoplei.sem,sem)=O)prnt(people,i);定义新的成绩变量printf(”修改语文,数学,英语,t才算机的成绩:);scanf(%f%f%f%f,&chinese,皿ath,&english,&computer).peoplei.chinese=chinese,peoplei.math=math;peoplei.english=english;puter=computer.peoplei save(people);/*/按班级修改学生成绩/*void xiugai_clas(struct student people)int chinese,math,english,computer;int clas printf(输入班级:丁,fflush(stdin);scanf(飞d”,clas);for(int i=O;i(number;i+)27 把新的成绩赋给i f(people i.clas=clas)prnt(people,i);printf(修改语文,数学,英语,t才算机的成绩:),scanf(”%f%f%f%f,&chinese,&math,&english,&computer).peoplei.chinese=chinese.peoplei.math=math;peoplei.english=english;puter=computer.save(people);)ELe 咱EAny o e nv E+L n e-d u t ea E+L c u r+L ea(唱Aa go u 唱AX d 唱品。氨R1JV44Il 修改学生成int xuan;w hile(1)printf(飞司略有,司1按学期f房改学生成绩n);printf(飞或c祀printf(飞或,0返因上一级目录n);printf(r青选才辛:n);scanf(飞d,&xuan);switch(xuan)case 1:xiugai_sem(people);break;case 2:xiugai_clas(people);break.if(xuan=O)break 27/*/按学期录入学生成绩/*void luru_sem(struct student people)struct student temp,printf(ll请输入学生人数nll);scanf(飞d”,number);printf(”学期恼),fflush(stdin);scanf(飞sn,temp.sem);for(int i=O;i(number;i+)printf(请输入学生信息恼),printf(”学号.).fflush(stdin).gets(temp.num).printf(I别:),fflush(stdin).scanf(飞d,temp.clas).printf(”姓名.).fflush(stdin).gets(temp.name).printf(”学生成绩.).fflush(stdin).scanf(%d,&temp.chinese).fflush(stdin).scanf(飞d,&temp.math).fflush(stdin).scanf(%d,&temp.english).fflush(stdin).scanf(飞d,puter).printf(气n勺,peoplei=temp,27 选择要输入学生的学期save(people);/*/按班级录入学生成绩/*void luru_clas(struct student people)struct student temp,printf(”请输入学生人数:丁;scanf(飞dn,&number);printf(”班级产);fflush(stdin);scanf(飞d”,temp.clas);int i for(i=O;i(number;i+)printf(请输入学生信息恼),printf(学期:),scanf(%s,temp.sem).printf(”学号产),fflush(stdin).gets(temp.num).printf(”姓名:),fflush(stdin).gets(temp.name).printf(学生成绩丁,fflush(stdin).scanf(飞d,&temp.chinese).fflush(stdin).scanf(飞d,&temp.math).fflush(stdin).scanf(飞d,&temp.english).fflush(stdin).输入要录入的学生的班级27 scanf(飞d,&puter).printf(气n).peoplei=temp,save(people);保存void luru(struct student people)录入学生成绩int xuan while(1)printf(飞忡忡忡忡忡1按学期录入学生成绩n)printf(飞司略有,司2按班级录入学生成绩n)printf(飞或c祀scanf(%d,&xuan);switch(xuan)printf(”请选择:n);case lluru_sem(people);break.case 2:luru_clas(people);break.i f(xuan=O)break/*/导入磁盘;文件信息/*void load(struct student people)FILE*fp;if(fp=fopen(”e:wh.dat气rb丁)阳LL)printf(”磁盘;并不存在,是否创建?(y/n)丁;27;if(getchar()=y)luru(people).return.else exit(0);int i=O printf(”n正在导入数据,请等待恼),w hile(!feof(fp)fread(&peoplei,sizeof(student),l,fp).i+;fclose(fp);关闭磁盘文件number=-i;printf(”n导入成功!n勺,/*/按班级对学生成绩排序/*void paixu_clas(struct student people)struct student arry1024,tem p;int clas,j=O;新定义一个数组缸ry口printf(”请输入班级:);fflush(stdin);scanf(飞d”,clas);for(int i=O;i(number;i+)if(peoplei.clas=clas)arryj=peoplei;j+;27 printf(飞tn);printf(”学期t学号t班另IJt姓名t语文t数学t英语ti-1算机t总分n).printf(飞忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡*n丁,for(int m=O;m(j-l;m+)for(int n=O;n(j-1-m;n+)if(arryn.chinese+puter+arr yn.matharryn.english arry n+1.chinese+arry n+puter+arry n+1.ma th缸ryn+l.english temp=arry叶,缸ryn缸ryn+l.arryn+l=temp,for(i=O;i(j;i+)printf(”%st气缸ryi.sem).printf(”%st气arryi.num).printf(”%dt气arryi.clas).printf(”%st气arryi.name).printf(%4d t,缸ry i.chinese).printf(”%4dt,arryi.math).printf(”%4dt”,arryi.english).printf(%4dt,puter).printf(飞4dt”,puter+arryi.chinesearryi.math+arryi.english).printf(”n).27 printf(一一一一一一一一一一一一一一一一一一一一一一一n)./*/按课程对学生成绩排序/*void paixu_ke(struct st udent people)struct student tem p;for(int i=O;i(number-l;i+)for(int j=O;j(num ber-1-i;j+)i f(peoplej.chinese(peoplej+l.chinese)tem p=peoplej;peoplej=peoplej+l;peoplej+l=temp;printf(飞t t n);printf(”学期t学号t班另1t姓名t语文n);printf(飞忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡叭n丁;for(i=O;i number;i+)printf(飞st,people i.sem).printf(飞st,peoplei.num).printf(飞dt,peoplei.clas).printf(飞st,peoplei.name).printf(飞4dtn,people i.chinese).for(i=O.i number-I.i+)for(int j=O;j(num ber-1-i;j+)27 i f(peoplej.chinesepeoplej+l.chinese)tem p=peoplej;peoplej=peoplej+l;peoplej+l=temp;printf(气t t n);printf(”学期t学号t班别t姓名t数学n);printf(忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡叭n丁;for(i=O;i number;i+)printf(飞st,peoplei.sem).printf(%st,peoplei.num).printf(飞dt,peoplei.clas).printf(飞st,peoplei.n四e).printf(飞4dtn,people i.math).for(i=O.i number-!.i+)for(int j=O;j(number-1-i;j+)i f(peoplej.mathpeoplej+l.math)temp=peoplej;peoplej=peoplej+l;peoplej+l=temp;printf(”学期t学号t班别t姓名t英语n);printf(忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡叭n丁;for(i=O;i number;i+)printf(飞st,peoplei.sem).27 printf(”%st,peoplei.num).printf(飞dt,peoplei.clas).printf(%st,peoplei.n四e).printf(飞4dtn,people i.english).for(i=O.i num ber-1.i+)for(int j=O;j(number-1-i;j+)i f(peoplej.englishpeoplej+l.english)temp=peoplej;peoplej=peoplej+l;peoplej+l=temp;printf(”学期t学号t班另1t姓名t计算机n);printf(飞忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡n丁;for(i=O;i number;i+)printf(”%st,peoplei.sem).printf(飞st,peoplei.num).printf(飞dt,people i.clas).printf(飞st,peoplei.name).printf(飞4dtn,people puter).for(i=O.i num ber-1.i+)for(int j=O;j(number-1-i;j+)i f(peop 1 e pu terpeop 1 e j+puter)temp=peoplej;peoplej=peoplej+l;peoplej+l=temp;27 void paixu(struct student people)对学生成绩排序int xuan;w hile(1)printf(飞司略有,司1按班级对学生成绩抖卡f于;n)printf(飞或c祀printf(飞或,0返因上一级目录n)printf(”请选择:n);scanf(飞d,&xuan);switch(xuan)case 1:paixu_clas(people);break;case 2:paixu_ke(people);break;if(xuan=O)break/*/主函数/*void main()int sel system(els);system(color F9丁;struct student people1024;load(people);27;for(;)printf(”t t nN);printf(飞n);printf(飞ttprintf(飞t t n);printf(”t t n);学生成绩管理系统n);printf(飞tt忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡忡叭n丁;printf(”tttl学生成绩浏览n);printf(”ttt2学生成绩录入n);printf(”ttt3学生成绩修改n);printf(气ttt4按班级统剖学生成绩的总分和平均分恼),printf(气叭叭t5学生成绩查询n).printf(”ttt6学生成绩保存n);printf(气ttt7学生成绩未存盘时导入恼),printf(”ttt8按班级输出学生成绩n);printf(”ttt9学生成绩排序n);printf(飞t t n);printf(”tttO谢谢使用再见!n”);printf(飞t t n);printf(请选择:n).s canf(飞d”,sel);swi tch(sel)case 1:view(people);break,case 2:luru(people);break;case 3:xiugai(people);break;case 4:grade(people);break.case 5:sear ch(people);br eak;case 6:save(people);br eak;case 7:load(people);break;case 8:sear ch_clas(people);br eak;27 case 9:paixu(people);break;case O:printf(”谢谢使用再见!n”);break;if(sel=O)break 4系统测试4.1如何设计测试数据我是按顺序编写每个函数的每个功能的,每写完一个就输入数据运行测试,输入数据时数据类型要准确,以避免错误,有些函数往往要重新写好几袍,应为有时不确定是否正确,就要输入数掘进行测试,看是否正确,有很多的函数都要调用其他的函数,所以函数的关联很大,输入数据时就主要考虑消楚。4.2系统测试过程(1)对学生成绩的录入测试ruct stuaent peop且et b24:“II O C飞.U,ecsBOADeokto州学生成揭营建星Debug飞学生成绩雷建罩挠。exe口rs13 日rrrrve 的vbvnv的VBVB输入数据对系统进行测试27:1 C:lJsersBOA飞Desktop学生成绩管理系统Debug飞学生成绩管理累统,e)(e”官费合学生人数:2:暨盟古学圭信息d严严宅二:2093!;:wh 届主陆绩:1(2)测试结果分析:录入学生成绩后显示的界丽。27,曰飞Use叫BOA飞Desktop飞学垒成集筐理事然气Debug常注成绩宫理系统剧e”GI 绩绩戚戚生生录A孟子目入人级录录一期级上山于仰自国柏拉搭理4A句,“au0 学生成绩管理系统8谢谢使用再见,青选降2(3)(4)测试结果分析:输入成绩过后会显示出选择界丽和主菜单界面。(3)对按班级统训学生的总分和平均分的测试根据菜单4后学生威措管理系统1主生路绩割:iii辞呈旦去入8谢谢使用再见?b畜选i辛商人班级27 选择班级过后的界丽输出2班学生的总分和平均分统计峰唾链,国IE:学生成绩管理芽就飞Debug学生成绩管理芽、统.exep青选捧俞入班级1士主生益主tg:202!l主主U去型企Z:50;个鞋醉如:68de(s clas a Yer SUl!l=tf(f(%(int if(p 学生陆绩管理系统洲一搭咀鼠”生堂14 链,一个链峰峰祷t(st 谢谢使用再见?(4)对按班级学生输出学生成绩的测试27 飞:Vsers飞回ALes.lctop吴曼纠出况ll曰飞字宝股强宫理条统飞Oecllg字宝成绩宫淫b青选j幸去南入班级学生戚绩管理系统提提提提提提提提提提提提提提挺挺提提提挺挺提骨提篝提提提提提骨提提提提8谢谢使用再见?节选降2(5)如果输入的班级不存在,这不会出现结果(6,I 1r.1 c,)口I)I 罢-r3。句,az一机机机MH班异国异计计计ERE口罩臼、1、1、1二央芙英A主主于一数数数一艾文文一诺诺诺-A-z-Fbrbp3 A噜-aayr3-A-z。se3A唱句d饵3,5 怪名语文章史学英语计算机不及格科目学生名单3 4 5 语艾,数学,英语,计算机3 8 1 6 语文,数学,英语,计算机?5 54 54 54 54 ii文,数学,英语,计算机45 名语文数学英语计算机不及格科目学生名单;i骂:卖主:主fj:fiii 5 54 54 54 54 语文,数学,英语,计算机45 输入的班级存在的话,就会按从小到大的顺序输出。(7)对学生成绩查询的测试27 输出要查询的学号过后r言忑e时80AD臼ktop嘱20920310119由甜提翻版b咄字缸野在眼翻棚”旦;音输入你要查询的学生学号,2I 名语文数学英语计算机不及格科目学生各单 rs :意:毒草:莫言:1重;:叫学生成绩管理系统 生;郁瑞皇朝军入?5总结5.1 系统工作总结这个系统真的是不一般啊,花了好多的时间峨以前写的都是一些编程的小程序,现在才晓得功能是这样实现的啊。5.2 心得体会在这之前的学习当中,只是单纯的编程,并没有整体的写程序,所以并不知道写程序到底有什么用,通过这次对系统的编写,使我们更好的了解l位编程,完善啦编程的过程,也知道写程序整体性,很多的函数都是联系起的,总之来说,这次收获很多。27