还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
河南工程学院《高级程序设计语言》课程设计成果报告学生成绩管理系统设计与实现fstream outfile,infile;〃作一个文本文档在文件夹中用于显示所录入的数据outfile.open z/f
1.txt〃,ios::out|ios::app;if!file{cout/z f
1.txt cannot open.\n〃;return;outf ilenamez/〃〈〃学号:zz number/z〃〈〈〃数学成绩〃〃〃C++成绩〃〈Cpp〈〃〃〃外语成绩〃〈611811511〈01111;outf ile.close;infile,open〃f1・txt〃,ios::in;if!file〃判断文件是否打开{cout/z f
1.txt cannot open.\n/z;return;}char ch;while infile.getch coutch;coutendl;infile,close;j++;s[i]=new Tstuname,number,math,cpp,english;i++;cout〃数据录入成功,想继续录入吗y/n z,«endl;cinc;chrisl=0;do{if c!=,y,c!二n{cout〈〈〃指令错误!请重新输入!〃endl;cinc;else chrisl=l;}whilechrisl==O;}while c==‘y;〃重复输入break;
3.3通过定义类来进行数据录入的函数按题目要求,设计四个类student类、score类、grade类、course类,其中student类是基类,score是student类的公有继承,grade类是score的公有继承,course是grade的公有继承并将类中的主函数定义为友元函数,方便访问类中的成员1student类其数据成员包括学号与姓名,按要求用数组定义三十人的姓名,这样就可以直接的输入,以便在之后的程序中用到其具体构造如下class Student{private:char name
[30];int number;public:Student;Student char n
[30],int num;friend void main;〃将主函数定义为友元函数,方便访问类中的成员Student::Student charn
[30],int numstrcpy name,n;〃得到姓名number=num;〃得到学号}2score类大体上分为三类数学、英语、c++;但是每一类又可分为三个小的部分平时成绩、期末成绩和总评成绩因此,可以这样定义成绩类class Score:public Student{private:double math,cpp,english;double sum,average,mathp,mathq,cppp,cppq,englishp,englishq;public:Score{};Score charn
[30],int num,double map,double maq,double cp,double cq,double engp,double engq;double getmathO;double getcppO;double getenglish;double getsumO;double getaver;friend voidmain;〃将主函数定义为友元函数,方便访问类中的成员void display;;Score::Scorechar n
[30],int num,double map,double maq,double cp,double cq,double engp,double engq{mathp=map;〃得到数学成绩mathq=niaq;9cppp=cp;〃得到C++成绩cppq=cq;engl ishp=engp;//得到英语成绩englishq=engq;}double Score::getmath{math=mathp*O.3+mathq*
0.7;return math;}double Score::getcpp{cpp=cppp*
0.3+cppq*
0.7;return cpp;}double Score::getenglish{english=englishp*
0.3+englishq*
0.7;return english;}double Score::getsum{sum=cpp+english+math;return sum;}double Score::getaver average=getsum/3;io returnaverage;void Score::display coutendl/z num:z/z/〃〈〃name:〃〈〈〃“〈〈math:〃〈〈〃〃〈〈〃english:〃〈〈〃z/«zz cppz/«z//z«endl;3grade类是score类的公共派生类,具体程序代码如下class Grade:public Score{private:int classn;public:Grade;Gradechar n
[30],int num,double map,double maq,double cp,double cq,double engp,double engq,int cn;friend voidmain;Grade::Gradechar n
[30],int num,double map,double maq,double cp,double cq,double engp,double engq,int cnclassn=cn;4course类course类是grade类的公有继承,在原有的基础上增加了课程编号coursenum和课程名称coursename,具体设计如卜class Course:public Grade11public:int coursenum;〃课程编号char coursename
[3];void display;Course{;Course charn
[30],int num,double map,double maq,double cp,double cq,double engp,double engq,int cn,int cnum,char cnam
[3];;Course::Coursechar n
[30],int num,double map,double maq,double cp,double cq,double engp,double engq,int cn,int cnum,char cnam
[3]{coursenum=cnuni;strcpy coursename,cnam;}void Course::displaycoutendl,,num:,,,,〃name:〃cnum:〃〃cnam:〃〃«〃english:〃«〃〃«〃cpp:〃«〃〃«endl;}4数据的录入主要功能用来对学生的成绩进行收集和输入,在学生信息保存在系统中的前提下,进行成绩录入按照提示,选择所需操作,输入“1”点击回车,则会出现主界面,按照提示输入学生姓名、学号、各科成绩、课程编号及课程名称,本操作执行一次系统人数就增加一个,具体运行界面如图3-21220131221请输入高数平时成绩:100晴输入高数期末成绩:请输入C H平时成绩100晴输入…期末成绩请输入英语平时成绩:100晴输入英语期末成绩:请输入班级1341情输入所选课程编号:1001请输入所选课程名称:path情输入所选课程编号:1002请输入所选课程名称:english请输入所选课程编号:1003播输入所选课程名称:PPP^lingluyao学号20131221高数平勺成绩工
00.高数期末成绩80c1千今成绩c口♦期末成绩80英语平时成绩0央语明末成绩;80班缓1341课程编号1003所选株程:cpp做据录入成功,想继续录入吗人〉图3-2数据录入图
3.5增加、删除、修改学生数据1增加学生数据主要功能是用来添加学生资料,有可能会有遗漏的学生尚未输入,对此,设计增加学生设计进入录入操作之后,按“n”结束录入,再按“y”进行其他操作,然后输入“2”即可增加学生数据,本操作执行一次便可增加一份学生数据,具体界面如图3-3所示13图3-3增加学生数据图2删除学生信息主要用来删除学生资料,在成绩录入过程中存在录入重复的情况,就需要进行一些删除工作在编程过程中,做一个文本文档在文件夹中用于显示所录入的数据,然后输入名字判断是否相等,此处用do while结构,若相等则进行数据删除在进行其他操作之后,按“n”结束录入,再按“y”进行其他操作,然后输入“3”即进入删除操作,具体界面如3-4所示选蟀柏关探作请输入柏河的拈亏里倒㈣拉伯数子及子骨!请输入您要删除的学生的姓名dingding数据删除成功,想继续删除吗图3-4删除学生信息3修改学生信息:14主要功能使用来修改学生资料,在系统保存了某学生资料的前提下,输入该学生姓名,系统就会显示该学生资料各科成绩信息,这样就可以修改该学生的资料了对录入错误的数据进行修改,在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“4”即进入修改操作具体运行成果如图3-5选择相关操作请输入相对的括号里的阿拉伯数字及字母!请输入您要修改的学生的姓名dingding清输入修改学生姓名及甚新登号、氤英语平时成绩、英德助亲成绩20131222L008090689888高数平时成绩、高数期末成绩、CH平时成绩、C一期末,dingding想继续修改吗图3-5修改学生的信息
3.6查询学生成绩1按总分查询在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“5”即进入按总分查询模块,输入特定的分数,即可输出与之相对应的学生具体运行结果如图3-6怪择相关操作请输入相对的括号里的阿拉伯数字及字母!曾输入您要查询的学生的总成绩160恸不起,您要查询的学生不存在?层丕文保走杳?________________________________________3-6按总分查询学生成绩2按姓名查询在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“6”即进入按姓名查询操作输入要查询的姓名,若此姓名存在在库中,即可得到其成绩代码如下case6:〃按姓名查询charn
[30];char c;int j=0;int flag;int i;ifi==l15cout〈〈〃系统中没有输入数据,请先输入数据!,,endl;break;}doflag=0;cout«〃请输入要查询的名字〃endl;cinn;forint j=0;ji;j++if strcmpn,*s[j].name==0flag=l;cout«〃您要查询的学生是*s[j].nameendl;cout«〃该生的信息是:学号〃*s[j],number〃高数平时成绩:〃*s[j].mathp«/,〃《〃高数期末成绩:〃«*s[j].mathq«〃〃〃c++平时成绩:〃*s[j].cppp«〃成〃c++平时成绩:〃*s[j].cppq«〃平〈〃英语平时成绩:〃*s[j].engl ishp«/,〃〈〃英语平时成绩;*s[j].engl ishq〃〃〈〃班级:〃*s[j].classn^〃课程编号:,,«*s[j].coursenum«,,〃《〃所选课程:“*s[j].coursenameendl;}}if flag-0cout«〃对不起您要查询的学生不存在,请查证后再输入!〃endl;cout”您想继续查询吗?y/n:;16题目学生成绩管理系统设计与实现考核项目考核内容得分(30分)出勤情况、态度、效率;知识掌握情况、平时考核基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总评成绩指导教师评语:日期:cinc;if c!=y c!二n{coutV〈指令错误!请重新输入endl;cinc;}}whilec==,y;Break;
3.7统计每个学生的平均成绩在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“8”即进入统计每个学生的平均成绩操作代码case8:〃统计每个学生的平均成绩int i;if i==0cout〈〃系统中没有输入数据,请先输入数据!z,endl;break;}for int m=0;nii;m++|cout*s[m].name/z学号:〃*s[m].number*总分〃*s[m].getsum〃均分:,z*s[m].getaverendl;break;
3.8输出所有学生数据17主要功能用来对学生成绩进行输出在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“7”即进入输出所有学生数据操作运行结果如图3-7所示所有学生数据如下__dingluyao学号20131221高数平时成绩n00高数期末成绩80c—壬时成绩100c♦♦期末成绩80英语平时成绩00美语明末成绩;80班级1341课程喘导门003所选课程:cpp dingding学号20131222高数平时成绩10高数期末成绩80c♦♦平时成绩90c-期末成绩68英语平时成绩98英落班末成绩88您想继续进行其他操作吗n〉.___________________________________________________________3-7输出所有的学生数据
3.9统计各科不及格人数在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“9”即可显示各学科不及格人数代码case9:〃统计各学科不及格人数int i;if i=0{cout«〃系统中没有输入数据,请先输入数据!,z endl;break;}intm,n,k,j;m=0;n=0;k=0;forj=0;ji;j++|ifs[j]-math60m++;if s[j]-cpp60n++;if s[j]-english60k++;cout〈〈〃数学不及格人数为:z/niendl;18cout〈〃c++不及格人数为:z/nendl;cout“英语不及格人数为:,,k«endl;break;}运行结果如图3-8选择相关操作请输入相对的括号里的阿拉伯数字及字母!入学不及格人数为/♦不及格人数为二英语不端人数为您相寐妞讲行其神操作吗火%〉:_____________________3-8输出不及格人数
3.10按总分排名主要功能用来按总分对学生进行排名在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“10”即进入按总分排名操作代码case10:〃按总分排名int i;ifi==0cout系统中没有输入数据,请先输入数据!endl;break;int h,g,n;int j=0;float a
[100],temp;forg=0;gi;g++a[j]=*s[g].getsum;j++;forh=0;hi;h++forn=0;ni-h;n++ifa[n]a[n+l]19temp=a[n];a[n]=a[n+l];a[n+l]=temp;forn=l;n=i;n++cout«a[n]«endl;break;cout«您想继续进行其他操作吗y/n:;int flag=O;docin»w;cout«endl;ifw!=y,w!=ncout«指令错误!请重新输入!endl;else flag』
3.11退出程序在程序运行的简捷窗口,选择自己所要查询的目的例如选择数字11,退出程序!如图3-9|您想继续进行其他操作吗〃n〉n Pressany keyto continue图3-9退出程序20课程设计体会在这次程序设计过程中,我学会了好多东西,感受颇深在编写中遇到了很多困难,会经常忽略一些小的细节,而偏偏是这些平常不注意的小的细节导致程序运行错误更加使我充分认识到程序的严谨性,深刻的意识到在以后的学习中要不放过一点小问题也了解到自己所学知识的有限,以及熟练应用一种程序设计语言并不是简单的,它不仅需要我们有扎实的算法基础,也需要多多练习熟悉掌握由于对C++编程的认识还很少,虽然有些好的想法,但没有能力实现,更加坚定了我学习C++的决心熟练掌握一门计算机语言不是一个轻松的事,需要长期不断学习,动手实践在这次课程设计中也大大增强了自己的动手能力,将所学的理论知识与实践有了很好的结合经过多次的调试,拓宽了我的视野,增强了学习理论知识的兴趣以及应用理论知识解决实际问题的能力当然也使我意识到我们应保持着一种严谨的态度真的很珍惜这次实训机会,它教会了我好多,也很感谢老师的指导,总之,收获颇多我以后也要更加努力学习专业知识,争取更上一层楼21参考文献⑴谭浩强著,《C++语言设计题解与上机指导》,清华大学出版社⑵谭浩强著,《C++面向对象程序设计》谭浩强》,清华大学出版社⑶李丽娟主编,《C++语言程序设计教程实验指导与习题解答(第3版)》⑷《C++程序设计》刘觉夫王更生等北京邮电大学出版社
1.1课程设计目的通过本课程设计的实践,总结了解C++课程学习中的的数据类型、数据结构、数组、函数、指针、结构体等基本概念,掌握其应用范围及使用方法掌握面向对象程序设计中有关类、对象、继承与派生、重载、多态性与虚函数、输入输出流类体系、文件操作的基本概念,掌握基类派生类的关系,了解它们的调用范围,初步学会用类与对象这种面向对象的程序设计方法编写简单的应用程序培养使用面向对象的程序设计方法编写计算机程序的能力本次实践通过设计一个《学生成绩管理系统》,根据《高级程序设计语言》课程所学的概念、理论与方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能进一步熟悉C++中类的概念、类的封装的实现方式,对类和对象进一步讨论了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与Visual C++环境的使用;自己根据能力及需要添加相应功能模块,增强模拟系统功能;逐步熟悉程序设计的方法,并养成良好的编程习惯程序设计是一门实践性很强的课程,必须十分重视实践环节认识是从实践开始的,我们要增强自己的实践意识,在实践中进一步巩固,每一次实践都是一次增长
1.2系统设计内容运用C++语言面向对象的编程思想完成下面的设计任务
(1)设计四个类,包括学生类(描述学生基本信息);成绩类班级类;课程类(描述课程信息课程编号,科目名称,如高等数学,大学英语等);
(2)学生成绩及课程信息用文件保存,程序执行时从文件读入;
(3)能按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;
(4)求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单-设置学生的成绩信息学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比-计算学生总评成绩总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)-显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息分单人显示和以班输出(班成绩单格式输出到文件)-注意,至少应包含一个班、30人、三门课
1.3程序设计思路根据《高级程序设计语言》课程所学的概念、理论与方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能此学生成绩管理系统通过调用各个函数,完成对基本信息的设计需求具体包括类的设计,设计四个类,运用类的派生与继承,实现对四个基本信息的构造,接下来进行主函数的设计,然后再分模块进行一层一层的设计,其中运用文件保存学生成绩及课程信息,使程序执行时从文件读入,这样来实现每一个的子功能第2章系统实现思路
2.1对系统需求的分析
1.能对学生各科成绩进行录入
2.能对学生的成绩进行增加
3.能对学生的成绩进行删除
4.能对学生的成绩进行修改
5.能对学生的成绩按总成绩,姓名,进行查询
6.能输出学生的所有数据
7.能进行成绩统计
8.能进行总分查询排名
2.2系统的功能分析资料维护系统维护包括对学生信息的录入操作及数据表中的学生信息进行浏览与数据保护;系统功能可以对数据表中的信息进行浏览;系统查询可以对学生的信息进行查询
2.3系统功能模块学生成绩查询系统有成绩录入、增加、删除、修改学生数据,数据查询,排序显示构成
2.4模块框架图对学生成绩查询系统进行分析,系统可分为四大模块
1.操作模块成绩的录入、增加、删除与修改;
2.查询模块包括按总成绩查询、按姓名查询、输出所有学生成绩;
3.成绩统计包括输出每个学生的平均成绩、各科不及格人数;
4.排名按总成绩排名;根据学生的基本信息、,借助C++有的优势特点,我们做出了以下的模版图块,便于理解和设计运用如图2-1所示图2-1模版框架图第3章系统设计与实现
3.1主函数的设计设计一个界面,使其出现一个简单的窗口,按提示进行进行相应操作代码如下voidmain{cout〃*****************欢迎来到学生成绩查询系统*****************〃〈endl;cout«〃请选择您需要的操作!〃〈〈endl;〃菜单的输出cout〈〃操作〃endl;cout«,z1数据录入〃endl;cout«,/2增加学生信息endl;cout〃3删除学生信息〃《endl;cout〃4修改数据〃〈endl;cout〃查询〃endl;cout«,/5按总成绩查询“endl;cout,z6按姓名查询〃endl;cout«,/7输出所有学生的数据“endl;cout〈〃成绩统计〃endl;cout«,,8每个学生的平均成绩〃《endl;cout«,,9各科不及格人数〃Oendl;cout〈〈〃排名〃〈endl;cout10按总分查询排名“endl;cout〈〃11退出〃〈endl;cout〈〃选择相关操作请输入相对的括号里的阿拉伯数字及字母!,,«endl;int p=0;〃全局变量,用于选择菜单时的输入char w;〃全局变量,用于在大项中选择是否继续操作Course*s
[100];〃类定义的指针将所录入的数据按类中的形式分别存储ofstream*file
[100];int i=0;〃全局变量,用于做每个录入数据的下标int j=0;int chrisl=O;〃用于判断do-while语句d〃判断输入是否正确cinp;ifp=lp=ll chrisl=l;else cout指令错误!请重新输入endl;}运行程序,得到主界面图3-1cT.E:\GY\xy\Debug\zy.exe*0000000000^又欠卬^^到^牛成幺春郁系一充MMMMMMMMXMMMMMMMM通选择您需要的操作!’—’工〉数据录入2增加学生信息、〈3〉删除学生信息4〉修筱数据查询〈5〉隹总成绩查询6;安姓名查询7输出所有乎生的数据成率充计8鞋个学生的平均成绩9〉各科不及格人数排名:10〉技总分查询排名〈11退出选择相关操作请输入相对的括号里的阿拉伯数字及字母!3-1主界面显示
3.2保存数据功能的设计保存数据主要是对数据的保密性,可持续性等进行完整的保存,以便以后程序在应用是能准确无误的调用所保存的数据。