C 成绩管理系统实验报告含源代码

上传人:liy****100 文档编号:54836995 上传时间:2018-09-20 格式:DOC 页数:27 大小:113.50KB
返回 下载 相关 举报
C  成绩管理系统实验报告含源代码_第1页
第1页 / 共27页
C  成绩管理系统实验报告含源代码_第2页
第2页 / 共27页
C  成绩管理系统实验报告含源代码_第3页
第3页 / 共27页
C  成绩管理系统实验报告含源代码_第4页
第4页 / 共27页
C  成绩管理系统实验报告含源代码_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C 成绩管理系统实验报告含源代码》由会员分享,可在线阅读,更多相关《C 成绩管理系统实验报告含源代码(27页珍藏版)》请在金锄头文库上搜索。

1、学生成绩管理系统设计报告学生成绩管理系统设计报告一、一、需求分析:需求分析:用数组或链表数据结构完成一个学生成绩管理系统,此系统的具体功能要求如下:(1)学生信息录入功能)学生信息录入功能1)用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、政治、程序设计基础、物理五门课成绩。2)可插入一个或多个学生信息到当前编辑的班级数据中。3) 可删除一个或多个学生信息。(2)文件保存功能)文件保存功能1)学生信息每一班存为一个数据文件,数据文件可在程序中打开、编辑和 重新保存。2)用户输入学生信息可随时保存数据文件。 (3)文件打开功能)文件打开功能1)程序只能对当前打开的数据文件进行编辑。

2、(4)查询功能)查询功能1)浏览所有学生信息;2)按学号查询学生信息;3)按姓名查询学生信息;4) 查询一个班总成绩和平均成绩;5) 查询一个班某一门课总成绩和平均成绩;6)查询某一门课分数段( 90)学生数。 (5)报表输出功能)报表输出功能1) 按学号输出一个班学生信息:学号、姓名、性别、数学、英语、政治、 程序设计基础、物理成绩和总成绩,到屏幕和文件。2) 按总成绩输出从高到低输出学号、姓名信息。注:以上功能以菜单形式供用户使用,并有一定的容错功能。二、二、概要设计概要设计整体框架: 整个学生成绩管理系统采用链表作为基本数据结构,创建一个类 student 用于保 存学生的数据且是链表中

3、的一个节点。类 list 作为保存整个链表之用。主函数 通过 switch 语句来根据用户的需要连接各个模块,以实现用户的需要。模块基本介绍: 1. 用户输入模块用户输入模块 在此模块中,用户将根据菜单提示结合自己的需求输入一个 011 的值,来实现一定的功能。 2. 学生信息录入模块学生信息录入模块此模块可以让用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、政治、程序设计基础、物理五门课成绩。用户可插入一个或多个学生信息到当前编辑的班级数据中。 用户可删除一个或多个学生信息。3.文件保存功能模块文件保存功能模块用户在确定以录入的成绩无误之后,可以将学生信息以每一班为单位存为一个数

4、据文件。用户输入的学生信息可随时保存数据文件。4. 文件打开功能模块文件打开功能模块用户可以用此模块将数据文件在程序中打开、编辑,程序只能对当前打开的数据文件进行编辑。5. 查询功能模块查询功能模块在此模块里,用户可实现以下操作:1.浏览所有学生信息;2.按学号查询学生信息;3.按姓名查询学生信息;4.查询一个班每个人的总成绩和平均成绩; 5.查询一个班某一门课每个人的总成绩和平均成绩;6)进行成绩的统计分析:包括总人数,每门课的最高成绩、最低成绩、平均成绩、各个分数段的人数(100-90、89-80、79-70、69-60、59-50、50 以下) 、及格人数。6. 报表输出功能模块报表输出

5、功能模块在此模块中,用户可以浏览所有学生的信息,或者可以按学号输出一个班学生信息:学号、姓名、性别、数学、英语、政治、程序设计基础、物理成绩和总成绩,到屏幕和文件。也可以按总成绩输出从高到低输出学号、姓名信息。模块图:模块图:开始m值 1,3,4值 8值 9值 7,2,6,5值 10,11文件保存功能模文件保存功能模 块块学生信息录入模学生信息录入模 块块文件打开功能模文件打开功能模块块查询功能模块查询功能模块报表输出功能模块用户输入,并 将值保存至 m 中m结束三、三、详细设计详细设计主要功能模块的算法设计思路: 1. 用户输入模块设计用户输入模块设计 提示用户输入一个 011 的值,并存储

6、在一个整型变量 m 中。 2. 学生信息录入模块设计学生信息录入模块设计 通过应用 list 中的 instu()函数,来新建一个链表中的节点,即一个新的学生 信息,来进行成绩的录入功能。成绩修改功能,可以根据姓名或学号进行查询 并修改相应的课程的成绩,使用了 void search(char s10,int)和 void search1(char s20,int)函数进行操作。search 函数根据姓名查找,search1 函数根据学号进行 查找。因为学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比 较进行查找的。然后根据整形参数进行对应的课程成绩的修改。成绩删除功能, 也是可以根

