教学计划编制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教学计划编制问题
实现提示
可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。应建立内部课程序号与课程号之间的对应关系。
#include
#include
#include
#define null 0
#define MAXNODE 64 //最大课程个数
typedef struct
{
char c[3];
}cid; //课程号
typedef struct Course
{
cid id[3]; //课程号
char name[30]; //课程名
float xf; //学分
}Course; ////////////////////////////////////////////////课程
typedef struct PreCourse
{
int adjvex; //课程在数组中的下标
struct PreCourse *pre; //指向下一先修的课程节点
}PreCourse;/////////////////////////////////////////////////先修的课程节点typedef struct
{
Course course;//课程
PreCourse *firstnext; //指向第一个先修的课程节点
}CourseNode;////////////////////////////////////////////////////////////课程节点typedef struct
{
CourseNode courses[MAXNODE]; //邻接表
int xqs;//学期总数
int num; //课程的数目
float xfsx;/////学分上限
}AlGraph;///////////////////////////////////////////////////////////////课程图typedef struct
{
int data[MAXNODE];//队中元素
int f,r;//队头r 队尾f
}queue;
int IsCricle=0;//判断是否环1表示是0表示不是
int jxq;//用于计算学期的
/////////////////////////////////////////////////////////////////////////
void queueinit(queue *q)///////////////队初始化
{
q->f=q->r=0;
}
void queuein(queue *q,int x)//入队
{
if((q->r+1)%MAXNODE==q->f)
{
printf("队满\n");
exit(0);
}
q->r=(q->r+1)%MAXNODE;
q->data[q->r]=x;
}
int queueout(queue *q)//出队
{
if(q->f==q->r)
{
printf("队空\n");
exit(0);
}
q->f=(q->f+1)%MAXNODE;
return q->data[q->f];
}
int queueempty(queue *q)///////////////队判空1为空
{
if(q->f==q->r)
return 1;
else return 0;
}
void creatpre(AlGraph *CGraph)///////////////建立先修关系
{
system("cls");//用来清屏
int choice;
fflush(stdin);/////////////////////////////////////////////清空输入流
int i,j,n;//////临时变量
PreCourse *p,*q;//////临时变
printf("\n建立先修关系:\n");
printf("\n请输入每一门课程号的编号:");
for(i=0;i
{
if(i%4==0)printf("\n");
printf("%d) ",i+1);
printf("%s\t",CGraph->courses[i].course.id);
}
printf("\n请根据以上的编号,输入每一门课程的先修课程(输入0 表示没有或结束):\n");
for(i=0;i
{
printf("%s的先修课程:",CGraph->courses[i].course.id);
scanf("%d",&j);
n=0;
while(j)
{
while(j<1||j>CGraph->num||j==i+1)
{
if(j==i+1)
printf("先修课程号不能是本课程号");
else
printf("输入的先修课程号不在该专业开设的课程序列中");
fflush(stdin);/////////////////////////////////////////////清空输入流
printf("重新输入:");
scanf("%d",&j);
}
p=(PreCourse *)malloc(sizeof(PreCourse));
p->adjvex=j-1;
p->pre=null;
if(n==0)
{