教学计划编制问题课程设计报告.docx

上传人:b****5 文档编号:12056215 上传时间:2023-04-16 格式:DOCX 页数:23 大小:353.16KB
下载 相关 举报
教学计划编制问题课程设计报告.docx_第1页
第1页 / 共23页
教学计划编制问题课程设计报告.docx_第2页
第2页 / 共23页
教学计划编制问题课程设计报告.docx_第3页
第3页 / 共23页
教学计划编制问题课程设计报告.docx_第4页
第4页 / 共23页
教学计划编制问题课程设计报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

教学计划编制问题课程设计报告.docx

《教学计划编制问题课程设计报告.docx》由会员分享,可在线阅读,更多相关《教学计划编制问题课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。

教学计划编制问题课程设计报告.docx

教学计划编制问题课程设计报告

 

 

课程设计(论文)

 

题目名称教学计划编制问题

课程名称数据结构课程设计

学生姓名

学号

系、专业信息工程系、通信工程类

指导教师

 

2012年12月23日

摘要

教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编制的基本依据和课程安排的具体形式。

是稳定教学秩序、提高教学质量的重要保证。

从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。

随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。

因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提高教育教学水平。

教学计划编制中的思路:

一是明确培养目标;二是注重学科设置的整体性、统一性和灵活性、全面性;三是与学分制改革有机结合。

教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有很好的应用价值。

使用C程序设计语言,研究开发教学计划编制系统Web应用系统。

关键词:

教学计划;编制;培养目标;管理

 

1问题描述

大学的每个专业都要制定教学计划。

假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。

每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。

每门课恰好占一个学期。

试在这样的前提下设计一个教学计划编制程序。

[基本要求]

(1)输入参数包括:

学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

(2)允许用户指定下列两种编排策略之一:

一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。

(3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。

计划的表格格式自行设计。

[测试数据]

学期总数:

6;学分上限:

10;该专业共开设12门课,课程号从C01到C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。

先修关系如下:

课程编号

课程名称

先决条件

C1

程序设计基础

C2

离散数学

C1

C3

数据结构

C1,C2

C4

汇编语言

C1

C5

语言的设计和分析

C3,C4

C6

计算机原理

C11

C7

编译原理

C5,C3

C8

操作系统

C3,C6

C9

高等数学

C10

线性代数

C9

C11

普通物理

C9

C12

数值分析

C9,C10,C1

2需求分析

大学的每个专业都要编制教学计划。

假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。

每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。

每个课程的先修关系都是确定的,可以有任意多门,也可以没有。

每一门课程恰好一个学期。

试在这样的情况下设置一个教学计划编制程序。

在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息.

本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程.

针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同,而且课程在开设时间的安排必须满足先修关系。

输入参数包括:

学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

3概要设计

3.1抽象数据类型定义

ADTGraph{

数据对象V:

V是具有相同特性的数据元素的集合,称为顶点集.

数据关系R:

R={VR}

VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在直接先修关系}

基本操作P:

voidCreatGraph(ALGraph*);

voidFindInDegree(ALGraph,int*);

voidTopologicalSort_1(ALGraphG,intnumterm,intmaxcredit);

voidTopologicalSort_2(ALGraphG,intnumterm,intmaxcredit);

}ADTGraph

栈的定义:

ADTStack{

数据对象:

D={ai|ai∈ElemSet,i=1,2,…n,n>=0}

数据关系:

R1={﹤ai-1ai﹥|ai-1,ai∈D,i=2,…,n}

基本操作:

voidInitStack(SqStack*S);

intStackEmpty(SqStackS);

voidPush(SqStack*S,int);

intPop(SqStack*S,int*e);

}ADTStack

3.2模块划分

主程序模块

拓扑排序模块

4详细设计

4.1数据类型的定义

1.头结点,表结点,邻接表的定义

#defineMAX_VERTEX_NUM100//最大课程总数

typedefstructArcNode{

intadjvex;

structArcNode*nextarc;

}ArcNode;

typedefstructVNode{

charname[24];//课程名

intclassid;//课程号

intcredit;//课程的学分

intindegree;//该结点的入度

intstate;//该节点的状态

ArcNode*firstarc;//指向第一条依附该顶点的弧的指针

}VNode,AdjList[MAX_VEXTEX_NUM];

typedefstruct{

AdjListvertices;

intvexnum,arcnum;

}ALGraph;

邻接表的基本操作:

voidCreatGraph(ALGraph*);

创建邻接表

voidFindInDegree(ALGraph,int*);

求一个结点的入度

voidTopologicalSort_1(ALGraphG,intnumterm,intmaxcredit);

拓扑排序来编排课程

voidTopologicalSort_2(ALGraphG,intnumterm,intmaxcredit);

2.栈的定义:

#defineSTACk_INIT_SIZE100//存储空间的初时分配量

#defineSTACKINCREMENT10//存储空间的分配增量

