1、目录1引 言21.1 课题背景及意义21.2 可行性分析22系统需求分析42.1 功效需求分析42.2 性能需求分析42.3 系统总体结构设计43具体设计63.1 数据结构设计63.2系统函数组成、功效、参数说明、相互调用关系74设计测试步骤95结束语14参考文件15附录16学生成绩管理系统学生姓名:张亮 指导老师:胡宁静摘 要 本课程设计关键处理学生成绩管理问题。使用计算机进行信息管理,不仅提升了工作效率,而且大大提升了其安全性.尤其对于复杂信息管理,计算机能够充足发挥它优越性.学生成绩管理系统是一个教育单位不可缺乏部分,它内容对于学校决议者和管理者来说全部至关关键。在课程设计中,系统开发平
2、台为Windows XP,程序设计设计语言采取Visual C+,程序运行平台为Windows 98/XP。在程序设计中,采取了面向对象处理问题方法。程序经过调试运行,初步实现了设计目标。关键词 程序设计;C+;成绩管理1引 言 为方便对学生成绩进行高效管理,编写该程序以提升学生成绩管理效率。使用该程序以后,学校管理者能够查询某位学生、某个科目标成绩情况,还能够对学生成绩进行排名,对学生数据进行修改和删除,其中排名包含总分排名和各个科目标排名,学生能够更具自己个人信息进行成绩查询,查询结果包含各个科目标分数、总分和平均分。经过本系统能够很好掌握学生成绩分布,减轻管理人员负担,也使学生成绩和信息
3、长时期保留。1.1 课题背景及意义一直以来大家使用传统人工方法管理学生成绩,在计算机还未在学校广泛使用之前,学生成绩管理关键依靠手工。一个最经典手工处理过程就是:当考试完后,老师就要把学生成绩登记到文档中,当老师或学生要查询成绩时候要一个一个去找,总分、平均分全部需要一个一个累加起来算,很麻烦,不过最麻烦还是排名,不能一目了然。以上所描述手工过程不足之处显而易见,首先处理学生成绩效率很低,其次处理能力比较低,一段时间内,所能服务读者人数是有限。利用计算机来处理这些步骤无疑会极大程度地提升效率和处理能力。我们很清楚看到自己各个科目成绩和每个科目标排名和总分排名和全部学生成绩分布,而且还是零失误,
4、全部全部是一目了然。极大方便了学生和老师。为提升成绩管理效率,管理人员工作负担,有必需开发一个小型成绩管理系统来对学生成绩实施有效管理。1.2 可行性分析(1)经济可行性分析作为学校这么商业性质较小场所,其经济成份比重相对较少,关键是支出费用:其中包含设备购置费、软件开发费用、管理和维护费、人职员资和培训费等。因为各个学校实施统一操作,系统共享,其设备购置,人职员资,维护费用相对较少,而且本系统费用很低。(2)技术可行性分析技术上可行性分析关键分析现有技术条件能否顺利完成开发工作,硬件、软件配置能否满足开发者需要,各类技术人员数量,水平,起源等。学生成绩管理系统工作关键是在学生和老师之间架起一
5、座桥梁,能相互沟通信息和处理信息。这一特点很适累计算机特点,经过网络internet技术,发挥计算机信息传输速度快、正确度高优势。计算机硬件和软件技术飞速发展,为系统建设提供了技术条件。(3)社会可行性分析社会可行性有时也称为操作可行性,关键论证新系统在企业或机构开发和运行可能性和运行后可能一起对企业或机构影响,即组织内外是否含有接收和使用新系统条件。在目前信息技术飞速发展大环境下,计算机技术和软件技术更新是学校完全有可能也有能力采取这么优异管理技术。它对学校带来影响能够看到:对传统管理理念冲击,可能引发管理层变动和人员调整。对学校工作人员要求提升,使学校在一定可能下进行机构精简,迫使工作人员
6、继续学习新知识,拓宽学校在市场环境下生存空间。对学生和管理人员业务方法转变和扩充。2系统需求分析2.1 功效需求分析1) 录入数据:将学生姓名、语文、数学、英语成绩写入文件。2) 增加人员:增加学生,并将学生姓名和成绩写入文件。3) 删除人员:删除学生信息和成绩。4) 修改数据:修改学生成绩。5) 按总成绩查询:依据总分查询学生成绩,包含平均分。6) 按姓名查询:依据学生姓名查询学生成绩,包含总分和平均分。7) 输出全部学生成绩:输出文件中全部学生数据。8) 按总分排名:根据总分从高到低排序。9) 按语文成绩排名:根据语文成绩从高到低排序。10) 按数学成绩排名:根据数学成绩从高到低排序。11
7、) 按英语成绩排名:根据英语成绩从高到低排序。2.2 性能需求分析1硬件环境l 处理器:Inter CR300或是更高。l 内存:128MB(提议 196MB)。l 硬盘空间:20MB。2软件环境l 操作系统: Windows 98/ XP 或是Windows /Windows NT Server 4.0。2.3 系统总体结构设计对学生成绩进行管理系统,关键划分为以下三个模块:1) 操作:包含录入数据、增加人员、删除人员、修改数据。2) 查询:包含按总成绩查询、按姓名查询、输出全部学生成绩。3) 排名:按总分排名、按语文成绩排名、按数学成绩排名、按英语成绩排名依据需求分析结果,总体结构图2-1
8、所表示。学生成绩管理系统操作查询排名增加人员按总成绩查询录入数据删除人员修改数据按姓名查询输出全部数据按总分排名语文成绩排名数学成绩排名英语成绩排名图2.1系统总体结构3具体设计3.1 数据结构设计(1) 类设计表3-1 Stu类组员列表Stu类char name20;double math;double chinese;double english;double average;double sum;double getsum();double getaver();(2)系统包含类库#include输入输出流#includeString类#include文件输入/输出操作(3)各个变量定义和
9、作用char name20; 学生姓名double math; 数学成绩double chinese; 语文成绩double english; 英语成绩double average; 平均分double sum; 总分Stu *s50; 对象数组统计学生成绩3.2系统函数组成、功效、参数说明、相互调用关系主函数 main()调用菜单操作函数handle_menu()实现菜单输出和操作,调用index()打印首页。和删除动态对象。菜单操作函数 void handle_menu()这是一个无参函数,经过调用菜单函数menu()实现菜单输出,利用do-while()语句和switch()语句实现各函
10、数调用,系统依据输入字符选项来调用对应函数,进行对应操作。菜单函数 void menu()这是一个无参函数,关键实现“功效选择”界面,在这个界面里有显示系统十一大功效,依据每个功效前面序号进行选择。打印首页函数 void index()这是一个无参函数,关键功效是打印本系统相关信息。默认结构函数Stu: Stu()这是Stu类中一个默认结构函数,实现对象初始化。有参结构函数Stu: Stu(char n20,double ma,double chin,double eng)这个函数功效关键是对对象数据组员赋值。求总分函数double Stu:getsum()这是一个无参函数,关键功效是将每个对
11、象语文、数学、英语三科成绩求和,返回总分sum。求平均分函数double Stu:getaver()这是一个无参函数,调用double Stu:getsum()平均分,返回平均分average操作0数据录入函数void operate0()这是一个无参函数,是Stu类一个友元函数,该函数可将用户输入学生信息保留到文件d:document,输入完成后会提醒用户是否要继续录入。操作1增加人员函数void operate1()这是一个无参函数,是Stu类一个友元函数,该函数能够增加学生人数,提醒用户输入学生信息,并保留到文件d:document,输入完成后会提醒用户是否要继续录入。操作2删除人员函数
12、void operate2()这是一个无参函数,是Stu类一个友元函数,进入后系统会提醒用户输入需要删除学生姓名,然后查找该学生,删除该学生数据,并将其后指针往前移动一位,最终提醒用户是否继续删除。操作3修改数据函数void operate3()这是一个无参函数,是Stu类一个友元函数,进入后系统会提醒用户输入需要修改学生姓名,该函数功效是修改学生成绩,预防了录入数据时错误,确保了系统完备性。操作4按总成绩查询函数void operate4()这是一个无参函数,是Stu类一个友元函数,进入后系统会提醒用户输入需要查询总分,然后输出全部该分数学生成绩,并提醒用户是否需要继续查询。操作5按姓名查询
13、函数void operate5()这是一个无参函数,是Stu类一个友元函数。进入后系统会提醒用户输入需要查询学生姓名,然后输出该学生成绩,并提醒用户是否需要继续查询。操作6输出全部学生数据函数void operate6()这是一个无参函数,是Stu类一个友元函数,进入后系统将自动输出该系统下全部学生成绩,但并不排序,而是根据录入是次序输出,输出以后提醒用户是否需要进行其它操作。操作7按总分排名函数void operate7()这是一个无参函数,是Stu类一个友元函数,进入后系统将根据总分从高到低自动输出该系统下全部学生成绩,输出以后提醒用户是否需要进行其它操作。操作8按语文成绩排名函数void
14、 operate8()这是一个无参函数,是Stu类一个友元函数,进入后系统将根据语文成绩从高到低自动输出该系统下全部学生成绩,输出以后提醒用户是否需要进行其它操作。操作9按数学成绩排名函数void operate9()这是一个无参函数,是Stu类一个友元函数,进入后系统将根据数学成绩从高到低自动输出该系统下全部学生成绩,输出以后提醒用户是否需要进行其它操作。操作y按英语成绩排名函数void operatey()这是一个无参函数,是Stu类一个友元函数,进入后系统将根据英语成绩从高到低自动输出该系统下全部学生成绩,输出以后提醒用户是否需要进行其它操作。4设计测试步骤1. 进入系统,显示本系统相关
15、信息。图4.1所表示。图4.1 系统主页2. 依据系统提醒,进入菜单界面。图4.2所表示。图4.2 菜单界面3.输入0,回车,按提醒输入数据。图4.3所表示。图4.3 录入数据输入y,回车,进行其它操作,将会回到图4.1所表示菜单界面。4.回到菜单界面在输入1,回车,增加人员,按提醒输入数据。图4.4所表示。图4.4 增加人员输入y,回车,进行其它操作,将会回到图4.1所表示菜单界面5.回到菜单界面再输入6,回车,输出全部学生数据,检测操作0和操作1。运行结果图4.5所表示。图4.5 输出全部学生数据输入y,回车,进行其它操作,将会回到图4.1所表示菜单界面6.回到菜单界面再输入7,回车,测试
16、按总分排名。运行结果图4.6所表示。图4.6 全部学生总分排名输入y,回车,进行其它操作,将会回到图4.1所表示菜单界面7.回到菜单界面再输入3,回车,测试修改数据。修改完后,进入菜单,选择操作6输出全部学生数据。修改以下:张亮:语文99 数学98 英语97吴豪:语文98 数学97 英语99刘杰:语文97 数学99 英语98运行结果图4.7所表示。图4.7 修改后数据8.利用修改后数据,测试按语文、数学、英语成绩排名。(1) 测试按语文成绩,运行结果图4.8所表示。图4.8 按语文成绩排名(2) 测试按数学成绩,运行结果图4.9所表示。图4.9 按数学成绩排名(3) 测试按英语成绩,运行结果图
17、4.10所表示。图4.10 按英语成绩排名9.回到菜单界面再输入2,测试删除数据,删除学生刘杰数据。运行结果图4.11所表示。图4.11 测试删除数据10.回到菜单界面再输入4,测试按总分查询,运行结果图4.12所表示。图4.12 按总分查询11.回到菜单界面再输入5,测试按姓名查询,运行结果图4.13所表示。图4.13 按姓名查询12.测试完成。输入n,退出系统。5结束语在此次课程设计过程中,胡宁静老师从选题、构思、资料搜集到最终定稿各个步骤给细心指导,使我对软件工程有了更深刻认识,在此表示衷心地感谢。在整个过程中,我查阅了大量相关书籍借阅管理系统资料和网站,在老师指导和自己努力下,最终完成
18、了此次课程设计。在为期两周课程设计过程中,使我熟悉了C+编程语言,但也表现了我种种不足,期望在以后学习生活当中能够更正。同时我还要感谢指导过我每一位老师,她们给了我很大指导和帮助,还有在我陷入困境时帮助过我同学们。参考文件1 杨路明,C语言程序设计教程.北京:北京邮电大学出版社,(.7重印)2 谭浩强,C+程序设计. 北京:清华大学出版社,.63 杨路明,C语言程序设计上机指导和习题选解.北京:北京邮电大学出版社,附录设计源程序清单/head.h#if !defined(HEAD_H)#define HEAD_H#include#include#includeusing namespace s
19、td;/*申明Stu类*/class Stuprivate:char name20;/姓名double math,chinese,english,average,sum;public:Stu()/默认结构函数Stu(char n20,double ma,double chin,double eng);/申明有参结构函数double getsum();/申明求总分函数double getaver();/申明求平均分函数friend void operate0();/申明有友元函数操作0 数据录入friend void operate1();/申明有友元函数操作1 增加人员friend void
20、operate2();/申明有友元函数操作2 删除人员friend void operate3();/申明有友元函数操作3 修改数据friend void operate4();/申明有友元函数操作4 按总成绩查询friend void operate5();/申明有友元函数操作5 按姓名查询friend void operate6();/申明有友元函数操作6 输出全部学生数据friend void operate7();/申明有友元函数操作7 按总分排名friend void operate8();/申明有友元函数操作8 按语文成绩排名friend void operate9();/申明有友
21、元函数操作9 按数学成绩排名friend void operatey();/申明有友元函数操作y 按英语成绩排名;/*申明函数原型*/void menu();/申明菜单函数void handle_menu();/申明菜单操作函数#endif/stu.cpp#includehead.h/*定义Stu类*/Stu:Stu(char n20,double ma,double chin,double eng)/定义有参结构函数strcpy(name,n); math=ma; chinese=chin; english=eng;double Stu:getsum()/定义求总分函数sum=chinese
22、+english+math;return sum;double Stu:getaver()/定义求平均分函数average=getsum()/3;return average;/operate0.cpp#includehead.h/*操作0数据录入函数定义*/int i=0;/定义全局变量int j=0;/定义全局变量Stu *s50;/定义对象数组void operate0()char name20;char c; ofstream *file50; bool flag2=0;double math,chinese,english;docout请输入姓名:name;cout请输入数学成绩:m
23、ath;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!=y&c!=n) cout指令错误!请重新输入!c; else flag2=1; while(flag2=0)
24、; while(c=y); /operate1.cpp#includehead.h/*操作1增加人员函数定义*/extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate1()char name20;char c; ofstream *file50; bool flag2=0; double math,chinese,english;docout请输入您要增加学生姓名:name;cout请输入数学成绩:math;cout请输入语文成绩:chinese;cout请输入外语成绩:english;filej=new ofst
25、ream(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 != y & c != n) cout指令错误!请重新输入!c; else flag2 = 1; while(flag2 = 0); while(c = y); /operate2.cpp#includehead.h/*操作2
26、删除人员函数定义*/extern i;/引用外部变量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);/oper
27、ate3.cpp#includehead.h/*操作3修改数据函数定义*/extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate3()char name20;char c; bool flag2=0; double math,chinese,english;double mat,chin,eng;docout请输入您要修改学生姓名:name;for(int h=0;hname)=0)flag2=1; cout请输入新数学成绩:mat;cout请输入新语文成绩:chin;cout请输入新外语成绩:eng;sh-chi
28、nese=chin;sh-math=mat;sh-english=eng;cout数据修改成功!;if(flag2=0)cout您要修改学生原来就不存在!请检验重新输入!endl;cout想继续修改吗(y/n)c;if(c!=y&c!=n)cout指令错误!请重新输入!c;while(c=y); /operate4.cpp#includehead.h/*操作4按总成绩查询函数定义*/extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate4()char c; double t;doint flag1=0;cout请输
29、入你要查询学生总成绩t;for(int 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);/operate5.cpp#includehead.h/*操作5按姓名查询函数定义*/extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate5()char name20;char c; c
30、har 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指令错误!请重新输入!c;while(c=y);/operate6.cpp#includehead.
31、h/*操作6输出全部学生数据函数定义*/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;ki;k+)/数据输出coutk+1 姓名: name 语文: chinese 数学:math 外语:english 总分:(*sk).getsum() 平均分:(*sk).getaver()endl;/opera
32、te7.cpp#includehead.h/*操作7按总分排名函数定义*/extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate7()char name20;char c; bool flag2=0; 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
33、(int k=0;ki;k+)/数据输出coutk+1 姓名: name 语文: chinese 数学:math 外语:english 总分:(*sk).getsum() 平均分:(*sk).getaver()endl;/operate8.cpp#includehead.h/*操作8按语文成绩排名函数定义*/extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate8()char name20;char c; bool flag2=0; double math,chinese,english;int t;Stu b;c
34、out本系统全部学生语文排名以下:endl;for(int x=0;xi-1;x+)t=x;for(int y=x+1;ychinesechinese)t=y;if(t!=x)b=*st; *st=*sx; *sx=b;if(i=0)cout管理系统中没有录入数据或数据已经被删除!;for(int k=0;ki;k+)/数据输出coutk+1 姓名: name 语文: chinese 数学:math 外语:english 总分:(*sk).getsum() 平均分:(*sk).getaver()endl;/operate9.cpp#includehead.h/*操作9按数学成绩排名函数定义*/
35、extern i;/引用外部变量extern j;/引用外部变量extern Stu *s50;/引用外部变量void operate9()char name20;char c; bool flag2=0; double math,chinese,english;int t;Stu b;cout本系统全部学生数学排名以下:endl;for(int x=0;xi;x+)t=x;for(int y=x+1;ymathmath)t=y;if(t!=x)b=*st; *st=*sx; *sx=b;if(i=0)cout管理系统中没有录入数据或数据已经被删除!;for(int k=0;ki;k+)/数据输出coutk+1 姓名: