《教学计划编制问题》数据结构课程设计说明书文档格式.docx
- 文档编号:14402824
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:31
- 大小:267.68KB
《教学计划编制问题》数据结构课程设计说明书文档格式.docx
《《教学计划编制问题》数据结构课程设计说明书文档格式.docx》由会员分享,可在线阅读,更多相关《《教学计划编制问题》数据结构课程设计说明书文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
关键词:
教学计划编制问题;
数据结构;
邻接表存储结构;
栈;
拓扑排序
第1章绪论
数据结构是研究数据元素之间的逻辑关系的一门课程,以及数据元素及其关系在计算机中的存储表示和对这些数据所施加的运算。
该课程设计的目的是通过课程设计的综合训练培养分析和编程等实际动手能力,系统掌握数据结构这门课程的主要内容。
本次课程设计的内容是教学计划编制问题,邻接表是图的一种链式存储结构。
在邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点的边。
栈是一种限定性的线性表,它只允许在表尾插入元素或删除元素,所以栈具有后进先出的特性。
拓扑排序是由某个集合上的一个偏序得到该集合上的一个全序。
而教学计划编制问题就是对排序问题的应用,通过这个设计事例,我们有理由相信至此以后,我们对邻接表、栈和拓扑排序的理解将会是更上一层楼。
通过该课程设计,能运用所学知识,能上机解决一些实际问题,了解并初步掌握设计、实现较大程序的完整过程,包括系统分析、编码设计以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
第2章教学计划编制问题陈述及需求分析
2.1教学计划编制问题陈述
大学中每个专业都有固定的教学计划,任何专业的学习年限是固定的,每年两个学期,每个专业开设的课程是确定的,而课程之间的开设时间是必须满足先修关系的。
每们课可以有多门先修课,也可以没有。
以本科四年为准,要求设计一个教学计划。
输入学期总数,一学期的学分上限,每门课的课程号、学分和直接先修课的课程号。
一是使学生在各学期中的学习负担尽量均匀;
二是使课程尽可能地集中在前几个学期中。
输出教学计划到用户指定的文件中,计划表格格式自行设计,若无结果可报告适当的信息。
2.2功能需求分析
本系统主要实现对大学中每个专业的教学计划进行设计,需要实现以下几个方面的功能:
(1)创建存储结构:
创建邻接表。
(2)数据的输入:
学期总数,课程数,一学期的学分上限,每门课的课程号(固定占2位的数字串)、学分和直接先修课的课程号。
(3)数据的处理:
对输入的数据进行计算。
(4)结果的输出:
输出各门课程所对应的学分,以及每学期各门课程的安排。
第3章系统设计
3.1总体设计
允许用户指定下列两种编排策略之一:
采用第二种策略,使课程尽可能地集中在前几个学期中,根据教学计划中的课程及其关系和学分定义图的顶点和边的结构体,创建图,结合先修关系的AOV网,采用邻接链表存储和使用前插法,通过菜单显示代号所对应课程及课程的先修课程,运用拓扑排序将课程排序后并决定出每学期所学课程,最后输出图G的信息,将图的顶点和弧边输出。
具体流程图如图3.1所示。
图3.1系统功能结构图
首先,初始化栈,构造一个空栈S,判定这个栈是否为空栈,如果是,则进行下一步操作,否则,返回错误;
接下来对各个顶点求入度,将入度为零的顶点存入数组,当所有入度为零的顶点都存入数组后,执行完毕。
具体流程图如图3.2所示。
Y
N
图3.2拓扑排序流程图
3.2主要模块简介
1、管理员
要进入管理员界面,首先需要输入用户名和密码。
输入正确的用户名和密码后,即可进入管理员界面;
若输入错误,则提示输入正确的用户名或密码。
2、主函数
本程序主要调用两个模块:
主程序模块---->
拓扑排序模块,调用关系简单,通过主函数主要调用TopoSort()输出G顶点的拓扑排序,
Display()输出图的邻接矩阵,
CreateGraph()
生成图,用来实现对教学计划的编制。
3、拓扑排序
利用课程之间的先修关系,运用拓扑排序进行学期课程安排(4个学期),每学期都有学分上限,而每学期应学课程的学分应在学分上限内,超过学分上限后,将移到下一学期课程安排中。
在满足课程先修关系和各学期课程安排的情况下,如果某门课程的学分超过该学期的学分上限,则系统返回值为Error,提示错误,需要进行修改,必须保证该学期的各课程学分不会超过学分上限,这时系统返回值为OK。
第4章详细设计
4.1数据结构
1、图的数据结构
typedefstructArcNode//表结点
{
intadjvex;
//该弧所指向的顶点的位置,弧的节点结构
structArcNode*nextarc;
//指向下一条弧的指针
}ArcNode;
//链表结点
typedefstructVNode//头结点
VertexTypedata;
//顶点信息
intgrades;
//存储学分信息
ArcNode*firstarc;
//指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedefstruct//图的数据结构
AdjListvertices;
//vertices存储课程名
intvexnum,arcnum;
//图的当前顶点数和弧数
}ALGraph;
2、栈的数据结构
typedefstructSqStack
SElemType*base;
SElemType*top;
intstacksize;
//分配的存储空间
}SqStack;
4.2抽象数据类型的定义
1、图的抽象数据类型定义
ADTGraph{
数据对象V:
V是具有相同特性的数据元素的集合,称为顶点集。
数据关系R:
R={VR}
VR={<
v,w>
|v,wV且P(v,w),<
表示从v到w的弧,
谓词P(v,w)定义了弧<
的意义或信息}
基本操作P:
CreateGraph(&
G,V,VR);
初始条件:
V是图的顶点集,VR是图中弧的集合。
操作结果:
按V和VR的定义构造图G。
LocateVex(G,u)
图G存在,u和G中顶点有相同特征。
若G中存在顶点u,则返回该顶点在图中位置;
否则返回其他信息。
}ADTGraph
2、栈的抽象数据类型定义
ADTStack{
数据对象:
D={|ElemSet,i=1,2,...,n,n}
数据关系:
R1={<
>
|,D,i=2,...,n}
约定端为栈顶,端为栈底。
基本操作:
InitStack(&
S)
构造一个空栈S。
StackEmpty(S)
栈S已存在。
若栈S为空栈,则返回TRUE,否则FALSE。
Pop(&
S,&
e)
栈S已存在且非空。
删除S的栈顶元素,并用e返回其值。
Push(&
S,e)
插入元素e为新的栈顶元素。
}ADTStack
intLocateVex(ALGraphG,VertexTypeu)/*查找图中某个顶点位置*/
intCreateGraph(ALGraph&
G)/*采用邻接表存储结构*/
voidDisplay(ALGraphG)/*输出图G的信息*/
voidFindInDegree(ALGraphG,intindegree[])/*求顶点的入度*/
intInitStack(SqStack&
S)/*栈的初始化*/
intStackEmpty(SqStackS)/*判空*/
intPop(SqStack&
S,SElemType&
e)/*出栈*/
intPush(SqStack&
S,SElemTypee)/*入栈*/
4.3设计说明
教学计划编制问题主要用的是算法是拓扑排序。
偏序指集合中仅有部分成员之间可比较,而全序指集合中全体成员之间可比较。
一个表示偏序的有向图可用来表示一个流程图。
它或者是一个施工流程图,或者是一个产品生产的流程图,再或者是一个数据流图(每个顶点表示一个过程)。
图中每一条边表示两个子工程之间的次序关系(领先关系)。
拓扑排序的主要步骤:
(1)在有向图中选一个没有前驱的顶点且输出之。
(2)从图中删除该顶点和所有以它为尾的弧。
(3)重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。
针对上述三步操作,我们可以用邻接表作为有向图的存储结构,且在头结点中增加一个存放顶点入度的数组(indegree)。
入度为零的顶点即为没有前驱的顶点,删除顶点及以它为尾的弧的操作,则可换以弧头顶点的入度减1来实现。
为了避免重复检测入度为零的顶点,可另设一栈暂存所有入度为零的顶点。
4.4算法说明
1、主函数的算法设计:
显示子菜单,调用各个子函数,最后退出程序,主要代码:
voidmain()
ALGraphG;
AdjListTemp;
printf0();
structName
name[N]={{"
1"
},{"
2"
3"
4"
5"
6"
7"
8"
9"
10"
11"
12"
}};
OUTPUT();
printf("
★****★****★教学计划编制系统★****★****★\n\n"
);
请输入学期的总数:
"
scanf("
%d"
&
TotalTerms);
请输入学期的学分上限:
MaxScores);
CreateGraph(G);
Display(G);
TopoSort(G,Temp,name);
}
2、各主要子函数的算法设计
(1)邻接表存储结构
代码:
intCreateGraph(ALGraph&
G)
inti,j,k;
VertexTypeva;
ArcNode*p;
请输入教学计划的课程数:
G.vexnum);
请输入各门课程的先修课程的总和(弧总数):
G.arcnum);
printf(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学计划编制问题 教学计划 编制 问题 数据结构 课程设计 说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)