1、中南大学面向对象编程 C+课程设计报告题 目 研究生成绩管理系统 学生姓名 神孟秋 指导教师 学 院 信息科学与工程学院_ 专业班级 计算机科学与技术 1604 第 2 页 共 54 页二一七 年 十 月第 3 页 共 54 页目 录1. 课程设计内容 .32. 课程设计目的 .43. 背景知识 .44. 工具/准备工作 .45. 设计步骤、方法等 .45.1. 步骤 1:相关类的定义,重载 .75.2. 步骤 2:单链表相关函数 .135.3. 步骤 3:文件操作函数的声明与定义 .225.4. 步骤 4:统计函数的声明与定义 .265.5. 步骤 5:菜单函数的书写 .285.6. 步骤
2、6:登录界面(密码) ,欢迎界面的实现 .316. 设计结果及分析 .327. 设计结论与感想 .398. 对本设计过程及方法、手段的改进建议 .399. 参考文献 .40第 4 页 共 54 页程序设计基础实践报告1. 课程设计内容该课程是 C+编程和数据结构课程学习内容的重要实践环节,其主要目的在于通过综合程序课程设计,培养和提高学生的独立分析问题、解决实际问题的能力和计算机语言编程能力。运用 Visual C+环境,用数据结构、面向对象程序设计思想进行程序设计、功能模块调试,完成相关设计题所规定的任务、撰写课程设计报告。设计一个研究生基本信息管理,实现对不同学制的研究生包括:学术硕士和工
3、程硕士的信息管理。定义一个基本的研究生类,基本信息包括:学号、姓名、性别、年龄、课程成绩。派生出学术硕士类,增加的属性包括:专业,发表论文(名称与级别(1、2、3) ) ,可以多篇,最多 3 篇) ,论文成绩,总成绩;工程硕士增加的属性包括:领域,参与项目(名称与级别(A,B,C,) ),项目成绩,总成绩。计算方式如下1) 学术硕士论文成绩计算:各个级别的论文得分为:级别*10,每个学生论文最高 90 分;假设某研究生发表两篇论文,级别分别为 1、2,那么论文成绩=(10/90+20/90)*100,总成绩=课程成绩*0.7+论文成绩*0.3;2) 工程硕士项目成绩计算:每个学生只参与一项项目
4、,各个级别得分:A级 90,B 级 75,C 级 60,不参与项目得分为 0;总成绩=课程成绩*0.5+项目成绩*0.5第 5 页 共 54 页基本功能与技术要求:1、 数据文件管理功能:创建新文件、打开文件、保存文件。2、计算与统计功能:完成记录中相关数据的统计;1)能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录进行数据统计(包括:总数、平均值、分段信息) ,例如:按总成绩得分为100、9099、8089、7079、6069 和不及格学生的人数,以及所占百分比。2)计算每个研究生的总成绩。3、记录管理功能:记录的管理采用链表或者指针数组实现。1)输入添加/插入记录,并保存到数
5、据文件中。2)查询、显示记录,根据用户要求按所给记录关键字查询一个或多个相关联记录的各项信息。3)修改记录:能够打开已存在的数据表文件,并对确定的任意记录进行修改,在修改过程中,应显示记录信息,给出确认提示,并对更新的记录信息进行文件保存。4)删除记录:能够打开已存在的数据表文件,可以删除数据表中的任一记录,要求具备逻辑删除(具有恢复功能)和物理删除功能,并对新的数据表信息进行文件保存。2. 课程设计目的课程设计是学习过程的重要环节。通过课程设计,能够进一步加深对 C+语言基本知识的理解,提高 C+语言综合编程能力与程序调试技巧,为后续课程的学习以及实际问题的解决打下良好的基础。更好的理解以下
6、内容:算法的基本概念;使用常量、变量、运算符与表达式、程序控制结构、数组、函数、编译预处理、指针、类和对象的特征、正确使用类和对象、运算符重载、继承第 6 页 共 54 页与派生、多态性与虚函数、输入输出流文件操作等 C+语言要素进行程序设计;在一种 C+语言开发环境下进行 C+程序设计的基本步骤。3. 背景知识C+是近年来国内外广泛使用的现代计算机语言,它既支持基于过程的程序设计,也支持面向对象的程序设计,属高级语言范畴。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,代码清晰精简,十分灵
7、活,作为计算机的基础课程,我们应熟练掌握。4. 工具/准备工作自主学习 C+语言中输入输出流文件操作相关知识,温习 C+语言知识,操作软件 Visual Studio 2017。5. 设计步骤、方法等思路:首先,仔细阅读课程设计题目的具体要求(这点很关键) ,先写出自己的思路,如何实现各个功能,然后就是分几个大块敲代码,每完成一个函数功能,去调试运行,如果能运行的话说明这块函数大体应该是没有问题了,可以进入下一模块的书写,否则这段代码没有通过。第一次进入:输入两类研究生相关数据登录界面第 7 页 共 54 页之后进入:退出函数 exit(0)登录界面第 8 页 共 54 页菜单界面1.信息录入
8、2.信息插入8.退出函数9.初始化该系统4.信息输出5.信息修改6.信息查找7.信息统计3.信息删除第 9 页 共 54 页模块的书写构建顺序:1.进行类的定义,基类研究生,派生类学术研究生和工程研究生,类中变量的声明,进行重载,使之能够实现 cin cout 的输入和输出。2.进行单链表操作的函数的书写,使之能够对两类派生研究生进行链表的建立、输出、插入、修改、删除等基本操作。3.进行相关文件的操作函数的声明与定义,使程序能够对缓存中的数据读到磁盘中,也可以将磁盘中的数据读取到内存中。4.统计函数的书写,这部分用到了静态变量和静态函数,程序可以实现基本的统计功能。5.菜单函数的书写,这部分就
9、是美观,简单大方,cout 语句进行图形绘制即可,比较容易。6.密码,欢迎界面的实现:使程序更加美观,也能够填写正确的用户名和口令方可进入系统。1-2-3-4-5-6下面进行代码的说明:5.1. 步骤 1:相关类的定义,重载这部分对于整个代码来说相对比较简单,运用 c+对类的定义,类中数据成员的声明,重载函数的使用即可实现,这里我着重说明一下重载部分,以学术硕士的重载为例(其他相似) ,重载的过程中输出语句要尽可能的美观,而输入语句的话,我想要能够对用户的误操作进行处理,因为学号为 0 是退出录入,所以当用户输入 0 时,if 判断语句判断是否为 0,若为零, return input 结束函
10、数,其他比如说成绩,等级的输入都有限定,同理,if 语句判断,若为真,配合 goto 语句回到输入数据前,重新输入,这么做的好处,用户一旦输入错误一个数据,马上会令用户重新输入(个人认为,相对于一些作品,等待用户将其全部数据输入之后,每个数据进行判断,若有一个不符和要求,即不录入数据好一些) ,其中浮点型数据的判断比较关键(不能准确的保存数据,判断浮点型第 10 页 共 54 页数据是否=一个固定的值需要调用 fabs 函数实现) ,还有,在输入的过程中有一些数据是通过计算得到,这样的数据我在用户输入一些必要的数据后就会进行赋值,调用计算函数计算赋值,用户一旦输入完毕,相关值便赋值给该对象的数据域。但是也是有缺点的,goto 语句用的偏多,这点不利于程序的稳定性,应努力加强。源代码(部分):/重载函数(派生类:学术硕士)istreamif (astu.num = 0)return input;cout astu.name;loopse:cout astu.sex;/判断性别是否合法if (!(astu.sex = “男“ | astu.sex = “女“)cerr “性别输入有误,请重新输入! “ endl;goto loopse;