教学计划编制系统课程设计文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教学计划编制问题
学生姓名:彭聪指导老师:黄道昌
摘要本课程设计主要针对计算机系本科课程,根据课程之间的依赖关系,制定课程安排计划,并满足各学期课程数目大致相同。在课程设计中,系统开发平台为Windows XP,程序设计设计语言采用C++,程序运行平台为Windows XP,数据结构为邻接表。对于每个学期的课程数目采用了学分变量进行控制,以实现各学期课程数目大致相同。在程序设计中,采用了面向对象解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在教学中解决教学计划编制问题。
关键词程序设计;数据结构;AOV网;邻接表;C++;课程计划
1
1 引言
计算机系的学生必须要完成教学计划中规定的一系列课程,有些课程之间存在相互之间的依赖关系。比如说:《C++程序设计基础》应在《数据结构》之前开设,《大学物理(下)》必须要在《大学物理(上)》学完之后才可以学习。在教学计划编制的过程中,有一个层次的关系。因此,有一个有效、便捷的教学计划编制系统是十分重要的。
1.1 课程设计目的
本课程设计主要是针对计算机系本科课程,根据课程之间的依赖关系,制定课程安排计划,并满足各学期课程数目大致相同。
教学计划编制系统是基于C++的软件系统,通过建立AOV网,按学期对课程序号、课程代号、课程名称以及课程学分进行相应输出,并且保证用户实现自由选择专业选修课功能。
1.2 课程设计内容
教学计划编制系统主要是处理课程之间的依赖关系。表1.1列出了若干门计算机系本科课程,其中有些课程不要求先修课程,例如,C1是独立于其他课程的基础课,而有些课程却需要有先修课程,比如,学完程序设计语言C++和离散数学后才能学习数据结构。具体情况如表1.1所示。
表1.1 课程以及课程之间的依赖关系
课程代号课程名称先修课程
C1 高等数学无
C2 计算机科学导论无
C3 离散数学C1
C4 程序设计语言C++ C1、C2
C5 数据结构C3、C4
C6 计算机原理C2、C4
C7 数据库原理C4、C5、C6
2
3
先修课程规定了课程之间的依赖关系,这种关系可以用AOV 网来表示,其中顶点表示课程,弧表示依赖关系,如图1.1所示。
图1.1 表1.1对应的AOV 网
程序的主要功能是实现课程的排序,以满足同一学期所修的课程相互之间无依赖关系,并且已修完其所有先修课程。另外,设置学分变量,控制每个学期的课程量基本均匀。
C1
C7
C6
C4
C5
C3
C2
2 概要设计
2.1 设计思路
数据结构课程主要讨论数据表示和数据处理的基本问题。数据要能被计算机处理,首先必须能够存储在计算机的内存中,这项任务称为数据表示,数据表示的核心任务是数据结构的设计;一个实际问题的求解必须满足各项处理要求,这项任务称为数据处理,数据处理的核心任务是算法设计。
本课程设计是基于C++程序设计语言实现的。C++语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。因此,C++既支持面向过程的程序设计,又支持面向对象的程序设计。
C++语言最有意义的方面是支持面向对象的特征,基于对象的程序是以类和对象为基础的,程序的操作是围绕对象进行的。在此基础上利用了继承机制和多态性,就成为面向对象的程序设计。
数据结构中的数据表示和数据处理问题都可以通过C++类中数据和对数据进行操作的函数来实现。
2.2 数据表示
教学计划编制问题中,操作对象是课程。课程之间的依赖关系用AOV网表示,AOV 网的构造采用邻接表实现。因此,本程序设计定义了两个类:课程类和邻接表类。
课程类(Lesson)添加了5个私有成员变量用来定义课程的5个属性:课程代号、课程名称、课程序号、课程学分以及是否被选择过的课程标记。同时还定义了8个成员函数,已实现相关的操作功能。
邻接表类(ALGraph)定义了2个整型成员变量和1个结构体数组来存放顶点数、边数和顶点表。同时还定义了4个成员函数实现用来实现AOV网的构造、删除、排序以及相关输出功能。
2.3 数据处理
数据处理必须借助函数来实现。本程序设计通过调用类的各种成员函数实现各种需要
4
操作。
课程类(Lesson)的成员函数如表2.1所示。
表2.1 Lesson类的成员函数
函数名称功能声明
void SetLes() 对课程各种属性进行赋值
string GetNum() 获得课程代号
string GetName() 获得课程名称
float GetLesScore() 获得课程学分
int GetLesNo() 获得课程序号
bool GetSelect() 获得是否选择过的标志变量
void SetSelect() 设置选择控制标志变量,以避免重复选课
void SetName() 单独定义设置课程名称的函数,以方便一些操作
邻接表类(ALGraph)的成员函数如表2.2所示。
表2.2 ALGraph类的成员函数
函数名称功能声明
ALGraph() 构造函数
~ALGraph() 析构函数
void TopSort() 实现AOV网中顶点的排序并进行相应的输出
void BalanScore() 平衡每次输出的顶点的数目
5
6
3 详细设计
3.1 课程类的定义
课程类(Lesson )添加了5个私有成员变量:LesNum (课程代号)、LesName (课程名称)、LesScore (课程学分)、LesNo (课程序号)以及Select (是否被选择过的课程标记),分别用来定义课程的5个属性;同时还定义了8个成员函数:SetLes (对课程各种属性进行赋值)、GetNum (获得课程代号)、GetName (获得课程名称)、GetLesScore (获得课程学分)、GetLesNo (获得课程序号)、GetSelect (获得是否选择过的标志变量)、SetSelect (设置选择控制标志变量)和SetName (单独定义设置课程名称),用来实现相关的操作功能。
计算机系一共有65门课程,其中相互之间存在依赖关系的课程有56门,另外9门为独立课程,不存在依赖关系。Lesson B[65]定义课程类的对象数组,可以通过调用课程类的各种成员函数对65门课程的课程序号、课程代号、课程名称以及课程学分等等进行操作。
3.2 邻接表类的定义
邻接表是一种顺序存储与链接存储相结合的存储方法。在邻接表中存在两种结点结构:顶点表结点和边表结点,如图3.1所示。
顶点表结点 边表结点
图3.1邻接表表示的结点结构
采用C++中的结构类型描述上述结点,用 C++中的类实现基于邻接表存储结构下图的各种数据类型和操作功能。
由于采用了C++的模板机制,邻接表中的数据元素可以是任意的。在本次课程设计中,邻接表中的数据元素初始化为课程类对象。
3.3 重要函数的实现
adjlist next
Indegree vertex firstedge