C++定稿课程设计-学生成绩管理系统设计与实现_第1页
C++定稿课程设计-学生成绩管理系统设计与实现_第2页
C++定稿课程设计-学生成绩管理系统设计与实现_第3页
C++定稿课程设计-学生成绩管理系统设计与实现_第4页
C++定稿课程设计-学生成绩管理系统设计与实现_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1342班 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源

2、代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 课程设计目的11.1 课程背景及意义11.2 课程简介1第2章 系统实现思路32.1 需求分析32.2 功能需求分析4第3章 系统详细设计53.1系统总体结构设计53.2数据结构设计5第4章 系统调试运行74.1系统函数的组成及功能、参数说明、相互调用关系74.2设计测试流程194.3运行结果20课程设计体会25参考文献26第1章 课程设计目的1.1 课程背景及意义一直以来人们使用传统的人工方式管理学生成绩,在计算机尚未在学校广泛使用之前,学生成绩管理主要依靠手工。一个最典型的手工处理过程就是:当考试完后,老师就要把学生成

3、绩登记到文档中,当老师或学生要查询成绩的时候要一个一个去找,总分、平均分都需要一个一个累加起来算,很麻烦,不过最麻烦的还是排名,不能一目了然。以上所描述的手工过程的不足之处显而易见,首先处理学生成绩的效率很低,其次处理能力比较低,一段时间内,所能服务的读者人数是有限的。利用计算机来处理这些流程无疑会极大程度地提高效率和处理能力。我们很清晰的看到自己的各个科目成绩和每个科目的排名和总分排名以及所有学生的成绩分布,而且还是零失误,所有的都是一目了然。极大的方便了学生和老师。为提高成绩管理效率,管理人员的工作负担,有必要开发一个小型成绩管理系统来对学生成绩实施有效管理。1.2 课程简介为了使对该课程

4、有更好的了解,此报告还列举出了程序代码中的一系列具体函数以及它的作用及功能。下面列举源代码中的部分函数:1)printheader( )函数原型:void printheader( )该函数用于在以表格形式显示学生记录时,打印输出表头信息。2) stringinput( )函数原型:void stringinput(char *t,int lens,char *notice)该函数用于输入字符串,并进行字符串长度验证。T用于保存输入的字符串,因为是以指针形式传递的,所以t相当于该函数的返回值。3) Disp( )函数原型:void Disp(link l)该函数用于显示单链表l中存储学生的记录

5、,内容为student结构中定义的内容。4) Add( )函数原型:void Add(link l)第2章 系统实现思路2.1 需求分析2.1.1 功能分析(1)设计四个类,包括学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称,如高等数学,大学英语等);(2)学生成绩及课程信息用文件保存,程序执行时从文件读入;(3)能按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;(4)求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平

6、时成绩、期末成绩、平时成绩所占百分比 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比) 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件) 注意,至少应包含一个班、30人、三门课 2.1.2 系统性能要求 (1)系统安全可靠;(2)功能齐全;(3)操作方便,界面友好; (4)易于维护和补充。2.2 功能需求分析1)录入数据:将学生姓名、语文、数学、英语成绩写入文件。2)增加人员:增加学生,并将学生姓名和成绩写入文件。3)删除人员:删除学生信息和成绩。4)修改数据:修改学生成绩。5)按总成

7、绩查询:根据总分查询学生成绩,包括平均分。6)按姓名查询:根据学生姓名查询学生成绩,包括总分和平均分。7)输出所有学生成绩:输出文件中所有学生数据。8)按总分排名:按照总分从高到低排序。9)按语文成绩排名:按照语文成绩从高到低排序。10)按数学成绩排名:按照数学成绩从高到低排序。11)按英语成绩排名:按照英语成绩从高到低排序。第3章 系统详细设计3.1系统总体结构设计 对学生成绩进行管理的系统,主要划分为以下三个模块: 1)操作:包括录入数据、增加人员、删除人员、修改数据。2)查询:包括按总成绩查询、按姓名查询、输出所有学生成绩。3)排名、按语文成绩排名、按数学成绩排名、按英语成绩排名学生成绩

