教学计划编制.doc

上传人:豆**** 文档编号:17610515 上传时间:2022-05-25 格式:DOC 页数:6 大小:168KB
返回 下载 相关 举报
教学计划编制.doc_第1页
第1页 / 共6页
教学计划编制.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《教学计划编制.doc》由会员分享,可在线阅读,更多相关《教学计划编制.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流教学计划编制.精品文档.(教学计划编制问题)目 录1.需求分析 .3-52.概要设计 .6-83.详细设计 . 8-134.调试分析 14-155.用户使用说明 . 156.测试结果 15-177.附录 .17题目:教学计划编制问题(1)需求分析 1.1 问题描述 假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。1

2、 . 2 基本要求(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程名、课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。(2)允许用户采用下列编排策略:使学生在各学期中的学习负担尽量均匀; (3)若根据给定的条件问题无解,则报告适当的信息;否则输出各学年每学期应开设的课程。(2) 概要设计存储结构设计 分析题目可知,这属于图的拓扑排序,所以要建立链表struct CourseHead /表头结点的结构体,保存课程信息 int flag; /标记该门课程是否已经编排int priornum; /给课程的直接先修课的个数 char Name30; /课程的名字 char Of

3、course4; /课程号 float Score; /学分 CourseLink *first; /以该门课程为先修的后修课程struct CourseLink /表头结点的链结点,即该门课程的后继课程int Index; /该课程在表头结点的下标, CourseLink *next; /下一门与它有公共先修课的课程 struct Topo /保存课程安排的最终结果int level; /标记是否平均分配,ArryInTopo *toporesualt; /一个一维数组保存课程的具体安排Topo *next; /下一种课程安排的情况struct ArryInTopo /用于保存课程编排的具体

4、信息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

5、 time);/递归函数,完成拓扑排序,void Check(int index); / 当选择courseindex时,相应的课 /程的priornum项要减一void CheckBack(int index); /当退选courseindex时,相应的课程 /的priornum项要加int ZERO(); /统计该层递归可以选择的课程 /并且完成可选课程的记录void Ifsuccessed(); /当课程安排成功时将课程安排记录保存 /并对课程安排做评价void Print(); /根据客户要求输出相应的课程安排void printf0(); /界面 void printf1(int )

6、; / 负责输出课程信息void printf2(); /输出课程的联系void printf1(FILE *); /负责将课程信息写入文件void printf2(FILE *); / 将课程的联系写入文件 程序主函数关键部分的执行流程图 软件介绍 判断 非 退出程序 子函数 调用 调用三次子函数(I) 用于正确输入 调用右边函数完 返回 学期总数,学分上限 成数据初始化 课程总数 调用 子函数 (II) 正确输入每一门课程的返回 课程名,课程号,学分 然后正确输入课程之间的关系 子函数 初始化各个需要 调用 子函数(IV)用到的全局变量 返 调用 在每一层递归数 然后调用递归函数 回 递归

7、函数 (III) 开始时返回该层 某种课程 递归开始 递归可选课程安排成功 返回 数目并临时保存 返 回 条件合理则递归调用自己 调 用 退选某门课 选择某门课 调用 子函数(VI) 返 调 返 当选择某门课时 回 回 回 将它的后继课程子函数(VIII) 子函数(VII) 的先修课个数-1 当某一种排序成 当退选某门课时 功时保存并评估 将它的后继课程 的先修课个数+1 子函数 根据客户要求输出课程编排 完成了课程的编排 测试用例设计学期总数: 6 一学期的学分上限: 10 该专业共开课程数目: 12(4).调试分析首先,第一次调试递归时,发现在输入合理的数据的情况下,如果数据过大,则不能运

8、行,原因可能是因为在递归是我建立和很大的存储数据空间,导致递归无法正常运行.后经过改进,用到数据的位运算,发现可以成功地解决这个问题,并且所需要的存储空间可以大大地减小.分析如下:在每一层递归开始时,必须将该层递归可以选择的课程选出来。求出可以选择的课程数目n然后要考虑在此层递归中,如何选择课程的问题:可以选一课,一直到最大的许可范围.这样便存在Cn1 + Cn 2 + +Cnn 种情况,即2n-1种情况。我开始是在每一层递归里面都建立的一个二位数组,保存每一种选课情况,0(不选),1(选),这样的话,存储空间会以2n 的速度增加,那样效果相当的不好。后来考了到,若过将上面的0 1串当成是一个

9、数据的二进制表示,那么每一种情况都与一个数是对应的,这样便可以运用数的位运算来达到遍历每一种情况。例如 : 假设某一层递归时,它的可选课程有三门:离散数学,数据结构,汇编语言,那么在该层递归里面就有23 (8-1)种选择(不可能一门课程都不选,那样的话就没有实际意义),若果按照初始思路则要建立一个二维数组:其中0 代表不选则,1 代表选择。但是结果观察,如果将它的选项的二进制看做是数的表示,则分别对应与1,2,3,4,5,6,7(23 -1).于是可以在递归里面去掉二维数组,用数的位运算来求出选课的各个情况。以下是其关键思路: (详细的源代码在“教学计划编制.cpp”里)For(i=1;imath.pow(2,n);+i) /考虑每一种情况 For(j=1;) /位运算,遍历每一位二进制位if(i&j)=j) /相应的操作,即选择该门课程 j=j1; /下一个二进制位这样的话既可以节约存储空间,又可以加快运算(位运算效率高).6.测试结果

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