课程设计:学生成绩管理系统设计与实现.doc

上传人:帮**** 文档编号:5213006 上传时间:2021-12-12 格式:DOC 页数:32 大小:645.21KB
返回 下载 相关 举报
课程设计:学生成绩管理系统设计与实现.doc_第1页
第1页 / 共32页
课程设计:学生成绩管理系统设计与实现.doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《课程设计:学生成绩管理系统设计与实现.doc》由会员分享,可在线阅读,更多相关《课程设计:学生成绩管理系统设计与实现.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、系统实现思路22.1 需求分析22.2 系统性能要求22.3 系统功能分析22.4 系统功能模块32.5 模块框架图3第3章 系统详细设计43.1 关键类的设计43.2 界面设计63.3 主函数的设计73.4 数据录入函数的设计73.5 修改函数的设计93.6 总分查询函数的设计113.7 总分排名函数的设计12第4章 系统调试运行144.1 调试144.2 界面菜单144.3 程序结果分析14课程设计体会17参考文献18第1章 系统设计目的及内容1.1 设计目的进一步深化掌握C+语言的基本知识;掌握结构化程序设计的基本方法和设计技巧,初步了解算法分析与设计概念;理解面向对象程序设计思想,初步

3、具备运用面向对象程序设计方法进行程序设计的能力。能熟练应用VC+集成环境进行C+语言程序的编写、编译与调试,提高对本课程知识综合运用能力。1.2设计内容设计四个类,包括学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称,如高等数学,大学英语等);学生成绩及课程信息用文件保存,程序执行时从文件读入;能按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所

4、占百分比 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比) 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件) 注意,至少应包含一个班、30人、三门课 1.3课程设计要求根据C+课程所学的概念、理论和方法,按照C+程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能;设计主控模块程序对给出的程序源代码要给出各部分的详细注释自己根据能力及需要添加相应功能模块,增强模拟系统功能。第2章 系统实现思路2.1 需求分析按照C+程序设计的基本步骤,设计出一个适当规模的程序来实

5、现设计课程内容中的全部功能。对给出的程序源代码要给出各部分的详细注释。自己根据能力及需要添加相应功能模块,增强模拟系统功能。(1)能对学生各科成绩进行录入;(2) 能对学生的成绩进行增加;(3) 能对学生的成绩进行删除;(4) 能对学生的成绩进行修改;(5) 能对学生的成绩按总成绩,姓名,进行查询;(6) 能输出学生的所有数据;(7) 能进行成绩统计;(8) 能进行总分查询排名。2.2 系统性能要求(1) 系统安全、可靠;(2) 功能齐全;(3) 操作方便、界面友好;(4) 易于维护和扩充。2.3 分析系统功能模块功能模块化是将程序划分成若干个功能模块,每个功能模块完成了一个子功能,再把这些功

6、能模块总起来组成一个整体。以满足所要求的整个系统的功能。此程序利用功能模块化将复杂的程序分解成许多容易解决的局部问题。学生成绩查询系统功能模块有:(1) 数据录入;(2) 增加学生;(3) 删除学生;(4) 修改数据;(5) 数据查询;(6) 排序显示。2.4 系统功能分析(1) 资料维护:系统维护包括对学生信息的录入及数据表的信息进行浏览。(2)系统功能:可以对数据表中的信息进行浏览。(3)系统查询:可以对学生的信息进行查询。2.5 模块框架图学生绩管理系统包括九个模块这九个模块既相互联系又相互独立,建立如图2-1模块框架图。学生成绩查询系统 用switch语句进行选择按总成绩排名各科不及格

7、人数输出所有学生成绩平均成绩按姓名查询总成绩查询修改删除增加录入图2-1模块框架图第3章 系统详细设计3.1 关键类的设计从题中要求可知,要设计四个类建立成绩类:大体上分为数学、英语、c+,但是每一类又可分为三小的部分:平时成绩、期末成绩和总评成绩。class gradepublic:double math3;double English3;double c+3;建立班级类:对于班级类,主要是学生成绩的划分,按照班级划分和按照学期划分。所以,班级类中就有两个成员year和class。class ClassPublic:Int year;int class;分数类:对于分数类,主要是针对对象学生