8、管理系统操作查询排名增加人员按总成绩查询录入数据删除人员修改数据按姓名查询输出全部数据按总分排名语文成绩排名数学成绩排名英语成绩排名图3-13.2数据结构设计3.2.1 类的设计Stu类Stu类char name20;double math;double chinese;double english;double average;double sum;double getsum();double getaver();图3-23.2.2系统包含的类库#include 输入输出流#include String类#include 文件输入/输出操作3.2.3各个变量的定义和作用char name20

9、; 学生姓名double math; 数学成绩double chinese; 语文成绩double english; 英语成绩double average; 平均分double sum; 总分Stu *s50; 对象数组记录学生成绩第4章 系统调试运行4.1系统函数的组成及功能、参数说明、相互调用关系主函数 main()调用菜单操作函数handle_menu()实现菜单的输出和操作,调用index()打印首页。以及删除动态对象。#includehead.hextern i;extern Stu *s50; int main() index();coutendl;coutendl;cout*欢迎

10、进入学生成绩管理系统*endl;handle_menu();for(int x=0;xi;x+) delete sx; coutdelete all members!p;if(p=0&p=10) flag2=1;else cout指令错误!请重新输入:endl; while(flag2=0);switch(p)case 0:operate0();/操作0数据录入break;case 1:operate1();/操作1增加人员break;case 2:operate2();/操作2删除人员break;case 3:operate3();/操作3修改数据break;case 4:operate4(

11、);/操作4按总成绩查询break;case 5:operate5();/操作5按姓名查询break;case 6:operate6();/操作6输出所有学生的数据break;case 7:operate7();/操作7按总分排名break;case 8:operate8();/操作8按语文成绩排名break;case 9:operate9();/操作9按数学成绩排名break;case y:operatey();/操作y按英语成绩排名break; cout您想继续进行其他操作吗?(y/n)w;if(w!=y&w!=n)cout指令错误!请重新输入!endl; else flag4=1;whi

12、le(flag4=0);if(w=y)handle_menu();菜单函数 void menu()这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的十一大功能,根据每个功能前面的序号进行选择。void menu()/定义菜单函数 coutendl;coutendl;cout 请选择您需要的操作!endl; coutendl;cout操作:endl; cout (0)数据录入endl; cout (1)增加人员endl; cout (2)删除人员endl; cout (3)修改数据endl; cout查询:endl; cout (4)按总成绩查询endl; cout (5)按

13、姓名查询endl; cout (6)输出所有学生的数据endl;cout排名:endl; cout (7)按总分排名endl; cout (8)按语文成绩排名endl; cout (9)按数学成绩排名endl; cout (y)按英语成绩排名endl; cout选择相关操作请输入相对的括号里的字符!endlendl;打印首页函数 void index()这是一个无参函数,主要功能是打印本系统的相关信息。默认构造函数Stu: Stu()这是Stu类中的一个默认构造函数,实现对象的初始化。Stu:Stu(char n20,double ma,double chin,double eng)strcp

14、y(name,n); math=ma; chinese=chin; english=eng;double Stu:getsum()/定义求总分函数sum=chinese+english+math;return sum;double Stu:getaver()/定义求平均分函数average=getsum()/3;return average;有参构造函数Stu: Stu(char n20,double ma,double chin,double eng)这个函数的功能主要是对对象的数据成员赋值。求总分函数double Stu:getsum()这是一个无参函数,主要功能是将每个对象的语文、数学、

15、英语三科成绩求和,返回总分sum。求平均分函数double Stu:getaver()这是一个无参函数,调用double Stu:getsum()平均分,返回平均分average操作0数据录入函数void operate0()这是一个无参函数,是Stu类的一个友元函数,该函数可将用户输入的学生的信息保存到文件d:document,输入完成后会提示用户是否要继续录入。int i=0;/定义全局变量int j=0;/定义全局变量Stu *s50;/定义对象数组void operate0()char name20;char c; ofstream *file50; bool flag2=0;doub

