
学生成绩管理系统
摘 要
本课程设计主要解决学生成绩管理问题。使用计算机进行信息系统管理,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于一些复杂的信息管理,计算机能够充分发挥它的优越性。学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,因此,开发一个简单高效的软件系统是很有必要的。
在课程设计中,系统开发平台为Windows 7,程序设计设计语言采用Visual C++ 6.0,程序运行平台为Windows 7或者windows 8。在程序设计中,采用了面向对象解决问题的方法。程序通过调试运行,初步实现了设计目标。
关键词 程序设计;C++;成绩管理
1引 言
为方便对学生成绩进行高效的管理,编写该程序以提高学生成绩管理效率。使用该程序之后,学校管理者可以查询某位学生、某个科目的成绩情况,还可以对学生成绩进行排名,对学生的数据进行修改和删除,其中排名包括总分排名和各个科目的排名,学生可以更具自己的个人信息进行成绩查询,查询结果包括各个科目的分数、总分和平均分。通过本系统可以很好的掌握学生成绩的分布,减轻管理人员的负担,也使学生的成绩和信息长时期的保留。
1.1 课题背景及意义
一直以来人们使用传统的人工方式管理学生成绩,在计算机尚未在学校广泛使用之前,学生成绩管理主要依靠手工。一个最典型的手工处理过程就是:当考试完后,老师就要把学生成绩登记到文档中,当老师或学生要查询成绩的时候要一个一个去找,总分、平均分都需要一个一个累加起来算,很麻烦,不过最麻烦的还是排名,不能一目了然。
以上所描述的手工过程的不足之处显而易见,首先处理学生成绩的效率很低,其次处理能力比较低,一段时间内,所能服务的读者人数是有限的。利用计算机来处理这些流程无疑会极大程度地提高效率和处理能力。我们很清晰的看到自己的各个科目成绩和每个科目的排名和总分排名以及所有学生的成绩分布,而且还是零失误,所有的都是一目了然。极大的方便了学生和老师。为提高成绩管理效率,管理人员的工作负担,有必要开发一个小型成绩管理系统来对学生成绩实施有效管理。
1.2 可行性分析
1.2.1经济可行性分析
作为学校这样的商业性质较小的场所,其经济成分比重相对较少,主要是支出的费用:其中包括设备购置费、软件开发费用、管理和维护费、人员工资和培训费等。由于各个学校实行统一操作,系统共享,其设备购置,人员工资,维护费用相对较少,而且本系统的费用很低。
1.2.2技术可行性分析
技术上的可行性分析主要分析现有技术条件能否顺利完成开发工作,硬件、软件配置能否满足开发者的需要,各类技术人员的数量,水平,来源等。学生成绩管理系统的工作主要是在学生和老师之间架起一座桥梁,能相互沟通信息和处理信息。这一特点非常适合计算机特点,通过网络internet技术,发挥计算机的信息传输速度快、准确度高的优势。计算机硬件和软件技术的飞速发展,为系统的建设提供了技术条件。
1.2.3社会可行性分析
社会可行性有时也称为操作可行性,主要论证新系统在企业或机构开发和运行的可能性以及运行后可能一起的对企业或机构的影响,即组织内外是否具备接受和使用新系统的条件。在当前信息技术飞速发展的大环境下,计算机技术和软件技术的更新是学校完全有可能也有能力采用这样先进的管理技术。它对学校带来的影响可以看到:对传统管理理念的冲击,可能引起管理层的变动和人员的调整。对学校工作人员的要求提高,使学校在一定的可能下进行机构精简,迫使工作人员继续学习新知识,拓宽学校在市场环境下的生存空间。对学生和管理人员业务方式的转变和扩充。
2系统需求分析
2.1 功能需求分析
数据录入:将学生姓名、语文、数学、英语成绩写入文件。
增加人员:增加学生,并将学生姓名和成绩写入文件。
删除人员:删除学生信息和成绩。
修改数据:修改学生成绩。
按总成绩查询:根据总分查询学生成绩,包括平均分。
按姓名查询:根据学生姓名查询学生成绩,包括总分和平均分。
输出所有学生成绩:输出文件中所有学生数据。
按总分排名:按照总分从高到低排序。
按语文成绩排名:按照语文成绩从高到低排序。
按数学成绩排名:按照数学成绩从高到低排序。
按英语成绩排名:按照英语成绩从高到低排序。
2.2 性能需求分析
2.2.1硬件环境
处理器:Inter CORE5或是更高。
内存:2G
硬盘空间:500G。
2.2.2软件环境
操作系统: Windows 7或是Windows Xp
2.3 系统总体结构设计
对学生成绩进行管理的系统,主要划分为以下三个模块:
操作:包括录入数据、增加人员、删除人员、修改数据。
查询:包括按总成绩查询、按姓名查询、输出所有学生成绩。
排名:按总分排名、按语文成绩排名、按数学成绩排名、按英语成绩排名
根据需求分析的结果,总体结构如图2-1所示。
图2.1系统总体结构
3详细设计
3.1 数据结构设计
3.1.1类的设计
表3-1 Stu类成员列表
| Stu类 |
| char name[20]; double math; double chinese; double english; double average; double sum; |
| double getsum(); |
| double getaver(); |
#include #include #include 3.1.3各个变量的定义和作用 char name[20]; 学生姓名 double math; 数学成绩 double chinese; 语文成绩 double english; 英语成绩 double average; 平均分 double sum; 总分 Stu *s[50]; 对象数组记录学生成绩 3.2系统函数说明 程序进入主函数,显示系统菜单表头。通过switch语句进入相应操作环节。Switch语句中分别实现以下功能: Case 0: 学生信息数据录入 Case 1:增加学生信息 Case 2:删除学生信息 Case 3:修改学生数据 Case 4:按总成绩查询 Case 5:按姓名查询 Case 6:输出所有学生信息数据 Case 7:按总分查询排名 Case 8:按语文查询排名 Case 9:按数学查询排名 Case y:按英语查询排名 通过switch语句的相应调用,实现对数据的相应操作。在每个case中都定义了对数据的操作,将函数写入case语句,简单系统的实现功能。 4设计测试流程 1.进入系统,显示本系统相关信息及主菜单界面。如图 图4.1 系统主页 2.输入0,回车,按提示输入数据。如图4.2所示。 图4.2 录入数据 输入y,回车,进行其他操作,将会回到图4.1所示的菜单界面。 3.回到菜单界面在输入1,回车,增加人员,按提示输入数据。如图4.3所示。 图4.3 增加人员 输入y,回车,进行其他操作,将会回到图4.1所示的菜单界面 4.回到菜单界面再输入6,回车,输出所有学生的数据,检测操作0和操作1。运行结果如图4.4所示。 图4.4 输出所有学生的数据 输入y,回车,进行其他操作,将会回到图4.1所示的菜单界面 5.回到菜单界面再输入7,回车,测试按总分排名。运行结果如图4.5所示。 图4.5 所有学生总分排名 输入y,回车,进行其他操作,将会回到图4.1所示的菜单界面 6.回到菜单界面再输入3,回车,测试修改数据。修改完后,进入菜单,选择操作6输出所有学生数据。修改如下: 张宇:语文99 数学98 英语97 夏磊:语文98 数学97 英语99 石昊然:语文97 数学99 英语98 运行结果如图4.6所示。 图4.6 修改后的数据 7.运用修改后的数据,测试按语文、数学、英语成绩排名。 (1)测试按语文成绩,运行结果如图4.7所示。 图4.7 按语文成绩排名 (2)测试按数学成绩,运行结果如图4.8所示。 图4.8 按数学成绩排名 (3)测试按英语成绩,运行结果如图4.9所示。 图4.9 按英语成绩排名 8.回到菜单界面再输入2,测试删除数据,删除学生刘杰的数据。运行结果如图4.10所示。 图4.10 测试删除数据 9.回到菜单界面再输入4,测试按总分查询,运行结果如图4.11所示。 图4.11 按总分查询 10.回到菜单界面再输入5,测试按姓名查询,运行结果如图4.12所示。 图4.12 按姓名查询 11.测试完毕,功能正常。输入n,退出系统。 5结束语 在本次课程设计过程中,郭有强老师从选题、构思、资料收集到最后定稿的各个环节给予细心指导,使我对计算机编程有了更深刻的了解和认识,在此表示衷心地感谢。在整个过程中,我们团队查阅了大量的有关书籍,并借阅管理系统的资料和网站,在老师的指导和团队的坚持努力下,终于完成了本次课程设计。在为期两周的课程设计过程中,使我熟悉了C++编程语言,但也体现了我们的种种不足,希望在以后的学习生活当中能够改正。 当然,也让我认识到团队合作的重要性,一个团队的分工配合对于一项工程来说是至关重要的。现在的项目工作量很大,如果只是自己的单匹马的埋头苦干,那样会耗费很长的时间,甚至结果还不会有如人意,所以让我认识到了团队的重要性。同时我还要感谢指导过我的每一位老师,他们给了我们团队很大的指导和帮助,还有在我们陷入困境时帮助过我的学长和同学。 6参考文献 [1] 杨路明,C语言程序设计教程.北京:北京邮电大学出版社,2005(2009.7重印) [2] 谭浩强,C++程序设计. 北京:清华大学出版社,2004.6 [3] 杨路明,C语言程序设计上机指导与习题选解.北京:北京邮电大学出版 社,2005 [4]王萍.C++面向对象程序设计.北京:清华大学出版社.2002 [5]罗建军.C++程序设计教程(第2版).北京:高等教育出版社,2004 [6].黄维通.Visual C++面向对象与可视化程序设计(第2版).北京:清华大学出版社,2007 [7].张基温.C++程序设计基础.北京:高等教育出版社,2001 [8]成嘉.面向对象C++程序设计.北京:机械工业出版社,2004 [9]郑莉等.C++语言程序设计(第2版).北京:清华大学出版社,2001 附: 程序代码实现 #include #include #include class stu { private: public: stu(char n[20],double ma,double chin,double eng) double getsum() double getaver() friend void main(); }; void main() 学生成绩管理系统********"< char w; stu *s[50]; ofstream *file[50]; int i=0; int j=0; bool flag2=0; do { cin>>p; if((p>='0'&&p<='10')) flag2=1; else cout<<"指令错误!请重新输入:"< do { switch(p) { case '0': { char c; char name[20]; double math,chinese,english; do { cout<<"请输入姓名"< cout<<"请输入数学成绩:"< cout<<"请输入语文成绩:"< cout<<"请输入外语成绩:"< file[j]=new ofstream("d:\\\\document",ios::ate); *file[j]<<"姓名"< s[i]=new stu(name, math, chinese, english); i++; cout<<"数据录入成功,想继续录入吗(y/n)"< flag2=0; do { if(c!='y'&&c!='n') { cout<<"指令错误!请重新输入!"< } else flag2=1; }while(flag2==0); }while(c=='y'); break; } case '4': {double t; char c; do { int flag1=0; cout<<"请输入你要查询学生的总成绩"< for(int q=0;q{ if(s[q]->getsum()==t) { flag1=1; cout<<"您要查询的学生是:"<<(*s[q]).name< if(flag1==0) cout<<"对不起!您要查询的学生不存在!"< if(c!='y'&&c!='n') { cout<<"指令错误!请重新输入!"< } } while(c=='y'); break; } case '5': { char n[20]; int j=0; char c; do { int flag=0; cout<<"请输入你要查询的学生姓名"< for(int j=0;j{ if(strcmp(n,(*s[j]).name)==0) { flag=1; cout<<"您要查询的学生是:"<<(*s[j]).name< } if(flag==0) cout<<"对不起!您要查询的学生不存在!"< if(c!='y'&&c!='n') { cout<<"指令错误!请重新输入!"< } } while(c=='y'); break; } case '1': { char name[20]; double math,chinese,english; char c; do { cout<<"请输入您要增加的学生的姓名:"< cout<<"请输入数学成绩:"< cout<<"请输入语文成绩:"< cout<<"请输入外语成绩:"< file[j]=new ofstream("d:\\\\document",ios::ate); *file[j]<<"姓名"< s[i]=new stu(name, math, chinese, english); i++; cout<<"数据录入成功,想继续录入吗(y/n)"< if(c!='y'&&c!='n') { cout<<"指令错误!请重新输入!"< } }while(c=='y'); break; } case '2': { char name[20]; bool flag3=0; char c; do { cout<<"请输入您要删除的学生姓名:"< for(int h=0;h{ if(strcmp(name,s[h]->name)==0) { flag3=1; i--; do { s[h]=s[h+1]; h++; }while(h<=i); } } if(flag3==0) cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!"; cout<<"要继续删除吗?(y/n)"< if(c!='y'&&c!='n') { cout<<"指令错误!请重新输入!"< } }while(c=='y'); break; } case '3': { char name[20]; double mat,chin,eng;flag2=0; char c; do { cout<<"请输入您要修改的学生的姓名:"< for(int h=0;h{ if(strcmp(name,s[h]->name)==0) { flag2=1; cout<<"请输入新的数学成绩:"< cout<<"请输入新的外语成绩:"< s[h]->chinese=chin; s[h]->math=mat; s[h]->english=eng; cout<<"数据修改成功!"; } } if(flag2==0) { cout<<"您要修改的学生本来就不存在!请检查重新输入!"< cout<<"想继续修改吗(y/n)"< if(c!='y'&&c!='n') { cout<<"指令错误!请重新输入!"< } }while(c=='y'); break; } case '6': { cout<<"本系统所有学生数据如下:"< cout<<"管理系统中没有录入数据或者数据已经被删除!"< cout< <<"总分:"<<" "<<(*s[k]).getsum() <<"平均分:"<<" "<<(*s[k]).getaver()< break; } case '7': { int t; stu b; cout<<"本系统所以学生排名如下:"< t=x; for(int y=x+1;y{ if((s[t]->getsum())<(s[y]->getsum())) t=y; if(t!=x) { b=*s[x]; *s[x]=*s[t]; *s[t]=b; } } } if(i==0) cout<<"管理系统中没有录入数据或者数据已经被删除!"; for(int k=0;k{ cout< <<"总分:"<<" "< break; } case '8': { int t; stu b; cout<<"本系统所以学生语文排名如下:"< t=x; for(int y=x+1;y{ if((s[t]->chinese)<(s[y]->chinese)) t=y; if(t!=x) { b=*s[t]; *s[t]=*s[x]; *s[x]=b; } } } if(i==0) cout<<"管理系统中没有录入数据或者数据已经被删除!"; for(int k=0;k{ cout< < break; } case '9': { int t; stu b; cout<<"本系统所以学生数学排名如下:"< t=x; for(int y=x+1;y{ if((s[t]->math)<(s[y]->math)) t=y; if(t!=x) { b=*s[t]; *s[t]=*s[x]; *s[x]=b; } } } if(i==0) cout<<"管理系统中没有录入数据或者数据已经被删除!"; for(int k=0;k{ cout< < } case 'y': { int t; stu b; cout<<"本系统所以学生英语排名如下:"< for(int y=x+1;y{ if((s[t]->english)<(s[y]->english)) t=y; if(t!=x) { b=*s[t]; *s[t]=*s[x]; *s[x]=b; } } } if(i==0) cout<<"管理系统中没有录入数据或者数据已经被删除!"; for(int k=0;k{ cout< < } break; } cout<<"您想继续进行其他操作吗?(y/n)"< do { cin>>w; if(w!='y'&&w!='n') cout<<"指令错误!请重新输入!"< flag4=1; }while(flag4==0); if(w=='y') cout<<"请输入操作代码(0 录入/1 增加人员/2 删除人员/3 修改数据/4 按总分查询/5 按姓名查询/6 显示所有成员数据/7 按总分排名/8 按语文排名/9按数学排名/y按英语排名)"< }while(w=='y'); for(int x=0;x{ delete s[x]; cout<<"delete all members!"< }chinese<<"数学:"<<" "<math <<"外语:"<<" "<englishchinese<<"数学:"<<" "<math <<"外语:"<<" "<englishgetsum() <<"平均分:"<<" "<getaver()<chinese<<"数学:"<<" "<math <<"外语:"<<" "english<<"总分:"<<" "<getsum() <<"平均分:"<<" "<getaver()<chinese<<"数学:"<<" "<math <<"外语:"<<" "english<<"总分:"<<" "<getsum() <<"平均分:"<<" "<getaver()<chinese<<"数学:"<<" "<math <<"外语:"<<" "english<<"总分:"<<" "<getsum() <<"平均分:"<<" "<getaver()<
