c++课程设计(研究生成绩管理系统)

上传人:第*** 文档编号:55632459 上传时间:2018-10-03 格式:DOCX 页数:52 大小:664.90KB
返回 下载 相关 举报
c++课程设计(研究生成绩管理系统)_第1页
第1页 / 共52页
c++课程设计(研究生成绩管理系统)_第2页
第2页 / 共52页
c++课程设计(研究生成绩管理系统)_第3页
第3页 / 共52页
c++课程设计(研究生成绩管理系统)_第4页
第4页 / 共52页
c++课程设计(研究生成绩管理系统)_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《c++课程设计(研究生成绩管理系统)》由会员分享,可在线阅读,更多相关《c++课程设计(研究生成绩管理系统)(52页珍藏版)》请在金锄头文库上搜索。

1、中南大学面向对象编程 C+课程设计报告题 目 研究生成绩管理系统 学生姓名 哈士奇(0903150217) 指导教师 杨希 学 院 信息科学与工程学院_ 专业班级 电子信息工程 1502 班 第 2 页 共 54 页二一六 年 七 月第 3 页 共 54 页目目 录录1.课程设计内容课程设计内容32.课程设计目的课程设计目的43.背景知识背景知识 44.工具工具/准备工作准备工作.45.设计步骤、方法等设计步骤、方法等.45.1.步骤 1:相关类的定义,重载75.2.步骤 2:单链表相关函数135.3.步骤 3:文件操作函数的声明与定义225.4.步骤 4:统计函数的声明与定义265.5.步骤

2、 5:菜单函数的书写285.6.步骤 6:登录界面(密码) ,欢迎界面的实现316.设计结果及分析设计结果及分析.327.设计结论与感想设计结论与感想.398.对本设计过程及方法、手段的改进建议对本设计过程及方法、手段的改进建议.399.参考文献参考文献 .40第 4 页 共 54 页程序设计基础实践报告程序设计基础实践报告1. 课程设计内容课程设计内容设计一个研究生基本信息管理,实现对不同学制的研究生包括:学术硕士和工程硕士的信息管理。定义一个基本的研究生类,基本信息包括:学号、姓名、性别、年龄、课程成绩。派生出学术硕士类,增加的属性包括:专业,发表论文(名称与级别(1、2、3) ) ,可以

3、多篇,最多 3 篇) ,论文成绩,总成绩;工程硕士增加的属性包括:领域,参与项目(名称与级别(A,B,C,) ),项目成绩,总成绩。计算方式如下1) 学术硕士论文成绩计算:各个级别的论文得分为:级别*10,每个学生论文最高 90分;假设某研究生发表两篇论文,级别分别为 1、2,那么论文成绩=(10/90+20/90)*100,总成绩=课程成绩*0.7+论文成绩*0.3;2) 工程硕士项目成绩计算:每个学生只参与一项项目,各个级别得分:A 级 90,B 级75,C 级 60,不参与项目得分为 0;总成绩=课程成绩*0.5+项目成绩*0.5;基本功能与技术要求1、 数据文件管理功能:利用输入输出流

4、创建新文件、打开文件、保存文件。2、计算与统计功能:采用静态数据成员与成员函数完成记录中相关数据的统计;1)能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录进行数据统计(包括:总数、平均值、分段信息) ,例如:按总成绩得分为100、9099、8089、7079、6069 和不及格学生的人数,以及所占百分比。第 5 页 共 54 页2)计算每个研究生的总成绩。3、记录管理功能:利用继承与派生思想创建不同的类;记录的管理采用链表或者指针数组实现;采用抽象类、虚函数等实现对象与函数的动态关联,体现多态性。1)输入添加/插入记录:利用重载运算符“”完成对任意一条记录输入、添加或插入数据表

5、中,并保存到数据文件中。2)查询、显示记录:能够打开已存在的数据表文件,根据用户要求按所给记录关键字查询一个或多个相关联记录的各项信息。利用重载运算符“,使之能够实现 cin cout 的输入和输出。2.进行单链表操作的函数的书写,使之能够对两类派生研究生进行链表的建立、输出、插入、修改、删除等基本操作。3.进行相关文件的操作函数的声明与定义,使程序能够对缓存中的数据读到磁盘中,也可以将磁盘中的数据读取到内存中。1.信息录入2.信息插入8.退出函数9.初始化该系统4.信息输出5.信息修改6.信息查找7.信息统计3.信息删除第 9 页 共 54 页4.统计函数的书写,这部分用到了静态变量和静态函

6、数,程序可以实现基本的统计功能。5.菜单函数的书写,这部分就是美观,简单大方,cout 语句进行图形绘制即可,比较容易。6.密码,欢迎界面的实现:使程序更加美观,也能够填写正确的用户名和口令方可进入系统。1-2-3-4-5-6下面进行代码的说明:5.1. 步骤步骤 1:相关类的定义,重载相关类的定义,重载这部分对于整个代码来说相对比较简单,运用 c+对类的定义,类中数据成员的声明,重载函数的使用即可实现,这里我着重说明一下重载部分,以学术硕士的重载为例(其他相似) ,重载的过程中输出语句要尽可能的美观,而输入语句的话,我想要能够对用户的误操作进行处理,因为学号为 0 是退出录入,所以当用户输入

