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

下载本文档

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

文档简介

河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 设计背景、内容、目的与要求11.1 设计的背景11.2 设计的内容11.3 设计的目的21.4设计的要求2第2章 系统实现思路32.1 系统分析32.2 模版视图3第3章 系统详细设计53.1有关类的设计53.2 输入数据功能的设计73.3 保存数据功能的设计103.4 查询数据功能的设计113.5修改数据功能的设计143.6 数据排列的设计163.7 主函数的设计17第4章 系统调试运行194.1系统调试194.2调试结果20课程设计体会23参考文献24第1章 设计背景、内容、目的与要求1.1 设计的背景学生成绩管理系统是学校日常信息管理的一个重要内容。随着学校考试次数越来越多,学生成绩管理的工作量也变得越来越大。如果能对学生成绩做系统的管理,就能更好、更方便地快速查询或者修改学生的考试成绩,省去了文件管理的繁琐与麻烦,无疑讲给学校的管理部门带来很大的方便。学生成绩管理系统就是把学生的考试成绩实行统一、集中、规范的收集管理,建立现代化、专业话的管理系统。1.2 设计内容l 熟悉Visual C+6.0的编辑环境,掌握其编辑、编译和程序调试功能。l 理解与掌握面对对象程序设计的基本概念、思想与方法。l 掌握和应用类与对象的设计与实现,完成文件的输入输出操作处理;运用模块化程序设计思想完成课程设计内容。l 综合程序设计。l 课程设计题目:学生成绩管理系统设计与实现。设计四个类,包括学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称,如高等数学,大学英语等);学生成绩及课程信息用文件保存,程序执行时从文件读入;按学期,按班级完成对学生成绩的录入、修改,能按班级统计学生的成绩;求学生的总分及平均分,并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比) 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件) 注意,至少应包含一个班、30人、三门课 1.3设计的目的 (1)基本掌握面向过程程序设计的基本思路和方法;(2)达到熟练掌握c+语言的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题; 1.4设计的要求掌握Visual C+6.0集成开发环境的使用,每人独立完成课程设计全部内容,具体要求如下:1、对系统进行功能模块分析、控制模块分析正确2、系统设计要能尽力完成题目所要求的功能。3、编程简练,可用,尽可能的使系统的功能更加完善和全面4、说明书、流程图要清楚。第2章 系统实现思路2.1 系统分析(1)选择用户要进行的功能;(2)对学生信息进行录入功能;(3)对学生的信息进行保存功能;(4)对学生的信息进行查询功能;(5)对学生的信息进行修改功能;(6)对学生的信息进行删除功能;(7)能对学生的成绩进行按班级分类功能;(8)能对学生的成绩进行按个人分类功能;2.2 模版视图(1)总体设计:学生成绩管理系统数据查询数据删除数据修改数据显示数据输入图1-1 总体设计视图(2)程序流程图:学生成绩管理系统计学生成绩查询学生成绩更新学生信息输入学生信息按找课名及分数段进行统计按照姓名查找按照学生号查找排序学生成绩修改学生成绩删除学生成绩从文件中输入从键盘输入按课名得分降分排序按照学生号删除按照姓名删除图1-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; 在这里,我用了上年的case语句,这样更加简化了程序,使程序更具模板化。case 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) /while循环 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 0; 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)按总分查询按总分查询,就要先输入有关数据,从而才有数据可查, case 5:/按总分查询 int j=0;float SUM;char c;int flag; if(i=0)cout系统中没有输入数据,请先输入数据!endl;break;此处我利用了C语言中do循环和if循环,以此来输出查询信息。 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语句的功能发挥的淋漓尽致,所以if语句是我对排序一类的首选,其中最大值就要用到for循环语句。利用冒泡法进行总分的排序,因此if语句和for语句让我完成了这部分的设计。 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选择相关操作请输入相对的括号里的阿拉伯数字及字母!endl; /还要进行其他操作的提示第4章 系统调试运行4.1 系统调试41:控制界面。 图41 控制界面图上图可以看出主界面有我们所需要的功能:数据录入、增加学生、删除学生等,下面就来看看 我们编程的程序的各项功能吧!4.2 调试结果(1)数据输入功能。如下图42 图42 数据输入功能(2)增加学生功能。如下图43 图 43 增加学生信息功能(3)删除学生信息功能。如下图44图44 删除学生信息功能课程设计体会通过本次上级编程,我体会较深的一点是自己看书学习的经验,以及从网上以及其他各种途径获得信息和知识的经验。理论与实际相结合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,我的各方面验都得到了极大的丰富。参考文献1 谭浩强C+语言设计题解与上机指导,清华大学出版社2 谭浩强C+面向对象程序设计,清华大学出版社3 刘健周C+面向对象的程序设计,机械工程出版社4 陈维新,林小茶 C+面向对象的程序设计课程,清华大学出版社5 安双国 C+面向对象的程序设计,机械工程出版社6 郑莉,董渊,何江舟 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(f

温馨提示

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

评论

0/150

提交评论