




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341班 专业课程: 高级程序设计语言 指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 系统设计目的11.1 课程设计目的11.2 系统设计内容11.3 程序设计思路2第2章 系统实现思路32.1 对系统需求的分析32.2 系统的功能分析32.3 系统的功能模块32.4 模块框架图8第3章 系统设计与实现53.1 主函数的设计53.2保存数据功能的设计63.3 通过定义类来定义数据录入的函数83.4 数据的录入123.5 增加修改删除学生数据133.6查询学生成绩153.7统计每个学生的平均成绩173.8输出所有学生数据173.9统计各学科不及格人数183.10按总分排名193.11退出程序20课程设计体会21参考文献22第1章 系统设计目的1.1 课程设计目的通过本课程设计的实践,总结了解C+课程学习中的的数据类型、数据结构、数组、函数、指针、结构体等基本概念,掌握其应用范围及使用方法。掌握面向对象程序设计中有关类、对象、继承与派生、重载、多态性与虚函数、输入输出流类体系、文件操作的基本概念,掌握基类派生类的关系,了解它们的调用范围,初步学会用类与对象这种面向对象的程序设计方法编写简单的应用程序。培养使用面向对象的程序设计方法编写计算机程序的能力。本次实践通过设计一个学生成绩管理系统,根据高级程序设计语言课程所学的概念、理论与方法,按照C+程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能。进一步熟悉C+中类的概念、类的封装的实现方式,对类和对象进一步讨论。了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C+的理解与VisualC+环境的使用;自己根据能力及需要添加相应功能模块,增强模拟系统功能;逐步熟悉程序设计的方法,并养成良好的编程习惯。程序设计是一门实践性很强的课程,必须十分重视实践环节。认识是从实践开始的,我们要增强自己的实践意识,在实践中进一步巩固,每一次实践都是一次增长。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主函数的设计设计一个界面,使其出现一个简单的窗口,按提示进行进行相应操作。 代码如下: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; cout(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; 运行程序,得到主界面图3-1: 3-1 主界面显示3.2 保存数据功能的设计保存数据主要是对数据的保密性,可持续性等进行完整的保存,以便以后程序在应用是能准确无误的调用所保存的数据。 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 外语成绩:englishendl; 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; 3.3通过定义类来进行数据录入的函数按题目要求,设计四个类:student类、score类、grade类 、course类,其中student类是基类,score是student类的公有继承,grade类是score的公有继承,course是grade的公有继承。并将类中的主函数定义为友元函数,方便访问类中的成员。(1)student类:其数据成员包括学号与姓名,按要求用数组定义三十人的姓名,这样就可以直接的输入,以便在之后的程序中用到。其具体构造如下class Studentprivate:char name30;int number; public:Student();Student(char n30, int num);friend void main();/将主函数定义为友元函数,方便访问类中的成员;Student:Student(char n30, int num)strcpy(name ,n);/得到姓名number=num;/得到学号(2)score类:大体上分为三类:数学、英语、c+;但是每一类又可分为三个小的部分:平时成绩、期末成绩和总评成绩。因此,可以这样定义成绩类。class Score:public Studentprivate:double math,cpp,english;double sum,average,mathp,mathq,cppp,cppq,englishp,englishq;public:Score(); Score(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq);double getmath();double getcpp();double getenglish();double getsum(); double getaver();friend void main();/将主函数定义为友元函数,方便访问类中的成员void display();Score:Score(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq)mathp=map;/得到数学成绩mathq=maq;cppp=cp;/得到C+成绩cppq=cq;englishp=engp;/得到英语成绩englishq=engq;double Score:getmath() math=mathp*0.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; return average; void Score:display()coutendlnum: name: math: english: cpp: endl;(3)grade类:是score类的公共派生类,具体程序代码如下class Grade:public Scoreprivate:int classn;public:Grade();Grade(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq,int cn); friend void main();Grade:Grade(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq,int cn)classn=cn;(4)course类:course类是grade类的公有继承,在原有的基础上增加了课程编号coursenum和课程名称coursename,具体设计如下class Course:public Gradepublic:int coursenum;/课程编号char coursename3;void display();Course(); Course(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq,int cn,int cnum,char cnam3);Course:Course(char n30,int num,double map,double maq,double cp,double cq,double engp,double engq,int cn,int cnum,char cnam3)coursenum=cnum;strcpy(coursename,cnam);void Course:display()coutendlnum: name: cnum: cnam: english: cpp: endl;3.4 数据的录入主要功能用来对学生的成绩进行收集和输入,在学生信息保存在系统中的前提下,进行成绩录入。按照提示,选择所需操作,输入“1”点击回车,则会出现主界面,按照提示输入学生姓名、学号、各科成绩、课程编号及课程名称,本操作执行一次系统人数就增加一个,具体运行界面如图3-2 图3-2 数据录入图 3.5 增加、删除、修改学生数据(1)增加学生数据:主要功能是用来添加学生资料,有可能会有遗漏的学生尚未输入,对此,设计增加学生设计。进入录入操作之后,按“n”结束录入,再按“y”进行其他操作,然后输入“2”即可增加学生数据,本操作执行一次便可增加一份学生数据,具体界面如图3-3所示图3-3 增加学生数据图(2)删除学生信息:主要用来删除学生资料,在成绩录入过程中存在录入重复的情况,就需要进行一些删除工作。在编程过程中,做一个文本文档在文件夹中用于显示所录入的数据,然后输入名字判断是否相等,此处用do while 结构,若相等则进行数据删除。在进行其他操作之后,按“n”结束录入,再按“y”进行其他操作,然后输入“3”即进入删除操作,具体界面如3-4所示图 3-4 删除学生信息(3)修改学生信息:主要功能使用来修改学生资料,在系统保存了某学生资料的前提下,输入该学生姓名,系统就会显示该学生资料各科成绩信息,这样就可以修改该学生的资料了。对录入错误的数据进行修改,在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“4”即进入修改操作。具体运行成果如图3-5图3-5 修改学生的信息3.6 查询学生成绩(1)按总分查询:在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“5”即进入按总分查询模块,输入特定的分数,即可输出与之相对应的学生。具体运行结果如图3-6 3-6 按总分查询学生成绩(2)按姓名查询:在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“6”即进入按姓名查询操作。输入要查询的姓名,若此姓名存在在库中,即可得到其成绩。代码如下:case 6:/按姓名查询 char n30;char c;int j=0;int flag;int i; if(i=1)cout系统中没有输入数据,请先输入数据!endl;break; do flag=0; cout请输入要查询的名字: n; for(int j=0;ji;j+) if(strcmp(n,(*sj).name)=0)flag=1;cout您要查询的学生是:(*sj).nameendl;cout该生的信息是:学号:(*sj).number高数平时成绩:(*sj).mathp 高数期末成绩:(*sj).mathq c+平时成绩:(*sj).cppp c+平时成绩:(*sj).cppq 英语平时成绩:(*sj).englishp 英语平时成绩;(*sj).englishq 班级:(*sj).classn 课程编号:(*sj).coursenum 所选课程:(*sj).coursenameendl; if(flag=0)cout对不起您要查询的学生不存在,请查证后再输入!endl;coutc;if(c!=y&c!=n)cout指令错误!请重新输入:c; while(c=y); Break;3.7 统计每个学生的平均成绩在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“8”即进入统计每个学生的平均成绩操作。代码:case 8:/统计每个学生的平均成绩 int i; if(i=0) cout系统中没有输入数据,请先输入数据!endl;break; for(int m=0;mi;m+) cout(*sm).name 学号:(*sm).number 总分:(*sm).getsum() 均分:(*sm).getaver()endl; break;3.8输出所有学生数据主要功能用来对学生成绩进行输出。在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“7”即进入输出所有学生数据操作。运行结果如图3-7所示3-7 输出所有的学生数据3.9统计各科不及格人数在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“9”即可显示各学科不及格人数。代码:case 9:/统计各学科不及格人数 int i; if(i=0) cout系统中没有输入数据,请先输入数据!endl;break; int m,n,k,j;m=0;n=0;k=0; for(j=0;jmathcppenglish60)k+; cout数学不及格人数为:mendl; coutc+不及格人数为:nendl; cout英语不及格人数为:kendl; break; 运行结果如图3-8: 3-8 输出不及格人数3.10按总分排名主要功能用来按总分对学生进行排名。在进行其他操作之后,按“n”结束继续的重复操作,再按“y”进行其他操作,然后输入“10”即进入按总分排名操作。代码: case 10:/按总分排名 int i; if(i=0)cout系统中没有输入数据,请先输入数据!endl;break; int h,g,n;int j=0;float a100,temp; for(g=0;gi;g+) aj=(*sg).getsum();j+; for(h=0;hi;h+) for(n=0;nan+1) temp=an;an=an+1;an+1=temp; for(n=1;n=i;n+) coutanendl; break; coutw; coutendl; if(w!=y&w!=n) cout 指令错误!请重新输入!endl; else flag=1;3.11退出程序在程序运行的简捷窗口,选择自己所要查询的目的。例如选择数字11,退出程序!如图3-9图3-9 退出程序课程设计体会在这次程序设计过程中,我学会了好多东西,感受颇深。在编写中遇到了很多困难,会经常忽略一些小的细节,而偏偏是这些平常不注意的小的细节导致程序运行错误。更加使我充分认识到程序的严谨性,深刻的意识到在以后的学习中要不放过一点小问题。也了解到自己所学知识的有限,以及熟练应用一种程序设计语言并不是简单的,它不仅需要我们有扎实的算法基础,也需要多多练习熟悉掌握。由于对C+编程的认识还很少,虽然有些好的想法,但没有能力实现,更加坚定了我学习C+的决心。熟练掌握一门计算机语言不是一个轻松的事,需要长期不断学习,动手实践。在这次课程设计中也大大增强了自己的动手能力,将所学的理论知识与实践有了很好的结合。经过多次的调试,拓宽了我的视野,增强了学习理论知识的兴趣以及应用理论知识解决实际问题的能力。当然也使我意识到我们应保持着一种严谨的态度。真的很珍惜这次实训机会,它教会了我好多,也很感谢老师的指导,总之,收获颇多。我以后也要更加努力学习专业知识,争取更上一层楼。参考文献1谭浩强著,C+语言设计题解与上机指导,清华大学出版社2谭浩强著,C+面向对象程序设计 谭浩强,清华大学出版社3李丽娟主编,C+语言程序设计教程实验指导与习题解答(第3版)4程序设计 刘觉夫王更生等 北京邮电大学出版社5程序设计实训教程 曾辉王更生等 北京邮电大学出版社6C+程序设计语言(特别版),机械工业出版社#include#include#include#include#includeusing namespace std;class Studentprivate:char name30;int number; public:Student();Student(char n30, int num);friend void main();/将主函数定义为友元函数,方便访问类中的成员;Student:Student(char n30, int num)strcpy(name ,n);/得到姓名number=num;/得到学号class Score:public Studentprivate:double math,cpp,english;double sum,average,mathp,mathq,cppp,cppq,englishp,englishq;public:Score(); Score(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq);double getmath();double getcpp();double getenglish();double getsum(); double getaver();friend void main();/将主函数定义为友元函数,方便访问类中的成员void display();Score:Score(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq)mathp=map;/得到数学成绩mathq=maq;cppp=cp;/得到C+成绩cppq=cq;englishp=engp;/得到英语成绩englishq=engq;double Score:getmath() math=mathp*0.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; return average; void Score:display()coutendlnum: name: math: english: cpp: endl;class Grade:public Scoreprivate:int classn;public:Grade();Grade(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq,int cn); friend void main();Grade:Grade(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq,int cn)classn=cn;class Course:public Gradepublic:int coursenum;/课程编号char coursename3;void display();Course();Course(char n30, int num,double map,double maq,double cp,double cq,double engp,double engq,int cn,int cnum,char cnam3);Course:Course(char n30,int num,double map,double maq,double cp,double cq,double engp,double engq,int cn,int cnum,char cnam3)coursenum=cnum;strcpy(coursename,cnam);void Course:display()coutendlnum: name: cnum: cnam: english: cpp: endl;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; cout(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 name30;int number;double mathp,mathq,cppp,cppq,englishp,englishq; int classn;int coursenum;/课程编号 char coursename3;/课程名称docout请输入姓名:name;cout请输入学号:number;cout请输入高数平时成绩:mathp;cout请输入高数期末成绩:mathq;cout请输入c+平时成绩:cppp;cout请输入c+期末成绩:cppq;cout请输入英语平时成绩:englishp;cout请输入英语期末成绩:englishq; cout请输入班级:classn;cout请输入所选课程编号:coursenum;cout请输入所选课程名称:coursename; cout请输入所选课程编号:coursenum;cout请输入所选课程名称:coursename; cout请输入所选课程编号:coursenum;cout请输入所选课程名称:coursename;fstream outfile,infile;outfile.open(f1.txt,ios:out|ios:app);if(!file) coutf1.txt can not open.n; return; outfilename 学号:number 高数平时成绩:mathp 高数期末成绩:mathq c+平时成绩:cppp c+期末成绩:cppq 英语平时成绩:englishp 英语期末成绩;englishq 班级:classn 课程编号:coursenum 所选课程:coursenameendl;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 Course(name,number,mathp,mathq,cppp,cppq,englishp,englishq,classn,coursenum,coursename);i+;cout数据录入成功,想继续录入吗(y/n)c;chris1=0;doif(c!=y&c!=n)cout指令错误!请重新输入!c;else chris1=1;while(chris1=0);while(c=y); /重复输入 break; case 2:/增加学生数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能制造项目贷款合同续签与智能制造技术合作协议
- 离婚子女户口迁移服务合同及监护权变更协议
- 住宅小区物业员工消防安全管理与培训合同
- 含铝废渣综合利用项目建筑工程方案
- 国企读书日活动策划方案
- 2025年新能源汽车电池管理系统智能化与车辆智能导航报告
- 2025年新能源行业供应链绿色物流技术应用报告
- Unit 3 Get off the bed!说课稿-2025-2026学年小学英语Starter B新概念英语(青少版)
- DB65T 4397-2021 戈壁地酸枣直播造林技术规程
- 5. 机械能守恒定律教学设计-2025-2026学年高中物理教科版必修2-教科版2004
- DGTJ08-2062-2017 住宅工程套内质量验收规范
- 景区信息安全管理办法
- 2025中国煤炭地质总局招聘应届生【338人】笔试参考题库附带答案详解
- 湖南省科技创新惠企助企政策汇编 2025
- 2025年公开选拔科级领导干部考试笔试试题及答案
- DB45∕T 2746-2023 国家储备林培育技术规程
- DB15T2882-2023公路基础设施建设碳排放核算规程
- 第4课《古代诗歌四首》课件 2025-2026学年统编版语文七年级上册
- 医保基金监管培训课件
- 面神经炎的护理查房
- 药厂变更管理培训
评论
0/150
提交评论