没有合适的资源?快使用搜索试试~ 我知道了~
教学计划编制 C++ 数据结构
3星 · 超过75%的资源 需积分: 50 32 下载量 142 浏览量
2013-08-17
17:33:59
上传
评论 7
收藏 1.21MB PDF 举报
温馨提示
试读
28页
教学计划编制 C++ 数据结构 课程设计
资源推荐
资源详情
资源评论
教学计划编制课程设计
课程设计:教学计划编制
姓名:徐祥伟 班级:计强 091
学号:091302224 课设时间:2011.6.20~6.24
需求分析:
学历进修需要学生在一定时间内完成一定的课程学习,每一门课有一定的学分,修满
学分,可获取相应的学历。因为有些课程内容是另一些课程的学习基础,所以课程学习之间
存有一定的先后次序。如:某学历的计算机专业需要学习的课程计课程之间的关系,如下表
1 所示:
表一:计算机专业进修课程
课程先修关系图 课程编号 课程名称 学分
1 程序设计基础 2
2 离散数学 3
3 数据结构 4
4 汇编语言 3
5 程序设计与分析 2
6 计算机原理 3
7 编译原理 4
8 操作系统 4
9 高等数学 7
10 线性代数 5
11 普通物理 2
12 数值分析 3
13 软件工程 3
14 数据库原理 3
4
1
5
13
2
1
7
3 14
8
12
9
10 6
11
设计的主要任务是:根据开设的课程总数,课程的先修关系,每学期的学分上限,总的学期
数,来制定教学计划。
实现的基本功能是:显示课程的编号,名称,学分;显示各科课程先修关系;
不同的教学计划输出;(短时间型,均匀时间型,人工干预型)
编辑某科课程信息。(课程的增加,删除,信息修改)
分析: 1,制定教学计划,就是要得到所有课程的进修关系的先后次序,它应是一个有向无
环图,需进行拓扑排序,因此需建立以图型结构的逻辑结构。课程总数相当于图
中的顶点集,而课程的先修关系可用图的邻接表来建立。
2,考虑到通用性和简便性,数据输入不采用屏幕输入,采用文件流,分别从课程信
息文件.txt,课程先修关系文件.txt 读取。
3,显示课程的编号,名称,学分,只需输出图的顶点集的数据的信息即可。
4,显示各科课程先修关系,只需输出图的邻接表的相关信息即可。
5,不同的教学计划输出;无论是短时间型,均匀时间型,还是人工干预型,都是在
进行拓扑排序时的技巧性的处理。
6,编辑某科课程信息。课程的增加,删除,信息修改都是对建立好的图的顶点集和
邻接表进行相应的操作处理。
7,主菜单设计应围绕上述的四个基本功能来设计,当然基本功能也应有自己的子菜
单,总之,菜单应一目了然,便于用户交互。
第 1 页
教学计划编制课程设计
测试案例是:
概要设计:
功能划分设计:
显示课程的编
号,名称,学分
不同的教学
计划输出
短时间
型
均匀时间型
人工干
预
型
课程增加
课程删除
课程修改
编辑某科
课程信息
显示各科课
程先修关系
教学计划编制系统
数据结构设计
图的抽象数据类型定义:
ADT Graph
Data:V={vi|vi∈V}
Relation:E={(vi,vj)|vi,vj∈V∧p(vi,vj)}
Operation:
CreateGraph(*f1,*f2)
前置条件:图不存在
输入:f1 是顶点集文件,f2 是邻接表文件
功能:创建图结构
输出:构造的图的信息
后置条件:图存在
LocateVex(u)
前置条件:图存在
输入:定位顶点的主键 u
第 2 页
教学计划编制课程设计
功能:若 G 中存在和 u 相同的顶点的主键,
则返回该顶点在图中位置
输出:顶点位置
后置条件:图存在
DisPlay_1( )
前置条件:图存在
输入:无
功能:输出图的顶点集的信息
输出:无
后置条件:无
DisPlay_2();
前置条件:图存在
输入:无
功能:输出图的邻接表的信息
输出:无
后置条件:无
InsertVex(v)
前置条件:图存在,v 和图中顶点有相同的
特征
输入:v
功能:在图中增添新顶点 v
输出:无
后置条件:图存在
void DeleteVex(v)
前置条件:图存在,v 是图的某个结点
输入:v
功能:删除图的顶点 v 及其相关的弧
输出:无
后置条件:图存在
AlterVex(v)
前置条件:图存在,v 是图的某个结点
输入:v
功能:修改图的顶点 v 的信息
输出:无
后置条件:图存在
FindInDegree( )
前置条件:图存在
输入:无
功能:计算图的每个顶点的入度
输出:无
后置条件:图存在
TopologicalSort( )
前置条件:图存在
输入:无
功能:对图进行拓扑排序
输出:输出拓扑序列
后置条件:图存在
ADT CirQueue
Data
:D={ai|ai∈ELeme
ntSet,i=1,2,3...,n,n
>=0}
Relation:E={(ai-1,a
i)|ai-1,ai∈D,i=2,...,
n}
Operation:
CirQueue( )
前置条件:队列不存在
输入:无
功能:创建队列
输出:无
后置条件:队列存在
~CirQueue()
前置条件:队列存在
输入:无
功能:销毁队列
输出:无
后置条件:队列不存在
EnQueue(x)
前置条件:队列存在
输入:元素值 x
功能:在队尾插入一个值为 x 的元素
输出:如果插入不成功,抛出异常
后置条件:如果插入成功,队尾增加了一个
元素
DeQueue()
前置条件:队列存在
输入:无
功能:删除队头元素
输出:如果删除不成功,抛出异常
后置条件:如果删除成功,队头少了一个元
素
QueueEmpty()
前置条件:队列存在
输入:无
功能:判断队列为空
输出:如果队列为空,返回 1,否则返回 0
后置条件:队列存在
第 3 页
教学计划编制课程设计
详细设计:
数据结构设计:
课程信息的存储定义如下
struct Course //课程的相关信息
{
int number; //编号(课程信息的主键,有系统分配,不能更改)
char *name; //名称
int Xuefen; //学分
};
图的存储定义如下
#define MAX_VERTEX_NUM 50 //最大课程数
struct ArcNode{
int adjvex; //该弧所指向的后继课程的在顶点集的位置
struct ArcNode *nextarc; //指向下一个课程的指针
};
template <class T>
struct VNode{
T data; //存放课程信息 T=Course结构体类型
ArcNode *firstarc; //指向第一条依附该课程的后继课程指针
};
template <class T>
struct ALGraph_1{
VNode<T> vertices[MAX_VERTEX_NUM]; //课程总数顶点集
int vexnum; //课程总数
int arcnum; //先修关系数
};
图的基本操作如下:
template <class T>
class ALGraph{
ALGraph_1<T> algraph;
public:
void CreateGraph(char*f1,char*f2); //课程是顶点集,先修关系来建立图的邻接表
int LocateVex (int u); //返回课程编号在图中的数组下标
void DisPlay_1(); //显示课程的编号,名称,学分
void DisPlay_2(); //显示各科课程先修关系
void InsertVex(char *f1,char*f2); //编辑某科课程信息>>增加课程
void DeleteVex(char*f1,char*f2); //编辑某科课程信息>>删除课程
void AlterVex(char*f1,char*f2,int childMendu); //编辑某科课程信息>>修改课程
void FindInDegree(int indegree[]); //求顶点的入度
void TopologicalSort(int Maxxue,int Maxfen,int choice); //不同教学计划类别输出不同的
教学计划
};
第 4 页
教学计划编制课程设计
(拓扑排序时)循环队列的基本操作如下:
template <class T>
class CirQueue
{
private:
T *base; // 存储空间基址
int front; // 队头指针
int rear; // 队尾指针
int queuesize; // 队容量
public:
CirQueue(int m=100);//构造空队列
~CirQueue(); // 析构函数,释放链队各结点的存储空间
void EnQueue(T x); // 元素 x 入队
T DeQueue(); // 队顶元素出队
int QueueEmpty(); // 判队空
};
相关算法的详细设计目录如下:(操作序列)
注:循环队列的基本操作比较简单,故不介绍,主要介绍图的基本操作:
算法
1.1
:返回课程编号在图中的数组下标
算法
1.2
:创建顶点集,创建邻接表
算法
2
:显示课程的编号,名称,学分
算法
3
:显示各科课程先修关系
算法
4.1
:求顶点的入度
算法
4.2
:设置该课程的所在学期
算法
4.3
:教学计划输出在拓扑排序技巧性的操作
算法
5
:重新保存到课程信息文件
.txt
,课程先修关系文件
.txt
操作
算法
6.1
:编辑某科课程信息
>>
增加课程
算法
6.2
:编辑某科课程信息
>>
删除课程
算法
6.3
:编辑某科课程信息
>>
修改课程
算法 1.1:返回课程编号在图中的数组下标
Step1:遍历图的所有顶点,寻找与课程编号相同的顶点,找到返回下标,
没有找到,返回-1
for(i = 0;i<algraph.vexnum;i++) //编号为课程信息的主键
if(algraph.vertices[i].data.number==u) //寻找编号是否相等
return i;
return -1;
算法 1.2:创建顶点集,创建邻接表
Step1:读取数据,读取课程信息文件.txt,读取课程先修关系文件.txt
Step2:课程信息来建立顶点集,先修关系来建立邻接表
ifstream in(f1);
while(in>>sp[0])
{
in>>sp[1];
in>>sp[2];
第 5 页
剩余27页未读,继续阅读
资源评论
- Dresky20142014-04-15很有用,C++的正好
- 傻耙旯丌2013-09-24计算机等级考试二级公共基础教程
sykpour
- 粉丝: 36
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第31题下一个排列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第30题串联所有单词的子串.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第29题两数相除.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第28题找出字符串中第一个匹配项的下标.zip
- 实验报告模板(1).docx
- C语言基础-C语言编程基础之Leetcode编程题解之第26题删除有序数组中的重复项.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功