16、le math,chinese,english;docout请输入姓名:name;cout请输入数学成绩:math;cout请输入语文成绩:chinese;cout请输入外语成绩:english;filej=new ofstream(d:document,ios:ate);/通过文件保存学生成绩到d:document*filej姓名name数学成绩math语文成绩chinese外语成绩englishendl; j+; si=new Stu(name, math, chinese, english); i+; cout数据录入成功,想继续录入吗(y/n)c; flag2=0; do if(c!=

17、y&c!=n) cout指令错误!请重新输入!c; else flag2=1; while(flag2=0); while(c=y); 操作1增加人员函数void operate1()这是一个无参函数,是Stu类的一个友元函数,该函数可以增加学生人数,提示用户输入的学生的信息,并保存到文件d:document,输入完成后会提示用户是否要继续录入。操作2删除人员函数void operate2()这是一个无参函数,是Stu类的一个友元函数,进入后系统会提示用户输入需要删除学生的姓名,然后查找该学生,删除该学生数据,并将其后指针往前移动一位,最后提示用户是否继续删除。extern i;/引用外部变量

18、extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate2()char name20;char c; bool flag3=0;docout请输入您要删除的学生姓名:name;for(int h=0;hname) = 0)flag3 = 1; i-;dosh=sh+1;h+;while(h=i);if(flag3=0)cout您要求删除的对象本来就不存在!请检查输入的正确性!;cout要继续删除吗?(y/n)c;if(c!=y&c!=n)cout指令错误!请重新输入!c;while(c=y);操作3修改数据函数void operate3()这是一个

19、无参函数,是Stu类的一个友元函数,进入后系统会提示用户输入需要修改学生的姓名,该函数的功能是修改学生的成绩,防止了录入数据时的错误,保证了系统的完备性。操作4按总成绩查询函数void operate4()这是一个无参函数,是Stu类的一个友元函数,进入后系统会提示用户输入需要查询的总分,然后输出所有该分数的学生的成绩,并提示用户是否需要继续查询。extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate4()char c; double t;doint flag1=0;cout请输入你要查询学生的总成绩t;for(i

20、nt q=0;qgetsum()=t)flag1=1;cout您要查询的学生是:(*sq).nameendl;if(flag1=0)cout对不起!您要查询的学生不存在!endl; cout您想继续查询吗?(y/n)c;if(c!=y&c!=n)cout指令错误!请重新输入!c;while(c=y);操作5按姓名查询函数void operate5()这是一个无参函数,是Stu类的一个友元函数。进入后系统会提示用户输入需要查询的学生姓名,然后输出该学生的成绩,并提示用户是否需要继续查询。extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量

21、void operate5()char name20;char c; char n20;doint flag=0;cout请输入你要查询的学生姓名n;for(int j=0;ji;j+) if(strcmp(n,(*sj).name)=0)flag=1;cout您要查询的学生是:(*sj).nameendl;cout(*sj).name的总成绩成绩是(*sj).getsum()endl平均成绩是:(*sj).getaver()endl; if(flag=0)cout对不起!您要查询的学生不存在!endl;cout您想继续查询吗?(y/n)c;if(c!=y&c!=n)cout指令错误!请重新输

22、入!c;while(c=y);操作6输出所有学生的数据函数void operate6()这是一个无参函数,是Stu类的一个友元函数,进入后系统将自动输出该系统下所有学生的成绩,但并不排序,而是按照录入是的顺序输出,输出之后提示用户是否需要进行其它操作。extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate6()char name20;char c; bool flag2=0; cout本系统所有学生数据如下:endl;if(i=0)cout管理系统中没有录入数据或者数据已经被删除!endl;for(int k=0;

23、ki;k+)/数据输出coutk+1 姓名: name 语文: chinese 数学:math 外语:english 总分:(*sk).getsum() 平均分:(*sk).getaver()endl;操作7按总分排名函数void operate7()这是一个无参函数,是Stu类的一个友元函数,进入后系统将按照总分从高到低自动输出该系统下所有学生的成绩,输出之后提示用户是否需要进行其它操作。extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate7()char name20;char c; bool flag2=0;

