数据结构课程设计学生成绩管理系统_第1页
数据结构课程设计学生成绩管理系统_第2页
数据结构课程设计学生成绩管理系统_第3页
数据结构课程设计学生成绩管理系统_第4页
数据结构课程设计学生成绩管理系统_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、辽宁科技大学课程设计报告设计题目:学生成绩管理学院、系:电子与信息工程学院专业班级:计算机11-2班学生姓名:赵月指导教师:龙艳彬成 绩:2013年1月 8日目 录、需求分析-3二、概要设计一 3三、详细设计-53.1系统流程图53.2界面设计63.3 各 功 能 模 块 的 设 计77四、测试与分析五、总结15六、附录(源代码)161. 需求分析1.1问题描述本系统实现了学生成绩管理的功能,具有学生成绩的输入、读取、查询、 修改、插入、删除、排序,统计等功能。1 . 2基本要求输入的形式和输入值的范围;首先输入学生个数,按回车键,按照提示选择,将学生信息保存在文本文档中,具体对学生信息进行插

2、入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自 己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后, 再将学生信息保存到文本文档中。输入数据类型主要是char、int. float等数据类型,输入 内容包括:学期、学号、姓名、高等数学成绩,数据机构成绩,大学英语成绩总分,平均分 等数据。(2) 输出的形式;学期、学号、姓名、高等数学成绩,数据结构成绩,大学英语成绩,总分,平均分 等数据。(3) 程序所能达到的功能;1. 数据输入功能,输入的数据能最终保存在文件中;2数据删除功能,能最终从文件中删除;3. 排序功能,根据自己设计的数据结构,设计排序

3、算法4. 多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;6. 学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)7. 其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平 均分等等)2、概要设计1. 数据结构:数组(顺序存储结构)2. 程序模块:(1)先编入系统所需的库函数,使程序可运行#include #include /include 主要是对cin.cout之类的一些操纵运算,是I/O流控制头文件。include /文件和标准控制台的输入输出#include (2)主界面的设计在主界面中包括-输入学生信息并保存到文件读取文件并输出学生信息按

4、学 号及学期查询按姓名及学期查询按学号及学期修改信息插入信息按学号及学 期删除信息按数据结构降序(冒泡)排序按总分降序(选择)排序统计各科成绩的总 分和平均分H退出等全部的功能。每个函数体如下:void input(Student *r);输入void output( Stud ent *r);输岀void searchnum (Student *r); 按学号及学期查找void searchname(Student *r); 按 姓名及学期 查找void change(Student *r);按学号及学期修改信息Student *insert(Student *r); 插入信息void sh

5、anchu(Student *r); 按学号及学期删除信息void maopao(Student *r);按数据结构隆序(冒泡)排序void xuanze(Student *r);按总分降序(选择用乍序7void tongji(Student *r);(3) MainQ函数的设计统计各科总分和平均分信息定义指针数组、存放学生个数菜单栏读取文件并输出学生信按姓名及学期查询插入信息按数据结构降序(冒泡)排统计各科成绩的总分和退岀在mainO函数中主要运用do-while循环语句和switch。-case选择判断语句来调用相关 功能模块。系统的运行是在一个循环里进行的,只有在主界面并选择“退出”时,

6、才会跳出循 环,并退出程序。void main()coutnum;全局变量Student 二(Student new Studentnum; int m;docoutendl;coutendl;cout*nMendl;coutt* 输入学生信息并保存到文件 息 *Mendl;coutt* 按学号及学期查询*Mendl;coutt* 按学号及学期修改信息*Mendl;coutt* 按学号及学期删除信息序 *endl;coutt* 按总分降序(选择)排序 平均分,endl;coutMt*躬endl;coutt*.叭 nMendl;cout请选择:“;switch(m) case 1:input(p

7、); break;case 2: output(p); break;case 3: search nu m(p); break;case 4:search name(p); break;case 5: change(p); break;case 6:p 二 in sert(p); break;case 7:sha nchu(p); break;case 8: maopao(p); break;case 9:xua nze(p); break;case 10: tongji(p); break;case 11: break;)while(m!=ll);3、详细设计输入/退出1、系统流程图输 入

8、学 生 个 数2、界面设计 F:Debuggggg.缢入学兰的个数:3杀耳彳三* * * * * 斗子号号旦Z刀瓠该按按按存到文件 退岀麟卿严:9在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1,即可进入输入学生信息页面)3、各功能模块的设计 主函数模块:用函数void main()来实现主要是来显示主菜单,使用户选择操作。首先定义一个指针数组(全局使用)Student *p=(Student *)new Studentnum;在此处num是指学生个数,并不是学号,在这里应用了 do-while和switch-case语句来进行选择。杲后若选择11则是保存记录

