欢迎来到天天文库
浏览记录
ID:11087581
大小:175.00 KB
页数:22页
时间:2018-07-09
《教学计划编制问题课程设计报告书》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、任务要求:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期,试在这样的前提下设计一个教学计划编制程序。内容摘要:本程序是一个教学计划的编制的问题,而由任务要求了解到的已知的条件及这次设计的目的。我们在分析问题后决定采用AOV网图来解决。首先,了解本系统要实现的基本功能,大致划分模块。其次
2、,由已知条件画出先修关系图,以此来设计邻接表存储结构。接下来,借助于栈,设计拓扑排序的流程。最后,对系统开始进行详细的前台界面和后台程序的设计,完善系统。教师评语:成绩签名:日期:课程设计报告书教学计划编制问题一设计思想根据任务要求及对实际情况的了解,可知设计中需要定义先修关系的AOV网图中的顶点及弧边的结构体,采用邻接表存储结构,利用栈作辅助结构,在运行结果中将图的信息显示出来,利用先修关系将课程排序,最后解决问题——输出每学期的课程。二系统完成功能及功能框图end采用第二种策略:使课程尽可能地集中在
3、前几个学期中根据教学计划中的课程及其关系和学分定义图的顶点和边的结构体创建图CreateGraph():结合先修关系的AOV网,采用邻接链表存储菜单OUTPUT():显示代号所对应课程及课程的先修课程前插法main拓扑排序TopoSort(G):将课程排序后并决定出每学期所学课程输出图G的信息Display(G):将图的顶点和弧边输出图1系统功能框图0C11^5^11^111067^6^4^72^1134^9^1C22C33C44C55C66C7^7C8^8C99C1010C1111C12^图2:邻接表
4、对每个顶点求入度,并存入数组InDegree[i]中(i=0…n)初始化栈Stack,Counter=0ReturnOKReturnERROR依次将入度为0的顶点存入栈中对以i号顶点为尾弧的每个邻接点的入度减1,并将入度减1后为零的顶点号压入栈中,输出i,计数器加1(Counter++)推出栈顶的一个元素(入度为零的顶点号)至i,输出i,计数器加1(Counter++)堆栈是否为空?n个顶点全输出YNNY图3拓扑排序流程图C1C4C5C7C2C3C8C9C12C10C11C6图4课程先修关系图三核心算法
5、及说明(1)采用邻接表存储结构,创建图intCreateGraph(ALGraph&G){inti,j,k;VertexTypeva;ArcNode*p;printf("请输入教学计划的课程数:");scanf("%d",&G.vexnum);printf("请输入各个课程的先修课程的总和(弧总数):");scanf("%d",&G.arcnum);printf("请输入%d个课程的课程号(最多%d个字符,数字+字母):",G.vexnum,MAX_NAME);for(i=0;i6、i){scanf("%s",&G.vertices[i].data);G.vertices[i].firstarc=NULL;}printf("请输入%d个课程的学分值:",G.vexnum);for(i=0;i7、,G.vertices[k].data);scanf("%s",va);while(va[0]!='0'){i=LocateVex(G,va);//弧头j=k; //弧尾p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->nextarc=G.vertices[i].firstarc;//插在表头G.vertices[i].firstarc=p;scanf("%s",va);}}returnOK;}(2)通过栈实现拓扑排序Fin8、dInDegree(G,indegree); //对各顶点求入度InitStack(S); //初始化栈for(i=0;i
6、i){scanf("%s",&G.vertices[i].data);G.vertices[i].firstarc=NULL;}printf("请输入%d个课程的学分值:",G.vexnum);for(i=0;i7、,G.vertices[k].data);scanf("%s",va);while(va[0]!='0'){i=LocateVex(G,va);//弧头j=k; //弧尾p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->nextarc=G.vertices[i].firstarc;//插在表头G.vertices[i].firstarc=p;scanf("%s",va);}}returnOK;}(2)通过栈实现拓扑排序Fin8、dInDegree(G,indegree); //对各顶点求入度InitStack(S); //初始化栈for(i=0;i
7、,G.vertices[k].data);scanf("%s",va);while(va[0]!='0'){i=LocateVex(G,va);//弧头j=k; //弧尾p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->nextarc=G.vertices[i].firstarc;//插在表头G.vertices[i].firstarc=p;scanf("%s",va);}}returnOK;}(2)通过栈实现拓扑排序Fin
8、dInDegree(G,indegree); //对各顶点求入度InitStack(S); //初始化栈for(i=0;i
此文档下载收益归作者所有