typedefintElemType;

typedefstruct{

AdjListvertices;

intvexnum,arcnum;

}ALGraph;

基本操作:

voidInitStack(SqStack*S);

栈的初始化

intStackEmpty(SqStackS);

判断栈是否为空

voidPush(SqStack*S,int);

入栈操作

intPop(SqStack*S,int*e);

出栈操作

intSort(SqStack*S,int*t);

4.2主要模块的算法描述

1.LocateVex():

图的邻接表存储的基本操作。

由初始条件:

图G存在,u和G中顶点有相同特征转而进行判断,若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。

 

图4.1

2.CreateGraph():

构造生成图。

采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图)。

 

 

图4.2

3.Display():

输出图的邻接矩阵。

采用循环设置输出图的邻接矩阵。

 

 

图4.3

4.FindInDegree():

求顶点的入度。

图4.4

5.TopologicalSort():

输出G顶点的拓扑排序结果。

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

若G无回路,则输出G的顶点的一个拓扑序列并返回OK,否则返ERROR。

 

 

图4.5

5测试分析

使用VC++,打开教学计划编制问题.cpp文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。

要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。

然后还要输入课程先修课程总数,可以算出有16种关系,分别输出。

接着程序会根据这些数据,自动生成建立好的邻接表,用户可以根据系统显示的选择编排策略进行选择,有两种编排策略,最后结果体现在实验的正确测试结果里。

显示如下图:

 

 

 

6课程设计总结

6.1问题和解决方法及经验教训、心得体会

虽然在大一我们已经学习了C语言,但是,直到本期我们才开设了数据结构这一门课程。

这门课程让我从C语言那基础再深入的了解了软件开发的复杂性。

对以往模糊的经验,起了总结提升的作用。

在学习了这门课程后,我们进行了2个星期的课程设计,来实践我们所学这门课的内容。

这次实验,我进行了大量的资料查阅,包括向老师请求帮助解释题目要求,对所学知识进行复习。

通过这些努力,我对数据结构这门课程有了新的认识,对编程的步骤,有了具体的体会。

通过和同学的广泛交流,我体会到了合作的必要性及合作的优势。

更重要的是,这个课题完全脱离于只限于书本上的问题,多用在实际生活当中,让我对计算机行业,充满了信心和自豪。

以往我们学的计算机知识一般停留在理论上,这让我们不太理解计算机的应用和前景,而较少注重我们对算法的实践锻炼。

而这一次的实习既需要我们去联系理论,又需要我们去实践方法,很多东西看上去都学过,但是和实际联系才知道变通的艰难。

书上得来的并不是一切,大多还是需要在其它方面去吸收的,这是我这次实习的最大收获。

这次的实验让我们知道该如何跨过实际和理论之间的鸿沟。

由于程序十分的复杂,遇到了很多常见的语法错误,及逻辑错误。

这需要我们不

断的调试分析。

符号的格式之类,指针的用法,判断输入输出的条件都是十分容易出错的地方。

在逐条排除,向同学老师请教后,程序终于得以完成。

这让我明白了,解决问题,要细心认真,集思广益,这样才能把问题解决。

6.2致谢

本次的课程设计,并不是我自己一个人设计出来的。

首先,我要感谢我的数据结构老师——黄老师,本次课程设计黄老师帮助了我们不少,所以在这里我致以最诚挚的谢意,老师,谢谢您!

另外,我还要感谢在我这次课程设计中帮助过我的同学,谢谢你们一直以来对我的帮助,没有你们也没有我此次的成果,谢谢。

参考文献

[1]黄同成,黄俊民,董建寅.数据结构[M].北京:

中国电力出版社,2008

[2]董建寅,黄俊民,黄同成.数据结构实验指导与题解[M].北京:

中国电力出版社,2008

[3]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:

清华大学出版社,2002

[4]刘振鹏,张晓莉,郝杰.数据结构[M].北京:

中国铁道出版社,2003

附录(源程序清单)

#include

#include

#include

#include

#include

#include

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

typedefintStatus;

typedefintBoolean;

#defineMAX_NAME10

#defineMAXCLASS100

intZ=0;

intX=0;

intxqzs,q=1,xfsx;

typedefintInfoType;

typedefcharVertexType[MAX_NAME];

#defineMAX_VERTEX_NUM100

typedefenum{DG}GraphKind;

typedefstructArcNode

{

intadjvex;

structArcNode*nextarc;

InfoType*info;

}ArcNode;

typedefstruct

{

VertexTypedata;

ArcNode*firstarc;

}VNode,AdjList[MAX_VERTEX_NUM];

typedefstruct

{

AdjListvertices,verticestwo;

intvexnum,arcnum;

intkind;

}ALGraph;

intLocateVex(ALGraphG,VertexTypeu)

