• 大小: 193KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: 数据结构  

资源简介

任务:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 目标:(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。 (2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。 (3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。

资源截图

代码片段和文件信息


#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 fr; //队头r   队尾f
}queue;

int IsCricle=0; //判断是否环  1表示是   0表示不是
int jxq; //用于计算学期的
 

void queueinit(queue *q) //队初始化
{
q->f=q->r=0;
}

void queuein(queue *qint 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 in; //临时变量 
int j;
PreCourse *p*q; //临时变量
printf(“\n建立先修关系:\n“);
printf(“\n输入的每一门课程号的编号:“);
for(i=0;inum;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;inum;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)
{
CGraph->courses[i].firstnext=p;
q=CGraph->courses[i].firstnext;
n++;
}
else
{
q->pre=p;
q=p;
n++;
}
scanf(“%d“&j);
}
}
printf(“ 1)重新建立先修关系        2)确定\n“);
printf(“请选择:“);
scanf(“%d“&choice);
if(choice==1)
creatpre(CGraph);
jxq=0;
}

AlGraph input() //输入并建立课程图
{
AlGraph CGraph;
int xqzs=0kczs=0; //学期总数:xqzs     专业共开设课程数:kczs
int ij;
int choice;
float xfxfsx=0; // 学分上限:xfsx
printf(“教学计划编制\n\n“);
printf(“输入参数:\n“);
printf(“1、学期总数:“);
scanf(“%d“&xqzs);
CGraph.xqs=xqzs;
printf(“2、专业共开设课程数:“);
scanf(“%d“&kczs);
CGraph.num=kczs; //课程数
printf(“3、学分上限(每个学期的学分上限都一样):“);
scanf(“%f“&xfsx);
CGra

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      13832  2010-12-04 14:05  教学计划编制\Debug\BuildLog.htm

     文件      38165  2010-12-04 14:05  教学计划编制\Debug\jj.obj

     文件      53248  2010-12-04 14:05  教学计划编制\Debug\jjj.exe

     文件        388  2010-12-04 14:05  教学计划编制\Debug\jjj.exe.intermediate.manifest

     文件     321856  2010-12-04 14:05  教学计划编制\Debug\jjj.ilk

     文件     281600  2010-12-04 14:05  教学计划编制\Debug\jjj.pdb

     文件         65  2010-12-04 14:05  教学计划编制\Debug\mt.dep

     文件      44032  2010-12-04 14:05  教学计划编制\Debug\vc80.idb

     文件      61440  2010-12-04 14:05  教学计划编制\Debug\vc80.pdb

     文件       9108  2010-12-04 16:45  教学计划编制\jj.cpp

     文件     560128  2010-12-04 16:45  教学计划编制\jjj.ncb

     文件        870  2010-11-07 17:06  教学计划编制\jjj.sln

    ..A..H.      9216  2010-12-04 16:45  教学计划编制\jjj.suo

     文件       3682  2010-11-07 17:07  教学计划编制\jjj.vcproj

     文件       1409  2010-12-04 16:45  教学计划编制\jjj.vcproj.TFW-PC.Ashu.user

     目录          0  2011-09-10 09:39  教学计划编制\Debug

     目录          0  2012-08-16 10:41  教学计划编制

----------- ---------  ---------- -----  ----

              1399039                    17


评论

共有 条评论