




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南工程学院高级程序设计语言课程设计成果报告学生成绩管理系统设计与实现学生学号: 学生姓名: 学 院: 计算机学院 专业班级: 软件工程1341 专业课程: 高级程序设计语言指导教师: 2014 年 6 月 27 日题 目学生成绩管理系统设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总 评 成 绩指导教师评语: 日期: 年 月 日目 录第1章 系统设计目的和要求11.1 设计的目的11.2 设计的要求11.3 设计的背景1第2章 系统实现思路32.1 需求分析32.2 系统性能要求32.3 模块框图3第3章 系统详细设计43.1 类的设计43.2 功能函数的设计53.3 主函数的设计14第4章 系统调试运行184.1 逐步调试184.2 分级调试18课程设计体会20参考文献21第1章 课程设计目的和要求1.1 课程设计目的(1)将学到的面向对象的程序设计思想用到工作和学习中,加深对类与对象的理解。通过课程设计,能够提高学生分析解决问题能力,从而运用所学知识解决实际问题的能力。(2)进一步深化掌握C+语言的基本知识;掌握结构化程序设计的方法和技巧,了解算法分析与设计概念;运用面向对象程序设计方法进行程序设计。1.2课程设计要求根据提供的实习题目,完成软件设计的全部过程,并以最终软件设计成果来证明其完成实际任务的能力,完成软件设计和程序调试并提交文档:课程设计报告书,报告书中包含设计的算法及部分程序代码。1.3课程设计题目(1)设计四个类;学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称(如高等数学,大学英语等);学生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入; (2)能按学期,按班级完成对学生成绩的录入,修改,能按班级统计学生的成绩;求学生的总分及平均分;并能根据学生的平均成绩进行排序,能查询学生成绩,不及格科目及学生名单;能按班级输出学生的成绩单。 设置学生的成绩信息:学生学号、姓名、所选课程名称、平时成绩、期末成绩、平时成绩所占百分比 计算学生总评成绩:总评成绩=平时成绩*平时成绩所占百分比+期末成绩*(1-平时成绩所占百分比) 显示学生的姓名、所选课程名称以及平时成绩、期末成绩和总评成绩信息分单人显示和以班输出(班成绩单格式输出到文件) 注意,至少一个班,30人三门课第2章 系统实现思路2.1需求分析根据对题目的分析,程序所需要的功能大概非为如下几种:(1)能对学生各科成绩进行录入:。(2)能对学生的成绩进行删除。(3)能对学生的成绩进行修改。(4)能对学生的成绩按总成绩,姓名,进行查询。(5)能输出学生的所有数据。(6)能进行成绩统计(7)能进行总分查询排名。2.2系统性能要求要对于程序的整体把握,宏观的规划程序,所以对系统的性能要有以下的要求:(1)系统安全、可靠;(2)功能齐全;(3)操作方便、界面友好;(4)易于维护和扩充;2.3模块框图为了方便算法的完成,应该先画出模块框图,并根据框图进行算法的编写和程序的规划。学生成绩管理系统操作查询成绩统计按总成绩排名录入增加删除修改总成绩查询姓名每个学生的平均成绩各科不及格的人数输出所有学生的成绩图21 模块框图第3章 系统详细设计3.1类的设计设计两个类,其一为Student类,包含了需要录入和使用的数据,另一个为Function类,包含了功能函数的声明。并且将这两个类封装在一个头文件中。学生类:/Student.hclass Student protected: char name20; int number; double math,cpp,english,average,sum; public: Student();Student ( char n20, int num,double m,double c,double e ) ; double getsum(); /得到总分的函数 double getaver(); /得到平均分的函数 friend class Fuction; ;功能函数类:/Student.hclass Fuctionpublic:void messin(); /录入数据void delete(); /删除信息void change(); /修改数据void search_sum(); /按恪总成绩查询void search_name(); /按名字查询void show_student_date(); /输出所有学生的数据void show_average(); /每个学生的平均成绩void show_num(); /各科不及格人数void show(); /按总分查询排名int end();/结束;3.2功能函数设计将功能函数封装在同一个cpp(Fuction.cpp)文件中,理清程序的条理,降低主函的冗杂性,便于程序的编写和调试,同时增加程序的隐蔽性。(Student类中的两个功能函数,即getsum()和getaver()两个简单的功能函数在此处略去。)(1)录入数据函数(用于录入数据,存放于文件中)void Fuction:messin () /录入数据 char name20; char c; int number; double math,cpp,english; do cout请输入姓名:name; cout请输入学号:number; cout请输入数学成绩:math; cout请输入C+成绩:cpp; cout请输入英语成绩:english; ofstream outfile(f1.txt,ios:out|ios:app); if(!outfile) /判断文件是否打开 cerrf1.txt can not openendl; exit(1);outfilename 学号?number 数学绩:math C+成绩:cpp 外语成绩:englishendl; outfile.close(); j+; Si=new Student(name, number,math, cpp, english); i+; cout数据录入成功,想继续录入吗e(y/n)c; chris1=0; do /判断是否继续输入 if(c!=y&c!=n) cout指令错洙误请重新输入!c; else chris1=1; while(chris1=0); while(c=y); /重复输入 (2)删除数据函数(用于删除数据)void Fuction:delete() /删除信息 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数据删除成功,想继续删除吗e(y/n)c; if(c!=y&c!=n) cout指令错误!请重新输入!”c; while(c=y); (3)修改数据函数(用于录入数据的修改)void Fuction:change() /修改数据 string sname,line,str,name; int nu;float eng,ma,com;int flag;char c;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(); coutc; coutendl; if(c!=y&c!=n) cout 指令错误!请重新输入!”endlc; while(c=y); (4)按总成绩查询函数(用于实现按总成绩查询)void Fuction:search_sum() /按总成绩查询 float SUM;char c;int flag; flag=0; cout请输入您要查询的学生的总成绩:SUM; for(int j=0;jgetsum()=SUM) flag=1;cout您要查询的学生是:(*Sj).nameendl;cout该生的信息为a:endl;cout 学号:(*Sj).number 数学分数:(*Sj).math c+分数:(*Sj).cpp 英语分数(*Sj).englishendl; if(flag=0)cout对不起您要查询的学生不存在!endl;coutc;if(c!=y&c!=n)cout指令错误!请重新输入!c; ; while(c=y); (5)按名字查询函数(用于按名字查询信息)void Fuction:search_name() /按名字查询 char n20;char c;int flag; 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); (6)输出学生所有的数据(用于输出学生数据)void Fuction:show_student_date()/输出所有学生的数据 cout所有学生数据如?下?:endl; ifstream file; file.open(f1.txt,ios:in); coutfile.rdbuf(); file.close(); (7)各个学生的平均成绩(用于输出各个学生的平均成绩) void Fuction:show_average()/每个学生的平均成绩 for(int m=0;mi;m+) cout(*Sm).name 学号:(*Sm).number 总分:(*Sm).getsum() 均分:(*Sm).getaver()endl; (8)各科不及格人数(用于输出各科不及格人数)void Fuction:show_num()/各科不及格人数 int m,n,k; m=0; n=0; k=0; for(j=0;jmathcppenglish60)k+; cout数学不及格人数为:mendl; coutc+不及格人数为:nendl; cout英语不及格人数为:kendl; (9)按总分查询(永远总分查询学生信息)void Fuction:show()/按恪总分查询排名 int h,g,n;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; (10)结束(用于结束程序)int Fuction:end()/结束 cout退出系统endl; return 0; 3.3主函数的设计由于程序采用封装的形式,所以大大缩减主函数的篇幅,考虑到函数功能需要循环实现,所以将功能函数进行整合,利用函数的递归调用实现功能,所以主函数本体内容其实只调用了整合的函数。重点在整合各个功能函数,并利用函数的递归调用实现循环功能。主程序中需要调用的头文件的声明。#include#include#include #include#include#includeStudent.husing namespace std; /主函数需要的各个头文件的声明。利用函数的递归调用,来实现函数的循环,让程序能够在需要的情况下一直运行下去。void menu() /利用递归调用实现循环的功能函数集合int a;/判断变量int b;/判断变量char w;/判断变量Fuction f;/功能函数类 cout请选择您需要的操作endl; cout(1)数据录入endl; cout(2)删除学生数据endl; cout(3)修改数据endl; cout(4)按总成绩查询endl; cout(5)按姓名查询endl; cout(6)输出所有学生的数据endl; cout(7)每个学生的平均成绩endl; cout(8)各科不及格人数endl; cout(9)按总分查询排名endl; cout(10)退出a; /判断输入是否正确 if(a=1&a=11) b=1; else cout指令错误!请重新输入:endl; while(b=0); do if(a=1) f.messin(); /录入数据 if(a=2) f.delete(); /删除信息if(a=3) f.change(); /修改数据if(a=4) f.search_sum();/按总成绩查询if(a=5) f.search_name();/按名字查询if(a=6) f.show_student_date();/输出所有学生的数据if(a=7) f.show_average(); /每个学生的平均成绩if(a=8) f.show_num();/各科不及格人数if(a=9) f.show();/按总分查询排名if(a=10) f.end();/结束while(b=0);cout 您想继续进行其他操作吗?(y/n):w; coutendl; if(w!=y&w!=n) cout 指令错误!请重新输入!endl; else b=1; menu(); while(b=0);int main() /主函数menu();return 0;第4章 系统调试运行4.1逐步调试在每完成一个步骤以后,都及时地进行调试,以便能够及时的发现问题,并解决问题。避免问题积压,便于程序流畅的完成。4.2分级调试对每个功能函数进行调试 ,更好的完善函数的功能。操作界面:图41 操作界面功能1:数据录入:图42数据录入功能2:删除学生信息:图43删除信息课程设计体会本次实践,是第一次使用C+编写有实际使用功能的应用程序。这次实践的过程,也是对C+的一次摸索的过程。通过本次实践,我的C+编程思路变得更加明确。本次实践中,我还懂得了程序开发的一些重要步骤,比如需求分析、总体设计、程序模块设计等。在此次实践之前,我对C+的理解认识有不足之处,某些知识点的掌握并不牢固。此次实践,使用到了很多先前学习的编程技巧和C+知识,等于一次变相的综合复习,对我C+语言的使用能力有了不错的提升。参考文献1谭浩强.C+面向对象程序设计.清华大学出版社2谭浩强.C+面向对象程序设计题解与上机指导.清华大学出版社3谭浩强.C+程序设计实践指导.清华大学出版社4谭浩强.C语言程序设计.清华大学出版社5大学计算机应用基础案例教程6计算机信息技术基础教程7计算机与信息技术应用指导/Student.hclass Student protected: char name20; int number; double math,cpp,english,average,sum; public: Student();Student ( char n20, int num,double m,double c,double e ) ; double getsum(); /得到总分的函数 double getaver(); /得到平均分的函数 friend class Fuction; ;/Student.hclass Fuctionpublic:void putin(); /录入数据void dele(); /删除信息void change(); /修改数据void search_sum(); /按恪总成绩查询void search_name(); /按名字查询void show_student_date(); /输出所有学生的数据void show_average(); /每个学生的平均成绩void show_num(); /各科不及格人数void show(); /按总分查询排名int end();/结束;void Fuction:putin () /录入数据 char name20; char c; int number; double math,cpp,english; do cout请输入姓名:name; cout请输入学号:number; cout请输入数学成绩:math; cout请输入C+成绩:cpp; cout请输入英语成绩:english; ofstream outfile(f1.txt,ios:out|ios:app); if(!outfile) /判断文件是否打开 cerrf1.txt can not openendl; exit(1);outfilename 学号?number 数学绩:math C+成绩:cpp 外语成绩:englishendl; outfile.close(); j+; Si=new Student(name, number,math, cpp, english); i+; cout数据录入成功,想继续录入吗e(y/n)c; chris1=0; do /判断是否继续输入 if(c!=y&c!=n) cout指令错洙误请重新输入!c; else chris1=1; while(chris1=0); while(c=y); /重复输入 void Fuction:dele() /删除信息 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数据删除成功,想继续删除吗e(y/n)c; if(c!=y&c!=n) cout指令错误!请重新输入!”c; while(c=y); void Fuction:change() /修改数据 string sname,line,str,name; int nu;float eng,ma,com;int flag;char c;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(); coutc; coutendl; if(c!=y&c!=n) cout 指令错误!请重新输入!”endlc; while(c=y); void Fuction:search_sum() /按总成绩查询 float SUM;char c;int flag; flag=0; cout请输入您要查询的学生的总成绩:SUM; for(int j=0;jgetsum()=SUM) flag=1;cout您要查询的学生是:(*Sj).nameendl;cout该生的信息为a:endl;cout 学号:(*Sj).number 数学分数:(*Sj).math c+分数:(*Sj).cpp 英语分数(*Sj).englishendl; if(flag=0)cout对不起您要查询的学生不存在!endl;coutc;if(c!=y&c!=n)cout指令错误!请重新输入!c; ; while(c=y); void Fuction:search_name() /按名字查询 char n20;char c;int flag; 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); void Fuction:show_student_date()/输出所有学生的数据 cout所有学生数据如?下?:endl; ifstream file; file.open(f1.txt,ios:in); coutfile.rdbuf(); file.close(); void Fuction:show_average()/每个学生的平均成绩 for(int m=0;mi;m+) cout(*Sm).name 学号:(*Sm).number 总分:(*Sm).getsum() 均分:(*Sm).getaver()endl; void Fuction:show_num()/各科不及格人数 int m,n,k; m=0; n=0; k=0; for(j=0;jmathcppenglish60)k+; cout数学不及格人数为:mendl; co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年永新县面向社会公开招聘城市社区专职网格员【37人】考前自测高频考点模拟试题及答案详解(历年真题)
- 2025福建漳州市南靖县住房和城乡建设局招聘1人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025河南明珠集团招聘8人考前自测高频考点模拟试题及答案详解参考
- 2025黑龙江鸡西市社会治安综合治理中心招聘公益性岗位就业人员1人模拟试卷有答案详解
- 2025广东深圳九州光电子技术有限公司招聘生产主管等2人考前自测高频考点模拟试题(含答案详解)
- 贵州国企招聘2025黔南州国有企业工作人员招聘48人笔试历年参考题库附带答案详解
- 浙江国企招聘2025宁波甬江软件产业园开发投资有限公司招聘1人笔试历年参考题库附带答案详解
- 2025重庆市城市建设投资(集团)有限公司招聘7人笔试历年参考题库附带答案详解
- 2025重庆千信外经贸集团有限公司数字贸易部副部长招聘1人笔试历年参考题库附带答案详解
- 2025贵州黔东南州凯里瑞禾农业投资(集团)有限责任公司招聘工作人员缴费成功人数与招聘岗位人数达不到31比例岗位截止9月17笔试历年参考题库附带答案详解
- 乡镇卫生院管理制度
- 洗车店卫生管理制度
- JT-T 495-2025 公路交通安全设施产品质量检验抽样方法
- 2025-2030中国铜软连接行业市场现状分析及竞争格局与投资发展研究报告
- 2024-2025学年山东省济南市高一上册第一次月考数学学情检测试题
- 2025年印刷行业趋势分析报告
- 劳动教育的跨学科融合
- 2025年中考英语高频词汇表
- 《钠离子电池简介》课件
- 十八项核心制度
- 《水的组成说课课案》课件
评论
0/150
提交评论