C++成绩管理系统实验报告(含源代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生成绩管理系统设计报告
需求分析:
用数组或链表数据结构完成一个学生成绩管理系统,此系统的具
体功能要求如下:
(1)学生信息录入功能
I )用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、政
治、程序设计基础、物理五门课成绩。
2)可插入一个或多个学生信息到当前编辑的班级数据中。
3)可删除一个或多个学生信息。
(2) 文件保存功能
1) 学生信息每一班存为一个数据文件,数据文件可在程序中打开、编辑和 重新
保存。
2) 用户输入学生信息可随时保存数据文件。
(3) 文件打开功能
I )程序只能对当前打开的数据文件进行编辑。 (4)
査询功能 1) 2) 3) 4) 5) 6) (5) 报表输出功能
1) 按学号输岀一个班学生信息:学号、姓名、性别、数学、英语、政治、 程序
设计基础、物理成绩和总成绩,到屏幕和文件。
2) 按总成绩输出从高到低输出学号、姓名信息。
注:以上功能以菜单形式供用户使用,并有一定的容错功能。
概要设计
浏览所有学生信息;
按学号査询学生信息.
按姓名査询学生信息;
査询一个班总成绩和平均成绩;
査询一个班某一门课总成绩和平均成绩;
査询某一门课分数段(<60,60-69,70-79,80-89,>90)学生数。
整体框架: 整个学生成绩管理系统采用链表作为基本数据结构,创建一个类student用于保存学生的数据且是链表中的一个节点。类list作为保存整个链表之用。主函数通过switch语句来根据用户的需要连接各个模块,以实现用户的需要。
模块基本介绍:
1.用户输入模块
在此模块中,用户将根菜单提示结合自己的需求输入一个0~11的值,来实现一定的功能。
2.学生信息录入模块
此模块可以让用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、
政治.程序设计基础.物理五门课成绩.用户可插入一个或多个学生信息到当前编辑的班级数据中。用户可删除一个或多个学生信息。
3.文件保存功能模块
用户在确定以录入的成绩无误之后,可以将学生信息以每一班为单位存为一
个数据文件。用户输入的学生信息可随时保存数据文件。
4.文件打开功能模块
用户可以用此模块将数据文件在程序中打开、编辑,程序只能对当前打开的
数据文件进行编辑。
5.査询功能模块在此模块里,用户可实现以下操作:1•浏览所冇学生信息;2•按学号査询学生信息:3•按姓名査询学生信息;4•査询一个班每个人的总成绩和平均成绩;5•査询一个班某一门课每个人的总成绩和平均成绩;6)进行成绩的统计分析:包括总人数, 每门课的最髙成绩.最低成绩.平均成绩.各个分数段的人数(100-90. 89-80.
79・70、69-60^ 59-50. 50以下入及格人数。
6.报表输出功能模块在此模块中,用户可以浏览所有学生的信息,或者可以按学号输出一个班学生信息:学号、姓名、性别、数学、英语.政治、程序设计基础、物理成绩和总成绩, 到屏辅和文件。也可以按总成绩输出从高到低输出学号、姓名信息。
模块图:
详细设计
主要功能模块的算法设计思路:
1.用户输入模块设计
提示用户输入一个0~11的值,并存储在一个整型变量m中。
2.学生信息录入模块设计
通过应用list中的instiiO函数,来新建一个链表中的节点,即一个新的学生信息,来进行成绩的录入功能。成绩修改功能,可以根据姓名或学号进行査询并修改相应的课程的成绩,使用了void search(char s[IO],int)和void search I (char s[20],int)函数进行操作。search函数根DR姓名査找,searchi函数根据学号进行査找。因为学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比较进行査找的。然后根拥整形参数进行对应的课程成绩的修改。成绩删除功能,也是可以根据姓名或学号进行删除,査询的算法和成绩修改功能的查询方法是一样的,当找到要删除的节点时,因为节点都是在堆内存中保存的,所以可以直接delete 并将前一个节点的next指针指向被删掉的节点的next指针所指向的节
' 3.文件保存功能模块
先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级名称和成绩单的开头,然后通过ofstream变量output来进行学生信息的输出,一项一项的输出,并设定格式,直到输出节点为NULL为止,之后关闭output。
4.文件打开功能模块
先提示用户输入要打开的数据文件的名称,然后通过一个ifstream变量input 來进行文件操作。首先判断文件是否存在,如果不存在则输出Tile does not exist”,并跳出switch语句.文件存在的话,则可以进行数据的存入了。因为数
据文件具有固定的格式,即开头两行是班级乞祢和表头,则可以先用两次
input.getline(temp,80);语句来将input设置到第三行,此时可以将数据通过input 读入链表中。先用input.eofO判断文件中是否有数据,若有数据,则进行数据的读入,直到文件结束。
5.査询功能模块
可以根据姓名或学号进行査找,搜索方法和前几个模块相同。通过
outstul(char *n)和outstu(char *n)來进行输出。总成绩和平均成绩的査询通过函数void outsum(char *)和void outsuml(char *)来完成。通过函数scanallO来浏览所有
学生的信息。通过函数thinkO来进行成绩的统计分析。
6.报表输出功能模块
通过建立一个新的类class stucopy用于拷贝student的数据,并实现排序功能。创建一个stucopy stu[Ml数组,将原链表的数据拷贝与数组+,然后用选择排序方法将数组排序,然后用oinpia按照标准的格式输出或保存为数据文件。