1、 任务要求任务要求: : 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含 两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而 且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以 有任意多门,也可以没有。每门课恰好占一个学期,试在这样的前提下设计一个教学计 划编制程序。 内容摘要内容摘要: : 本程序是一个教学计划的编制的问题,而由任务要求了解到的已知的条件及这次设 计的目的。我们在分析问题后决定采用 AOV 网图来解决。 首先,了解本系统要实现的基本功能,大致划分模块。 其次,由已知条件画出先修关系图,以此来设计邻接
2、表存储结构。 接下来,借助于栈,设计拓扑排序的流程。 最后,对系统开始进行详细的前台界面和后台程序的设计,完善系统。 教师评语教师评语: : 成绩成绩 签名签名: : 日期日期: : 课程设计报告书 教学计划编制问题 一 设计思想 根据任务要求及对实际情况的了解,可知设计中需要定义先修关系的 AOV 网图中的 顶点及弧边的结构体,采用邻接表存储结构,利用栈作辅助结构,在运行结果中将图的 信息显示出来,利用先修关系将课程排序,最后解决问题输出每学期的课程。 二 系统完成功能及功能框图 图 1 系统功能框图 end 采用第二种策略:使课程尽可能 地集中在前几个学期中 根据教学计划中的课程及其关系和
3、学分定 义图的顶点和边的结构体 创建图 CreateGraph() :结合先修关系的 AOV 网,采用邻接链表存储 菜单 OUTPUT():显示代号所对应课程及课 程的先修课程 前插法 main 拓扑排序 TopoSort(G):将课程排序后 并决定出每学期所学课程 输出图 G 的信息 Display(G): 将图的顶 点和弧边输出 图 2:邻接表 0 C1 1 C2 2 C3 3 C4 4 C5 5 C6 6 C7 7 C8 8 C9 9 C10 10 C11 11 C12 1 5 11 11 10 6 7 6 4 7 2 11 3 4 9 图 3 拓扑排序流程图 对每个顶点求入度,并存入数
4、组 InDegreei中(i=0n) 初始化栈 Stack,Counter=0 Return OK Return ERROR 依次将入度为 0 的顶点存入栈中 对以 i 号顶点为尾弧的每个邻接点的入度减 1,并将入度减 1 后为零的顶点号压入栈中,输出 i,计数器加 1(Counter+) 推出栈顶的一个元素(入度为零的顶点号)至 i,输 出 i,计数器加 1(Counter+) 堆栈是否为空? n 个顶点全输出 Y Y N N 图 4 课程先修关系图 C1 C4 C5 C7 C2 C3 C8 C9 C12 C10 C11 C6 三 核心算法及说明 (1)采用邻接表存储结构,创建图 int CreateGraph(ALGraph VertexType va; ArcNode *p; printf(“请输入教学计划的课程数: “ ); scanf(“%d“, printf( “请输入各个课程的先修课程的总和(弧总数): “); scanf(“%d“, pr