南华大学
计 算 机 科 学 与 技 术 学 院
实 训 报 告
( 2017 ~ 2018 学年 夏季 学期 )
高级语言程序设计实训
学生成绩管理系统
课程名称
实验名称
组长姓名 LFY
学号 201604408
组员姓名 YY
组员姓名 ZMJ
学号 201604408
学号 201604408
专业 计算机类
班级 八班
地点 八教
教师 CX
南华大学计算机科学与技术学院
实训报告
1.实验目的及要求
编程环境:codeblocks
硬件:普通笔记本电脑
一 实验目的:
1、要求熟练掌握 C++语言的基本知识和技能;
2、基本掌握面向对象程序设计的基本思路和方法;
3、能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
4、运用面向对象的程序设计建造出一个学生成绩管理系统
5、通过实验实践设计、巩固自己继承与派生、虚函数等的应用以及相关知识的加强、
形成以面向对象的思维方式、学会分析各类成员以及他们之间的关系,为未来的程序设计打
下基础。
二 实验要求:
1、设计出一个学生成绩管理系统。
2、运用面向对象的方式,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/
输出等内容。
3、学生类为基类(抽象类)其中包含学生的一些基本信息,学生类派生出小学生类 增
添了 3 门成绩信息,小学生类派生出中学生类,又增添了 2 门成绩,学生类派生出大学生类,
由于大学生的成绩科目计算方法更为复杂,大学生类也不同与前面的中小学生类,更为复杂
化。
4、编写成绩管理系统类,对前面的几个学生对象进行操作,实现一定的管理功能(例
如:读取,添加,查询,显示,排序,保存,删除,编辑等功能)
5、能力足够,可以另外添加一些功能。
2.实验步骤
一 分析实验要求:
看清题目意思,弄明白各个实验要求,避免南辕北辙,通过分析可以明白题目的一些基
本要求。
二 分析类的层次关系:
既然是面向对象的程序设计,那就必须少不了对类的分析,题目中涉及到几个类,他们
之间的关系是什么,这都是实现实验之前需要分析的内容。
三 思考实现方法:
分析完了类的层次关系之后,就要考虑怎么来构建和实现他们关系以及怎么实现相关的
成员函数。是用组合类还是继承和派生来完成?是用对象数组还是对象链表的实现相应的存
储?是用基本的冒泡排序还是其他的各种排序方法?这都是需要在这一阶段考虑清楚的内
容。
四 画流程图和 UML 类图:
通过画流程图和 UML 类图,使得之前的分析更简单明了,更贴近与代码,这样一画,代
码的实现就更加有依据了,不是凭空瞎写了。
五 分工编写实验代码:
根据队员的代码习惯和风格,分工合作,各个队员负责相应的类或分开负责接口的设计
和函数实现的设计,分工写代码使得效率更高并且加强了同学之间的配合思想的形成。
六 代码拼凑和调试:
最后将各队员的代码组合起来进行调试分析,看看有没有问题?,问题出在哪?需不需
要改进及优化?这些都是在这一步需要解决的问题。
南华大学计算机科学与技术学院
实训报告
七 实验报告的撰写和总结分析自我评价:
根据实验,发现自己的不足,哪里没学好,哪里不会用,促进自己的学习和成长,总结
分析本次实验的优缺点,哪里处理的好,哪里还有待改进。
3. 实验内容
一 需求分析:
1、学生类(抽象类)要求包含一些基本的学生信息。
2、小学生类(由学生类派生而来)在学生类的基础之上再增添了 3 门课程的成绩信息。
3、中学生类(由小学生类派生而来)在小学生类的基础之上再增添了 2 门课程的成绩
信息。
4、大学生类(由学生类派生而来)在学生类的基础之上再增添了许多门课程的成绩信
息。
5、学生成绩管理类,可以对各种学生类对象进行相关操作(操作包括:读取信息,显
示信息,查询信息,编辑信息,删除学生,增添学生,成绩排序等)
6、应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。
二 概要设计:
1、设计思想:
此实验明显用一个类是解决不了,要么就用类的嵌套,或者组合类,我们选择了类的继
承与派生以及利用 friend 类来实现相应的功能。我们用五个类解决了这个题目。
定义出学生类(抽象基类)、小学生类、中学生类、大学生类。
其中类的层次关系为:学生类为基类(抽象类)学生类派生出小学生类,小学生派生出
中学生类,学生类派生出大学生类(大学生类的实现和中小学生类不同,相比更为复杂)。
他们的友元类都为 studentmanagementsystem 类,studentmanagementsystem 类里面保
存几个指针,开创 3 个双向链表,一个是小学生对象双向链表、一个中学生对象双向链表、
一个大学生对象双向链表。
studentmanagementsystem 类里面再定义相应的函数实现相应的操作功能。
2、实现方法:
我们将学生的基本信息和成绩信息分开处理,分开用不同的文件进行读取相应的
信息数据。
学生的那些基本数据信息全部用 student 类的保护(方便继承)成员数据存下来。
至于成绩信息,我们分学生类的不同而实现不同。
由于小学生类和中学生类的科目固定,我直接开固定的科目成绩存了下来。
大学生的成绩信息相对复杂些,考虑到大学生每个人的科目不同,有些科目有实验成绩、
平时成绩、卷面成绩、综合成绩等。那么我在大学生类里面内嵌一个结构体链表来存相应的
成绩数据。运用结构体链表,实现了不同人科目可以不同,学分不同。
至于那些操作功能用 studentmanagementsystem 类的成员函数来实现解决。学生对象内
存几乎都是动态申请的内存,解决办法---我在 studentmanagementsystem 类里面保存了用
于创建双向链表的相应指针,再用指针动态申请一个小学生对象的双向链表、一个中学生对
象的双向链表、一个大学生对象的双向链表,这样排序就只要排一次就可以升序和降序输出
了,不过构建和排序过程中更改指针的指向十分烧脑,很容易弄错。其他的查询,删除都还
好办。只需要遍历链表,以及更改相应的指针指向就 ok 了。
南华大学计算机科学与技术学院
实训报告
3、系统中主要模块及各模块间的关系的描述:
其中类的层次关系为:学生类为基类(抽象类)学生类派生出小学生类,小学生派生出
中学生类,学生类派生出大学生类(大学生类的实现和中小学生类不同,相比更为复杂)。
他们的友元类都为 studentmanagementsystem 类,tudentmanagementsystem 类里面保
存几个指针,开创 3 个双向链表,一个是小学生对象双向链表、一个中学生对象双向链表、
一个大学生对象双向链表。
studentmanagementsystem 类里面再定义相应的函数实现相应的操作功能。
三 详细设计:
1、简化 UML 类关系图
2、主要函数流程图
学生类构造函数
学生类 show_normal_message()函数
南华大学计算机科学与技术学院
实训报告
单个小学生成绩信息输出
单个大学生成绩信息输出
求大学生综合成绩和总学分函数
南华大学计算机科学与技术学院
实训报告
管理系统构造函数
系统删除功能函数
管理系统编辑信息功能函
管理系统基本信息查询功能函数
系统查找成绩信息功能函数
系统添加学生功能函数
南华大学计算机科学与技术学院
实训报告
管理系统析构函数
单科成绩打印功能函数
南华大学计算机科学与技术学院
实训报告
系统按大学生学分排序打印成绩单函数 系统交换链表里面两个元素功能函数
系统读取文件信息函数