7、据姓名或学号进行删除,查询的算法和成绩修改功能的查询方法是 一样的,当找到要删除的节点时,因为节点都是在堆内存中保存的,所以可以 直接 delete 掉,并将前一个节点的 next 指针指向被删掉的节点的 next 指针所指 向的节点。 3. 文件保存功能模块文件保存功能模块 先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级 名称和成绩单的开头,然后通过 ofstream 变量 output 来进行学生信息的输出, 一项一项的输出,并设定格式,直到输出节点为 NULL 为止,之后关闭 output。 4. 文件打开功能模块文件打开功能模块先提示用户输入要打开的数据文件的名称,然

8、后通过一个 ifstream 变量input 来进行文件操作。首先判断文件是否存在,如果不存在则输出“File does not exist“,并跳出 switch 语句。文件存在的话,则可以进行数据的存入了。因为数据文件具有固定的格式,即开头两行是班级名称和表头,则可以先用两次input.getline(temp,80);语句来将 input 设置到第三行,此时可以将数据通过 input读入链表中。先用 input.eof()判断文件中是否有数据,若有数据,则进行数据的读入,直到文件结束。5. 查询功能模块查询功能模块可以根据姓名或学号进行查找,搜索方法和前几个模块相同。通过outstu1(

9、char *n)和 outstu(char *n)来进行输出。总成绩和平均成绩的查询通过函数 void outsum(char *)和 void outsum1(char *)来完成。通过函数 scanall()来浏览所有学生的信息。通过函数 think()来进行成绩的统计分析。6. 报表输出功能模块报表输出功能模块通过建立一个新的类 class stucopy 用于拷贝 student 的数据,并实现排序功能。创建一个 stucopy stuM数组,将原链表的数据拷贝与数组中,然后用选择排序方法将数组排序,然后用 output 按照标准的格式输出或保存为数据文件。四、四、程序结构程序结构源代

10、码:#include#include#include#includeconst int M = 20;class stucopy/此类用于拷贝此类用于拷贝 student 的数据,用于排序功能的实现的数据,用于排序功能的实现public:char id20;char sex10;char name10;double grade5;double sumsum;/总成绩总成绩double average;/平均成绩平均成绩;class student/用于保存学生信息的类用于保存学生信息的类friend class list;public:char id20;/保存学号保存学号char sex10

11、;/保存性别保存性别char name10;/保存名字保存名字double grade5;/保存成绩保存成绩student()next=0;for (int i=0;ioutgrade(i);return sum;double outav()return this-outsum()/5;double outgrade(int i)return gradei;void intgrade(int);void student:intgrade(int j)/用于修改学生的成绩用于修改学生的成绩 switch (j)case 1:coutgrade0;break;case 2:coutgrade1;b

12、reak;case 3:coutgrade2;break;case 4:coutgrade3;break;case 5:coutgrade4;break;void student:s()/用于录入学生的信息用于录入学生的信息coutid;coutname;coutsex;coutgrade0;coutgrade1;coutgrade2;coutgrade3;coutgrade4;class list/此类为链表此类为链表private:double high5,low5;public:student *last,*first;/链表的开头和结尾链表的开头和结尾double totoal;lis

13、t()last=0;first=0;list();void instu();/新建一个学生的数据新建一个学生的数据void outstu(char *);/根据姓名输出一个学生的信息根据姓名输出一个学生的信息int delstu(char *n);/根据姓名删除一个学生的信息根据姓名删除一个学生的信息void outstu1(char *);/根据学号输出一个学生的信息根据学号输出一个学生的信息int delstu1(char *n);/根据学号删除一个学生的信息根据学号删除一个学生的信息void outsum(char *);/根据姓名输出一个学生的总成绩和平均成绩根据姓名输出一个学生的总成

14、绩和平均成绩void outsum1(char *);/根据学号输出一个学生的总成绩和平均成绩根据学号输出一个学生的总成绩和平均成绩void think();/用于输出班级成绩的统计分析用于输出班级成绩的统计分析void search(char s10,int);/根据姓名修改一个学生的成绩根据姓名修改一个学生的成绩void search1(char s20,int);/根据学号修改一个学生的成绩根据学号修改一个学生的成绩double hi(int i);/求某门课的最高分求某门课的最高分double lo(int i);/求某门课的最低分求某门课的最低分void av(int i);/求某门

15、课的平均分求某门课的平均分void ev(int i);/用于班级成绩统计分析的人数分布输出用于班级成绩统计分析的人数分布输出void scanall();/输出所有学生的信息输出所有学生的信息;list:list()/析构函数,将所有创建的学生对象删掉析构函数,将所有创建的学生对象删掉if(first!=0)student *p=first,*temp;while(p!=NULL)temp=p;p=p-next;delete temp;couts();if(first=0)first=last=p;elselast-next=p;last=p;void list:outstu(char *n

16、)if(first=0) coutnext)if(strcmp(temp-outname(),n)=0) coutoutid()outname()outsex()outgrade(0)outgrade(1)outgrade(2)outgrade(3)outgrade(4);return;coutnext)if(strcmp(temp-outid(),n)=0) coutoutid()outname()outsex()outgrade(0)outgrade(1)outgrade(2)outgrade(3)outgrade(4);return;coutoutname(),n)=0) first=first-next;delete temp;coutnext!=NU

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号