24、 int t;Stu b;cout本系统所有学生排名如下:endl; for(int x=0;xi-1;x+)t=x;for(int y=x+1;ygetsum()getsum()t=y;if(t!=x)b=*sx; *sx=*st; *st=b;if(i=0)cout管理系统中没有录入数据或者数据已经被删除!; for(int k=0;ki;k+)/数据输出coutk+1 姓名: name 语文: chinese 数学:math 外语:english 总分:(*sk).getsum() 平均分:(*sk).getaver()endl;操作8按语文成绩排名函数void operate8()这是

25、一个无参函数,是Stu类的一个友元函数,进入后系统将按照语文成绩从高到低自动输出该系统下所有学生的成绩,输出之后提示用户是否需要进行其它操作。操作9按数学成绩排名函数void operate9()这是一个无参函数,是Stu类的一个友元函数,进入后系统将按照数学成绩从高到低自动输出该系统下所有学生的成绩,输出之后提示用户是否需要进行其它操作。操作y按英语成绩排名函数void operatey()这是一个无参函数,是Stu类的一个友元函数,进入后系统将按照英语成绩从高到低自动输出该系统下所有学生的成绩,输出之后提示用户是否需要进行其它操作。extern i;/引用外部变量extern j;/引用外

26、部变量extern Stu *s50;/引用外部变量void operatey()char name20;char c; bool flag2=0; double math,chinese,english;int t;Stu b;cout本系统所有学生英语排名如下:endl;for(int x=0;xi-1;x+)t=x;for(int y=x+1;yenglishenglish)t=y;if(t!=x)b=*st; *st=*sx; *sx=b;if(i=0)cout管理系统中没有录入数据或者数据已经被删除!for(int k=0;ki;k+)/数据输出coutk+1 姓名: name 语文

27、: chinese 数学:math 外语:english 总分:(*sk).getsum() 平均分:(*sk).getaver()endl;4.2 设计测试流程4.2.1 软件总体测试方案 (1)在查询模块中查看学生信息做记录; (2)在修改模块中进行信息修改并再次进行查看比对; (3)删除一个学生的信息并进行信息查询; (4)新增一个学生信息,并查看记录。4.2.2 软件总体测试结果 (1)在界面上显示了学生的成绩信息,查询工作正常;(2)修改某学生成绩后查看,该学生成绩信息改变;(3)删除一个学生信息查询,没有该学生的信息;4.2.3 软件局部测试方案(1)测试查询模块,主要看信息显示是

28、否与输入一致;(2)测试修改模块,主要看修改是否成功;(3)测试删除模块,看能否进行信息删除。4.2.4 软件局部测试结果 (1)查询模块正常工作; (2)修改模块正常,能正常修改信息; (3)能进行学生信息的删除。4.2.5 软件测试结论 学生成绩管理系统基本可以进行正常工作。4.3运行结果1. 进入系统,显示本系统相关信息。2. 根据系统提示,进入菜单界面。图4-1系统主页3. 输入0,回车,按提示输入数据。图4-2输入数据输入y,回车,进行其他操作,将会回到菜单界面。 4. 回到菜单界面在输入1,回车,增加人员,按提示输入数据。图4-3增加数据输入y,回车,进行其他操作,将会回到的菜单界

29、面。5. 回到菜单界面再输入6,回车,输出所有学生的数据,检测操作0和操作1。运行结果如图4-4所示图4-4输出数据输入y,回车,进行其他操作,将会回到菜单界面。6.回到菜单界面再输入7,回车,测试按总分排名。运行结果如图4-5所示。图4-5按总分排名输入y,回车,进行其他操作,将会回到所示的菜单界面。7.回到菜单界面再输入3,回车,测试修改数据。修改完后,进入菜单,选择操作6输出所有学生数据。修改如下:张亮:语文99 数学98 英语97吴豪:语文98 数学97 英语99刘杰:语文97 数学99 英语98运行结果如图4-6所示。图4-6输出数据8.运用修改后的数据,测试按语文、数学、英语成绩排

30、名(1) 测试按语文成绩,运行结果如图4-7所示。图4-7按语文成绩排名(2) 测试按数学成绩,运行结果如图4-8所示。图4-8按数学成绩排名(3) 测试按英语成绩,运行结果如图4-9所示。图4-9按英语成绩排名9.回到菜单界面再输入2,测试删除数据,删除学生刘杰的数据。运行结果如图4-10所示。图4-10删除数据10.回到菜单界面再输入4,测试按总分查询,运行结果如图4-11所示。图4-11按总分查询11.回到菜单界面再输入5,测试按姓名查询,运行结果如图4-12所示。图4-12按姓名查询12.测试完毕。输入n,退出系统。课程设计体会在本次课程设计学习的过程中,使我对软件工程有了更多的认识。

31、在老师的指导和自己的努力下,终于完成了本次课程设计。上机实验是学习程序设计语言必不可少的实习环节,特别是c+语言灵活、简洁,更需要通过编程的学习来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能实现。在为期一周的课程设计过程中,使我熟悉了C+编程语言,但也体现了我的种种不足,希望在以后的学习生活当中能够改正。只要努力,就能获得成功。参考文献1朱福喜.c+语言程序设计(第二版).科学出版社2陈国君.c+程序设计基础(第二版).清华大学出版社3Deitel.c+大学基础教程(第六版).电子工业出版社4MaryC

32、ampione.c+语言导学(第四版).机械工业出版社5Y.Daniel Liang.c+语言程序设计基础篇(第六版). 机械工业出版社6谭浩强.c+面向对象程序设计(第六版). 清华大学出版社#include #include #include#include#includeusing namespace std; class Tstu /通过定义一个类来定义数据录入的函数 char name20; int number; float math,cpp,english,average,sum; public: Tstu() ; Tstu ( char n20, int num,float m

33、a,float cj,float eng ) ; float getsum();/得到总分的函数 float getaver(); /得到平均分的函数 friend void main(); /将主函数定义为友元函数,方便访问类中的成员 ; Tstu:Tstu ( char n20, int num,float ma,float cj,float eng ) strcpy(name,n); /得到姓名 number=num; /得到学号 math=ma; /得到数学成绩 cpp=cj; /得到c+成绩 english=eng; /得到英语成绩 float Tstu:getsum() /得到总分

