教学计划编制问题课程设计数据结构Word下载.docx
《教学计划编制问题课程设计数据结构Word下载.docx》由会员分享,可在线阅读,更多相关《教学计划编制问题课程设计数据结构Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
得分
评价内涵
工作表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有艮好的科学工作态度。
02
科学实践、调研
7
通过实验、试验、查阅文献、深人生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
按期圆满完成规定的任务,工作量饱满。
能力水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解決实际问题,能正确处理实验数据,能对课题进行理论分析,得岀有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;
能提岀并较好地论述课题的实施方案;
有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;
研究思路清晰、完整。
07
计算及计算机应用能力
具有较强的数据运算与处理能力;
能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
具有较强的数据收集、分析、处理、综合的能力。
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
符合本专业相关规范或规定要求;
规范化符合本文件第五条要求。
设计说明书(论文)质量
30
综述简练完整,有见解;
立论正确,论述充分,结论严谨合理;
实验正确,分析处理科学。
11
创新
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名:
年月曰
摘
要,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,需求分析,,,,,,,,,,,,,,,,,,,,,,,,,,,,
11ijV、丿」1/1jjjjjjjjjjjjjjjjjjjjjjjjjjjj
4
1.1
实验内容和实验目的,,,,,,,,,,,,,,,,,,,,,,,,
1.2
设计要求,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1.3
理论与实践教学体系的关系,,,,,,,,,,,,,,,,,,,,,,
二
流程图设计,,,,,,,,,,,,,,,,,,,,,,,,,,,
\J1□1—L-*-1~1<
1JJJJJJJJJJJJJJJJJJJJJJJJJJJ
三
概要设计,,,,,,,,,,,,,,,,,,,,,,,,,,,,
8
3.1
抽象数据类型图的定义,,,,,,,,,,,,,,,,,,,,,,,
3.2
主程序,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
9
3.3
程序模块调用关系,,,,,,,,,,,,,,,,,,,,,,,,,
四
详细设计,,,,,,,,,,,,,,,,,,,,,,,,,,,,
4.1
头结点,表结点,邻接表的定义,,,,,,,,,,,,,,,,,,,
4.2
栈的定义,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1-^4HJ/^J—JJJJJJJJJJJJJJJJJJJJJJJJJJJJ
4.3
主程序和其他算法,,,,,,,,,,,,,,,,,,,,,,,,
五
调试分析,,,,,,,,,,,,,,,,,,,,,,,,,,,,
20
5.1
用户使用和说明,,,,,,,,,,,,,,,,,,,,,,,,,
5.2
测试数据,,,,,,,,,,,,,,,,,,,,,,,,,,,,
22
5.3
测试结果,,,,,,,,,,,,,,,,,,,,,,,,,,,,
23
5.4
实验过程中出现的问题及解决方法,,,,,,,,,,,,,,,,,,
24
六
实验分工,,,,,,,,,,,,,,,,,,,,,,,,,,,,
七
实验体会,,,,,,,,,,,,,,,,,,,,,,,,,,,,
25
八
参考文献,,,,,,,,,,,,,,,,,,,,,,,,,,,,
26
摘要
教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编制的基本依据和课程安排的具体形式。
是稳定教学秩序、提高教学质量的重要保证。
从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。
随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。
因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提高教育教学水平。
教学计划编制中的思路:
一是明确培养目标;
二是注重学科设置的整体性、统一性和灵活性、全面性;
三是与学分制改革有机结合.
教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有很好的应用价值。
使用C程序设计语言,研究开发教学计划编制系统Web应用系统。
关键词教学计划编制培养目标管理
1需求分析
1.1实验内容和实验目的
大学的每个专业都要编制教学计划。
假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。
每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。
每个课程的先修关系都是确定的,可以有任意多门,也可以没有。
每一门课程恰好一个学期。
试在这样的情况下设置一个教学计划编制程序。
在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息.
本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程.
1.2设计要求
针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。
1.3理论与实践教学体系的关系
理论教学体系和实践教学体系是培养职业能力的两个主导因素是相互联系的,要处理好两者关系。
基础理论教学要以应用为目的,以必需、够用为度,专业课教学要加强针对性和应用性。
实践教学要改变过分依附理论教学的状况,探索建立相对独立的实践教学体系,形成基本实践能力与操作技能,专业技术应用能力与专业技能,综合实践能力与综合技能有机结合的实践教学体系。
2概要设计
2.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={vai-1ai>
|ai-1,ai€D,i=2,,,n}
基本操作:
voidInitStack(SqStack*S);
intStackEmpty(SqStackS);
voidPush(SqStack*S,int);
intPop(SqStack*S,int*e);
}ADTStack
2.2主程序
intmain()//主函数
{
intnumterm;
//学期总数
intuplcredit;
//一个学期的学分上限
intselectway;
ALGraphG;
printf("
请输入学期总数:
\n"
);
scanf("
%d"
&
numterm);
请输入一个学期的学分上限:
uplcredit);
CreatGraph(&
G);
2.课程尽量均
请选择编排策略:
1.课程尽可能集中到前几个学期;
匀分布\n"
selectway);
if(selectway==1)
TopologicalSort_1(G,numterm,uplcredit);
if(selectway==2)
TopologicalSort_2(G,numterm,uplcredit);
system("
pause"
return0;
}
3代码设计
3.1头结点,表结点,邻接表的定义
#defineMAX_VERTEX_NUM100/最/大课程总数typedefstructArcNode{
intadjvex;
structArcNode*nextarc;
}ArcNode;
typedefstructVNode{
charname[24];
//
课程名
intclassid;
、b-rr~t口
课程号
intcredit;
课程的学分
intindegree;
该结点的入度
intstate;
该节点的状态
ArcNode*firstarc;
指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VEXTEX_NUM];
typedefstruct{
AdjListvertices;
intvexnum,arcnum;
}ALGraph;
邻接表的基本操作:
创建邻接表
求一个结点的入度
拓扑排序来编排课程
3.2栈的定义
#defineSTACk_INIT_SIZE100//存储空间的初时分配量
#defineSTACKINCREMENT10//存储空间的分配增量
typedefintElemType;
基本操作:
栈的初始化
判断栈是否为空
入栈操作
出栈操作
3.3主程序和其他算法
{intnumterm;
2.课程尽量均匀分
布\n"
voidCreatGraph(ALGraph*G)//构件图
{inti,m,n;
ArcNode*p;
请输入需要编排课程总数:
G->
vexnum);
for(i=1;
i<
=G->
vexnum;
i++)
请输入课程名\n"
scanf("
%s"
vertices[i].name);
请输入课程号\n"
vertices[i].classid);
请输入该课程的学分\n"
vertices[i].credit);
vertices[i].indegree=0;
vertices[i].state=NOTSTUDY;
vertices[i].firstarc=NULL;
请输入课程先修关系总数:
"
arcnum);
请顺序输入每个课程先修关系(先修课程在前并以逗号作为间
隔):
for(i=1;
i<
=G->
arcnum;
i++)
\n请输入存在先修关系的两个课程的序号:
"
%d,%d"
n,&
m);
while(n<
0||n>
G->
vexnum||m<
0||m>
vexnum)
输入的顶点序号不正确请重新输入:
p=(ArcNode*)malloc(sizeof(ArcNode));
if(p==NULL)
memoryallocationfailed,goodbey"
exit
(1);
}p->
adjvex=m;
p->
nextarc=G->
vertices[n].firstarc;
vertices[n].firstarc=p;
\n建立的邻接表为:
//输出建立好的邻接表for(i=1;
%d:
->
G->
for(p=G->
vertices[i].firstarc;
p!
=NULL;
p=p->
nextarc)printf("
%d->
p->
adjvex);
NULL"
voidInitStack(SqStack*S)
S->
base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!
base)
ERROR"
top=S->
base;
stacksize=STACK_INIT_SIZE;
intStackEmpty(SqStack*S)
if(S->
top==S->
returnOK;
else
returnERROR;
voidPush(SqStack*S,inte)
top-S->
base>
=S->
stacksize)
base=(int*)realloc(S->
base,(S->
stacksize+STACKINCREMENT)*sizeof(int));
if(!
top=S->
base+S->
stacksize;
stacksize+=STACKINCREMENT;
*S->
top++=e;
intPop(SqStack*S,int*e)
top==S->
base)exit
(1);
*e=*--S->
top;
求图中各节点的入度
voidFindInDegree(ALGraphG,intindegree[])//
inti;
=G.vexnum;
indegree[i]=0;
while(G.vertices[i].firstarc)
indegree[G.vertices[i].firstarc->
adjvex]++;
G.vertices[i].firstarc=G.vertices[i].firstarc->
nextarc;
voidTopologicalSort_1(ALGraphG,intnumterm,intuplcredit)
FILE*fp;
fp=fopen("
bianpai.txt"
"
w"
SqStackS;
intindegree[M];
//存放各节点的入度
inti,j,k,m,n;
intcount;
//课程编排数目计数器
intsumcredit;
//每个学期的课程学分累加器FindInDegree(G,indegree);
i++)G.vertices[i].indegree=indegree[i];
InitStack(&
S);
count=0;
k=0;
while(count!
=G.vexnum&
&
k<
=numterm)
sumcredit=0;
for(i=1;
=G.vexnum;
i++)//入度为零的节点入栈,即无先修的课程入栈
if((G.vertices[i].indegree==0)&
(G.vertices[i].state==NOT
STUDY))
Push(&
S,i);
G.vertices[i].state=STUDY;
//避免入度为零节点重复入栈
StackEmpty(&
S)&
(sumcredit<
=uplcredit))
k=k+1;
printf(”第%(:
1个学期学得课程有:
k);
sumcredit=0;
i++)//入度为零的节点入栈,即无先修的课程
入栈
(G.vertices[i].state==NOTSTUDY))
栈非空&
while((!
S))&
uplcredit))//学分总数小于学分上限
Pop(&
S,&
j);
sumcredit=sumcredit+G.vertices[j].credit;
if(sumcredit<
=uplcredit)
%s"
G.vertices[j].name);
fprintf(fp,"
count++;
for(p=G.vertices[j].firstarc;
p;
nextarc)//
号顶点每个邻接点的入度减一
G.vertices[p->
adjvex].indegree--;
elsePush(&
S,j);
//将未输出的节点重新压入栈
if(count<
G.vexnum)
\n课程编排出错\n"
\n课程编排成功\n"
fclose(fp);
voidTopologicalSort_2(ALGraphG,intnumterm,intuplcredit){
intmaxnum;
intsumnum;
G.vertices[i].indegree=indeg