已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学二一二二一三学年第二学期信息科学与工程学院C+程序设计语言课程设计报告课程名称:C+程序设计语言班 级:电气信息类 班 学 号:姓 名: 指导教师: 二0一三年零七月目录:1. 课程设计目的2. 系统描述(需求分析)3. 功能模块结构(设计思路)4. 主要模块的算法说明5. 程序运行结果(主要截图及说明)6. 课程设计总结7. 参考文献8. 附录(程序源代码)一.课程设计目的1、使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;2、使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力;3、使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。二.系统描述(需求分析)小型学生成绩管理系统1、需要处理的基础数据 学生基本信息:如班级、学号、姓名、性别、年龄、宿舍号码、电话号码等。 学生选修课程的基本信息:课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。2、系统的基本功能 数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息; 数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其选修课程信息; 数据的插入:插入某个学生信息 数据的查询:如按学号查询、按姓名查询等; 数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息; 平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息; 列出不及格学生清单(学号、姓名、不及格的课程和成绩)。 考虑用文件把数据保存起来(可选)。分析如下:(1)如上所示,该系统要求处理一些学生成绩的基本数据,包括两个方面:学生身份信息和学生成绩信息。(2)该系统不仅要求能录入一些基本数据外,还要能对这些数据进行处理,比如修改,删除,插入,查询等。另外,因为对数据库了解不多,可以考虑用文件保存的形式将数据保存起来。三.功能模块分析(设计思路) 考虑到每个学生都是一个对象,而且他们都有一些共性:各种身份信息和成绩信息,于是可以定义一个类:里面包含各种成员信息(为了信息的隐蔽性,可以定义成私有数据)。而对这些数据进行处理的选项,可以用一些函数来实现,每一个函数对应一个功能。在这里,既可以定义成类的成员函数,也可以定义类的友元函数,为方便,本程序采用后者:友元函数。具体结构如下:1.Stu类的结构:2.数据成员:数据classnumnamemathc_programenglishaverageorder含义班级学号姓名高数C+课程大学英语平均分排名3.功能函数:Input( Stu stud )输入学生信息Statistic( Stu stud )学生信息输出Lookup( Stu stud )查找学生信息Modify( Stu stud )修改学生信息Delete( Stu stud ) 删除学生信息Output( Stu stud )输出全部信息Sort( Stu stud )对学生进行排序Insert( Stu stud ) 插入学生信息Showfail( Stu stud ) 查找不及格学生Write( Stu stud )文件写入函数Read( Stu stud ) 文件读取函数void menu()菜单函数,以供选择 以上每一个函数的形参都是一个类对象,因为是友元函数,故可以访问类的数据成员。四.主要模块的算法说明1学生信息的保存:由于没有学习数据库的有关知识,故在本程序设计中要用到文件保存和读取:定义一个函数void Write(Stu stud,int n) /文件写入函数 fstream myFile; /定义一个文件输入输出类 myFile.open(D:student.dat,ios:out|ios:binary);/目标文件位置 if(!myFile) coutD:student.dat cant open!endl; /abort();异常终止一个进程,和的exit()函数功能相似 exit(1); int count=n; myFilecountendlendl; for(int i=0; i=count; i+) myFilestudi.class_0 studi.math studi.c_programstudi.english studi.averageendl; myFile.close();学生信息的读取,和保存很相像,这里不再介绍。2.对学生信息的处理: 遵循一个大的原则,首先要将文件里的信息读取出来,然后再按照过程化的语句结构对各种信息进行处理,比如删除,修改,插入,查找等,其中修改,插入,查找这三种的算法都比较简单,只需设置if条件语句或while循环语句既可解决,下面着重讲一下删除功能的实现。在本程序中,采用一种替代的方法,将需要删除的学生信息处理掉。即先找到需要删除的学生的学号,然后将其所有的信息全部替换成后面一位同学的信息,也就是说该同学的信息全部被覆盖掉,这样在查询的时候,此学生已经不再存在。void Delete(Stu stud) /删除学生信息函数 system(cls);/调用系统函数cls,清除屏幕 int s; int n=Read(stud);/读取学生数据 int i=0,j; char sign; coutendl 删除学生成绩 =endl; while(sign!=n&sign!=N) cout请输入需要删除学生的学号:s; while(studi.num-s)!=0&in) i+;/这种结构形式决定一次只能删除一个学生 if(i=n) cout提示:对不起,无法找到该学生endl; else for(j=i; jn-1; j+) strcpy(studj.class_0,studj+1.class_0);/用后面一个学生的信息取代要删除的学生信息,这样原学生就已经消失 studj.num=studj+1.num; strcpy(,studj+1.name); studj.math=studj+1.math; studj.c_program=studj+1.c_program; studj.english=studj+1.english; studj.average=studj+1.average; cout提示:已成功删除!endl; n-; cout提示:是否继续删除学生信息?(Y/N); cinsign; Write(stud,n);/将未删除的学生数据保存3.排序的实现: 在本程序中,采用冒泡法对学生平均成绩进行排序,即首先将相邻的两个学生的成绩进行比较,若前者小于后者,则将两者的信息全部交换,最后再依次按平均分由高到低输出学生所有信息。具体实现过程如下:void Sort(Stu stud) /学生成绩排序函数 system(cls);/调用系统函数,清除屏幕 int i,j,k; float s; char t20; coutendl 降序排序成绩 =endl; int n=Read(stud); for(i=0; in-1; i+) for(j=0; jn-1-i; j+) if(studj.averagestudj+1.average)/采用冒泡法比较大小,即相邻两个数比较,把大的放在前面 strcpy(t,studj+1.class_0); /交换班级序号 strcpy(studj+1.class_0,studj.class_0); strcpy(studj.class_0,t); k=studj+1.num;/交换学号 studj+1.num=studj.num; studj.num=k; strcpy(t,studj+1.name);/交换姓名 strcpy(studj+1.name,); strcpy(,t); s=studj+1.math;/交换数学成绩 studj+1.math=studj.math; studj.math=s; s=studj+1.c_program;/交换C+成绩 studj+1.c_program=studj.c_program; studj.c_program=s; s=studj+1.english;/交换英语成绩 studj+1.english=studj.english; studj.english=s; s=studj+1.average;/交换平均成绩 studj+1.average=studj.average; studj.average=s; cout-endl; cout班级t学号t姓名t高数tC+t英语t平均分t名次endl; cout-endl; for(i=0; in; i+) studi.order=i+1; coutstudi.class_0tstudi.mathtstudi.c_programt studi.englishtstudi.averagetstudi.orderendl; Write(stud,n);五.程序运行结果 经过上面的介绍,该系统的基本功能已经具备,下面我们来介绍一下其实际使用效果:首先点击运行,会出现一个功能菜单供你选择:1.信息的录入:现在,我们首先选择1,输入学生信息:需要多输入几次以供后来使用,还可以使用6插入学生信息。2.信息的显示:选择2显示统计数据:选择8显示全部学生具体信息:3.查找学生信息: 首先出现一个界面需要你输入学号:再点击回车,会出现该学生的信息:4.修改学生成绩: 输入需要修改的学生学号,会首先出现该学生的原本信息,接着在下面重新填写该学生信息,保存即可5.删除学生数据: 输入需要删除的学生的学号,点击回车即可删除,再查看时,该成员已经消失再次查看全部成员:如上所示,已经没有学号为1005的学生信息了6.按平均分降序排列:如上所示,在选择功能7并点击回车时,会以平均得分降序的形式排列出所有信息,并包含该学生的名次。7.显示不及格学生的信息:选择功能9,会显示不及格学生的身份信息和其不及格科目:如图所示,这批学生里面有两个学生的成绩存在不及格现象,其中1002号学生有一门不及格科目,1004号学生有两门不及格科目。全部都已经显示出来。8.安全退出系统:六.课程设计总结(1)回顾此次课程设计,感慨良多,从刚拿到题目时的一脸茫然,到最后能成功解决,觉得此次课程设计我又学到了好多知识。首先在这里要感谢一下王磊指导老师,经过他的细心讲解,我才有了一个完整的设计思路。(2)在这次课程设计的过程中,最大的感觉就是对知识的不熟悉,一些C+基础知识似懂非懂,结果总要去查书才能写出不出错误的代码,结构就是耗费了大量的时间,事倍功半。经历这次教训,我想会对我以后的计算机语言学习起到一定的帮助。(3)在这次的课程设计过程中,通过查书的学习,对C+的了解又加深了不少,包括类的结构,以及怎样在类外访问类类的私有成员等,我想下次再写基于对象的程序时,一定会得心应手。(4)总的来说,这次程序设计让我获益匪浅,对C+语言也有了进一步的认识:语言功能高、表达能力强、使用灵活方便、目标程序效率高等等。C+语言是在国内外广泛使用的一种计算机语言,相信除了以上优点,还有许多我们还未发现,希望能在以后的学习中有更深入的认识七.参考文献(1)C+程序设计(第二版) 谭浩强 编著(2)visual C+从入门到精通 明日科技 编著(3)C+编程思想 (美)埃克尔 编著 刘宗田 译八.附录(完整源代码)#include #include #include #include #include using namespace std;class Stu /把对类的私有成员的处理函数全部定义为友元函数public: friend void Input(Stu stud) ; /学生成绩录入函数 friend void Statistic(Stu stud);/学生信息输出函数 friend void Lookup(Stu stud) ; /学生成绩查找函数 friend void Modify(Stu stud) ; /学生成绩修改函数 friend void Delete(Stu stud) ; /学生信息删除函数 friend void Output(Stu stud) ; /学生全部信息输出函数 friend void Sort(Stu stud) ; /学生成绩排序函数 friend void Insert(Stu stud) ; /学生成绩插入函数 friend void Write(Stu stud,int n);/学生成绩写入档案函数 friend int Read(Stu stud); /学生成绩信息读取函数 friend void Showfail(Stu stud); /查找不及格学生的函数private: char class_020; int num; char name8; float math; float c_program; float english; float average; int order;void Write(Stu stud,int n) /文件写入函数 fstream myFile; /定义一个文件输入输出类 myFile.open(D:student.dat,ios:out|ios:binary); if(!myFile) coutD:student.dat cant open!endl; /abort(); exit(1); int count=n; myFilecountendlendl; for(int i=0; i=count; i+) myFilestudi.class_0 studi.num studi.math studi.c_program studi.english studi.averageendl; myFile.close();int Read(Stu stud) /文件读取函数 fstream myFile; myFile.open(D:student.dat,ios:in|ios:binary); if(!myFile) coutD:student.dat cant open!count; for(int i=0; istudi.class_0studi.mathstudi.c_programstudi.englishstudi.average; myFile.close(); return count ; /函数返回一个查询出来的数值void Input(Stu stud) /学生成绩录入函授 system(cls); /调用系统命令cls,清除屏幕 int i=0; int flag; char sign; coutendl 请输入学生成绩 =endl; while(sign!=n&sign!=N) coutstudi.class_0; loop: coutstudi.num; int c=0; while(ci) c+; if(studi.num=studi-c.num) cout 你输入的学号已经存在!请重新输入。endl; goto loop; ; do /学生信息录入循环 flag=0; coutstudi.math; if(studi.math100 |studi.math1) cout对不起,请输入1-100之间的数字!n; else flag=1; while(flag=0); do flag=0; coutstudi.c_program; if(studi.c_program100 |studi.c_program1) cout对不起,请输入1-100之间的数字!n; else flag=1; while(flag=0); do flag=0; coutstudi.english; if(studi.english100 |studi.english1) cout对不起,请输入1-100之间的数字!n; else flag=1; while(flag=0); studi.average=(studi.math+studi.c_program+studi.english)/3; cout 平均分为:studi.averageendl; cout提示:是否继续写入学生成绩?(Y/N); cinsign; i+; Write(stud,i); /调用文件写入函数,把信息写入文件void Statistic(Stu stud) /学生成绩数据输出函数 system(cls); int n=Read(stud); coutendl 输出学生统计数据 =endl; cout班级t学号t 姓名tt 平均分endl; for(int i=0; in; i+) coutstudi.class_0ttstudi.averageendl; system(pause);void Lookup(Stu stud) /学生成绩查找函数 system(cls); int n=Read(stud); int s; int i=0; coutendl 查找学生成绩 =endl; cout请输入需要查找学生的学号:s; while(studi.num-s)!=0&in) i+; if(i=n) cout提示:对不起,无法找到该学生的信息!endl; else cout-endl; cout班级:studi.class_0endl; cout学号:studi.numendl; cout姓名:endl; cout高等数学:studi.mathendl; coutC+程序设计:studi.c_programendl; cout大学英语:studi.englishendl; cout平均分:studi.averageendl; void Modify(Stu stud) /学生成绩修改函数 system(cls); int n=Read(stud); int s; int i=0; coutendl 修改学生成绩 =endl; cout请输入需要修改成绩学生的学号:s; while(studi.num-s)!=0&in) i+; if(i=n) cout提示:对不起,无该学生的成绩endl; else cout-该学生的信息-endl; cout班级t学号t姓名t高数tc+t英语t平均分endl; cout-endl; coutstudi.class_0tstudi.mathtstudi.c_programtstudi.englishtstudi.averageendl; cout请重新输入该学生的信息endl; cout班级:studi.class_0; cout学号:studi.num; cout姓名:; cout高等数学:studi.math; coutC+程序设计:studi.c_program; cout大学英语:studi.english; studi.average=(studi.math+studi.c_program+studi.english)/3; cout平均分为:studi.averageendl; char c; cout是否保存数据?(y/n)c; if(c!=n&c!=N) Write(stud,n); void Delete(Stu stud) /删除学生信息函数 system(cls); int s; int n=Read(stud); int i=0,j; char sign; coutendl 删除学生成绩 =endl; while(sign!=n&sign!=N) cout请输入需要删除学生的学号:s; while(studi.num-s)!=0&in) i+;/这种结构形式决定一次只能删除一个学生 if(i=n) cout提示:对不起,无法找到该学生endl; else for(j=i; jn-1; j+) strcpy(studj.class_0,studj+1.class_0);/用后面一个学生的信息取代要删除的学生信息,这样原学生就已经消失 studj.num=studj+1.num; strcpy(,studj+1.name); studj.math=studj+1.math; studj.c_program=studj+1.c_program; studj.english=studj+1.english; studj.average=studj+1.average; cout提示:已成功删除!endl; n-; cout提示:是否继续删除学生信息?(Y/N); cinsign; Write(stud,n);void Insert(Stu stud) /学生信息插入函数 system(cls); int n=Read(stud); char s; coutendl 增加学生成绩=endl; while(s!=n&s!=N) cout班级:studn.class_0; coutstudn.num; ; coutstudn.math; coutstudn.c_program; coutstudn.english; studn.average=(studn.math+studn.c_program+studn.english)/3; cout平均分studn.average; n+; cout提示:插入成功!endl; cout是否继续输入(y/n)s; Write(stud,n);void Sort(Stu stud) /学生成绩排序函数 system(cls); int i,j,k; float s; char t20; coutendl 降序排序成绩 =endl; int n=Read(stud); for(i=0; in-1; i+) for(j=0; jn-1-i; j+) if(studj.averagestudj+1.average)/采用冒泡法比较大小,即相邻两个数比较,把大的放在前面 strcpy(t,studj+1.class_0); /交换班级序号 strcpy(studj+1.class_0,studj.class_0); strcpy(studj.class_0,t); k=studj+1.num;/交换学号 studj+1.num=studj.num; studj.num=k; strcpy(t,studj+1.name);/交换姓名 strcpy(studj+1.name,); strcpy(,t); s=studj+1.math;/交换数学成绩 studj+1.math=studj.math; studj.math=s; s=studj+1.c_program;/交换C+成绩 studj+1.c_program=studj.c_program; studj.c_program=s; s=studj+1.english;/交换英语成绩 studj+1.english=studj.english; studj.english=s; s=studj+1.average;/交换平均成绩 studj+1.average=studj.average; studj.average=s; cout-endl; cout班级t学号t姓名t高数tC+t英语t平均分t名次endl; cout-endl; for(i=0; in; i+) studi.order=i+1; coutstudi.class_0tstudi.mathtstudi.c_programt studi.englishtstudi.ave
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 备战期中 2026-2027学年第一学期初三生物人教版上学期期末测试卷(含答案)
- 2027年宁夏回族自治区语文中考仿真模拟卷(含答案)
- 2027年河南省英语初三查漏补缺卷(含答案)
- 2027年山东省道德与法治中考仿真模拟卷(含答案)
- 突破自我 2026-2027学年第一学期八年级道德与法治部编版11月月考试卷(含答案)
- 巩固提高 2026年秋季初三历史部编版第六单元单元测试卷(含答案)
- 2027届湖南省英语中考北师大版查缺补漏专练(含答案)
- 2027年湖北省道德与法治九年级真题拓展卷(含答案)
- 四川事业编融媒体宣传岗 2026 易错题试卷 含答案解析
- 湖南事业编财会岗 2026 历年真题试卷 含解析
- 四川省泸州市泸县第五中学2026-2027学年高一上学期9月考试英语试卷
- 海南省海口市2027届高三年级摸底考试生物试题(含解析)
- 2026年物业管理条例考核试题及答案
- 公共娱乐场所电气消防安全培训
- 2026岳阳观盛投资发展有限公司及下属管理企业秋季联合招聘25人笔试备考题库及答案详解
- 第5课 中国人民站起来了 第1课时 课件(内嵌视频)2026-2027学年道德与法治五年级上册统编版
- 制造业公司绩效考核含全套KPI指标库
- 2026年《资料员》考试题库带答案(考试直接用)
- 人大代表知识培训课件
- 环卫作业车辆安全驾驶培训课件
- 神经源性肠道治疗讲课件
评论
0/150
提交评论