C++成绩管理系统实验报告(含源代码).docx
《C++成绩管理系统实验报告(含源代码).docx》由会员分享,可在线阅读,更多相关《C++成绩管理系统实验报告(含源代码).docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学生成绩治理系统设计报告一、需求分析:用数组或链表数据构造完成一个学生成绩治理系统,此系统的具体功能要求如下:(1) 学生信息录入功能1) 用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理五门课成绩.2) 可插入一个或多个学生信息到当前编辑的班级数据中.3) 可删除一个或多个学生信息。(2文件保存功能1) 学生信息每一班存为一个数据文件,数据文件可在程序中翻开、编辑和重保存。2用户输入学生信息可随时保存数据文件。(3文件翻开功能1程序只能对当前翻开的数据文件进展编辑。(4查询功能1扫瞄全部学生信息;2) 按学号查询学生信息;3) 按姓名查询学生信息;4 查询
2、一个班总成绩和平均成绩;5) 查询一个班某一门课总成绩和平均成绩;6查询某一门课分数段( 90学生数。(5) 报表输出功能1 按学号输出一个班学生信息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理成绩和总成绩,到屏幕和文件。2) 按总成绩输出从高到低输出学号、姓名信息。注:以上功能以菜单形式供用户使用,并有确定的容错功能. 二、概要设计整体框架:整个学生成绩治理系统承受链表作为根本数据构造,创立一个类student 用于保存学生的数据且是链表中的一个节点。类list 作为保存整个链表之用。主函数通过switch 语句来依据用户的需要连接各个模块,以实现用户的需要。模块根本介绍:1.
3、用户输入模块在此模块中,用户将依据菜单提示结合自己的需求输入一个 011 的值,来实现确定的功能。2. 学生信息录入模块此模块可以让用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理五门课成绩.用户可插入一个或多个学生信息到当前编辑的班级数据中. 用户可删除一个或多个学生信息。3. 文件保存功能模块用户在确定以录入的成绩无误之后,可以将学生信息以每一班为单位存为一个数据文件。用户输入的学生信息可随时保存数据文件.4. 文件翻开功能模块用户可以用此模块将数据文件在程序中翻开、编辑,程序只能对当前翻开的数据文件进展编辑。5. 查询功能模块在此模块里,用户可实现以下
4、操作: 1.扫瞄全部学生信息; 2。按学号查询学生信息;3.按姓名查询学生信息;4.查询一个班每个人的总成绩和平均成绩; 5。查询一个班某一门课每个人的总成绩和平均成绩;6进展成绩的统计分析:包括总人数,每门课的最高成绩、最低成绩、平均成绩、各个分数段的人数100-90、8980、7970、6960、59-50、50 以下)、及格人数。6. 报表输出功能模块在此模块中,用户可以扫瞄全部学生的信息,或者可以按学号输出一个班学生信 息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理成绩和总成绩, 到屏幕和文件.也可以按总成绩输出从高到低输出学号、姓名信息。模块图:开头m值 1,3,4值 8
5、值 9值 7,2,6,5值 10,11学生信息录入模块文件保存功能模块文件翻开功能模块查询功能模块报表输出功能模块用户输入,并将值保存至 m 中m完毕三、具体设计主要功能模块的算法设计思路:1。用户输入模块设计提示用户输入一个 011 的值,并存储在一个整型变量 m 中。2. 学生信息录入模块设计通过应用 list 中的 instu)函数,来建一个链表中的节点,即一个的学生信息,来进展成绩的录入功能 .成绩修改功能,可以依据姓名或学号进展查询并修改相应的课程的成绩,使用了void searchchar s10,int和 void search1(char s20,int函数进展操作。searc
6、h 函数依据姓名查找,search1 函数依据学号进展查找。由于学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比较进展查找的。然后依据整形参数进展对应的课程成绩的修改。成绩删除功能,也是可以依据姓名或学号进展删除,查询的算法和成绩修改功能的查询方法是一样的,当找到要删除的节点时,由于节点都是在堆内存中保存的,所以可以直接delete 掉,并将前一个节点的 next 指针指向被删掉的节点的next 指针所指向的节点.3. 文件保存功能模块先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级名称和成绩单的开头,然后通过 ofstream 变量 output 来进展学生信息的输
7、出,一项一项的输出,并设定格式,直到输出节点为 NULL 为止,之后关闭 output.4。 文件翻开功能模块先提示用户输入要翻开的数据文件的名称,然后通过一个 ifstream 变量 input 来进展文件操作。首先推断文件是否存在,假设不存在则输出 “File does not exist,”并跳出 switch 语句.文件存在的话,则可以进展数据的存入了。由于数据文件具有固定的格 式,即开 头两行是 班级名称和 表头, 则可以先用 两次input.getlinetemp,80;语句来将 input 设置到第三行,此时可以将数据通过 input 读入链表中。先用input.eof推断文件中
8、是否有数据,假设有数据,则进展数据的读入,直到文件完毕.5. 查询功能模块可以依据姓名或学号进展查找,搜寻方法和前几个模块一样。通过outstu1(char *n)和 outstuchar *n)来进展输出。总成绩和平均成绩的查询通过函数 void outsum(char 和 void outsum1(char *)来完成。通过函数 scanall)来浏览全部学生的信息。通过函数 think(来进展成绩的统计分析.6. 报表输出功能模块通过建立一个的类 class stucopy 用于拷贝 student 的数据,并实现排序功能。创立一个 stucopy stuM数组,将原链表的数据拷贝与数组
9、中,然后用选择排序方法将数组排序,然后用 output 依据标准的格式输出或保存为数据文件。四、程序构造源代码:include #includestring.hincludeiomanip.hincludefstream。hconst int M = 20;class stucopy/此类用于拷贝 student 的数据,用于排序功能的实现public:char id20; char sex10; char name10; double grade5;double sumsum;/总成绩double average;/平均成绩;class student/用于保存学生信息的类friend cl
10、ass list; public:char id20;/保存学号char sex10;/保存性别char name10;/保存名字double grade5;/保存成绩student)next=0;for (int i=0;i20;i+) for i=0;i10;i+ for (i=0;i10;i+idi=0; sexi=0; namei=0;void s);void setidchar id120)for(int i=0;i20;i+ idi=id1i;void setsex(char sex110for(int i=0;i10;i+) sexi=sex1i;void setnamechar
11、 name110forint i=0;i10;i+) namei=name1i;void setgradedouble grade15)forint i=0;i5;i+ gradei=grade1i;student next;/next 指向下一个学生,构成链表char * outid)return id;char outsex)return sex;char outnamereturn name; double outsum)double sum=0; forint i=0;i5;i+sum+=this-outgradei); return sum;double outav)return t
12、his-outsum/5; double outgradeint ireturn gradei; void intgradeint;;void student: intgradeint j)/用于修改学生的成绩switch jcase 1:case 2:case 3:case 4:coutgrade0;break;coutgrade1;break;coutgrade2;break;cout “请输入程序设计根底成绩:n”; cingrade3;break;case 5:coutgrade4;break;void student::s(/用于录入学生的信息coutid; coutname;cou
13、tsex;coutgrade0; coutgrade1;cout”请输入政治成绩:n“; cingrade2;cout “请输入程序设计根底成绩:n”; cingrade3;cout “请输入物理成绩:n”; cingrade4;class list/此类为链表private:double high5,low5; public:student *last,first;/链表的开头和结尾double totoal;list)last=0;first=0;;list);void instu);/建一个学生的数据void outstu(char );/依据姓名输出一个学生的信息int delstu(
14、char n);/依据姓名删除一个学生的信息void outstu1char *);/依据学号输出一个学生的信息int delstu1(char n);/依据学号删除一个学生的信息void outsumchar );/依据姓名输出一个学生的总成绩和平均成绩void outsum1char *);/依据学号输出一个学生的总成绩和平均成绩void think;/用于输出班级成绩的统计分析void searchchar s10,int;/依据姓名修改一个学生的成绩 void search1(char s20,int);/依据学号修改一个学生的成绩double hi(int i);/求某门课的最高分d
15、ouble loint i;/求某门课的最低分void avint i);/求某门课的平均分void ev(int i;/用于班级成绩统计分析的人数分布输出 void scanall;/输出全部学生的信息;list:list(/析构函数,将全部创立的学生对象删掉iffirst!=0student p=first,*temp; while(p!=NULL temp=p;p=p-next; delete temp; coutnext=p;last=p;void list::outstu(char niffirst=0 cout“班级无成员!查无此人!”next) ifstrcmp(tempoutn
16、ame(,n=0coutsetw8)”学号”setw8)“姓名“setw(6)“性别”setw(6) ”数学“setw(6“英语“setw(6 “政治”setw14)”程序设计根底“ setw(6”物理“endl;coutsetw8)temp-outidsetw(8tempoutname(setw6 temp-outsex(setw6tempoutgrade(0)setw6 temp-outgrade(1)setw(6)temp- outgrade2)setw(14)tempoutgrade3setw(6tempoutgrade(4);return; cout“查无此人!” endl;retu
17、rn;void list::outstu1char n)if(first=0) cout”班级无成员!查无此人!”outid,n=0coutsetw8 “学号”setw8”姓名“ setw6”性别“setw6”数学”setw6)“英语“setw6 “政治“ setw(14)“程序设计根底“setw6”物理”endl;coutsetw(8)outidsetw(8tempoutname setw6)tempoutsex setw(6outgrade(0)setw(6) tempoutgrade1)setw(6) temp-outgrade2) setw(14 temp-outgrade(3)set
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 成绩管理系统 实验 报告 源代码
限制150内