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

发布 2019-09-01 23:15:00 阅读 9955

目录。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.邻接表的存储结构。

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

总体思想是利用拓扑排序的思想和堆栈思想编写相应函数。首先根据课程的先后关系画出aov网,网中的结点代表课程,有向边表示各学科之间的次序关系。可以采用邻接表作aov网的存储结构,且在头结点中增加一个存放顶点入度的数组。

为了避免重复检测入度为零的顶点,可另设一栈暂存所有入度为零的顶点。然后根据拓扑排序依次输出应学的课程。

图1 流程图。

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=

数据关系:r1={|ai-1,ai∈d,i=2,…,n}

约定an端为栈顶,a1端为栈底。

基本操作: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

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采用邻接表存储结构。

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

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

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

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

status createdg(algraph&g){/建立邻接表。

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

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

if(学期数目》8)

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

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

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

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

if(课程数目》=20)

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

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

图g的顶点数=课程数目;

提示"请输入课程间的先后关系数:";

scanf("%d",&图g的顶点数);

提示"请输入课程的代表值(课程名的长度小于等于10个字符):"

for(i=0;i《图g的顶点数;i++)

scanf("%s",&图g的第i个顶点的数据);

图g的第i个顶点指向的第一条弧 = null;

//输入顶点信息。

提示"请输入课程间两两间的先后关系:";

for(i=0;i《图g的弧数;i++)输入弧的信息。

scanf("%d,%d",&弧尾v, &弧头w);

arcnode *p= new arcnode;//建立结点。

if(p为空) return error;

p所指向的顶点(p->adjvex)=w-1;

p所指向的下一条弧(p->nextarc)=顶点v的链表。

添加到最左边。

return ok;

voidfindindegree(algraph g)

//求图各顶点的入度。

arcnode* p;

for(int i=0;i《图g的顶点数;i++)

p=while(p不为空)

for(int j=0;j《图g的顶点数;j++)

if(p所指向的顶点位置(p->adjvex)==j)

第j个顶点的入度+1;

p=p->nextarc;

void print(int n,algraph g)//对刚出s1栈的数据进行排序然后输出。

for(i=0;n[i]!=1;i++)

for(j=i+1;n[j]!=1;j++)

if(n[i]>n[j])

n[i]与n[j]交换;

for(i=0;n[i]!=1;i++)

输出“status topologicalsort(algraph g)

//拓扑排序。

//有向图g采用邻接表存储结构。

sqstack s1,s2;

arcnode* p;

inti,count,k,m,n[20];

findindegree(g);

initstack(s1);

initstack(s2);

for(i=0;i<20;i++)

n[i]=-1;//将数组n全部赋值为-1

for(i=图g的顶点数-1;i>=0;--i)

if(第i个顶点的入度为0)

把入度为0的压入栈s1

count=0对输出顶点计数。

while(s1不为空栈)

输出("第%d学期应学的课程:",count+1);

m=0;while(s1不为空栈)

将s1的栈顶元素删除,并将其值返回给i;

n[m]=i;

把i号顶点压入栈s2

m++;调用排序及输出函数。

将数组n全部赋值为-1

count计数。

while(s2不为空)

将s1的栈顶元素删除,并将其值返回给i;

for(p=>nextarc)

k=p->adjvex对i号顶点的每个邻接点的入度减1

if(!(indegree[k]))若入度减为0,则入栈。

将度为0的顶点入栈s1;

小班下教学计划安排

小班年级组主题计划及安排表。2016 2017学年度第二学期。第一主题 我能干。第二主题 春天来了。第三主题 我爱我的家。第四主题 我有六个宝。幼儿园小班第一主题我能干活动计划及安排。2016 2017学年度第二学期。小班教学计划安排表。2016 2017年学年度第二学期。第一主题 我能干。小班第二...

小学英语暑假教学计划安排

教学计划 课程计划 是课程设置的整体规划,它规定不同课程类型相互结构的方式,也规定了不同课程在管理学习方式的要求及其所占比例。一起来看看。一。一 教学环境分析。1,灾区小学的条件是比较艰苦的,硬件设施不甚完善。我们应该做好充分的思想准备,有效利用当地的有利条件,为教学工作的展开做好积极地准备。2,暑...

小学英语暑假教学计划安排

教学计划 课程计划 是课程设置的整体规划,它规定不同课程类型相互结构的方式,也规定了不同课程在管理学习方式的要求及其所占比例。小学英语暑假教学计划安排,一起来看看。小学英语暑假教学计划安排一 一 教学环境分析。1,灾区小学的条件是比较艰苦的,硬件设施不甚完善。我们应该做好充分的思想准备,有效利用当地...