数据结构java教学计划编排_数据结构课程设计_教学计划编制问题

本文详细介绍了如何设计一个教学计划编制程序,基于数据结构中的图的拓扑排序。程序需满足课程的先修关系,并尽可能均匀分配学生的学期学习负担。文章涵盖需求分析、概要设计和详细设计,包括存储结构设计、递归算法实现以及调试分析。
摘要由CSDN通过智能技术生成

41528d3028836879cd698677c3999917.gif数据结构课程设计_教学计划编制问题

(教学计划编制问题)目 录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).调试分析首先,第一次调试递归时,发现在输入合理的数据的情况下,如果数据过大,则不能运行,原因可能是因为在递归是我建立和很大的存储数据空间,导致递归无法正常运行.后经过改进,用到数据的位运算,发现可以成功地解决这个问题,并且所需要的存储空间可以大大地减小.分析如下:在每一层递归开始时,必须将该层递归可以选择的

问题描述: 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设 课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 基本要求: (1) 输入参数包括:学期总数,课程总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。 (2) 允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。 (3) 若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。 [测试数据] 学期总数:6;学分上限:10;该专业共开设12门课,课程号从C01到C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。课程的先修关系如下表。 课程编号 课程名称 先决条件 C01 程序设计基础 无 C02 离散数学 C1 C03 数据结构 C1,C2 C04 汇编语言 C1 C05 语言的设计和分析 C3,C4 C06 计算机原理 C11 C07 编译原理 C5,C3 C08 操作系统 C3,C6 C09 高等数学 无 C10 线性代数 C9 C11 普通物理 C9 C12 数值分析 C9,C10,C1 实现提示: 可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。应建立内部课程号与课程号之间的对应关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值