8、,因此分数类是从grade和class公共派生类,在分数类中,还要统计三个科目的成绩,所以就把统计函数写在了这里面。Class scorePublic:Char name30;Char number30;Double sum;Double average;Double mh()Return (math0*math3+math1*(1-math2);Double eg()Return (English0*rnglish3+English1*(1-english2);Double c()Return (c+0)*(c+3)+(c+1)*(1-c+2);学生类:其中定义无参构造函数,析构函数、保存函

9、数、查找函数、排序函数、修改函数等等。Class student Private:Scorestu22m;/学生数组Static int size1,size2,size3,size4;int s1,s2,s3,s4;/定义数据public:Student()s1=0;s2=0;s3=0;s4=0;/构造函数void add();/添加函数void search();/查找函数void list();/名单函数void change();/修改函数void sort1();/排序函数void sort2();/排序函数void save();/保存函数void output();/读取函数;3

10、.2 主界面设计先定义系统菜单函数及其界面,程序运行后会出现一个简洁的窗口,便于用户查询数据。 void main()cout<<"学生成绩查询系统"<<endl;cout<<"请选择您需要的操作!"<<endl; /菜单的输出cout<<"操作:"<<endl;cout<<"(1)数据录入"<<endl;cout<<"(2)增加学生"<<endl cout<<&q

11、uot;(3)删除学生"<<endl;cout<<"(4)修改数据"<<endl;cout<<"查询:"<<endl;cout<<"(5)按总成绩查询"<<endl;cout<<"(6)按姓名查询"<<endl;cout<<"(7)输出所有学生的数据"<<endl;cout<<"成绩统计:"<<endl;cout

12、<<"(8)每个学生的平均成绩"<<endl;cout<<"(9)各科不及格人数"<<endl;cout<<"排名:"<<endl;cout<<"(10)按总分查询排名"<<endl;cout<<"(11)退出"<<endl;cout<<"选择相关操作请输入相对的括号里的阿拉伯数字及字母!"<<endl;3.3 主函数的设计在main

13、()函数中先设计主界面函数,然后通过switch、break语句选择判断来调用相关功能模块,然后通过do while、if、for等语句完成对数据录入、增加学生、删除数据、修改数据、按总成绩查询、按姓名查询、输出所有学生数据、平均成绩、各科不及格人数、排名各项功能的编译。3.4 数据录入函数的设计此函数为数据录入的实现过程,定义一个字符变量c,用于在小项中选择是否继续操作,并定义字符变量姓名name且规定是30个name,定义整型变量学号number,浮点型变量数学成绩math、成绩cpp、英语成绩english,程序用fstream类定义outfile,infile调用结构函数打开磁盘文件f

14、1.txt,用if语句判断文件是否打开,数据录入完毕后,关闭磁盘文件f1.txt。char c; /用于在小项中选择是否继续操作 char name30;int number;float math,cpp,english;docout<<"请输入姓名:"<<endl;cin>>name;cout<<"请输入学号:"<<endl;cin>>number;cout<<"请输入数学成绩:"<<endl;cin>>math;cout&l

15、t;<"请输入C+成绩:"<<endl;cin>>cpp;、cout<<"请输入英语成绩:"<<endl;cin>>english;fstream outfile,infile; /作一个文本文档在文件夹中用于显示录入数据outfile.open("f1.txt",ios:out|ios:app);if(!file)cout<<"f1.txt can not open.n"return;outfile<<name<<

16、;" "<<"学号:"<<number<<" "<<"数学成绩:"<<math<<" "<<"C+成绩:"<<cpp<<" "<<"外语成绩:"<<english<<endl;outfile.close();infile.open("f1.txt",ios:in);if(!f

17、ile) /判断文件是否打开 cout<<"f1.txt can not open.n"return;char ch;while(infile.get(ch)cout<<ch;cout<<endl;nfile.close();j+;si=new Tstu(name, number,math, cpp, english);i+;cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;cin>>c;chris1=0;doif(c!='y'&&c!

18、='n')cout<<"指令错误!请重新输入!"<<endl;cin>>c;elsechris1=1;while(chris1=0);while(c='y'); /重复输入break;3.5 修改数据函数的设计此函数先打开磁盘文件f.txt,然后在文件中查找你要修改的姓名,核对此姓名存在于磁盘文件后,输入你需要修改的学生姓名,新学号及其数学、c+和英语成绩,把数据存入磁盘文件中,修改后完毕后关闭磁盘文件。string sname,line,str,name; int nu;float eng,ma,com;

19、int flag;char c;if(i=0)cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;doflag=0;cout<<"请输入您要修改的学生的姓名:"cin>>name;fstream fin("f1.txt",ios:in);ofstream outfile("f.txt",ios:trunc|ios:out);cout<<endl;while(!fin.eof() )/在文件中查找getline(fin,line);i

20、stringstream stream(line);sname = line.substr(0,line.find(" ",0);if(name!=sname)outfile<<line<<endl;else flag=1;fin.close();if(flag=1)cout<<"请输入修改学生姓名及其新学号,数学,c+和英语成绩:"cin>>name>>nu>>ma>>com>>eng;cout<<endl;outfile<<name

21、<<" "<<"学号:"<<nu<<" "<<"数学成绩:"<<ma<<" "<<"C+成绩:"<<com<<" "<<"外语成绩:"<<eng<<endl;outfile.close();fstream outf("f1.txt",ios:trunc|ios:o

22、ut);fstream inf("f.txt",ios:in);outf<<inf.rdbuf()<<endl;outf.close();inf.close();if(flag=0)cout<<"对不起,您要修改的学生不存在!请查证后输入!"<<endl;cout<<"想继续修改吗(y/n):"cin>>c;cout<<endl;if(c!='y'&&c!='n')cout<<" 指

23、令错误!请重新输入!"<<endl<<" "cin>>c;while(c='y');break;3.6 总分查询函数的设计此函数为按总分查询的实现过程巧妙运用字母i,定义i的值为零时数据不存在,i的值为1时数据存在,查询时要考虑数据是否存在;然后利用指针调用各科分数。int j=0;float SUM;char c;int flag;if(i=0)cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;doflag=0;cout<<&qu

24、ot;请输入您要查询的学生的总成绩:"<<endl;cin>>SUM;for(int j=0;j<i;j+)if(sj->getsum()=SUM)flag=1;cout<<"您要查询的学生是:"<<(*sj).name<<endl;cout<<"该生的信息为:"<<endl;cout<<" 学号:"<<(*sj).number<<" 数学分数:"<<(*sj).

25、math<<" c+分数:"<<(*sj).cpp<<" 英语分数"<<(*sj).english<<endl;if(flag=0)cout<<"对不起!您要查询的学生不存在!"<<endl;cout<<"是否继续查?(y/n):"cin>>c;if(c!='y'&&c!='n')cout<<"指令错误!请重新输入!"<&l

26、t;endl;cin>>c;while(c='y');break;3.7 总分排名函数的设计此函数为按总分排名的实现过程,先利用指针调用总分函数sum,然后利用冒泡法进行总分的排序。if(i=0)cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;int h,g,n;int j=0;float a100,temp;for(g=0;g<i;g+)aj=(*sg).getsum();j+;for(h=0;h<i;h+)for(n=0;n<i-h;n+)if(an>an+1)tem

27、p=an;an=an+1;an+1=temp;for(n=1;n<=i;n+)cout<<an<<endl;break;第4章 系统调试运行4.1 调试对程序进行反复的修改完善,不断调试,等程序无误时运行程序。针对每个功能设计一组测试,用来验证程序的正确性。4.2 主界面图4-1主界面图4.3 程序结果分析数据录入,如图4-2,输入姓名、学号、各科成绩。图4-2数据录入图修改数据,如图4-3,输入要修改的学生的姓名。图4-3修改数据图删除数据,如图4-4所示,输入要删除学生的姓名。图4-4删除数据图按姓名查询,如图4-5,输入索要查询的姓名即可得到结果。图4-5按

28、姓名查询图查询每个学生的平均分,如图4-6。图4-6查询平均分图课程设计体会这次课程设计基本上涵盖了大学一年级学到的C+语言知识点,课程设计题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。C+程序编译是一种细致严谨的工作,小到一个分号或点都能影响整个程序的运行,这就要求我编程时要特别小心,特别严谨,一个字母,一个符号,都不可乱用,学习C+需要严谨、认真、仔细、负责的态度,当然也需要有足够的耐心。实践出真知,实习前,我的C+知识只停留在理论水平,在做课程设计的时候,理论的漏洞显现出来了。通过这次课程设计,我懂得了理论与实际相结合是十分重要的,只有理论知识是远远

29、不够的,只有把所学的理论知识与实践结合起来,把知识变成自己的,这样才能提高自己的独立思考能力、动手实践能力。参考文献1C+面向对象程序设计 . 谭浩强 . 清华大学出版社2C+面向对象程序设计题解与上机指导 . 谭浩强 . 清华大学出版社3C程序设计(第四版) . 谭浩强 . 清华大学出版社4C语言程序设计案例教程 . 熊锡义 . 大连理工大学出版社5C+程序设计 . 郑振杰 . 人民邮电出版社6C高级实用程序设计 . 王士元 . 清华大学出版社7C语言程序设计教程 . 宗大华 . 人民邮电出版社附录#include<sstream>#include<iomanip>u

30、sing namespace std; class Tstu /通过定义一个类来定义数据录入的函数 char name30; int number; float math,cpp,english,average,sum; public: Tstu() ; Tstu ( char n20, int num,float ma,float cj,float eng ) ; float getsum();/得到总分的函数 float getaver(); /得到平均分的函数 friend void main(); /将主函数定义为友元函数,方便访问类中的成员 ; Tstu:Tstu ( char n3

31、0, int num,float ma,float cj,float eng ) strcpy(name,n); /得到姓名 number=num; /得到学号 math=ma; /得到数学成绩 cpp=cj; /得到c+成绩 english=eng; /得到英语成绩 float Tstu:getsum() /得到总分的函数 sum=cpp+english+math; return sum; float Tstu:getaver() /得到平均分的函数 average=getsum()/3; return average; void main() cout<<"*欢迎来到

32、学生成绩查询系统*"<<endl; cout<<"请选择您需要的操作!"<<endl; /菜单的输出 cout<<"操作:"<<endl; cout<<"(1)数据录入"<<endl; cout<<"(2)增加学生"<<endl; cout<<"(3)删除学生"<<endl; cout<<"(4)修改数据"<<e

33、ndl; cout<<"查询:"<<endl; cout<<"(5)按总成绩查询"<<endl; cout<<"(6)按姓名查询"<<endl; cout<<"(7)输出所有学生的数据"<<endl; cout<<"成绩统计:"<<endl; cout<<"(8)每个学生的平均成绩"<<endl; cout<<"

34、(9)各科不及格人数"<<endl; cout<<"排名:"<<endl; cout<<"(10)按总分查询排名"<<endl; cout<<"(11)退出"<<endl; cout<<"选择相关操作请输入相对的括号里的阿拉伯数字及字母!"<<endl; int p=0; /全局变量,用于选择菜单时的输入 char w;/全局变量,用于在大项中选择是否继续操作 Tstu *s100; /类定义的指针

35、将所录入的数据按类中的形式分别存储 ofstream *file100; int i=0; /全局变量,用于做每个录入数据的下标 int j=0; int chris1=0; /用于判断dowhile语句 do /判断输入是否正确 cin>>p; if(p>=1&&p<=11) chris1=1; else cout<<"指令错误!请重新输入:"<<endl; while(chris1=0); do switch(p) case 1: /数据的录入 char c; /用于在小项中选择是否继续操作 char na

36、me20; int number; float math,cpp,english; do cout<<"请输入姓名:"<<endl; cin>>name; cout<<"请输入学号:"<<endl; cin>>number; cout<<"请输入数学成绩:"<<endl; cin>>math; cout<<"请输入C+成绩:"<<endl; cin>>cpp; cout&l

37、t;<"请输入英语成绩:"<<endl; cin>>english; fstream outfile,infile; /作一个文本文档在文件夹中用于显示所录入的数据 outfile.open("f1.txt",ios:out|ios:app); if(!file) cout<<"f1.txt can not open.n" return; outfile<<name<<" "<<"学号:"<<number&

38、lt;<" "<<"数学成绩:"<<math<<" "<<"C+成绩:"<<cpp<<" "<<"外语成绩:"<<english<<endl; outfile.close(); infile.open("f1.txt",ios:in); if(!file) /判断文件是否打开 cout<<"f1.txt can not o

39、pen.n" return; char ch; while(infile.get(ch) cout<<ch; cout<<endl; infile.close(); j+; si=new Tstu(name, number,math, cpp, english); i+; cout<<"数据录入成功,想继续录入吗(y/n)"<<endl; cin>>c; chris1=0; do if(c!='y'&&c!='n') cout<<"指令

40、错误!请重新输入!"<<endl; cin>>c; else chris1=1; while(chris1=0); while(c='y'); /重复输入 break; case 2: /增加学生数据 char name30; int number; float math,cpp,english; char c; do cout<<"请输入您要增加的学生的姓名:"<<endl; cin>>name; cout<<"请输入你要增加的学生的学号:"<<

41、;endl; cin>>number; cout<<"请输入数学成绩:"<<endl; cin>>math; cout<<"请输入C+成绩:"<<endl; cin>>cpp; cout<<"请输入英语成绩:"<<endl; cin>>english; fstream outfile,infile; outfile.open("f1.txt",ios:out|ios:app); if(!file)

42、 cout<<"f1.txt can not open.n" return; outfile<<name<<" "<<"学号:"<<number<<" "<<"数学成绩:"<<math<<" "<<"C+成绩:"<<cpp<<" "<<"外语成绩:"<<

43、;english<<endl; outfile.close(); infile.open("f1.txt",ios:in); if(!file) cout<<"f1.txt can not open.n" return; char h; while(infile.get(h) cout<<h; cout<<endl; infile.close(); j+; si=new Tstu(name,number, math, cpp, english); i+; cout<<"数据录入成功,想

44、继续录入吗(y/n)"<<endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令错误!请重新输入!"<<endl; cin>>c; while(c='y'); break; case 3:/删除学生信息 char c; string xingming,line,str,name; do ifstream fin("f1.txt"); fstream outfile("f2.txt&q

45、uot;,ios:trunc|ios:out); /作一个文本文档在文件夹中用于显示所录入的数据 cout<<"请输入您要删除的学生的姓名:"<<endl; cin>>xingming; while(!fin.eof() ) getline(fin,line); istringstream stream(line); name = line.substr(0,line.find(" ",0);/找到名字,判断是否相等 if(name != xingming) outfile<<line<<end

46、l; outfile.close(); fin.close(); fstream f("f1.txt",ios:trunc|ios:out); ifstream outf("f2.txt"); f<<outf.rdbuf(); outf.close(); f.close(); cout<<"数据删除成功,想继续删除吗(y/n)"<<endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令错误

47、!请重新输入!"<<endl; cin>>c; while(c='y'); break; case 4:/修改数据 string sname,line,str,name; int nu;float eng,ma,com;int flag;char c;if(i=0)cout<<"系统中没有输入数据,请先输入数据!"<<endl;break;do flag=0; cout<<"请输入您要修改的学生的姓名:" cin>>name; fstream fin(&qu

48、ot;f1.txt",ios:in); ofstream outfile("f.txt",ios:trunc|ios:out); cout<<endl; while(!fin.eof() ) /在文件中查找 getline(fin,line); istringstream stream(line); sname = line.substr(0,line.find(" ",0);if(name!=sname)outfile<<line<<endl;else flag=1; fin.close(); if(flag=1) cout<<"

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

当前位置:首页 > 研究报告 > 论证报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