收藏 分销(赏)

数据结构课程设计学生成绩管理系统.doc

上传人:快乐****生活 文档编号:3990269 上传时间:2024-07-24 格式:DOC 页数:22 大小:82.54KB
下载 相关 举报
数据结构课程设计学生成绩管理系统.doc_第1页
第1页 / 共22页
数据结构课程设计学生成绩管理系统.doc_第2页
第2页 / 共22页
数据结构课程设计学生成绩管理系统.doc_第3页
第3页 / 共22页
数据结构课程设计学生成绩管理系统.doc_第4页
第4页 / 共22页
数据结构课程设计学生成绩管理系统.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

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

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

3、设计排序算法4。多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;6。 学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩) 7。其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等等)2、 概要设计1。 数据结构:数组(顺序存储结构)2。 程序模块:(1)先编入系统所需的库函数,使程序可运行include iostream。h#include stdlib。hinclude iomanip。h /主要是对cin,cout之类的一些操纵运算,是I/O流控制头文件。 #include num; /全局变量Student p=(Student *)n

4、ew Studentnum;/定义指针数组,存放学生个数int m;docoutendl;coutendl;coutt*-菜单栏-n”endl;coutt* 读取文件并输出学生信息 *”endl;cout”t 3 按学号及学期查询 4 按姓名及学期查询 ”endl;cout 按学号及学期修改信息 6 插入信息 ”endl;coutt 7 按学号及学期删除信息 8 按数据结构降序(冒泡)排序 endl;coutt* 9 按总分降序(选择)排序 10 统计各科成绩的总分和平均分*”endl;coutt* 11 退出 *”endl;cout”t*-*n”endl;coutm;switch(m)cas

5、e 1: input(p); /输入break;case 2:output(p);break;case 3: searchnum(p);break;case 4: searchname(p);break;case 5: change(p);break;case 6: p=insert(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!=11); 3、详细设计1、系统流程图输入学生个数

6、主界面输入学生成绩输出学生成绩查询学生成绩修改学生成绩插入学生成绩删除学生信息按总分排序按单科排序统计分数退出退出2、界面设计在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1,即可进入输入学生信息页面)3、各功能模块的设计主函数模块:用函数void main()来实现 主要是来显示主菜单,使用户选择操作.首先定义一个指针数组(全局使用)Student *p=(Student )new Studentnum;在此处num是指学生个数,并不是学号,在这里应用了dowhile和switch-case语句来进行选择。最后若选择“11则是保存记录并退出循环。输入学生记录

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

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

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

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

11、用来存放新添加的学生记录。再利用for循环进行输入新学生记录,for(m=0;mnum;m+)最后会有一个提示语句cout”是否继续输入?(继续,输入y,否则输入其他)endl;若输入y则继续输入,否则将返回主菜单。按学号及学期删除学生记录模块用函数void shanchu(Student *r)来实现 主要功能是用来删除学生记录。首先有个读文件的操作,之后会有判断语句,根据所输入的学号及学期,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。按数据结构成绩(冒泡)降序排序模块用函数void m

12、aopao(Student r)来实现 主要功能时是用来对学生的记录来按单科成绩(这里以数据结构成绩为例)进行排序。这样方便对某科成绩有个大致的了解。首先会有一个读文件操作,为排序做基础.本排序使用冒泡排序。它有两个优点:一是很容易写出代码;二是具有稳定性,这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。冒泡排序时进过n1趟子排序完成的,第i趟子排序从第1个数至第n+1个数,若第i个数比后一个数大(则升序,小则降序。本程序一律采用降序)则交换两数。排序之后,将排序之后的结果写入文件,再打开文件的时候,里面显示的就是按单科成绩排序后的结果。按总分(选择)降序排序: 用函数vo

13、id xuanze(Student r)来实现主要功能时是用来对学生的记录来按总分成绩进行排序。这样方便对学生总体有个大致的了解.首先会有一个读文件操作,为排序做基础。本排序使用选择排序.其基本思想是:n个记录的文件的直接选择排序可进过n1趟直接选择排序得到有序结果:初始状态,无序区为R1。.n,有序区为空。第一趟排序 在无序区R1。.n中选出关键字最小的记录Rk,将它与无序区的第一个记录R1交换,使R1。.n和R2。n分别变为记录个数增加1个的新有序区记录和记录数减少1个的新无序区。 。.。. 第i趟排序 第i趟排序开始时,当前有序区和无序区分别为R1.i1和R(1in1)。该趟排序从当前无