34、的函数 sum=cpp+english+math; return sum; float Tstu:getaver() /得到平均分的函数 average=getsum()/3; return average; void main() cout*欢迎来到学生成绩查询系统*endl; cout请选择您需要的操作!endl; /菜单的输出 cout操作:endl; cout(1)数据录入endl; cout(2)增加学生endl; cout(3)删除学生endl; cout(4)修改数据endl; cout查询:endl; cout(5)按总成绩查询endl; cout(6)按姓名查询endl; c

35、out(7)输出所有学生的数据endl; cout成绩统计:endl; cout(8)每个学生的平均成绩endl; cout(9)各科不及格人数endl; cout排名:endl; cout(10)按总分查询排名endl; cout(11)退出endl; cout选择相关操作请输入相对的括号里的阿拉伯数字及字母!p; if(p=1&p=11) chris1=1; else cout指令错误!请重新输入:endl; while(chris1=0); do switch(p) case 1: /数据的录入 char c; /用于在小项中选择是否继续操作 char name20; int numbe

36、r; float math,cpp,english; do cout请输入姓名:name; cout请输入学号:number; cout请输入数学成绩:math; cout请输入C+成绩:cpp; cout请输入英语成绩:english; fstream outfile,infile; /作一个文本文档在文件夹中用于显示所录入的数据 outfile.open(f1.txt,ios:out|ios:app); if(!file) coutf1.txt can not open.n; return; outfilename 学号:number 数学成绩:math C+成绩:cpp 外语成绩:eng

37、lishendl; outfile.close(); infile.open(f1.txt,ios:in); if(!file) /判断文件是否打开 coutf1.txt can not open.n; return; char ch; while(infile.get(ch) coutch; coutendl; infile.close(); j+; si=new Tstu(name, number,math, cpp, english); i+; cout数据录入成功,想继续录入吗(y/n)c; chris1=0; do if(c!=y&c!=n) cout指令错误!请重新输入!c; else chris1=1; while(chris1=0); while(c=y); /重复输入 break; case 2: /增加学生数据 char name20; int number; float mat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论