教学计划编制问题课程设计Word版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息与电气工程学院
课程设计说明书
(2015/2016学年第一学期)
课程名称:软件算法分析与设计
题目:教学计划编制
专业班级:计算机1401
学生姓名:李丹丹
学号: 140210132
指导教师:陈丽
设计周数:一周
设计成绩:
2016年1月13日
目录
一、课题的主要功能 (1)
1.1程序的功能 (1)
1.2.输入输出的要求 (1)
1.3运行环境 (1)
1.4开发工具 (1)
二、概要设计 (2)
2.1程序的模块组成 (2)
2.2模块的层次结构及调用关系 (2)
2.3模块的主要功能 (3)
2.4数据结构和数据库结构 (3)
三.主要功能的实现 (3)
3.1采用C语言定义相关的数据类型。 (3)
3.2主要函数的流程图 (4)
3.3画出各函数的调用关系图 (11)
四、程序调试 (12)
4.1测试数据: (12)
4.2使用说明 (13)
五.心得体会 (14)
六、附录 (15)
6.1参考书目 (15)
6.2源程序清单(带注释) (16)
一、课题的主要功能
1.1程序的功能
大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
本程序针对本科的学期内容,通过输入实际的课程及先后关系。结合每学期的学分及课程数,制定好学习计划。在输入相关数据后,程序会安排好每学期的课程。
1.2.输入输出的要求
输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。
输出要求输出各门课程所对应的学分,以及每学期各门课程的安排。
1.3运行环境
1. WINDOWS 7系统
2. Vc++6.0编译环境
1.4开发工具
C语言
二、概要设计
2.1所负责的程序的模块
LocateVex():图的邻接表存储的基本操作CreateGraph():构造生成树
Display():输出图的邻接矩阵
FindInDegree():求顶点的入度
2.2模块的层次结构及调用关系
2.3模块的主要功能
见“详细设计”-“主要函数流程图”
2.4数据结构和数据库结构
储存的数据为结构体类型数组,以及结构体单链表结点类型。
1 typedef struct ArcNode
2 typedef struct
三.主要功能的实现
3.1采用C语言定义相关的数据类型。
其中包括字符常量,整型,字符型,字符串型,typedef 定义的类型,结构体型,单链表节点类型,结构体数组。
3.2主要函数的流程图
1.LocateVex():图的邻接表存储的基本操作。由初始条件: 图G存在,u和G中顶点有相同特征转而进行判断,若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。
2.CreateGraph():构造生成图。采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图)。
3.Display():输出图的邻接矩阵。采用循环设置输出图的邻接矩阵。
4.FindInDegree():求顶点的入度。
所负责的部分程序:
/* 图的邻接表存储的基本操作*/
int LocateVex(ALGraph G,VertexType u)
{ /* 初始条件: 图G存在,u和G中顶点有相同特征*/
/* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */
int i;
for(i=0;i if(strcmp(u,G.vertices[i].data)==0) return i; return -1; } Status CreateGraph(ALGraph *G) { /* 采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图) */ int i,j,k; VertexType va,vb; ArcNode *p; printf("请输入教学计划的课程数: "); scanf("%d",&(*G).vexnum); printf("请输入拓扑排序所形成的课程先修关系的边数: "); scanf("%d",&(*G).arcnum); printf("请输入%d个课程的代表值(<%d个字符):\n",(*G).vexnum,MAX_NAME); for(i=0;i<(*G).vexnum;++i) /* 构造顶点向量*/ { scanf("%s",(*G).vertices[i].data); (*G).vertices[i].firstarc=NULL; } printf("请输入%d个课程的学分值(<%d个字符):\n",(*G).vexnum,MAX_NAME); for(i=0;i<(*G).vexnum;++i) /* 构造顶点向量*/ {scanf("%s",(*G).verticestwo[i].data); } printf("请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):\n"); for(k=0;k<(*G).arcnum;++k) /* 构造表结点链表*/ { scanf("%s%s",va,vb); i=LocateVex(*G,va); /* 弧尾*/