《430.佘江维.教学计划编制问题.docx》由会员分享,可在线阅读,更多相关《430.佘江维.教学计划编制问题.docx(46页珍藏版)》请在第一文库网上搜索。
1、摘要正文31 .采用类c语言定义相关的数据类型32 .各模块的伪码算法63 .函数的调用关系图154 .调试分析185 .测试结果196 .源程序(带注释)22总结33参考文献34致谢35附件I部分源程序代码36大学的每个专业都要编制教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。每个课程的先修关系都是确定的,可以有任意多门,也可以没有。每一门课程恰好一个学期。试在这样的情况下设置一个教学计划编制程序。在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用
2、邻接表来存储,邻接表的头结点存储每门课的信息。关键词:教学计划;编制;培养目标;管理;-XX. -a刖 s教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编制的基本依据和课程安排的具体形式。是稳定教学秩序、提高教学质量的重要保证。从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提高教育教学水平。教学计划编制中的思路:一是明确培养目标;二是注重学科设置的整体
3、性、统一性和灵活性、全面性;三是与学分制改革有机结合.教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有很好的应用价值。使用C程序设计语言,研究开发教学计划编制系统Web应用系统。近代以来,特别是在实行学科课程的条件下,教学计划主要是学科的计划,或只是学科表。随着社会经济和科学技术的新发展,教育结构不断发生变革,现代教育和教学理论主张对教学计划的结构实行改革。除了教学以外,生产劳动、科技活动、发展体力和增进健康的活动、艺术活动和社会活动等也应列入教学计划。下面就利用对此进行程序设计,已达到预期的目的。101.采用类
4、C语言定义相关的数据类型(1)、主程序:int main()主函数(int numterm; 学期总数int uplcredit; 一个学期的学分上限int selectway;ALGraph G;printf(请输入学期总数:n);scanf (,/%d, &numterm);printf (请输入一个学期的学分上限:n);scanf (,z%d, &uplcredit);CreatGraph(&G);printf (请选择编排策略:1课程尽可能集中到前几个学期;2.课程尽量均匀分布n);scanf (,/%d, &s elect way);if(selectway=l)Topologica
5、lSort 1 (G,numterm, uplcredit);if(selectway=2)TopologicalSort 2(G, numterm, uplcredit);system (,zpause,z);return 0;(2)、头结点,表结点,邻接表的定义:ttdefine MAX_VERTEX_NUM 100 最大课程总数typedef struct ArcNodeint adjvex;struct ArcNode *nextarc;ArcNode;typedef struct VNodechar name24;int classid;int credit;int indegree
6、;int state;ArcNode *firstarc;课程名课程号课程的学分该结点的入度该节点的状态指向第一条依附该顶点的弧的指针VNode, djListMAX_VEXTEX_NUM;typedef struct AdjList vertices;int vexnum, arcnum;ALGraph;邻接表的基本操作:void CreatGraph(ALGraph *);创建邻接表void FindlnDegree(ALGraph , int * );求一个结点的入度void TopologicalSort_l(ALGraph G, int numterm, int maxcredit)
7、;拓扑排序来编排课程void TopologicalSort_2(ALGraph G, int numterm, int maxcredit);拓扑排序来编排课程(3)、栈的定义:ttdefine STACk INIT SIZE 100 /存储空间的初时分配量ttdefine STACKINCREMENT 10存储空间的分配增量typedef int ElemType;typedef struct AdjList vertices;int vexnum, arcnum;ALGraph;基本操作:void InitStack (SqStack *S);栈的初始化int StackEmpty(Sq
8、Stack S);判断栈是否为空void Push(SqStack *S, int );入栈操作int Pop(SqStack *S, int *e);出栈操作2 .各模块的伪码算法图的相关算法:typedef int InfoType;typedef struct ArcNode(int adjvex;A该弧所指向的顶点的位置*struct ArcNode *nextarc;/* 指向下一条弧的指针 */InfoType网的权值指针)*/ArcNode;A表结点*/3.函数的调用关系图typedef enumDGGraphKind;/* 有向图,有向网,无向图,无向网 */typedef s
9、truct(Adj List vertices, verticestwo;int vexnum,arcnum; *图的当前顶点数和弧数*int kind; *图的种类标志*JALGraph;void CreatGraph(ALGmph *G) 构造图int i, m, n;ArcNode *p;printf请输入需要编排课程总数:tt)scanf(%d,vexnum)iprintff请依次输入课程名、课程号、课程学分nn)printf(t课程名tt课程号tt课程学分nn”);printf(tH);for( i=l;ivexnum;i+)/* 构造顶点向量 */scanf(%s %dertice
10、si.credit);%dM,&G-verticesi.name,&G-verticesi.classid,&G-vprintf(Htn);G-verticesi.indegree=O;G-vertices i.state=O;G-verticesi.firstarc=NULL;)printf(”请输入课程先修关系总数:”);scanf(%d,&G-arcnum);printf( “请顺序输入每个课程先修关系(先修课程在前并以逗号作为间隔):n)for (i = 1; i arcnum; i+)(printf(n请输入存在先修关系的两个课程的序号:);scanf(”d,%d”,&n,&m);w
11、hile (n G-vexnum m G-vexnum)(printf(输入的顶点序号不正确请重新输入:);scanf(%d,%dn,&n,&m);)p = (ArcNode*)malloc(sizeof(ArcNode);if (p = NULL)(printf(memory allocation failed,goodbey);exit(l);)p-adjvex = m;p-nextarc = G-verticesn.firstarc;G-verticesn.firstarc = p;)printf(n建立的邻接表为:n”); /输出建立好的邻接表for(i= 1 ;ivexnum;i+)
12、printf(l,%d,G-verticesi.classid);for(p=G-verticesi.firstarc;p!=NULL;p=p-nextarc)printf(,%d-,p-adjvex)iprintfCNULL);printf(Hnr,);)void FindInDegree(ALGaph G, int indegree)求图中各节点的入度(int i;ArcNode *p;for (i = 1; i = Gvexnum; i+)indegreei = ();/赋初值for (i = 1; i adjvex+;p=p-nextarc;)void TopologicalSort_
13、l(ALGraph G,int numterm,int uplcredit) /拓扑排序算法 1(FILE *fp;fp=fopen(bianpai.txt,nwH);ArcNode *p;SqStack S;int indegree MAX_VERTEX_NUM ;存放各节点的入度it i,j,k;int count; 课程编排数目计数器int sumcredit;/每个学期的课程学分累加器FindInDegree(G, indegree);for (i = 1; i = Gvexnum; i+)G.verticesi.indegree=indegreei;InitStack(&S);count=0;k=0;while(count!=G.vexnum & k=numterm)(sumcredit=O;for(i=l;i=G.vexnum;i+) 入度为零的节点入栈,即无先修的课程入栈if(G.verticesi.indegree=O)&(G.verticesi.