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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

辽宁科技大学课程设计报告设计题目:学生成绩管理学院、系:电子与信息工程学院专业班级:计算机11-2班学生姓名:赵月指导教师:龙艳彬成绩:2013年1月8日2目录一、需求分析------------------------------------------------3二、概要设计------------------------------------------------3三、详细设计------------------------------------------------53.1系统流程图-----------------------------------------------------53.2界面设计-------------------------------------------------------63.3各功能模块的设计----------------------------------------------7四、测试与分析---------------------------------------------9五、总结-----------------------------------------------------15六、附录(源代码)--------------------------------------1631.需求分析1.1问题描述本系统实现了学生成绩管理的功能,具有学生成绩的输入、读取、查询、修改、插入、删除、排序,统计等功能。1.2基本要求(1)输入的形式和输入值的范围;首先输入学生个数,按回车键。按照提示选择,将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。输入数据类型主要是char、int、float等数据类型,输入内容包括:学期、学号、姓名、高等数学成绩,数据机构成绩,大学英语成绩总分,平均分等数据。(2)输出的形式;学期、学号、姓名、高等数学成绩,数据结构成绩,大学英语成绩,总分,平均分等数据。(3)程序所能达到的功能;1.数据输入功能,输入的数据能最终保存在文件中;2.数据删除功能,能最终从文件中删除;3.排序功能,根据自己设计的数据结构,设计排序算法4.多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;6.学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)7.其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等等)2、概要设计1.数据结构:数组(顺序存储结构)2.程序模块:(1)先编入系统所需的库函数,使程序可运行#includeiostream.h#includestdlib.h#includeiomanip.h//主要是对cin,cout之类的一些操纵运算,是I/O流控制头文件。#includeconio.h//文件和标准控制台的输入输出#includestdio.h(2)主界面的设计在主界面中包括“①输入学生信息并保存到文件②读取文件并输出学生信息③按学号及学期查询④按姓名及学期查询⑤按学号及学期修改信息⑥插入信息⑦按学号及学期删除信息⑧按数据结构降序(冒泡)排序⑨按总分降序(选择)排序⑩统计各科成绩的总分和平均分11退出”等全部的功能。每个函数体如下:voidinput(Student*r);//输入voidoutput(Student*r);//输出voidsearchnum(Student*r);//按学号及学期查找voidsearchname(Student*r);//按姓名及学期查找voidchange(Student*r);//按学号及学期修改信息4Student*insert(Student*r);//插入信息voidshanchu(Student*r);//按学号及学期删除信息voidmaopao(Student*r);//按数据结构降序(冒泡)排序voidxuanze(Student*r);//按总分降序(选择)排序voidtongji(Student*r);//统计各科总分和平均分信息(3)Main()函数的设计在main()函数中主要运用do-while循环语句和switch()-case选择判断语句来调用相关功能模块。系统的运行是在一个循环里进行的,只有在主界面并选择“退出”时,才会跳出循环,并退出程序。voidmain(){cout输入学生的个数:;cinnum;//全局变量Student*p=(Student*)newStudent[num];//定义指针数组,存放学生个数intm;do{coutendl;coutendl;cout\t*-----------------------------菜单栏-----------------------------*\nendl;cout\t*1输入学生信息并保存到文件2读取文件并输出学生信息*endl;cout\t*3按学号及学期查询4按姓名及学期查询*endl;cout\t*5按学号及学期修改信息6插入信息*endl;cout\t*7按学号及学期删除信息8按数据结构降序(冒泡)排序*endl;cout\t*9按总分降序(选择)排序10统计各科成绩的总分和平均分*endl;cout\t*11退出*endl;cout\t*------------------------------------------------------------------*\nendl;cout请选择:;cinm;switch(m){case1:input(p);//输入break;case2:output(p);5break;case3:searchnum(p);break;case4:searchname(p);break;case5:change(p);break;case6:p=insert(p);break;case7:shanchu(p);break;case8:maopao(p);break;case9:xuanze(p);break;case10:tongji(p);break;case11://退出break;}}while(m!=11);}3、详细设计1、系统流程图62、界面设计在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1,即可进入输入学生信息页面)输入学生个数主界面输入学生成绩输出学生成绩查询学生成绩修改学生成绩插入学生成绩删除学生信息按总分排序按单科排序统计分数退出退出73、各功能模块的设计主函数模块:用函数voidmain()来实现主要是来显示主菜单,使用户选择操作。首先定义一个指针数组(全局使用)Student*p=(Student*)newStudent[num];在此处num是指学生个数,并不是学号,在这里应用了do-while和switch-case语句来进行选择。最后若选择“11”则是保存记录并退出循环。输入学生记录模块:用函数voidinput(Student*r);来实现主要功能用来对学生的成绩进行输入。首先会有个提示“输入学生的个数”,之后跳出主菜单,选择1,进入输入模块输入所需学生个数的学生信息,比如学期,学号,姓名,成绩等。输完之后会自动跳出主菜单。期间会有一些提示语,按照提示操作。根据if和for语句来判定是否有重复学号输入,在本操作中,允许有重复学生姓名出现。t=1表示找到了与之重复的学号,t=0表示未出现重复学号。在此期间会根据语句算出总分和平均分,并默认按学号排序保存到文件中去。之后返回主菜单。输出学生记录模块:用函数voidoutput(Student*r);来实现主要功能是用来输出学生的信息。在系统已经录入了学生资料的前提下,用该功能可以显示学生的信息资料。同时也会自动跳出主菜单进行后续操作。其中stew()指的是两字节之间的间隔,在括号中填入数字就会有相应的间隔。按学号及学期来查找学生记录模块:用函数voidsearchnum(Student*r);来实现主要功能时用来查找学生记录。首先会有提示输入学号及学期,再用for循环语句和if判断语句来进行查找,if(r[m].num==n&&r[m].term==k)若找到则显示学生记录并跳出循环;if(r[m].num!=n&&r[m].term!=k)若没有则提示“该学号不存在,或没有这个学期的成绩!”。按姓名及学期来查找学生记录模块:用函数voidsearchname(Student*r)来实现主要功能也是用来查找学生记录的。首先会有提示输入姓名及学期,再用for循环语句和if判断语句来进行查找,if((r[m].name[0]==n[0])&&(r[m].term==k))若找到则显示学生记录并跳出循环;if(r[m].name[0]!=n[0]&&r[m].term!=k)若没有则提示该姓名不存在,或没有这个学期的成绩!按学号及学期修改信息:用函数voidchange(Student*r)来实现主要功能是用来修改学生记录。首先也要有个判断语句,判断学生是否存在,这个是通过学号及学期来判断的,这里会有提示输入学号及学期,之后是for和if语句,if(r[m].num==n&&r[m].term==k)若存在则先输出修改之前的信息,查看是否正确。若正确,则修改此学生记录,这里有个while循环语句,和switch-case选择语句,用来选择修改哪科成绩,和是否进行再修改记录(通过选择Y或y来实现)。最后将修改过后的记录保存到文件中去,并输出提示文件已修改并写入。插入学生资料模块:用函数Student*insert(Student*r);实现主要功能是用来添加学生资料,成绩。若显示没有此学生的信息,就可以使用本模块来进行添加。在此模块代码中定义了另一个指针数组:Student*y=(Student*)new8Student[num+1];用来存放新添加的学生记录。再利用for循环进行输入新学生记录,for(m=0;mnum;m++)最后会有一个提示语句cout是否继续输入?(继续,输入y,否则输入其他)endl;若输入y则继续输入,否则将返回主菜单。按学号及学期删除学生记录模块用函数voidshanchu(Student*r)来实现主要功能是用来删除学生记录。首先有个读文件的操作,之后会有判断语句,根据所输入的学号及学期,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。按数据结构成绩(冒泡)降序排序模块用函数voidmaopao(Student*r)来实现主要功能时是用来对学生的记录来按单科成绩(这里以数据结构成绩为例)进行排序。这样方便对某科成绩有个大致的了解。首先会有一个读文件操作,为排序做基础。本排序使用冒泡排序。它有两个优点:一是很容易写出代码;二是具有稳定性,这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。冒泡排序时进过n-1趟子排序完成的,第i趟子排序从第1个数至第n+1个数,若第i个数比后一个数大(则升序,小则降序。本程序一律采用降序)则交换两数。排序之后,将排序之后的结果写入文件,再打开文件的时候,里面显示的就是按单科成绩排序后的结果。按总分(选择)降序排序:用函数voidxuanze(Student*r)来实现主要功能时是用来对学生的记录来按总分成绩进行排序。这样方便对学生总体有个大致的了解。首先会有一个读文件操作,为排序做基础。本排序使用选择排序。其基本思想是:n个记录的文件的直接选择排序可进过n-1趟直接选择排序

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功