9、并退出循环。输入学生记录模块:用函数void input(Student叮);来实现主要功能用来对学生的成绩进行输入。首先会有个提示“输入学生的个数”,之后跳出 主菜单.选择进入输入模块输入所需学生个数的学生信息比如学期,学号,姓名, 成绩等。输完之后会自动跳出主菜单。期间会有一些提示语,按照提示操作。根据开和for 语句来判定是否有重复学号输入,在本操作中,允许有重复学生姓名出现。=2表示找到了 与之重复的学号,t二0表示未出现重复学号。在此期间会根据语句算出总分和平均分,并默 认按学号排序保存到文件中去。之后返回主菜单。输出学生记录模块:用函数 void output(Student *r

10、);来实现主要功能是用来输岀学生的信息。在系统已经录入了学生资料的前提下,用该功能可 以显示学生的信息资料。同时也会自动跳岀主菜单进行后续操作。其中stew()指的是两字节 之间的间隔,在括号中填入数字就会有相应的间隔。按学号及学期来查找学生记录模块:用函数 void searchnum(Student *r);来实现主要功能时用来查找学生记录。首先会有提示输入学号及学期,再用for循环语句和 if判断语句来进行查找,二二n&rm.term二二k)若找到则显示学生记录并跳岀循 环;if(rm.num!二n&rm.term!二k)若没有则提示该学号不存在,或没有这个学期的成绩!”。 按姓名及学期

11、来查找学生记录模块:用函数 void searchname(Student *r)来实现主要功能也是用来查找学生记录的。首先会有提示输入姓名及学期,再用for循环语 句和if判断语句来进行查找,if(O二二n0) & (rm.term二二k)若找到则显示学 生记录并跳岀循环;if(O!=nO&rm.term!=k)若没有则提示该姓名不存在,或没 有这个学期的成绩!“ 按学号及学期修改信息:用函数void change(Student叮)来实现主要功能是用来修改学生记录。首先也要有个判断语句,判断学生是否存在,这个是 通过学号及学期来判断的,这里会有提示输入学号及学期

