教学计划安排检验程序正文

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1 实验目的 (1)

2 问题描述 (1)

3 需求分析 (1)

4 概要设计 (2)

4.1设计思想 (2)

4.2设计流程图 (2)

4.3 数据库设计 (3)

4.4函数及功能要求 (3)

4.5模块调用关系 (4)

5详细设计 (4)

5.1制定课程计划伪码 (4)

6 测试分析 (8)

7 使用说明 (11)

8 总结 (12)

9 参考文献 (13)

10 附录 (14)

教学计划安排检验

(德州学院计算机系,山东德州253023)

1 实验目的

本次数据结构课程设计的主要目的是检验和巩固专业知识,提高综合素质和能力。并在实际操作中掌握:

1.邻接表的存储结构。

2.栈的基本操作。

3.拓扑排序的思想。

通过实习,可以将我们课堂上掌握的理论知识与处理数据的业务相结合,以检验我们掌握知识的宽度、深度及对知识的综合运用能力。

2 问题描述

针对学院的计算机系本科课程,根据课程之间的依赖关系,制定课程安排计划,并满足各学期课程数大致相同。按照用户输入的课程数,学期数,课程间的先后关系数目以及课程间两两间的先后关系,程序执行后会给出每学期应学的课程。

3 需求分析

该程序的工作是制定课程安排计划,并满足各学期课程数大致相同。此程序规定:

1、输入的形式和输入值的范围:输入间用空格隔开。要求用户输入的课程数小于20,学期数小于或是等于8,课程名的长度小于等于10个字符。

2、程序所能达到的功能:按照用户的输入,给出每学期应学的课程。

3、测试数据:输入:学期数:5,课程数:12,课程间的先后关系数:16,课程的代表值:v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12。课程间两两间的先后关系:v1 v2,v1 v3, v1 v4,v1 v12,v2 v3,v3 v5,v3 v7,v3 v8,v4 v5, v5 v7,v6 v8,v9 v10, v9 v11 , v9 v12,v10 v12,v11v6

输出:第1学期应学的课程:v1 v9

第2学期应学的课程:v2 v4 v10 v11

第3学期应学的课程:v3 v6 v12

第4学期应学的课程:v5 v8

第5学期应学的课程:v7

4 概要设计

4.1设计思想

总体思想是利用拓扑排序的思想和堆栈思想编写相应函数。首先根据课程的先后关系画出AOV网,网中的结点代表课程,有向边表示各学科之间的次序关系。可以采用邻接表作AOV网的存储结构,且在头结点中增加一个存放顶点入度的数组。为了避免重复检测入度为零的顶点,可另设一栈暂存所有入度为零的顶点。然后根据拓扑排序依次输出应学的课程。

4.2设计流程图

图1 流程图

4.3 数据库设计

ADT Graph{

数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。

数据系统用到的抽象数据类型定义:

1.关系R:

R={VR}

VR={|v,w∈V且P(v,w),表示从v到w的弧,

谓词P(v,w)定义了弧的意义和信息}基本操作:

(1)Status CreateDG(ALGraph&G);

(2)void FindInDegree(ALGraph G);

(3)Status TopologicalSort(ALGraph G);

}ADT Graph

2. ADT Stack{

数据对象:D={a

i |a

i

∈ElemSet,i=1,2,…,n, n≥0}

数据关系:R1={

i-1,a

i

>|a

i-1

,a

i

∈D,i=2,…,n}

约定a

n 端为栈顶,a

1

端为栈底。

基本操作:

(1)Status InitStack(SqStack&S);

(2)Status Push(SqStack&S,SElemType e);

(3)Status Pop(SqStack&S,SElemType&e);

(4)Status StackEmpty(SqStack S);

}ADT Stack

4.4函数及功能要求

(1)Status InitStack(SqStack&S):构造一个空栈。

(2)Status Push(SqStack&S,SElemType e):插入元素e为新的栈顶元素。

(3)Status Pop(SqStack&S,SElemType&e):若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR。

(4)Status StackEmpty(SqStack S):判断栈是否为空,为空返回TRUE,否

则返回FALSE。

(5)Status CreateDG(ALGraph&G):建立邻接表。

(6)void FindInDegree(ALGraph G):求图的入度。

(7)void print(int n[],ALGraph G):排序输出顶点数据。

(8)Status TopologicalSort(ALGraph G):拓扑排序,有向图G采用邻接表存储结构。

4.5模块调用关系

各程序模块之间的调用关系(子程序编号见上):

主函数可调用子程序5,8。

子程序8可调用子程序1,2,3,4,6,7。

5详细设计

5.1制定课程计划伪码

制定课程计划算法的伪码描述如下:

Status CreateDG(ALGraph&G){//建立邻接表

提示"请输入学期数目(学期数目必须小于等于8):";

scanf("%d",&学期数目);

if(学期数目>8)

{

提示"请重新输入学期数目(学期数目必须小于等于8):";

scanf("%d",&学期数目);

}

提示"请输入课程数目(课程数必须小于20):";

scanf("%d",&课程数目);

if(课程数目>=20)

{

提示"请重新输入课程数目(课程数必须小于20):";

scanf("%d",&课程数目);

}

相关文档
最新文档