《高级程序设计语言》课程设计--学生成绩管理系统设计与实现.doc_第1页
《高级程序设计语言》课程设计--学生成绩管理系统设计与实现.doc_第2页
《高级程序设计语言》课程设计--学生成绩管理系统设计与实现.doc_第3页
《高级程序设计语言》课程设计--学生成绩管理系统设计与实现.doc_第4页
《高级程序设计语言》课程设计--学生成绩管理系统设计与实现.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日 目 录第1章 系统设计目的11.1 课程设计目的11.2 系统设计要求1第2章 系统实现思路22.1 需求分析22.2 系统性能要求2第3章 系统详细设计33.1 系统功能模块33.2 模块框架图33.3 系统实现4第4章 系统调试运行194.1系统运行主界面194.2录入功能194.3删除功能204.4查询功能204.5查询不及格人数21课程设计体会22参考文献23第1章 系统设计目的1.1 课程设计目的在计算机领域中,任何好的创意和设计最终都需要通过高水平的程序设计实现,因此学习程序设计是计算机及相关专业学生必备的基本技能之一。为了使学生更好的学习和掌握这一基本技能,必须系统而全面地的安排程序设计课程设计,目的是通过具体的课程设计,不仅使学生能够进一步理解程序设计的基本概念,掌握基本的程序设计方法,培养良好的程序设计风格,同时还可以借助程序设计技巧的训练,培养学生抽象思维、逻辑思维及统筹规划的能力。1.2 系统设计要求(1)设计四个类,包括学生类(描述学生基本信息);成绩类;班级类;课程类(描述课程信息:课程编号,科目名称,如高等数学,大学英语等);(2)学生成绩及课程信息用文件保存,程序执行时从文件读入;(3)能按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;(4)求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比) 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件) 注意,至少应包含一个班、30人、三门课 第2章 系统实现思路2.1 需求分析学生成绩查询系统在生活中运用广泛,因此需要多种程序对它进行管理。该系统应该能存储学生的个人信息与考试成绩。系统管理者能够利用系统进行信息录入、修改、查询、删除、按照姓名、总分进行查询,能输出所有的学生的成绩。1系统类设计(1)学生类用于存放基本个人信息;(2)课程类用于存放课程信息;(3)班级类用于分类班级;(4)成绩类用于存放成绩。2. 功能分析(1)能对学生各科成绩进行录入;(2)能对学生的成绩进行增加;(3)能对学生的成绩进行删除;(4)能对学生的成绩进行修改;(5)能对学生的成绩按总成绩,姓名,进行查询;(6)能输出学生的所有数据;(7)能进行成绩统计;(8)能进行总分查询排名。2.2 系统性能要求于管理者而言,该系统需要方便的操作,友好的界面。于学生而言,成绩等属于个人信息,因此要求系统有一定的安全性,能够保护学生的基本信息。而随 扩充和修改。因此系统性能要求如下:(1)系统安全可靠;(2)功能齐全;(3)操作方便、界面友好;(4)易于维护和扩充。第3章 系统详细设计3.1 系统功能模块学生成绩查询系统有:成绩录入、数据增加、修改、数据查询,排序显示构成。3.2 模块框架图 1. 程序中包含类与主函数,类构成了程序的数据管理与存放区。在主函数中包括多种功能。以类为依托构成程序框架,在主函数中实现每一个功能。类与功能共同构成程序框架。学生类课程类成绩类系统操作查询成绩统计排名录入增加删除修改总成绩查询姓名输出所有学生的成绩每个学生的平均成绩各科不及格的人数图1-1 模块框架图2程序用到的头文件以及自己定义的函数(1)头文件#includeiostream /输入输出流函数#includefstream /文件操作函数#includestring /字符串函数#includesstream#includeiomanip(2)自己定义的函数float getsum();/综合成绩float getshu();/数学总评成绩float getcpp();/c总评成绩float geteng();/英语总评成绩float getaver();/总平均成绩3.3 系统实现1界面设计程序运行后会出现一个间接地窗口,便于用户查询数据。主函数用循环体以及switch语句实现功能选择。主界面展示*欢迎来到学生成绩查询系统*请选择需要的操作!(1)数据录入(2)增加学生(3)删除学生(4)修改数据 查询:(5)按总成绩查询(6)按姓名查询(7)输出所有学生的数据 成绩统计:(8)每个学生的平均成绩(9)各个学科不及格人数排名:(10)按总分查询排名(11)退出选择相关操作请输入相对的括号里的阿拉伯数字及字母!主程序代码void main() /主函数system(color 07e); /设置当前窗口的背景色和前景色 0 = 黑色 8 = 灰色/ 1 = 蓝色 9 = 淡蓝色/ 2 = 绿色 A = 淡绿色/ 3 = 浅绿色 B = 淡浅绿色/ 4 = 红色 C = 淡红色/ 5 = 紫色 D = 淡紫色/ 6 = 黄色 E = 淡黄色/ 7 = 白色 F = 亮白色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选择相关操作请输入相对的括号里的阿拉伯数字及字母!endl;int p=0;char w;Chengji *s100;ofstream *file100;int i=0;int j=0;int chris1=0;float baif;/主函数利用循环体执行,实现循环操作:docinp;if(p=1p=11)chris1=1;elsecout指令错误!请重新输入:endl;while(chris1=0);doswitch(p)case 1:. /录入功能case 2:. /增加功能case 3:. /删除功能case 4:. /修改数据功能case 5:. /按成绩查询功能case 6:. /按姓名查询功能case 7:. /输出所有的数据case 8:. /输出学生的平均分case 9:. / /查询不及格人数 case 10:. /总成绩排名while(w=y);/循环语句结束2具体功能设计通过主窗体调用其他窗体,实现其它功能。(1)录入功能 使用cin输入流输入学生的相关信息,并创立文件,将所输入的数据存入到文件中。程序代码docout请输入姓名endl;/信息输入过程cinname;cout请输入学号endl;cinnumber;cout请输入数学成绩endl;cinmath;cout请输入c+成绩endl;cincpp;cout请输入英语成绩endl;cinenglish;cout请输入数学平时成绩endl;cinmathp;cout请输入c+平时成绩endl;cincppp;cout请输入英语平时成绩endl;cinenglishp;cout请输入成绩百分比endl;cinbaif;fstream outfile,infile;outfile.open(f1.txt,ios:out|ios:app);/打开文件if(!file)coutf1.txt can not open.n;return ;outfilename 学号:numberendl;outfile数学成绩: setw(2)mathsetw(20)数学平时成绩: setw(2)mathpsetw(20)数总成绩: setw(2)math*baif+mathp*(1-baif)endl;outfile外语成绩:setw(2)englishsetw(20)外语平时成绩: setw(2)englishpsetw(20)外总成绩: setw(2)english*baif+englishp*(1-baif)endl;outfilec+成绩: setw(2)cppsetw(20)c+平时成绩: setw(2)cpppsetw(20)c总成绩: setw(2)cpp*baif+cppp*(1-baif)endl;outfile总成绩: math*baif+mathp*(1-baif)+cpp*baif+cppp*(1-baif)+english*baif+englishp*(1-baif)endl;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 Chengji(number,name,math,cpp,english,mathp,cppp,englishp,baif,mathz,cppz,engz); /将数据录入文件i+;cout数据录入成功,想继续吗(y/n)endl;cinc;chris1=0;doif(c!=yc!=n)cout指令错误!请重新输入!endl;cinc;elsechris1=1;while(chris1=0);(2)增加功能与录入功能程序操作与代码大体相同 参考录入功能。(3)删除功能用对文件的操作,判断所需删除的数据与数据库中的数据是否相同,利用文件流操作删除对应数据。程序代码char c;string xingming,line,str,name;doifstream fin(f1.txt);fstream outfile(f2.txt,ios:trunc|ios:out); /创建文件2cout请输入您要删除的学生的姓名:endl;cinxingming;while(!fin.eof() /执行判断并删除数据getline(fin,line);istringstream stream(line);name=line.substr(0,line.find( ,0);if(name!=xingming)outfilelineendl;outfile.close();fin.close();fstream f(f1.txt,ios:trunc|ios:out);ifstream outf(f2.txt);foutf.rdbuf();outf.close();f.close();cout数据删除成功,想继续删除吗(y/n)endl;cinc;.(4)修改功能参考录入功能,利用对文件的操作达到对数据的修改功能。(5)按总成绩查询 用if语句调用getsum()判断输入的总分数与数据库中的总分数是否有相同的,并执行输出文件操作。程序代码int j=0;float SUM;char c;int flag;if(i=0) /根据前面的叠加判断文件中是否有数据cout系统中没有输入数据,请先输入数据!endl;break;Do /输入查找的成绩利用函数查找符合条件的数据flag=0;cout请输入您要查询的学生的总成绩:endl;cinSUM;for(int j=0;ji;j+)if(sj-getsum()=SUM) /将符合的数据输出flag=1;cout您要查询的学生是:(*sj).nameendl;cout该生的信息为:endl;cout 学号:(*sj).num 数学分数:(*sj).math*(*sj).baif+(*sj).mathp*(1-(*sj).baif) c+分数(*sj).cpp*(*sj).baif+(*sj).cppp*(1-(*sj).baif) 英语分数(*sj).english*(*sj).baif+(*sj).englishp*(1-(*sj).baif)endl;if(flag=0) /错误操作返回继续cout对不起!您要查询的学生不存在!endl;cout是否继续查?(y/n);;cinc;.(6)按姓名查询程序代码与按总分功能类似,区别在于这个功能中利用指针访问类中成员,并进行判断。(7)输出所有数据通过打开文件,对文件中的所有数据进行输出。程序代码cout所有学生数据如下:endl;ifstream file;file.open(f1.txt,ios:in); /以输入方式打开文件coutfile.rdbuf(); /以输出文件的所有数据file.close();(8)输出学生的平均分 利用指针访问Chengji类中的成员,调用getaver ()函数求得平均分并执行输出操作。程序代码if(i=0)cout系统中没有输入数据,请先输入数据!endl;break;for(int m=0;mi;m+)cout(*sm).name 学号(*sm).num 总分 (*sm).getsum() 均分(*sm).getaver ()endl;(9)查询不及格人数 调用get函数求得三科平均成绩,并统计不及格人数,并输出查询结果。程序代码if(i=0)cout系统中没有输入数据,请先输入数据!endl;break;int m,n,k,j;m=0;n=0;k=0;for(j=0;ji;j+)if(sj-getshu()60)m+;if(sj-getcpp()60)n+;if(sj-geteng()60)k+;cout数学不及格人数为:mendl;coutc+不及格人数为:nendl;cout英语不及格人数为:kendl;.(10)总成绩排名通过for函数寻找最大值并进行交换,交换得最大值与最大值对应名字。程序代码if(i=0)cout系统中没有输入数据,请先输入数据!endl;break;int h,g,n;int j=0;float a100,temp;string k100,temp1;for(g=0;gi;g+)aj=(*sg).getsum(); kj=(*sg).name;j+;for(h=0;hi;h+)for(n=0;ni-h;n+)if(anan+1)temp=an; /交换得到最大值an=an+1;an+1=temp;temp1=kn; /交换名字kn=kn+1; kn+1=temp1;for(n=1;n=i;n+)coutknsetw(5)anendl;.(11)程序类的构造与继承基类class student和class kecheng用来封装学生的所有信息具体见代码分析。派生类class chengji继承了两个类的所有数据,同时增加了自己的成员,并添加了多个函数。Main()用来实现所有的操作以及对程序的整体控制;定义文件输入流对象in和输出流对象out,实现对外部文件的操作,使得数据得以保存。程序代码class Student /声明学生类public:Student(int n,char nu20) /构造函数num=n;strcpy(name,nu);friend void main(); /声明友元类protected:int num;/学号char name20;/姓名;class Kecheng /声明课程类public: /构造函数Kecheng(float ma,float cp,float eng)math=ma;cpp=cp;english=eng;friend void main(); /声明友元protected:float math;/数学float english;/英语float cpp;/c+;class Chengji:public Student,public Kecheng /声明成绩类public:Chengji(int n,string nam,float ma,float cp,float eng,float map,float cpp,float engp,float,bf,float mz,float cz,float ez): /构造函数Student(n,nam),Kecheng(ma,cp,eng),mathp(map),cppp(cpp),englishp(engp),baif(bf),mathz(mz),cppz(cz),englishz(ez)mathp=map;cppp=cpp;englishp=engp;baif=bf;mathz=mz;cppz=cz;englishz=ez;float getsum();/综合函数float getshu();/数学最后成绩float getcpp();/c最后成绩float geteng();/英语最后成绩friend void main();/声明友元float getaver();/平均值函数protected:float mathp ;/数学平时成绩float cppp;/c+平时成绩float englishp;/英语平时成绩float baif;/成绩百分比float mathz ;/数学总成绩float cppz;/c+总成绩float englishz;/英语总成绩;3系统流程图系统中综合类与功能,程序的运行框架图,包含主界面显示、选择操作、具体的系统主函数操作,选择1-11对应相对的操作,系统自动执行操作,并返回主函数。流程图如下图所示:图3-1 程序流程图第4章 系统调试运行4.1系统运行主界面新建文件夹课程设计,并在文件夹中设立相应的工程,新建程序文件命名为成绩,编写程序代码,并调试运行。系统调试运行输出主界面见图4-1图4-1系统主界面4.2录入功能 需要输入学生的相关信息,并保存到f1.txt中,如4-2图4-2录入功能界面4.3删除功能输入删除名字,程序自动寻找与名字相符数据并删除,如图4-3图4-3删除界面4.4查询功能分为按总成绩查询和按姓名查询两种方式:如图4-4图4-4 查询界面4.5查询不及格人数调用get函数求三科平均成绩并统计不及格人数并输出查询结果。如图4-5图4-5不及格人数界面课程设计体会本次的学生管理系统作业,使我感触颇深,当老师布置完作业后,通过与同学的交流,自己的思考,网络的帮助,完成这次的作业,我认为应该对程序的设计要有一个比较明确的认识。通过分析系统的作用功能与设计系统,最终通过代码的设计与调试,完成系统,这次的作业对我一个初学c+的学生来说 还是比较难得,但是我对c+有浓厚的兴趣,所以编程过程中并没有过多的烦恼,根据c+所学的概念、理论和方法,进一步加深对c+语言的理解和掌握。在c+编程中,需要的是不断改进,才能提高自己的能力。经过与同学的讨论和听老师的教导,使自己在思维上也有或多或少的提升,在以后的生活中,需要不断地去思考,创新,去别人之长补自己之短。参考文献1 谭浩强.C+面向对象程序设计(第二版).清华大学出版社2 谭浩强.C+面向对象程序设计题解与上机指导.清华大学出版社3 LippmanBarbara.C+ Primer.人民邮电出版社4 Bjarne Stroustrup.The C+ Programming Language.机械工业出版社5C+语言的设计和演化,机械工业出版社6 /#includeiostream#includestring#includefstream#includesstream#includeiomanipusing namespace std;class Tstuchar name20;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 n20, int num,float ma,float cj,float eng ) strcpy(name,n); number=num; math=ma; cpp=cj; english=eng; float Tstu:getsum() sum=cpp+english+math; return sum; float Tstu:getaver() average=getsum()/3; return average; 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选择相关操作请输入相对的括号里的阿拉伯数字及字母!endl; int p=0; /全局变量,用于选择菜单时的输入 char w;/全局变量,用于在大项中选择是否继续操作 Tstu *s100; /类定义的指针将所录入的数据按类中的形式分别存储 ofstream *file100; int i=0; /全局变量,用于做每个录入数据的下标 int j=0; int chris1=0; /用于判断dowhile语句 do /判断输入是否正确 cinp; if(p=1p=11) chris1=1; else cout指令错误!请重新输入:endl; while(chris1=0); do switch(p) case 1: /数据的录入 char c; /用于在小项中选择是否继续操作 char name20; int number; float math,cpp,english; do cout请输入姓名:endl; cinname; cout请输入学号:endl; cinnumber; cout请输入数学成绩:endl; cinmath; cout请输入C+成绩:endl; cincpp; cout请输入英语成绩:endl; cinenglish; 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)endl; cinc; chris1=0; do if(c!=yc!=n) cout指令错误!请重新输入!endl; cinc; else chris1=1; while(chris1=0); while(c=y); /重复输入 break; case 2: /增加学生数据 char name20; int number; float math,cpp,english; char c; do cout请输入您要增加的学生的姓名:endl; cinname; cout请输入你要增加的学生的学号:endl; cinnumber; cout请输入数学成绩:endl; cinmath; cout请输入C+成绩:endl; cincpp; cout请输入英语成绩:endl; cinenglish; 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 h; while(infile.get(h) couth; coutendl; infile.close(); j+; si=new Tstu(name,number, math, cpp, english); i+; cout数据录入成功,想继续录入吗(y/n)endl; cinc; if(c!=yc!=n) cout指令错误!请重新输入!endl; cinc; while(c=y); break; case 3:/删除学生信息 char c; string xingming,line,str,name; do ifstream fin(f1.txt); fstream outfile(f2.txt,ios:trunc|ios:out); /作一个文本文档在文件夹中用于显示所录入的数据 cout请输入您要删除的学生的姓名:endl; cinxingming; while(!fin.eof() ) getline(fin,line); istringstream stream(line); name = line.substr(0,line.find( ,0);/找到名字,判断是否相等 if(name != xingming) outfilelineendl; outfile.close(); fin.close(); fstream f(f1.txt,ios:trunc|ios:out); ifstream outf(f2.txt); foutf.rdbuf(); outf.close(); f.close(); cout数据删除成功,想继续删除吗(y/n)endl; cinc; if(c!=yc!=n) cout指令错误!请重新输入!endl; cinc; 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请输入您要修改的学生的姓名:; cinname; fstream fin(f1.txt,ios:in); ofstream outfile(f.txt,ios:trunc|ios:out); coutendl; while(!fin.eof() ) /在文件中查找 getline(fin,line); istringstream stream(line); sname = line.substr(0,l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论