1 / 32
文档名称:

教学计划编排.doc

格式:doc   大小:493KB   页数:32页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

教学计划编排.doc

上传人:读书百遍 2022/12/7 文件大小:493 KB

下载得到文件列表

教学计划编排.doc

文档介绍

文档介绍:该【教学计划编排 】是由【读书百遍】上传分享,文档一共【32】页,该文档可以免费在线阅读,需要了解更多关于【教学计划编排 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。实验题目:教学筹划编排
班级:数学类2姓名:史宝珠学号:434066日期:.12
一、需求分析

教学筹划的制定就是合理的编排这些课程,使学生可以顺利的进行学****这些课程中,有些课程是独立于其她课程的基本课,有些课程需要其她先行课程;一般4年制本科教学前7个学期(3年半)进行理论课程的学****第8个学期实****教学筹划的编排必须充足考虑这些因素。

假定学****年限是固定的,每年涉及两个学期,各专业开设的课程是拟定的,每门课程与否有先修课、有几门先修课也是拟定的。规定制定教学筹划,合理的安排各学期开授的课程。规定各学期课程门数、学分的分布较均匀。
二、概要设计
1)程序模块:
(1)VoidInformation():
输依次输入课程的总数,AOV网中边的条数;
输入AOV网中各个顶点的信息;
输入该课程的课程名;
输入该课程的学分;
输入该课程的课序号;
输入该课程的入度;
如果此课程需要多种学期修完,请输入1;
如果不是请输入2;
(2)floatAov(intp,AOVGraphAOV[200],intb1,floatsum2)
建立(运用拓扑排序)AOV网,从而将所有的信息以课表形式存储和显示。其中有对多种信息的输入,并且有建表的操作,将所有的内容有条理的存储和显示出来,使读者一目了然。(3)intmain()::
主模块,通过对各个模块的调用实现教学筹划的安排。
2)本程序所用的抽象数据类型的定义;
typedefstructnode
{
intadjevx;
structnode*next;
}EdgeNode;
typedefstructvnode
{
intnum; //课程号
charname[25]; //课程名
floatchour; //学分
intindegree; //入度
charnature; //与否为选修课
chara1;
inta11;
inta12;
EdgeNode*firstedge;
}VNode;
typedefstruct
{
VNodeAdjList[MAX];
intn,e;
floatsum;
}AOVGraph;
模块之间的层次关系
主模块main
jianliAov
Information
三、具体设计
++语言定义有关的数据类型;
ifstreaminput_file; //文献输入流及对文献的建立
ofstreamoutput_file; //文献输出流及对文献的读取
typedefstructnode
{
intadjevx; /*邻接点域*/
structnode*next; /*指向下一种邻接点的指针域*/
}EdgeNode;
/*边表结点*/
typedefstructvnode /*顶点表结点*/
{
intnum; /*课程号*/
charname[25]; /*课程名*/
floatchour; /*课程学分*/
intindegree; /*顶点的入度*/
charvertex; /*顶点域*/
charnature; /*与否为选修课*/
chara1;
inta11;
inta12;
EdgeNode*firstedge;
}VNode; /*边表的头指针*/
typedefstruct
{
VNodeAdjList[MAX]; /*邻接表*/
intn; /*顶点数*/
inte; /*边数*/
floatsum; /*总学分*/
}AOVGraph;
typedefstruct
{
VNodeAdjList[MAX];
intr;
intf;
}Queue;
Queue*p;
;
Queue*Init_queue(Queue*p)//构建空的队列
{
p=(Queue*)malloc(sizeof(Queue));
p->f=p->r=-1; //运用头尾指针来判断队与否为空
returnp;
}
intin_queue(Queue*p,VNodesr[MAX])
{
if(p->r==MAX-1)
{
cout<<"队满不可以进行入对操作"<<endl;
return-1;
}
else
{
p->r++;
p->AdjList[p->r].name[p->r]=sr[p->r].name[p->r];
p->AdjList[p->r].num=sr[p->r].num;
p->AdjList[p->r].chour=sr[p->r].chour;
p->AdjList[p->r].indegree=sr[p->r].indegree;
p->AdjList[p->r].firstedge=sr[p->r].firstedge;
return1;
}
}
intout_queue(Queue*p,VNode*sr)
{
if(p->r==-1)
{
cout<<"队空不能出队"<<endl;
return-1;
}
else
{
*sr=p->AdjList[p->f];
p->f++;
return1;

}
}
voidInformation(AOVGraphAOV[200],intb1) /*信息的输入*/
{
b1=0;
intk=0,i=0,j;
EdgeNode*Q,*r;
AOV->sum=0;
cout<<"请依次输入课程的总数,AOV网中边的条数"<<endl;
cin>>AOV->n>>AOV->e;
for(i=0;i<AOV->n;i++) /*将信息依次输入*/
{
cout<<"\n请输入AOV网中第"<<i+1<<"个顶点的信息,尚有"<<AOV->n-i-1<<"个顶点没有输入:\n"<<endl;
cout<<"\n请输入该课程的课程名:\n\n"<<endl;
cin>>AOV->AdjList[i].name;
AOV->AdjList[i].nature='M';
b1++;
cout<<"\n请输入该课程的学分:\n\n"<<endl;
cin>>AOV->AdjList[i].chour;
AOV->sum+=AOV->AdjList[i].chour;
cout<<"\n请输入该课程的课序号:\n\n"<<endl;
cin>>AOV->AdjList[i].num;
cout<<"\n请输入该课程的入度:\n\n"<<endl;
cin>>AOV->AdjList[i].indegree;
AOV->AdjList[i].firstedge=NULL; /*初始化邻接编表*/
AOV->AdjList[i].a12=0;
if(AOV->AdjList[i].indegree==0)
AOV->AdjList[i].a11=0;
else
AOV->AdjList[i].a11=1;
}

cout<<"\n如下为输入AOV网中各条边的信息:\n\n"<<endl; /*输入aov网的有关信息*/
cout<<"\n请输入边的信息(输入格式为:i:j。i,j分别表达AOV网中<vi,vj>的顶点相应的序号。):\n\n"<<endl;
for(j=1;j<=AOV->e;k++)
{
cout<<"第"<<j<<"条边的信息"<<endl;
cin>>i>>j;
Q=(EdgeNode*)malloc(sizeof(EdgeNode));
Q->adjevx=j-1;
if(AOV->AdjList[i-1].firstedge==NULL)
AOV->AdjList[i-1].firstedge=Q;
else
{
r=AOV->AdjList[i-1].firstedge;
while(r->next!=NULL)
r=r->next;
r->next=Q;
}
Q->next=NULL;
if(AOV->e==k)
{
cout<<"\n边的信息输入结束。\n\n";
}
}

}
floatjianliAov(intp,AOVGraphAOV[200],intb1,floatsum2) /*运用拓扑排序建立AOV网的构造建立教学编排表*/
{
inti;
intk;
floatj;//,a
EdgeNode*ptr;
intb2=7,b3;
VNodepoint1;
sum2=0;
charch;
ofstreamoutfile("",ios::out); /*对文献的操作进行打开文献操作*/
for(i=0;i<AOV->n;i++)
if(AOV->AdjList[i].indegree==0&&AOV->AdjList[i].nature=='M'&&AOV->AdjList[i].a11==0&&AOV->AdjList[i].a12==0)

{
sum2+=AOV->AdjList[i].chour;
if(sum2-AOV->sum/b2<AOV->AdjList[i].chour) /*将输入的信息有序的进行存入文献*/
{
cout<<"课程号 "<<"课程名 "<<"学分 "<<"课程性质 "<<endl;
cout<<AOV->AdjList[i].num<<" "<<AOV->AdjList[i].name<<" "<<AOV->AdjList[i].chour<<" "<<AOV->AdjList[i].nature<<endl;
outfile<<"课程号 "<<"课程名 "<<"学分 "<<"课程性质 "<<endl;
outfile<<AOV->AdjList[i].num<<" "<<AOV->AdjList[i].name<<" "<<AOV->AdjList[i].chour<<" "<<AOV->AdjList[i].nature<<endl;
AOV->AdjList[i].a12=1;
b1--;
b3++;
ptr=AOV->AdjList[i].firstedge;
while(ptr!=NULL)
{
k=ptr->adjevx;
AOV->AdjList[k].indegree--;
ptr=ptr->next;
}
}
else
sum2-=AOV->AdjList[i].chour; /*计算总学分*/

}
j=sum2;
cout<<"第"<<(p+2)/2<<"年第"<<2-(p+1)%2<<"学期所修学分为:"<<j<<",课程数为"<<b3<<"如果想修选修课,请输入1,否则输入2:\n\n"<<endl;
outfile<<"第"<<(p+2)/2<<"年第"<<2-(p+1)%2<<"学期所修学分为:"<<j<<",课程数为"<<b3<<endl;

/*输入某学期的信息并显示*/
();
cin>>ch;