学生成绩管理系统设计与实现76.docx
《学生成绩管理系统设计与实现76.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统设计与实现76.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现6 .查找并显示学生资料模块主要功能是用来查找学生资料。在系统保存了某学生资料的前提下,想要查 找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩 等信息7 .按姓名查找,修改学生资料模块主要功能是用来修改学生资料。在系统保存了某学生资料的前提下,想要查 找该学生资料,可以输入该学生姓名,系统就会显示该学生资料和各科成绩等信 息,这样就可以修改该学生的资料,成绩等信息。8 .从文件中读入数据模块主要功能是用来从文件中读入学生数据。由于一些资料可以用Word文档或 Excel表格输入,故在此模块中增加了导入
2、数据的功能。这样就方便很多,不用 把学生资料一个一个添加,节省了很多时间精力。9 .储存学生资料并退出系统模块主要功能是用来储存学生资料。在对系统进行一系列操作,比方添加、删除、 修改学生资料后,对系统的最新操作进行保存,及时更新系统,方便下一次的操 作。3. 2概要设计1 .学生成绩管理软件的数据结构学生成绩一般都是以班级为单位进行管理的,一个班级用一个结点来表示。 考虑到插入和删除的方便,这些以班级为单位的结点用链表方式组成一个主目 录。每个结点有四个域:班级代号;课程情况;学生情况;班级顺序链。课程情况应能反映出大专生所学过的全部课程。因课程是逐年增多的,所以 采用链表结构以便能不断插入
3、新的课程。该班学过的课程构成一个课程链表,所 以班级结点中的课程情况用课程链表表示。学生情况主要反映学生的学号,姓名, 每学期学生的成绩情况。因为学号总是顺序排列的,所以选用一个结构体数组作 为反映学生情况的登陆记表。该 数组的下标值接上班级结点中的班级号就是学 号。例如,设每班学生数不超过40个人,班级号为9612,某学生在登记表中相 应分量的下标值为26,那么该学生的学号为961226。另外,学生成绩管理要分6 个学期,所以在学生登记表中,开设6个指针域,每个指针指向该生某学期某门 课程学成绩的结点。各结点结构如下所示:主目录中班级的结点为:班级号课程链班级顺序链学生登记表程链表中的结点:
4、课程代号学期号二叉树链课程顺序链分数链表中的结点为:左链学号课程代号成绩分数顺序右链为了便于登记和查询学生的成绩,选择二叉排序来存放学生的成绩。每个班级的每门课程对应一棵二叉树。通过主目录中班级结点的课程链找到 指定的课程结点,再通过课程结点中的二叉树指针指向该门课程的成绩二叉排序 树。另外通过主目录中班级结点的学生登记表中的学期指针,指向该学生本学期 某门课程的分数结点,并以分数结点的分安数顺序链勾链该生各门课程的成绩。在登记成绩和查询分数时,都要用到课程代号。课程 代和课程名称是一一对 应的。为了简化程序,课程名称和代号对照表设计为一个向量,向量的下标值就 作为课程代号,而向量中的元素就是
5、课程名称,这样可以省去代号域。2 .各函数的功能和实现学生成绩管理的相关功能由对应的函数来实现。(1)学生注册登记学生入学后,首先应是注册登记。注册时应先检查该学生所在班级是否已经 登入主目录,未登入那么假设调用新结点后登陆入主目录。然后将新调入的班级结点 中对应域赋初值,最后再读入学生的学号和姓名并一一填入学生登记表。这样就 完成了 一个班级的注册和登记工作。(2)登记学生成绩学生注册后才可以登记成绩,所以先要检查这个班级是否已经注册,班级中 是否有这个学生。在确认有此学生后,登记该生成绩。这时需完成两个操作。一 个查询课程代号,另一个是将成绩填入二叉树。这两个操作分别用两个函数来实 现:查
6、询课程代号;插入二叉排序树。有了这两个函数,登记学生成绩的工作可以很方便地完成。首先查处课程代 号,调用课程结点,填入课程代号和学期号;再在二叉树链域中置初值为NULL, 将课程结点插入为课程链表的头结点。接着读入每个学生的学号和成绩,每个学 生的每门课程都生成一分数结点插入到相应课程的二叉树中。同时,还要将该分 数结点链入该生这学期各科成绩的分数链表中。学生登记表中的学期指针域中存 放该分数链表的头结点地址。(3)修改学生成绩假设登记的学生成绩有错误,那么调用修改学生成绩的函数便可以加以修改。修 改时从主目录出发,查到班级,再从学生登记表中查对学号和姓名,再在与学期 匹配的学期指针域中取得该
7、生的学生链表的头指针,然后搜索分数链表,查到指 定课程的分数结点,就可修改成绩。(4)打印一个班级学生的单科成绩由于学生成绩是用二叉树排序树来存储的,所以采用中序遍历的方法就可以 按次序打印出学姓名和成绩。在打印了程序中,从主目录开始查到班级号,就可 以从课程结点的二叉树链域中取得成绩二叉排序树的头指针;然后调用中序遍历 了程序就可进行打印,同时可求出平均成绩和各个分数段的人数。(1)求出每个学生一学期中各科的平均成绩此程序从主目录查对班级号开始,通过学生登记表中每个学生的学期指针取 得各自的分数链表的头指针。顺着分数链就可求出该生本学期各科的平均成绩。(2)打印某一课程成绩处于指定分数段内的
8、学生名单对二叉树序树进行中序扁历,但扁历时应判断当前成绩是否处于分数段内而 决定是否打印。103. 3类的设计与要求1 .含的库函数有:#include#include#include#include#include2 .主函数void main()|cout*欢迎来到学生成绩查询系统*endl;cout *请选择您 需要的操作!*endl; /菜单的输出cout操作:endl;coutz/ (1)数据录入endl;cout,z (2)增加学生endl;cout,z (3)删除学生endl;cout/,(4)修改数据endl;cout查询:endl;cout (5)按总成绩查询endl;cou
9、t,z (6)按姓名查询endl;cout/z(7)输出所有学生的数据endl;cout成绩统计:endl;cout,z(8)每个学生的平均成绩Gendl;cout/z(9)各科不及格人数endl;cout排名:zzendl;coutzz (10)按总分查询排名endl;cout (11)退出退ndl;cout * 感谢您 的使用*endlcout 选择相关操作请输入相对的括号里的阿拉伯数字及字母!zzendl;113 .数据的查询所谓数据的查询,就是把存放在文档中的学生数据读取出来并加以输出。当只针对某个人的查询时,需要输入学号或姓名,再调用read。函数将相 关的数据读取出来,至少需要输出
10、那些,可以自己控制。当要输出所有学生的数据时,首先调用read。函数返回数据的个数,即学 生的个数count。最后采用for循环控制依次输出每一个学生的信息。case 5 :按总分查询int j=0;double SUM; char c;int flag;if (i=0)(cout系统中没有输入数据,请先输入数据! /zendl; break;) do ( flag=0; cout请输入您要查询的学生的总成绩:endl; cinSUM;for(int j=0;jgetsum()二二SUM)(flag=l;coutX”您要查询的学生是:(*sj). nameendl;cout该生的信息为:z/e
11、ndl;coutz/ 学号:(*s j). numberV高数平时成 绩:(*s j). mathp/z 高数期末成 绩:(*sj). mathl,z 6C+平时成 绩: (*s j). cpppz/ - C+平时成 绩:6(*sj).cppl 英语平时成 绩:(*s j). englishpz/ 英语平时成 绩;englishl,/ 班 级:(*sj).classn 课程编 号:(*sj).kcnuni* 所选课 程:(*sj).kcnameendl;)if (flag=0) cout对不起!您要查询的学生不存在! /zc;if (c!=y &c!二n )12coutc;);while(c二
12、二y);break;4 .数据的删除移一个结点,再如此进行下去,直到遇到表尾为止。对数据删除,只需输入 学号或姓名,当找到该生的相关信息后,将后面一个学生的信息赋值给他,相当 于该生的信息被覆盖,也就是删除。删除记录函数void delete_func (void)这是一个有参函数,先输入要删除 的学生记录的姓名,找到后显示该学生信息,等确认后可进行删除。算法:从p指向的第一个节点开始,检查该节点中的num值是否等于输入的 要求删除的那个姓名。如果相等就将该结点删除,如不相等,就将P后 case 3:删除学生信息char c;string xingming, line, str, name;d
13、o(ifstream fin(f1. txt);fstream outfile(f2. txt,ios:trunc|ios:out);coutxingming;while(!fin. eof ()(getline (fin,line);istringstream stream (line);name = line, substr (0, line, find(, 0);找到名字,判断是否 相等if (name != xingming) outfilelineendl; )outfile. close();fin. close ();fstream f (fl. txt,ios:trunc|io
14、s:out);ifstream outf (/zf2. txt);foutf. rdbuf ();outf. close ();f. close ();13coutc;if (c!=y &c!=n,)(cout指令错误!请重新输入! c;)while(c二二y); break;)5 .修改数据当修改数据时,只需输入需要修改学生的学号即可。首先会将该生的相关信 息输出来,然后再提示重新输入信息。执行到这里时基本就和前面的数据录入, 插入就一样了。修改函数void modify_func (void)这是一个有参函数,先输入要修改的学 生姓名,找到后对其成绩进行修改。算法:先将headnext赋值
15、给当前位置current然后用while函数对其进行 定义然后检查该节点中的姓名是不是要P找的,如果相等就修改,如不相等,就 将current-next赋值给current在与p节点比拟,直到遇到表尾为止。 if(i=0) |cout系统中没有输入数据,请先输入数据!endl;break;) do flag=0;coutname;fstream fin (f1. txt,ios:in);ofstream outfile(f. txt,ios:trunc|ios:out);coutendl;while(!fin. eof ()getline(fin, line);istringstream st
16、ream(line);sname = line. substr(0, line. find(,z ,0);if (name!=sname)outfilelineendl;14else flag=l;fin. close ();if (flag=l)(coutnamenumathpmathlcpppcpplenglishpenglishl; coutendl;outf ilename/z 学号:高数平时成绩:高数期末成绩:mathl c+平时成 绩:cppp - C+期末成绩:cppl 代英语平时成 绩:englishp英语期末成绩:englishl(所选课程name 3/z 总成绩:z,sum
17、,z 平均分:/zendl; outfile. close();fstream outf (/zf 1. txt,ios: : trunc | ios: :out);fstream inf (f.txt,ios:in);outfinf. rdbuf()endl;outf. close (); inf. close ();6 .建立学生成绩纪录类该类stuscore是学生成绩记录的集合。其成员函数那么 是问题中要求的添加、显示、查找、删除、保存、导出等各种操作等各种操作。class stuscore(student head;public:bool add_recora();添加学生成绩记录vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 设计 实现 76
限制150内