14、序区中选出关键字最小的记录Rk,将它与无序区的第一个记录与R交换,使R1.。i和R分别变成为记录个数增加1个的新有序区和记录个数减少1个的新无序区。这样,n个记录的文件的直接选择排序可经过n1趟直接选择排序得到有序结果。统计各科总分及平均分模块:用函数void tongji(Student *r)来实现 主要功能是计算总分和各科平均分,计算完之后将总分保存到文件中.4、 测试与分析进入主界面选择1输入学生信息输入结束后的界面:Student。txt:23 赵月 89.0 92。0 88。0 3 269。0 89.712 李丽 92。0 85.0 88.0 3 265。0 88。331 王虎 8

15、7。0 79.0 45。0 3 211。0 70。3选择2,输出了学生信息:选择3,按学号及学期查询学生信息:选择,按姓名及学期查询学生信息:选择,按学号及学期修改学生信息:Student。txt:23 赵月 89。0 92。0 88.0 3 269.0 89.712 李丽 92。0 85.0 88.0 3 265.0 88。331 王虎 87.0 79。0 85。0 3 211.0 70.3选择,插入学生信息:Student.txt:23 赵月 89。0 92。0 88。0 3 269.0 89。712 李丽 92。0 85。0 88.0 3 265。0 88。331 王虎 87。0 79。

16、0 85.0 3 211.0 70.317 王万 78。0 79。0 86.0 3 243。0 81.0选择7,按学号及学期删除学生信息:Student.txt:23 赵月 89.0 88.0 88。0 3 269.0 89。712 李丽 92.0 88。0 88.0 3 265。0 88。317 王万 78.0 86。0 86。0 3 243。0 81.0选择8,按数据结构降序冒泡排序:Student.txt:23 赵月 89.0 88。0 88.0 3 269.0 89。712 李丽 92.0 88。0 88。0 3 265。0 88.317 王万 78.0 86。0 86。0 3 243

17、。0 81。0选择,按总分降序选择排序:Student。txt:23 赵月 89。0 88.0 88。0 3 269.0 89。712 李丽 92.0 88.0 88.0 3 265。0 88。317 王万 78.0 86.0 86。0 3 243。0 81。选择10,统计各科成绩的总分和平均分:选择,退出:5、 总结 课程设计终于结束了感觉有很多的收获,通过课程设计我又一次巩固了所学的知识,对学习到的理论知识进行了巩固,真正的理解及体会了。平时有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进

18、步就很有成就感。在课程设计中遇到不少困难,通过查阅资料,询问同学,在应用课本的前提下,拓展课外知识,完成了此次课程设计,虽然还有许多不足之处,但是从中我学到了许多东西.我懂得了我们不能拘泥于所学知识,应对其灵活运用.通过此次课程的设计使我认识到对知识的掌握不全面,而且感觉我们在学习专业知识的同时还需要再加强其他方面知识的学习,因为编程有时候涉及到其他方面的知识,只有了解了其他方面的知识才能收集资料,然后编程。在编程的过程中,又重新复习了课本,从中学到了许多以前未学到的知识,感觉非常有成就感,特别当自己把程序一点点完善时,让我对自己更加有信心,让我对数据结构这门课程也更感兴趣了,以前我一直感觉枯

19、燥难学的数据结构,在编程的过程中我也愿意去认真研究学习了。这次数据结构课程设计中,多亏了同学的耐心帮助。如果没有同学的指导改错,我会花更多的时间去找错误。在以后的学习过程中,我一定会认真负责地对待课本中的每一个知识点,进一步充实自己,提高自己。争取在不断的练习中提高自己的层次.也希望可以在以后的专业课当中多增加一些实践的内容,只有多动手,我们才能不断提高.6、附录:源程序清单 include include include /数组、结构体struct Student /结构体int term; /学期int num; /学号char name12; /姓名float mark1; /成绩1fl

20、oat mark2; /成绩2float mark3; /成绩3float sum; /总分float average; /平均分;int num=0;/声明void input(Student r); /输入void output(Student r); /输出void searchnum(Student *r); /按 学号及学期 查找void searchname(Student *r); /按 姓名及学期 查找void change(Student *r); /按 学号及学期 修改信息Student insert(Student *r); /插入信息void shanchu(Stude

21、nt r); /按 学号及学期 删除信息void maopao(Student r); /按数据结构降序(冒泡)排序void xuanze(Student r); /按总分降序(选择)排序void tongji(Student r); /统计各科总分和平均分信息void main()cout输入学生的个数:;cinnum; /全局变量Student *p=(Student )new Studentnum;/定义指针数组,存放学生个数int m;docoutendl;coutendl;coutt*-菜单栏-n”endl;cout”t* 1 输入学生信息并保存到文件 读取文件并输出学生信息 ”en

