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

下载本文档

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

文档简介

高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 系统设计目的11.1 课程设计目的11.2 课程设计内容1第2章 系统实现思路22.1问题的需求分析22.2系统性能要求22.3 系统功能模块22.4 模块框架图2第3章 系统详细设计43.1有关类的设计43.2输入数据功能的设计63.3保存数据功能的设计93.4查询数据功能的设计103.5修改数据功能的设计133.6数据排列的设计15第4章 系统调试运行174.1成绩的录入174.2成绩的增加174.3删除184.4 修改184.5 查询194.6排序显示194.7 退出程序19课程设计体会20参考文献20第1章 系统设计目的1.1 课程设计目的C+程序设计不仅具有很强的理论性,更是一门实践性非常强的课程,其实践教学环节的效果直接影响着理论教学的效果。本课程注重边学边练,但由于课堂教学和实验的深度与广度有限,练习的深度也受到了一定的限度。为了弥补这一点,而设置了C+程序设计实践教学的方案,主要以教学实习的方式对学生进行综合训练,培养实际分析问题、编程和动手能力,通过教学实习,帮助学生系统地掌握面向对象程序设计方法及各种编辑技巧,努力成为自由驾驭程序设计语言的软件编程能手。1.2 课程设计内容1.设计四个类:学生类(描述学生基本信息);成绩类;班级类;课程类(描述课程信息,课程编号,科目名称(如高等数学,大学英语等)。学生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入; 2能按学期,按班级完成对学生成绩的录入,修改,能按班级统计学生的成绩;求学生的总分及平均分;并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比; 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比); 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件); 注意,至少一个班,30人三门课。 第2章 系统实现思路2.1问题的需求分析1.能对学生各科成绩进行录入;2.能对学生的成绩进行增加;3.能对学生的成绩进行删除;4.能对学生的成绩进行修改;5.能对学生的成绩按总成绩,姓名,进行查询;6.能输出学生的所有数据;7.能进行成绩统计;8.能进行总分查询排名。2.2系统性能要求1.系统安全、可靠;2.功能齐全;3.操作方便、界面友好;4易于维护和扩充。2.3 系统功能模块学生成绩查询系统有:成绩录入、增加、删除、修改,数据查询,排序显示构成。2.4 模块框架图 根据学生的基本信息,借助C+有的优势特点,我们做出了以下的模版图块,便于理解和设计运用。 按总成绩排名学生成绩管理系统操作查询成绩统计录入增加删除修改总成绩查询姓名输出所有学生的成绩每个学生的平均成绩各科不及格人数图2-1 模版框架图第3章 系统详细设计3.1有关类的设计 从题中要求可知,要设计四个类 (1)成绩类:大体上分为三类:数学、英语、c+;但是每一类又可分为三个小的部分:平时成绩、期末成绩和总评成绩。因此,我这样来定义这样的成绩类。class gradePublic:Double math3;Double English3;Double c+3;(2)班级类:对于班级类,主要是学生成绩的划分;按照班级划分和按照学期划分。所以,班级类中就有两个成员year和class。class ClassPublic:Int year;Int class;(3)分数类:对于分数类,主要是针对对象学生,因此分数类是从grade和class公共派生类,在分数类中,还要统计三个科目的成绩,所以就把统计函数写在了这里面。Class score;public grate,public classPublic: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);(4)学生类:对于学生类,就比较复杂了,首先要定义学生的数组来表示学生在哪学年,班级等,接下来要写函数了,析构函数,保存函数,查找函数,排序函数,修改函数等等。Class studentPrivate:Scorestu22m;/学生数组staticintsize1,size2,size3,size4;ints1,s2,s3,s4; /定义数据public:Student()s1=0;s2=0;s3=0;s4=0;/构造函数Student() /析构函数voidadd(); /添加函数voidsearch(); /查找函数voidlist(); /名单函数voidchange(); /修改函数voidsort1(); /排序函数voidsort2(); /排序函数voidsave(); /保存函数voidoutput(); /读取函数;intStudent:size1=0;intStudent:size2=0;intStudent:size3=0;intStudent:size4=0; 3.2输入数据功能的设计 输入函数主要是输入要存入的学生信息:姓名,学生的各科成绩等,由于要输入大量的数据,所以我就用数组来定义一班三十个人的姓名,这样就可以直接的输入,以便在之后的程序中用到。录入的时候,我用到了一个类,其中的各科成绩都有分别的输入,从而保证了程序的条理清晰,不给人那么凌乱感。 class Tstu /通过定义一个类来定义数据录入的函数 char name30; /定义一个学生姓名的数组 int number; float math,cpp,english,average,sum; /定义三科的科目,平时成绩 总评成绩public: Tstu() ; Tstu ( char n30, 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; /得到c+成绩 english=eng; /得到英语成绩 float Tstu:getsum() /得到总分的函数 sum=cpp+english+math; return sum; float Tstu:getaver() /得到平均分的函数 average=getsum()/3; return average; ase 1: /数据的录入 char c; /用于在小项中选择是否继续操作 char name30; int number; float math,cpp,english; do cout请输入姓名:name; cout请输入学号:number; cout请输入数学成绩:math; cout请输入C+成绩:cpp; cout请输入英语成绩:english; 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; 3.3保存数据功能的设计 保存数据主要是对数据的保密性,可持续性等进行完整的保存,以便以后程序在应用是能准确无误的调用所保存的数据。 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.4查询数据功能的设计 查询功能主要分为两种:(1)按总分查询;(2按姓名查询。按总分查询 (1)按总分查询 case 5:/按总分查询 int j=0;float SUM;char c;int flag; if(i=0)cout系统中没有输入数据,请先输入数据!endl;break; do flag=0; cout请输入您要查询的学生的总成绩:SUM; if(sj-getsum()=SUM) flag=1;cout您要查询的学生是:(*sj).nameendl;cout该生的信息为:endl;cout 学号:(*sj).number 数学分数:(*sj).math c+分数:(*sj).cpp 英语分数(*sj).englishendl; for(int j=0;ji;j+) if(flag=0)cout对不起!您要查询的学生不存在!endl;coutc;if(c!=y&c!=n)cout指令错误!请重新输入!c; ; while(c=y); break; (2)按照姓名查询case 6:/按姓名查询 char n20;char c;int j=0;int flag; if(i=0)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).mathc+分数:(*sj).cpp英语分数:(*sj).englishendl; if(flag=0)cout对不起您要查询的学生不存在,请查证后再输入!endl;coutc;if(c!=y&c!=n)cout指令错误!请重新输入:c; while(c=y); break; 3.5修改数据功能的设计 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; coutname; 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,line.find( ,0);if(name!=sname)outfilelineendl;else flag=1; fin.close(); if(flag=1) coutnamenumacomeng;coutendl;outfilename 学号:nu 数学成绩:ma C+成绩:com 外语成绩:engendl; outfile.close();fstream outf(f1.txt,ios:trunc|ios:out);fstream inf(f.txt,ios:in);outfinf.rdbuf()endl;outf.close();inf.close(); if(flag=0)cout对不起,您要修改的学生不存在!请查证后输入!endl; coutc; coutendl; if(c!=y&c!=n) cout 指令错误!请重新输入!endlc; while(c=y);break; 3.6数据排列的设计 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; 3.7主函数的设计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选择相关操作请输入相对的括号里的阿拉伯数字及字母!end第4章 系统调试运行每一个case都能执行,但是有很多的地方都不够完善,例如:在总成绩排序中,只能输出总成绩,不能单独的输出学生的相应的信息;每次进行别的操作之前都要在进行一次数据的录入,不能直接对原有的文件进行读取。 4.1成绩的录入在程序运行的简捷窗口,选择自己所要查询的目的。例如录入成绩。如图4-1图 4-1 录入成绩4.2成绩的增加在程序运行的简捷窗口,选择自己所要查询的目的。例如增加成绩。如图4-2图4-2 增加成绩4.3删除在程序运行的简捷窗口,选择自己所要查询的目的。例如选择数字3,删除成绩。如图4-3图 4-3 删除成绩4.4 修改在程序运行的简捷窗口,选择自己所要查询的目的。例如选择数字4,修改成绩。如图4-4图4.4修改成绩4.5 查询在程序运行的简捷窗口,选择自己所要查询的目的。例如选择数字6,查询总成绩。如图4-5图 4-5查询总成绩4.6排序显示在程序运行的简捷窗口,选择自己所要查询的目的。例如选择数字10,用总成绩排序。如图4-6图4-6 总成绩排序4.7 退出程序在程序运行的简捷窗口,选择自己所要查询的目的。例如选择数字11,退出程序。如图4-7图4-7 退出程序课程设计体会本次的学生管理系统作业,使我感触颇深,当老师布置完作业后,通过与同学的交流,自己的思考,网络的帮助,完成了这次的作业,我认为应该对程序的设计要有一个比较明确的认识,然后分析系统的作用功能与设计系统,最终通过代码的设计与调试,完成系统。在这短短的五天里我收获如下:1、 巩固和加深了对C+的理解,提高综合运用本课程所学知识的能力。2、 培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3、 通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。根据在课程设计中遇到的问题,我将在以后的学习当中注意一下几点:1、 认真上好专业实验课,多在实践中锻炼自己。2、 写程序的过程中要考虑周到,严密。3、 在做设计的时候要有信心、有耐心,切勿浮躁。4、 认真的学习课本知识,掌握课本中的知识点,并在基础上学会灵活运用。5、 在课余时间里多写程序,熟练掌握在调试程序中所遇到的常见错误,以便能节省调试程序的时间。这次的作业对我一个初学c+的学生来说 还是比较难得,但是我对c+有浓厚的兴趣,所以编程过程中并没有过多的烦恼,根据c+所学的概念、理论和方法,进一步加深对c+语言的理解和掌握。在c+编程中,需要的是不断改进,才能提高自己的能力。参考文献1 谭浩强.C+面向对象程序设计.清华大学出版社2 谭浩强.C+程序设计.清华大学出版社3 谭浩强.C程序设计题解与上机指导.清华大学出版社4 谭浩强.C+面向对象程序设计题解与上机指导.清华大学出版社5 谭浩强.C+程序设计题解与上机指导.清华大学出版社#include#include#include#include#includeusing 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选择相关操作请输入相对的括号里的阿拉伯数字及字母!p; if(p=1&p=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请输入姓名:name; cout请输入学号:number; cout请输入数学成绩:math; cout请输入C+成绩:cpp; cout请输入英语成绩:english; 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; case 2: /增加学生数据 char name20; int number; float math,cpp,english; char c; do cout请输入您要增加的学生的姓名:name; cout请输入你要增加的学生的学号:number; cout请输入数学成绩:math; cout请输入C+成绩:cpp; cout请输入英语成绩:english; 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)c; if(c!=y&c!=n) cout指令错误!请重新输入!c; 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请输入您要删除的学生的姓名:xingming; while(!fin.eof() ) getline(fin,line); istringstream stream(line); name = line.substr(0,line.find( ,0);/找到名字,判断是否相等 if(name != xingming) outfilelineen

温馨提示

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

最新文档

评论

0/150

提交评论