教学计划编制问题课程设计报告课程设计(论文)题目名称教学计划编制问题课程名称数据结构课程设计学生姓名学号系、专业信息工程系、通信工程类指导教师2012年12 月23 日摘要教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编制的基本依据和课程安排的具体形式。
是稳定教学秩序、提高教学质量的重要保证。
从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。
随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。
因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提高教育教学水平。
教学计划编制中的思路:一是明确培养目标;二是注重学科设置的整体性、统一性和灵活性、全面性;三是与学分制改革有机结合。
教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有很好的应用价值。
使用C程序设计语言,研究开发教学计划编制系统Web应用系统。
关键词:教学计划;编制;培养目标;管理目录1 问题描述 ---------------------------------------------------------------------------------------------- 12 需求分析 ---------------------------------------------------------------------------------------------- 23 概要设计 ------------------------------------------------------- 23.1抽象数据类型定义 ---------------------------------------- 2 3.2模块划分------------------------------------------------- 2 4 详细设计 ------------------------------------------------------- 34.1数据类型的定义 ------------------------------------------ 4 4.2主要模块的算法描述 -------------------------------------- 55 测试分析 ------------------------------------------------------- 86 课程设计总结 ------------------------------------------------- 106.1问题和解决的方法及经验教训、心得体会﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍106.2 致谢 ---------------------------------------------------- 11参考文献 -------------------------------------------------------- 11附录(源程序清单) --------------------------------------------- 121 问题描述大学的每个专业都要制定教学计划。
假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。
每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。
每门课恰好占一个学期。
试在这样的前提下设计一个教学计划编制程序。
[基本要求](1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。
(2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。
(3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。
计划的表格格式自行设计。
[测试数据]学期总数:6;学分上限:10;该专业共开设12门课,课程号从C01到C12,。
先修关系如下:学分顺序为2 需求分析大学的每个专业都要编制教学计划。
假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。
每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。
每个课程的先修关系都是确定的,可以有任意多门,也可以没有。
每一门课程恰好一个学期。
试在这样的情况下设置一个教学计划编制程序。
在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息.本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程.针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同,而且课程在开设时间的安排必须满足先修关系。
输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。
3 概要设计3.1抽象数据类型定义ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集.数据关系R:R={VR}VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在直接先修关系}基本操作P:void CreatGraph(ALGraph *);void FindInDegree(ALGraph , int * );void TopologicalSort_1(ALGraph G,int numterm,int maxcredit); void TopologicalSort_2(ALGraph G,int numterm,int maxcredit); }ADT Graph栈的定义:ADT Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,…n,n>=0}数据关系:R1={﹤ai-1 ai﹥|ai-1,ai∈D,i=2,…,n}基本操作:void InitStack (SqStack *S);int StackEmpty(SqStack S);void Push(SqStack *S, int );int Pop(SqStack *S, int *e);}ADT Stack3.2模块划分主程序模块拓扑排序模块4 详细设计4.1数据类型的定义1.头结点,表结点,邻接表的定义#define MAX_VERTEX_NUM 100 //最大课程总数typedef struct ArcNode{int adjvex;struct ArcNode *nextarc;}ArcNode;typedef struct VNode{char name[24]; //课程名int classid; //课程号int credit; //课程的学分int indegree; //该结点的入度int state; //该节点的状态ArcNode *firstarc; //指向第一条依附该顶点的弧的指针}VNode,AdjList[MAX_VEXTEX_NUM];typedef struct{AdjList vertices;int vexnum, arcnum;}ALGraph;邻接表的基本操作:void CreatGraph(ALGraph *);创建邻接表void FindInDegree(ALGraph , int * );求一个结点的入度void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程void TopologicalSort_2(ALGraph G,int numterm,int maxcredit); 2.栈的定义:#define STACk_INIT_SIZE 100 //存储空间的初时分配量#define STACKINCREMENT 10 //存储空间的分配增量typedef int ElemType;typedef struct{AdjList vertices;int vexnum, arcnum;}ALGraph;基本操作:void InitStack (SqStack *S);栈的初始化int StackEmpty(SqStack S);判断栈是否为空void Push(SqStack *S, int );入栈操作int Pop(SqStack *S, int *e);出栈操作int Sort(SqStack *S,int *t);4.2主要模块的算法描述1.LocateVex():图的邻接表存储的基本操作。
由初始条件: 图G存在,u和G 中顶点有相同特征转而进行判断,若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。
图 4.12.CreateGraph():构造生成图。
采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图)。
图 4.2 3.Display():输出图的邻接矩阵。
采用循环设置输出图的邻接矩阵。
图 4.3 4.FindInDegree():求顶点的入度。
图4.45.TopologicalSort():输出G顶点的拓扑排序结果。
有向图G采用邻接表存储结构。
若G无回路,则输出G的顶点的一个拓扑序列并返回OK,否则返ERROR。
图 4.55 测试分析使用VC++,打开教学计划编制问题.cpp文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。
要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。
然后还要输入课程先修课程总数,可以算出有16种关系,分别输出。
接着程序会根据这些数据,自动生成建立好的邻接表,用户可以根据系统显示的选择编排策略进行选择,有两种编排策略,最后结果体现在实验的正确测试结果里。
显示如下图:6 课程设计总结6.1 问题和解决方法及经验教训、心得体会虽然在大一我们已经学习了C语言,但是,直到本期我们才开设了数据结构这一门课程。
这门课程让我从C语言那基础再深入的了解了软件开发的复杂性。
对以往模糊的经验,起了总结提升的作用。
在学习了这门课程后,我们进行了2个星期的课程设计,来实践我们所学这门课的内容。
这次实验,我进行了大量的资料查阅,包括向老师请求帮助解释题目要求,对所学知识进行复习。
通过这些努力,我对数据结构这门课程有了新的认识,对编程的步骤,有了具体的体会。