12、,之后是for和if语句, if(rm.num = =n & rm.term=k)若存在则先输出修改之前的信息,查看是否正确。若正确, 则修改此学生记录,这里有个while循环语句,和switch-case选择语句,用来选择修改哪 科成绩,和是否进行再修改记录(通过选择Y或y来实现)。最后将修改过后的记录保存到 文件中去,并输出提示“文件已修改并写入“。插入学生资料模块:用函数 Student *insert(Student 叮);实现主要功能是用来添加学生资料,成绩。若显示没有此学生的信息,就可以使用本模块 来进行添加。在此模块代码中定义了另一个指针数组:Student *y = (Stud

13、ent *)new Studentnum+1:用来存放新添加的学生记录。再利用for循环进行输入新学生记录, for(m=0;mnum;m + +X后会有一个提示语句cout”是否继续输入?(继续,输入y,否 则输入其他)“ 13 5 7 9件牧 到存亠倉址HFH息息序 退出戶选择江載药严学生信息输入结束后的界面:Student.txt:23赵月89.092.088.03269.089.712李丽92.085.088.03265.088.331王虎87.079.045.03211.070.3选择V2,输出了学生信息:叵r F:Debuggggg.exe11生艮及及降 宀吉33召 八学診学总 s

14、ii-13选择3按学号及学期查询学生信息:肓士冃F 3 驴査找的彳台层、支口卜 学号丄姓名 高等数学 数扌居结初 大毀语 学期 总分 平均分23 赵月89928832G989.7*兴单栏* * * * * 学工33分 卜二 5 , I八存到文件ife2翹支件旺擒: isr1退出虫学生信息 * 查询*序 冒泡排序 : 莞的昌分和平均分派X青选择:选择V4,按姓名及学期查询学生信息:0按妊务及学期查询 彳 退出i青选择:*、手甲:萝査拔时信息如F 学号丄姓名 高等数学 数拐结构 大蹑语 学期 总分 平均分23 赵月89928832G989.73 F:Debuggggg.exe选择按学号及学期修改学

15、生信息:1 1 3 5 ? 9 / 回赵月到怠m序 护it一审 奮改辱 息 1 億i子序 生及停薛 学号号旦分 、佥1.总 8別【交.菱爰參* * x * * 卿曲记录? 5冶菜兰栏*3修改学生的大粋话成绩记录2侈改学竺的数据结构成绩记录丄傷改学生的高等数学成绩记录 F:Debuggggg.exe学忌择新要已遼蠶静严: 退曲麟叽到息息序 序亠1515徘 俣询改陈郢 并杳修删超 貝 13 5 7 9 02 4 6 8 1 ,插入学生信息:r F:Debuggggg.exe-请园爭:6 请谕入竽期泠 请领.学号江? 请嗡譬:王万 诗嗡入高等数学成绩:羽 请諭執展石构厨綾14继续输人?(W.输人,否

16、则输入其他) 攵件已经写入棊亘栏務请选择:Student.txt:23赵月89.092.088.03269.089.712李丽92.085.088.03265.088.331王虎87.079.085.03211.070.317王万78.079.086.03243.081.0选择V7儿按学号及学期删除学生信息: F:Debuggggg.exe“WOWSX退出*W改聲 杏_修删辦 学学学序 K及号号0务 吗交丈于总 妥亠艾安安* * * * 312 号期 I 的的 生绩IA 期写 :7夢亜痉 择1A-X匕 选搜薯 青主冃主写、 % Ti t T % Tr Y /信息: 13 5 7 9 ZX *i

17、青选择:23赵月89.088.088.03269.089.712李丽92.088.088.03265.088.317土力78.086.086.03243.081.0Student.txt:选择,按数据结构降序v冒泡排序: F:Debuggggg.exe读取交件茄前出宇生恪息-戳春萨期查询*插阳ft鸚曲 退出1d白4息序 F 亠一目一一罪 奮汝酸 并W修删餌 ffiss 主及及及隆 学号号口茅 人竺SST总 8KI81=岂序件交入息 信 住学询 一 并学W IA1 读霞按幻 02 4 6 8 1 - :禾泡八刀到息息序 与信拿 蛊改除? 并査修删餌 息 13 5 7 9 X 件到自3息序 保询.

18、改除約 沖査修删巔 急 千学学序 生及及及降 学号号賈刀 金辜忌* * * *分泡分 冒a息 信 生 学询 岀杳_ -MCI?件及自昴 取址入数%? 2 4 6 8 1# 并查修删O 垣千学学序 生及翟 学号号耳Z刀 人学学学总 iii 1 3 5 7 9 .按总分降序v选择排序:Student.txt:23赵月89.088.088.03269.089.712李丽92.088.088.03265.088.317土力78.086.086.03243.081.选择vlO,统计各科成绩的总分和平均分:回高等数学总分为汐5夕平均分为:86.3333,u99999*exe选择11,退出:$白蕙吊件俣询改

19、聲 草学学序 生及及傍 学号q - 入azsT-忌262 2 2耳片巳总 丿 /学构潸菜单栏*高手数学 总分为:259平均分为=86.3333 数据结构总分为:262平均分为:87.3333 大学英语总分为吨2平均分为:87.3333ugggggexe“,青诜择江1IPibcs anp key to continue*分自 学询 岀杏一XX4冒巳1撚 24681 R 件文到息息 13 5 7 9 * X * * * *息期期期T 生及及&隆5.总结课程设计终于结束了感觉有很多的收获,通过课程设计我又一次巩固了所学的知识, 对学习到的理论知识进行了巩固,真正的理解及体会了。平时有很多知识都是似懂

20、非懂,通 过平时上机操作,自己也了解了一些,但在这次的课设上,之前的困惑也通过这次的课设解 决了一些,虽然还是不能够全面的理解.但是有进步就很有成就感。在课程设计中遇到不少困难.通过查阅资料,询问同学,在应用课本的前提下,拓展课外知识,完成了此次课程设 计,虽然还有许多不足之处,但是从中我学到了许多东西。我懂得了我们不能拘泥于所学知 识,应对其灵活运用。通过此次课程的设计使我认识到对知识的掌握不全面.而且感觉我们在学习专业知 识的同时还需要再加强其他方面知识的学习,因为编程有时候涉及到其他方面的知识,只有 了解了其他方面的知识才能收集资料,然后编程。在编程的过程中,又重新复习了课本,从 中学到

21、了许多以前未学到的知识,感觉非常有成就感,特别当自己把程序一点点完善时, 让我对自己更加有信心,让我对数据结构这门课程也更感兴趣了,以前我一直感觉枯燥难学 的数据结构,在编程的过程中我也愿意去认真研究学习了。这次数据结构课程设计中,多亏了同学的耐心帮助。如果没有同学的指导改错,我 会花更多的时间去找错误。在以后的学习过程中,我一定会认真负责地对待课本中的每一个 知识点,进一步充实自己,提高自己。争取在不断的练习中提高自己的层次。也希望可以在 以后的专业课当中多増加一些实践的内容,只有多动手,我们才能不断提高。6、附录:源程序清单#include #include 主要星对cin,cout之类的

22、一些操纵运算,是I/O流控制头文文件和标准控制台的输入输岀#include 件。#include #include void searchnum(Student *r);void searchname(Student *r);按按学号及学期 姓名及学期查找查找数组、结构体struct Student r/结构体int term;学期int num;学号char name12;姓名float markl;成绩1float mark2;成绩2float mark3:成绩3float sum;总分float average;平均分int num=0;声明void input(Student *r);

23、输入void output(Student *r);输出void change(Student *r);按学号及学期修改信息40按学号及学期删除信息按数据结构降序(邑泡用匸序 按总分降序(选择)排序/统计各科总分和平均分信息Student *insert(Student *r); 描入信息void shanchu(Student *r);void maopao(Student *r);void xuanze(Student *r);void tongji(Student *r);void main()cout输入学生的个数:; cinnum;全局变呈定义指针数组,存放学生个数Student *

24、p=(Student *)new Studentnum; int m;docoute ndl;cout菜单栏coutHt*八n”endl;输入学生信息并保存到文件读取文件并输出学生信息*endl;coutMt*按学号及学期查询按姓名及学期查询*endl;coutt*按学号及学期修改信息插入信息*endl;coutHt*按学号及学期删除信息按数据结构降序(冒泡)排序*endl;coutKt*按总分降序(选择)排序统计各科成绩的总分和平均分*-endl;coutHt*退出*m;switch(m)(case 1:input(p);输入break;case 2:output(p);break;case

25、 3:search num(p);break;case 4:search narne(p); break;case 5:cha nge(p);break;case 6:p二in sert(p);break;case 7:shanchu(p);break;case 8:maopao(p);break;case 9:xuanze(p); break;case 10:tongji(p);break;case 11:退岀break;while(m!=ll);输入信息void input(Student *r)FILE *fp;int n=0;int i;1为找到,0为未找到请输入学生信息-for(i=

26、0;i r(i.temn;C0UtMit输入第“vvgvv”个人的学号:cin ri.num;if(i=l)(for( n=O;nr(;cout请输入高等数学成绩:;cinr(i.markl;coutri.mark2;coutit输入大学英语成绩:;cinri.mark3;rium=ri.markl+ri.mark2+ri.rnark3;ri.average=(r(i.markl+ri.mark2+r(i.mark3y3;fp=fopen(,student.txt,Hw+,);if(!fp)coutM文件不能打JFendl;exit(O);)for( n二 0;ni; n+)fpn

27、ntf(fp,MWd %s %.lf %.lf %.lf *d %.lf%lfrn.num,r(,rfnj.rnarkl.rtnl.mark?,r(n.mari0)FILE *fp;if(fp=fopenC* student.txt ,*r,)=NULL)/r 只谀 (coutvv文件不能打开”v vendl; exit(O);for(int n=0;nvnum;n+)fscanf(fp;%d%s%ftffi6fl6d%ftir,&rn.nurn,rn.narne,&rn.markl,&rn.mark2,&rn.mark3,&rn.terrn,&rn .sum,&r(n.avera

28、ge);fclose(fp);关闭文件coutM文件已经读入Mendl;coutM 学 生 信 息 如 下Mendl;coutH 学号setw(6)姓名,setw(10)H 高等数学setw(10)M 数据结构Msetw(10)/setw(6)设罟输出宽度VV”大学英语 Msetw VV”学期 Msetw 总分 ”vvsetw(8)v“ 平均分-endl; coutMendl;for(m=0;mnum;m+)(coutrm.numsetw(6)setw(7)rm.marklsetw(10) rm.mark2setw(10)rm.mark3setw(8)rm.termseM6)rm

29、.sumsetw(6)rm.averageendl;cout ”00” 0)coutit输入要查找学生的学号:;cinn;cout11iW输入学期号:“;cink;for(int m=0:mum;m+)(if(rm.num=n&rm.term=k)/如果找到了输出并跳出循环cout要查找的信息如下endl;coutM 学号setw(6)B 姓名 ysetw(10)vv” 高等数学 Hsetw(10)M 数据 结构setw(10)H 大 学英语 MseM6)* 学 期-setw(6)总 分 ,setw(8)H 平均分 Hendl;coutr(m.numsetw(6)rm. namevvsetw(

30、7)vvilm.nnarkl.vvsetwCL0)vvrm.mark2setw(10)rm.mark3setw(8)rm.termsetw(6)rm.sumsetw(8)r(m.average0)如果没输入就查找提示cout-iW输入要查找学生的姓名二cin n;coutvv请输入学期号:“;cink;for(int m=0:mum;m+)(if(O = nO) & (rm.term = k)/如果找到了输出并跳出循环coute ndl;cout 要查找的信息如下e ndl;coutM 学号-setw(6)姓名,setw(10)H 高等数学 ”setw(10)vv” 数据 结构s

31、etw(10)H大学英语Hsetwvv “学期*setw总分“ setw(8)平均分v vendl;coutr(m.numsetw(6)r(m. namevvsetw(7)vrm.rnaddvvsetw(10)vvrnn.rnark2setw(10)rm.mark3setw(8)rm.termseM6)rm.sumsetw(8)r(m.average0)int n,k;int t=0;system(Hcls*);清屏coutM输入要修改成绩的学生学号二cin n;coutM所需修改的学期二cin k;for(int m=O:mum;m+)(if(rm.num=二n & rm.term=k)in

32、t j;coute ndl;coutH 修改前的信息如下vendl;coutM 学号setw(6)姓名,setw(10)H 高等数学 ”setw(10)vv” 数据 结构setw(10)H 大学英语 MseM6)学期setw(6)总分 Hsetw 平均分 Hendl;coutrm. numvvsetw(6)vr(rn. namevvsetw(7)vvrm.maddvvsetw(10) r(m.mark2setw(10)r(m.mark3setw(8)r(m.termsetw(6) r(m.sumsetw(8)r(m.average可以修改的项目如下nHendl;cout*ttt 1.修改学生的

33、高等数学成绩记录nMendl; coutttt 2.修改学生的数据结构成绩记录rfvvendl; coutj;switch。)case 1:cout输入新的高等数学成绩:;cinr(m.markl;break;case 2:cout输入新的数据结构成绩:;cinr(m.mark2;break;case 3:cout输入新的大学英语成绩:;cinr(m.mark3;break;t=l;cout-是否要继续修改此学生的其他成绩记录? (Y/N)-;fflush(stdm);清空输入缓冲区,通常是为了确保不影响后面的数据渎取cinchiose;)elsecoutM未输入任何信息! ! endl;if

34、(fp=fopen(n student.txt*,w,)=NULL)coutvv”文件不能打开“vvendl;exit(O);)for(n=0;nvn um;n+)fpnntf(fp,MWd %s %.lf M.lf %.lf *d %.lf Mlf,rn.nurn,r(?rn.markllrn.mark2,rfn.mark3,rtnIerrn,rn.sum,rn.average);fpnntf(fp;nM);)fclose(fp);coutvv1文件已修改并写AMendl;插入Student *insert(Student *r)FILE *fp;int m;char n;doi

35、f(fp=fopen(,student.txtM,r,)=NULL)(coutvv-文件不能打开Mendl;exit(O);for(int o=0;onum;o+4-)(fscanf(fp,d%s%f%f%ftid%flir,&ro.num,,&ro.markl,&ro.mark2,&r(o.mark3,&ro.term,&ro.sum,&r(o.average);Student *y = (Student *)new Studentnum+1; 定义另一个数组,用于存放新添加的记 录for(m=0;mrnum.term;coutHit输入学号::cinr(num.num;cou

36、tMi输入姓名:”;;coutiW输入高等数学成绩:;cinrnum.markl;coutiW输入数据结构成绩:;cinrnum.mark2;coutiW输入大学英语成绩:;cinrnum.mark3;rn urn.sum=rnu m.markl+r(num.rnark2-*-rnurn.nnark3;计算总分rnum.average=(rnum.markl+r num.mark2+r num.mark3)/3;num+-*-;coutM是否继续输入?(继续,输入y,否则输入其他),endl; cin n;while(n=y);if(fp=fopen( student

37、.txtlw+*)=NULL)coutvv”文件不能打开“V Vendl;exit(O);)for(n=0;nvnum;n+)fpnntf(fp,MMd %s %.lf Vi.lf %.lf *d %.lfVilf,rn.num,r(,rn.markl,rn.nnark2,rn.mari0)if(fp=fopen( student.txt,r,)=NULL)(coutvv*文件不能打开“v vendl;exit(O);for(int o=0;onum;o+4-)(&ro.num,,&ro.markl,&ro.mark2,&ro.mark3,&ro.term,&ro.sum,&r(o.average);int n,k,t=0;cout n;coutk;循环把后一位的信息提前一位整体数呈减一标志变量1为找到0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论