typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
VertexType data;
int grades;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct ALGraph
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
//const char *CourseCodes[N]={"S1","S2","S3","S4","S5","S6",
//"S7","S8","S9","S10","S11","S12"};
char *CourseCodes[N]={"程序设计基础","大学物理下","数据库","离散数学","语言的设计和分析",
"概率论","编译原理","JAVA","高等数学","线性代数","大学物理上","数据结构"};
void OUTPUT()
{
printf("\t\t 欢迎使用教学计划编制系统 \n");
printf("\t\t 请您根据系统提示按需求输入相关信息 \n");
printf("\t\t \n");
printf("\t\t 教学计划编制菜单 \n");
printf("\t\t 课程代码 |课程名称 |优先课程 \n");
printf("\t\t S1 |程序设计基础 |无 \n");
printf("\t\t S2 |大学物理下 | S1 \n");
printf("\t\t S3 |数据库 | S1,S2 \n");
printf("\t\t S4 |离散数学 | S1 \n");
printf("\t\t S5 |语言的设计和分析 | S3,S4 \n");
printf("\t\t S6 |概率论 | S11 \n");
printf("\t\t S7 |编译原理 | S5,S3 \n");
printf("\t\t S8 |JAVA | S3,S6 \n");
printf("\t\t S9 |高等数学 | 无 \n");
printf("\t\t S10 |线性代数 | S9 \n");
printf("\t\t S11 |大学物理上 | S9 \n");
printf("\t\t S12 |数据结构 | S9,S10,S1 \n");
}
int LocateVex(ALGraph G,VertexType u)
{
int i;
for(i=0;i<G.vexnum;++i)
{
if(strcmp(u,G.vertices[i].data)==0)
return i;
}
return -1;
}
int CreateGraph(ALGraph *pGraph)
{
int i,k;
VertexType va;
ArcNode *pNode;
printf("请输入教学计划的课程数:");
scanf("%d",&pGraph->vexnum);
printf("请输入各个课程的先修课程的总和(弧总数):");
scanf("%d",&pGraph->arcnum);
printf("请输入%d个课程的课程号(最多%d个字符,数字+字母)和学分值\n",
pGraph->vexnum,MAX_NAME);
for(i=0;ivexnum;i++)
{
printf("课程号:");
scanf("%s",&pGraph->vertices[i].data);
printf("学分值:");
scanf("%d",&pGraph->vertices[i].grades);
pGraph->vertices[i].firstarc=NULL;
}
printf("\n请输入下列课程的先修课程(无先修课程输入0 结束后也输入0)\n");
for(k=0;kvexnum;k++)
{
printf("%s的先修课程:",pGraph->vertices[k].data);
scanf("%s",&va);
while(va[0]!='0')
{
i=LocateVex(*pGraph,va);
if(i<0)
{
;
}
pNode=(ArcNode*)malloc(sizeof(ArcNode));
pNode->adjvex=k;
pNode->nextarc=pGraph->vertices[i].firstarc;
pGraph->vertices[i].firstarc=pNode;
scanf("%s",va);
}
}
return OK;