资源描述
河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341班 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 系统设计目的11.1课程设计目的11.2课程设计要求11.3课程设计题目1第2章 系统实现思路32.1构造系统框架32.2进行内容填充3第3章 系统详细设计43.1根据所包含的内容确定头文件43.2构造一个类存放功能函数43.3设计一个让用户执行操作的界面43.4用do-while语句进行主函数循环63.5录入操作63.6删除操作83.7修改操作93.8查询操作113.9输出成绩操作123.10平均成绩输出操作133.11挂科人数统计操作143.12输出名次操作15第4章 系统调试运行164.1分步骤调试164.2总调试结果17课程设计体会28参考文献29第1章 系统设计目的1.1课程设计目的(1)通过高级程序设计语言课程设计,将学到的面向对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力。 (2)通过本课程设计,进一步深化掌握C+语言的基本知识;掌握结构化程序设计的基本方法和设计技巧,初步了解算法分析与设计概念;理解面向对象程序设计思想,初步具备运用面向对象程序设计方法进行程序设计的能力。能熟练应用VC+集成环境进行C+语言程序的编写、编译与调试,提高学生对本课程知识综合运用能力。1.2课程设计要求根据提供的实习题目,认真完成软件设计的全部过程,并以最终软件设计成果来证明其独立完成实际任务的能力,从而,反映出理解和运用C+程序知识的水平和能力,最后完成软件设计和程序调试并提交文档:课程设计报告书,报告书中包含设计的算法及部分程序代码。1.3课程设计题目(1)设计四个类;学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称(如高等数学,大学英语等);学生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入; (2)能按学期,按班级完成对学生成绩的录入,修改,能按班级统计学生的成绩;求学生的总分及平均分;并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比)显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息。分单人显示和以班输出(班成绩单格式输出到文件) 注意,至少一个班,30人三门课。第2章 系统实现思路2.1构造系统框架根据给的成绩系统的题目,自己设计一个框架,头文件、功能函数类、功能类、函数、主函数等。#include/常用的输入输出流 #include /字符串#include/输入输出文件流#include/实现c+风格串流的输入输出流#include/是I/O流控制头文件,#include/对控制台进行变色using namespace std; class LR ; /通过定义一个类来定义数据录入的函数 class student ;/学生类(查询学生信息) class grade;/成绩类(对学生成绩的操作)class classes ;/学生的班级信息 class subject ;/学科的分类。 void main() /主函数。2.2进行内容填充根据自己构造的框架,给对应的类和函数加入需要实现的功能。如LR类就是为了实现对函数的录入和功能函数(求均分,总分)的声明。调理清楚的编程才会让工作量最简化,错误最少化。第3章 系统详细设计3.1根据所包含的内容确定头文件一个程序里面要用到什么样的数据,程序员必须要有一个清晰的认识。所以程序员写上必要的头文件是很重要的一个步骤。#include/常用的输入输出流 #include /字符串#include/输入输出文件流#include/实现c+风格串流的输入输出流#include/是I/O流控制头文件,#include/对控制台进行变色3.2构造一个类存放功能函数构造一个存放功能的函数并且将函数声明为主函数的友元函数,方便主函数调用功能函数。class LR /通过定义一个类来定义数据录入的函数 private:char name20; int number; float math,cpp,english,average,sum; public: LR() ; LR ( char n20, int num,float ma,float cj,float eng ) ; float getsum();/得到总分. float getaver(); /得到平均分. friend void main(); /将主函数定义为友元函数,方便访问类中的成员 .;3.3设计一个让用户执行操作的界面成功的程序员就是要用户不懂程序的情况下能看得懂编写程序的用意,所以设计一个生动的用户执行操作界面是很重要的一个环节。 cout*欢迎来到成绩查询系统*endl; cout请选择您要执行的操作:endl;/输出菜单. cout_endl; cout操作:endl; cout(1)数据存入endl; cout(2)删除信息endl; cout(3)修改数据endl;cout_endl; cout查询:endl; cout(4)查询endl; cout(5)输出全部学生成绩endl;cout_endl; cout成绩统计:endl; cout(6)平均成绩endl; cout(7)各科挂科名单endl;cout_endl; cout名次:endl; cout(8)按照总分排名名次:endl;cout_endl; cout(9)退出endl; cout*欢迎来到成绩查询系统*endl; cout请输出您需要执行的编号:p; if(p11) cout没有这个选项哦亲!请重新输入:endl; else chris1=1; while(chris1=0); do switch(p) while(w=y);;当然里面也会插入do-while条件句进行循环。3.5录入操作进行对学生信息和成绩的存入操作。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 LR(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.6删除操作进行对没用信息的删除操作:case 2:/数据删除 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) 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)c; if(c!=y&c!=n) cout指令错误!请重新输入!c; while(c=y); break; 3.7修改操作进行对已知错误信息的修改操作:case 3:/修改数据 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.8查询操作进行对学生成绩查询的操作:case 4:/查询 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.9输出成绩操作对学生的成绩进行输出: case 5:/输出全部学生信息 cout所有学生数据如下:endl; ifstream file; file.open(f1.txt,ios:in); coutfile.rdbuf(); file.close(); break; 3.10平均成绩输出操作进行平均成绩的输出: case 6:/平均成绩 if(i=0) cout系统中没有输入数据,请先输入数据!endl;break; for(int m=0;mi;m+) cout(*sm).name 学号:(*sm).number 总分:(*sm).getsum() 均分:(*sm).getaver()endl; break; case 7:/各科挂科成绩 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.11挂科人数统计操作统计挂科人数的操作:case 7:/各科挂科成绩 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.12输出名次操作进行名次的输出:case 8:/按照总分排名 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; 第4章 系统调试运行4.1分步骤调试分步骤调试可以让出现的错误提前被发现,提前修改。避免对之后的编程造成更多的麻烦。如图(调试用户执行界面):图1-1(分级调试图)4.2总调试结果 (1)总调试结果是一个选择框,需要用户进行选择。其界面如图:图1-2(控制条界面初图)(2)如果选择录入操作则会出现一些列让用户输入数据的选项,如图:图1-3(录入操作图)(3)如果想要删除某位同学的信息,依然会出现一个选择项,如图:图1-3(删除操作图)(4)如果想要修改某位同学的信息,则会出现如图选择界面:图1-3(修改操作图):(5)如果想要查询某位学生的信息,界面如图:图1-3(查询操作图)(6)如果想要查询全部的成绩,则输出界面如图:图1-3(成绩输出操作图)(7)如果想要查询平均成绩,则输出界面如图:图1-3(平均成绩输出操作图)(8)如果想要了解各科挂科人数,则操作界面如图:图1-3(不及格人数输出操作图)(9)如果想要了解各个学生的总分排名,则操作界面如图:图1-3(总分排名操作图)注:(以上图片引用的数据为用户自己输入的数据):课程设计体会通过这次程序设计,我充分认识到自己的不足之处,同时也让我在程序设计中学到了很多知识,在这之中,我感觉自己不仅增加了实验的分析及处理能力而且我也懂得了课本知识的重要性,课本是我们学习的根本,同时也是我们实验的基础。当然,在编程的过程中出现了一系列的问题,有一些,通过查阅资料和课本已经解决,但还是有一些不能,但经过我们寝室室友的努力,再加上我们的不断地分析和修改下,终于把正确的程序给编写了出来。同时,自己也感到非常高兴,毕竟自己为这次的实验报告付出了很多的时间和精力,同时也对自己的成果感到由衷的高兴,或许是这份报告是自己努力的成果,所以对它总是有一种不同的感觉,有自豪,也有满意。在具体的设计与实施中,我看到并感受到了一个管理系统从无到有的过程,对具体的设计步骤、思路方法、技巧都有了进一步的了解,并感受深刻。这次课程设计加深了我对Visual C+相关知识,巩固了自己的基础,着实让我受益匪浅。联系实际生活,我处理困难应该和这次编程一样,用心去感受过程,去用最有用的方法解决眼下的困难,这是我这次程序设计最大的收获。参考文献1、谭浩强编:C+面向对象程序设计清华大学出版社2、谭浩强.C语言程序设计.清华大学出版社3、孔鹏. Visual c+ 6.0完全自学手册M.北京:机械工业出版社4、龚志翔. Visual C+编程实例与技巧集粹M.北京:北京期望电子出版社5、大学计算机应用基础案例教程6、计算机信息技术基础教程7、计算机与信息技术应用指导#include #include #include#include#include#includeusing namespace std; class LR /通过定义一个类来定义数据录入的函数 private:char name20; int number; float math,cpp,english,average,sum; public: LR() ; LR ( char n20, int num,float ma,float cj,float eng ) ; float getsum();/得到总分. float getaver(); /得到平均分. friend void main(); /将主函数定义为友元函数,方便访问类中的成员 .;LR:LR ( char n20, int num,float ma,float cj,float eng ) strcpy(name,n); /得到姓名 number=num; /得到学号 math=ma; /得到数学成绩 cpp=cj; /得到c+成绩 english=eng; /得到英语成绩 float LR:getsum() /得到总分的函数 sum=cpp+english+math; return sum; float LR:getaver() /得到平均分的函数 average=getsum()/3; return average; class student private: string xname,sname,line,str; char name20; int number; public: friend void main(); ;/学生类(查询学生信息) class grade private: grade(float aver,float su):average(aver),sum(su) public: friend void main(); float average; float sum; ;/成绩类(对学生成绩的操作) class classes public: friend void main(); ;/学生的班级信息 class subject public: friend void main(); subject(float eng,float ma,float cj):english(eng),math(ma),cpp(cj)/得到各科成绩。 private: float english; float math; float cpp; ;/学生的学科分类 void main() system(color 4d); cout*欢迎来到成绩查询系统*endl; cout请选择您要执行的操作:endl;/输出菜单. cout_endl; cout操作:endl; cout(1)数据存入endl; cout(2)删除信息endl; cout(3)修改数据endl; cout_endl; cout查询:endl; cout(4)查询endl; cout(5)输出全部学生成绩endl; cout_endl; cout成绩统计:endl; cout(6)平均成绩endl; cout(7)各科挂科名单endl; cout_endl; cout名次:endl; cout(8)按照总分排名名次:endl; cout_endl; cout(9)退出endl; cout*欢迎来到成绩查询系统*endl; cout请输出您需要执行的编号:p; if(p11) cout没有这个选项哦亲!请重新输入:endl; else chris1=1; 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 LR(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 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) 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)c; if(c!=y&c!=n) cout指令错误!请重新输入!c; while(c=y); break; case 3:/修改数据 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; case 4:/查询 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; case 5:/输出全部学生信息 cout所有学生数据如下:endl; ifstream file; file.open(f1.txt,ios:in); coutfile.rdbuf(); file.close(); br
展开阅读全文