数据结构课程设计_教学计划编制问题
(教学计划编制问题)目 录1.需求分析 ………………….3-52.概要设计 ………………….6-83.详细设计 ……………… 8-134.调试分析 ……………… 14-155.用户使用说明 ……………. 156.测试结果 ……………… 15-177.附录 ………………………17题目:教学计划编制问题(1)需求分析 1.1 问题描述 假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。1 . 2 基本要求(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程名、课程号(固定占 3 位的字母数字串) 、学分和直接先修课的课程号。(2)允许用户采用下列编排策略:使学生在各学期中的学习负担尽量均匀;(3)若根据给定的条件问题无解,则报告适当的信息;否则输出各学年每学期应开设的课程。(2) 概要设计存储结构设计分析题目可知,这属于图的拓扑排序,所以要建立链表struct CourseHead //表头结点的结构体,保存课程信息{int flag; //标记该门课程是否已经编排int priornum; //给课程的直接先修课的个数char Name[30]; //课程的名字 char Ofcourse[4]; //课程号float Score; //学分 CourseLink *first; //以该门课程为先修的后修课程};struct CourseLink //表头结点的链结点,即该门课程的后继课程{ int Index; //该课程在表头结点的下标, CourseLink *next; //下一门与它有公共先修课的课程}; struct Topo //保存课程安排的最终结果{ int level; //标记是否平均分配,ArryInTopo *toporesualt; //一个一维数组保存课程的具体安排Topo *next; //下一种课程安排的情况}; struct ArryInTopo //用于保存课程编排的具体信息{int Index; //保存课程的序号int Time; //保存课程的开课时间};struct Zero //保存可以选择的课程{int zero; //课程在原始数据里的下标Zero *next; //下一个可选课程结点的地址};用到的函数的功能void InitData(); //完成数据初始化 void InitData(int num); //由课程数目 num 来完成数据的细节 float InitData(char *b); // 方便判断输入数据的准确性而已void StartTopoSort(); //初始化要用到的各个数据再调用递归 void TopoSort(int topotempsum,int time);//递归函数,完成拓扑排序,void Check(int index); // 当选择 course[index]时,相应的课//程的 priornum 项要减一void CheckBack(int index); //当退选 course[index]时,相应的课程//的 priornum 项要加int ZERO(); //统计该层递归可以选择的课程//并且完成可选课程的记录void Ifsuccessed(); //当课程安排成功时将课程安排记录保存//并对课程安排做评价void Print(); //根据客户要求输出相应的课程安排void printf0(); //界面 void printf1(int ); // 负责输出课程信息void printf2(); //输出课程的联系void printf1(FILE *); //负责将课程信息写入文件void printf2(FILE *); // 将课程的联系写入文件程序主函数关键部分的执行流程图软件介绍判断 非退出程序 子函数 调用 调用三次子函数(I) 用于正确输入 调用右边函数完 返回 学期总数,学分上限 成数据初始化 课程总数调用子函数 (II)正确输入每一门课程的返回 课程名,课程号,学分然后正确输入课程之间的关系子函数 初始化各个需要 调用 子函数(IV)用到的全局变量 返 调用 在每一层递归数然后调用递归函数 回 递归函数 (III) 开始时返回该层某种课程 递归开始 递归可选课程安排成功 返回 数目并临时保存返 回 条件合理则递归调用自己 调用 退选某门课 选择某门课调用 子函数(VI)返 调 返 当选择某门课时回 回 回 将它的后继课程子函数(VIII) 子函数(VII) 的先修课个数-1 当某一种排序成 当退选某门课时功时保存并评估 将它的后继课程的先修课个数+1子函数 根据客户要求输出课程编排 完成了课程的编排测试用例设计学期总数: 6 一学期的学分上限 : 10 该专业共开课程数目 : 12课 程 名 称 课 程 号 学 分 先 修 课 的 课 程 号程 序 设 计 基 础 C1 2 无离 散 数 学 C2 3 C1数 据 结 构 C3 4 C1 , C2汇 编 语 言 C4 3 C1语 言 的 设 计 与 分 析 C5 2 C3 , C4计 算 机 原 理 C6 3 C11编 译 原 理 C7 4 C3 , C5操 作 系 统 C8 4 C3 , C6高 等 数 学 C9 7 无线 性 代 数 C10 5 C9普 通 物 理 C11 2 C9数 值 分 析 C12 3 C1 , C9 , C10(4).调试分析首先,第一次调试递归时,发现在输入合理的数据的情况下,如果数据过大,则不能运行,原因可能是因为在递归是我建立和很大的存储数据空间,导致递归无法正常运行.后经过改进,用到数据的位运算,发现可以成功地解决这个问题,并且所需要的存储空间可以大大地减小.分析如下:在每一层递归开始时,必须将该层递归可以选择的