{

inti;

for(i=0;i

if(strcmp(u,G.vertices[i].data)==0)

returni;

return-1;

}

StatusCreateGraph(ALGraph*G)

{

inti,j,k;

VertexTypeva,vb;

ArcNode*p;

printf("请输入教学计划的课程数:

");

scanf("%d",&(*G).vexnum);

printf("请输入拓扑排序所形成的课程先修关系的边数:

");

scanf("%d",&(*G).arcnum);

printf("输入%d个课程的代表值(<%d个字符):

\n",(*G).vexnum,MAX_NAME);

for(i=0;i<(*G).vexnum;++i)

{scanf("%s",(*G).vertices[i].data);

(*G).vertices[i].firstarc=NULL;

}

printf("输入%d个课程的学分值(<%d个符):

\n",(*G).vexnum,MAX_NAME);

for(i=0;i<(*G).vexnum;++i)

{

scanf("%s",(*G).verticestwo[i].data);

}

printf("请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):

\n");

for(k=0;k<(*G).arcnum;++k)

{

scanf("%s%s",va,vb);

i=LocateVex(*G,va);

j=LocateVex(*G,vb);

p=(ArcNode*)malloc(sizeof(ArcNode));

p->adjvex=j;

p->info=NULL;

p->nextarc=(*G).vertices[i].firstarc;

(*G).vertices[i].firstarc=p;

}

returnOK;

}

voidDisplay(ALGraphG)

{

inti;

ArcNode*p;

switch(G.kind)

{

caseDG:

printf("有向图\n");

}

printf("%d个顶点:

\n",G.vexnum);

for(i=0;i

printf("%s",G.vertices[i].data);

printf("\n%d条弧(边):

\n",G.arcnum);

for(i=0;i

{

p=G.vertices[i].firstarc;

while(p)

{

printf("%s→%s",G.vertices[i].data,G.vertices[p->adjvex].data);

p=p->nextarc;

}

printf("\n");

}

}

voidFindInDegree(ALGraphG,intindegree[])

{

inti;

ArcNode*p;

for(i=0;i

indegree[i]=0;

for(i=0;i

{

p=G.vertices[i].firstarc;

while(p)

{

indegree[p->adjvex]++;

p=p->nextarc;

}

}

}

typedefintSElemType;

#defineSTACK_INIT_SIZE10

#defineSTACKINCREMENT2

typedefstructSqStack

{

SElemType*base;

SElemType*top;

intstacksize;

}SqStack;

StatusInitStack(SqStack*S)

{

(*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!

(*S).base)

exit(OVERFLOW);

(*S).top=(*S).base;

(*S).stacksize=STACK_INIT_SIZE;

returnOK;

}

StatusStackEmpty(SqStackS)

{

if(S.top==S.base)

returnTRUE;

else

returnFALSE;

}

StatusPop(SqStack*S,SElemType*e)

{

if((*S).top==(*S).base)

returnERROR;

*e=*--(*S).top;

returnOK;

}

StatusPush(SqStack*S,SElemTypee)

{

if((*S).top-(*S).base>=(*S).stacksize)

{

(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!

(*S).base)

exit(OVERFLOW);

(*S).top=(*S).base+(*S).stacksize;

(*S).stacksize+=STACKINCREMENT;

}

*((*S).top)++=e;

returnOK;

}

typedefintpathone[MAXCLASS];

typedefintpathtwo[MAXCLASS];

StatusTopologicalSort(ALGraphG)

{

inti,k,q=1,j=0,count,indegree[MAX_VERTEX_NUM];

SqStackS;

pathonea;

pathtwob;

ArcNode*p;

FindInDegree(G,indegree);

InitStack(&S);

for(i=0;i

if(!

indegree[i])

Push(&S,i);

count=0;

while(!

StackEmpty(S))

{

Pop(&S,&i);

a[i]=*G.vertices[i].data;

b[i]=*G.verticestwo[i].data;

if(q<=6)

{

printf("第%d个学期应学课程:

课程%s→学分%s\n",q,G.vertices[i].data,G.verticestwo[i].data);

q++;

}

else

{

printf("***课程%s→学分%s\n",G.vertices[i].data,G.verticestwo[i].data);

}

++count;

for(p=G.vertices[i].firstarc;p;p=p->nextarc)

{

k=p->adjvex;

if(!

(--indegree[k]))

Push(&S,k);

}

}

if(count

{printf("此有向图有回路\n");

returnERROR;

}

else

{

printf("为一个拓扑序列。

\n");

printf("教学编制计划已完成。

\n");

}

return0;

}

voidmain()

{ALGraphf;

printf("教学计划编制问题的数据模型为拓扑排序AOV-网结构。

\n");

printf("以下为教学计划编制问题的求解过程:

\n");

printf("请输入学期总数:

");

scanf("%d",&xqzs);

printf("请输入学期的学分上限:

");

scanf("%d",&xfsx);

CreateGraph(&f);

Display(f);

TopologicalSort(f);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1