22、dl;cout 按学号及学期查询 4 按姓名及学期查询 *”endl;cout 插入信息 ”endl;cout 按数据结构降序(冒泡)排序 *”endl;coutt 按总分降序(选择)排序 10 统计各科成绩的总分和平均分endl;coutt* 11 退出 ”endl;coutt*-nendl;cout”请选择:”;cinm;switch(m)case 1: input(p); /输入break;case 2:output(p);break;case 3: searchnum(p);break;case 4: searchname(p);break;case 5: change(p);brea

23、k;case 6: p=insert(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!=11); /输入信息void input(Student r)FILE fp;int n=0;int i;int t=0;/t为标志位,1为找到,0为未找到 coutendl”- 请输入学生信息 -”endl;for(i=0;inum;i+)cout”请输入学期:”;cinri。term;cou

24、t请输入第”i+1=1)for(n=0;nri。name;coutri。mark2;cout”请输入 大学英语 成绩:;cinri。mark3;ri。sum=ri.mark1+ri。mark2+ri。mark3;ri.average=(ri.mark1+ri.mark2+ri。mark3)/3;fp=fopen(”student.txt”,w+);if(!fp) cout”文件不能打开”endl;exit(0); for(n=0;ni;n+)fprintf(fp,”d s %。1f 。1f 。1f d 。1f %.1f,rn。num,rn。name,rn.mark1,rn。mark2,rn。m

25、ark3,rn。term,rn.sum,rn。average);fprintf(fp,n);fclose(fp);cout”文件已经写入”endl;/输出信息void output(Student r) int m;system(”cls”); /清屏if(num0)FILE fp;if(fp=fopen(”student。txt,”r”))=NULL) /r只读cout”文件不能打开”endl;exit(0); for(int n=0;nnum;n+)fscanf(fp,”d%s%fffdff”,rn。num,rn.name,&rn。mark1,rn。mark2,rn.mark3,&rn。t

26、erm,rn.sum,&rn.average);fclose(fp); /关闭文件cout”文件已经读入”endl;cout- 学生信息如下 -endl;cout”学号setw(6)”姓名”setw(10)”高等数学”setw(10)”数据结构setw(10) /setw(6) 设置输出宽度大学英语”setw(6)”学期”setw(6)总分”setw(8)”平均分endl;cout-”endl;for(m=0;mnum;m+)coutrm。numsetw(6)rm。namesetw(7)rm。mark1setw(10)rm。mark2setw(10)rm.mark3setw(8)rm.term

27、setw(6)rm。sumsetw(6)rm。averageendl;cout”00”endl;elsecout”未输入任何信息!!”endl;/按学号及学期查找void searchnum(Student r)int n,k;system(”cls”); /清屏if(num0)coutn;cout请输入学期号:;cink;for(int m=0;mnum;m+)if(rm.num=nrm.term=k)/如果找到了输出并跳出循环coutendl;cout- 要查找的信息如下 -”endl;cout”学号”setw(6)姓名”setw(10)高等数学”setw(10)数据结构”setw(10)

28、大学英语”setw(6)学期”setw(6)”总分”setw(8)”平均分endl;coutrm。numsetw(6)rm.namesetw(7)rm.mark1setw(10)rm.mark2setw(10)rm。mark3setw(8)rm.termsetw(6)rm.sumsetw(8)rm.averageendl;break;if(rm。num!=n&rm。term!=k)/若没找到提示不存在cout”该学号不存在,或没有这个学期的成绩!”n;cout请输入学期号:;cink;for(int m=0;mnum;m+)if(rm.name0 = n0) (rm。term = k)) /如

29、果找到了输出并跳出循环coutendl;cout- 要查找的信息如下 -”endl;cout”学号setw(6)”姓名”setw(10)”高等数学setw(10)数据结构setw(10)大学英语”setw(6)”学期”setw(6)总分setw(8)平均分endl;coutrm。numsetw(6)rm.namesetw(7)rm.mark1setw(10)rm.mark2setw(10)rm.mark3setw(8)rm。termsetw(6)rm.sumsetw(8)rm.averageendl;break;if(rm。name0!=n0rm。term!=k) /若没找到提示不存在cout

30、”该姓名不存在,或没有这个学期的成绩!endl;elsecout”未输入任何信息!!”endl;/按学号及学期修改信息 void change(Student r) FILE *fp;int n=0;char chiose =Y;if(num0)int n,k;int t=0;system(”cls”); /清屏cout输入要修改成绩的学生学号:”;cinn;coutk;for(int m=0;mnum;m+)if(rm。num=n & rm。term=k)int j;coutendl;cout”- 修改前的信息如下 -endl;cout”学号”setw(6)”姓名”setw(10)”高等数学”setw(10)”数据结构”setw(10)”大学英语”

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服