7、 0 时,if 判断语句判断是否为 0,若为零,return input 结束函数,其他比如说成绩,等级的输入都有限定,同理,if 语句判断,若为真,配合 goto 语句回到输入数据前,重新输入,这么做的好处,用户一旦输入错误一个数据,马上会令用户重新输入(个人认为,相对于一些作品,等待用户将其全部数据输入之后,每个数据进行判断,若有一个不符和要求,即不录入数据好一些) ,其中浮点型数据的判断比较关键(不能准确的保存数据,判断浮点型数据是否=一个固定的值需要调用 fabs 函数实现) ,还有,在输入的过程中有一些数据是通过计算得到,这样的数据我在用户输入一些必要的数据后就会进行赋值,调用计算函

8、数计算赋值,用户一旦输入完毕,相关值便赋值给该对象的数据域。但是也是有缺点的,goto 语句用的偏多,这点不利于程序的稳定性,应努力加强。源代码(部分):/重载函数(派生类:学术硕士)第 10 页 共 54 页istreamif (astu.num = 0)return input;cout astu.name;loopse:cout astu.sex;/判断性别是否合法if (!(astu.sex = “男“ | astu.sex = “女“)cerr astu.age;loopc:cout astu.courseScore;第 11 页 共 54 页if (astu.courseScore

9、 100)cerr astu.major;looppn:cout astu.paperNumber;if (!(astu.paperNumber 0)cerr = 1)cout astu.apaper.paper1;loopff:cout astu.apaper.paperLevel1;第 12 页 共 54 页/判断级别是否合法if (!(astu.apaper.paperLevel1 = 1 | astu.apaper.paperLevel1 = 2 | astu.apaper.paperLevel1 = 3)cerr astu.apaper.paper1Score;/判断分数是否合法if

10、 (astu.apaper.paper1Score 90)cerr = 2)cout astu.apaper.paper2;loopss:cout astu.apaper.paperLevel2;第 13 页 共 54 页if (!(astu.apaper.paperLevel2 = 1 | astu.apaper.paperLevel2 = 2 | astu.apaper.paperLevel2 = 3)cerr astu.apaper.paper2Score;if (astu.apaper.paper2Score 90)cerr = 3)cout astu.apaper.paper3;lo

11、optt:cout astu.apaper.paperLevel3;if (!(astu.apaper.paperLevel3 = 1 | astu.apaper.paperLevel3 = 2 | astu.apaper.paperLevel3 = 3)第 14 页 共 54 页cerr astu.apaper.paper3Score;if (astu.apaper.paper3Score 90)cerr (istream/统计函数static void statisticalData(academicGraduateStudent*);protected:static float sumA

12、cademicScore;/学术硕士全体总成绩static int countAcademicNumber;/学术硕士总人数static float averageAcademicScore;/学术硕士平均成绩static int a6;/学术硕士总分分段人数string major;/专业struct paper/发表论文string paper1;float paper1Score;int paperLevel1;string paper2;float paper2Score;第 17 页 共 54 页int paperLevel2;string paper3;float paper3Sc

13、ore;int paperLevel3;apaper;/apaper 代表的是 academicGraduateStudent 的 paperint paperNumber;/发表的论文数float paperScore;/论文成绩float sumScore;/总成绩;/工程硕士class engineeringGraduateStudent :public graduateStudentpublic:engineeringGraduateStudent *peNext;/定义一个指针,链表操作engineeringGraduateStudent() ;/构造函数engineeringGra

14、duateStudent() ;/析构函数int getNum()const return num; /获取学号string getName()const return name; /获取姓名float calculateSumScore();/计算总分数/重载函数friend ostream/统计函数static void statisticalData(engineeringGraduateStudent*);第 18 页 共 54 页protected:static float sumEngineeringScore;/工程硕士全体总成绩static int countEngineeri

15、ngNumber;/工程硕士总人数static float averageEngineeringScore;/工程硕士平均成绩static int e6;/学术硕士总分分段人数string field;/领域struct project/参加项目string pName;/项目名称char pLevel;/项目等级 A,B,Ceproject;float projectScore;/项目成绩float sumScore;/总成绩;5.2. 步骤步骤 2:单链表相关函数单链表相关函数这一块代码的书写我的思路:因为有两类派生研究生,而文件操作需要的是告诉计算机字节数的读取,所以,建立两个单链表,分别对学术,工程类的研究生进行操作,链表的优势确实比数组好,可以说,链表就是一个动态的数组,链表的书写过程中是我又复习了一遍上学期学的知识,更加加深了头结点的关键作用(头结点中数据域是没有用的,只有指针域有用) ,我将两个头结点均声明为全局变量,方便函数的调用使用,下面展示学术类的源代码,工程类的同理。源代码(部分):/学术类研究

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号