学习课程计划的辅助编排系统[2023-09-16]

学习课程计划的辅助编排系统[2023-09-16]

第1题 学习课程计划的辅助编排系统
【问题描述】
以某计算机学院专业课及专业选修课为背景,实现课程计划的辅助编排。学生在一个学期可以同时选学多门课程,同一学期内的各门课程之间必须不能存在“先修课”与“后续课”的次序关系。通过辅助编排系统制定课程计划,使学生可以按照规划完成课程的学习任务。
构造课程的有向无环图,弧表示课程之间必须遵循的优先次序关系。通过扩展已有的拓扑排序算法,进行课程计划的辅助制订,将所列课程划分为子集(不同学期的课程计划),使任意两门有次序关系的课程分属于不同的子集,每个子集中包含的顶点对应着同一学期开设的课程,称这种扩展拓扑排序的划分结果为“拓扑子集的划分”,其结果可以辅助完成教学计划的编排和选课。
【基本要求】
(1)调研有关计算机专业应该开设的课程,以此建立构造课程的有向无环图,求解拓扑子集划分的参考解。
(2)可以对拓扑子集划分的结果进行调整。一般情况下,直接的课程编排结果可能过于“密集”(某学期内总课时过多,使学生的负担难以承受),有必要对所求的课程与学期的编排表进行人为的调整,即适度拉长修业的时间,得到既满足课程之间的次序关系,又不使学生负担过重(限制每学期的学分总数)。最终形成满意的学期与课程编排表,以供参考。
(3)建立有向无环图以及课程编排结果应当配以图形界面;子集划分结果的人工调整也应提供友好的界面支持。
【实现提示】
有些课程之间存在前驱和后继的约束关系,如果一个学生一学期只学一门课程的话,可以按拓扑有序的顺序安排学习计划,就会拖长修业的时间。实际上,一个学期中可以同时学习多门课程,只要这些课程之间不存在优先次序的约束关系即可。
“制订课程学习计划”是将有向无环图中的顶点集划分成若干互不相交的子集S1,S2,…,Sm,使得任意两个有弧相连的顶点分属不同的子集,并且,若〈j,k〉是一条从顶点j到顶点k的有向弧,jSp ,k Sq,则子集的序号必有p<q。每个子集Si (i=1,2,…,m)中的顶点为同一学期中开设的课程。
例如根据一个简单的优先关系模型,所得出的划分实例如下:

c1: 程序设计	c2: 离散数学	c3: 数据结构
c4: 汇编语言	c5: 语言设计与分析	c6: 计算机原理
c7: 编译原理	c8: 操作系统	c9: 高等数学
c10: 线性代数	c11: 普通物理	c12: 数值分析

“拓扑子集的划分”结果:

S1={ 程序设计,高等数学};
S2={ 离散数学,汇编语言,线性代数,普通物理};
S3={ 数据结构,计算机原理,数值分析};
S4={ 语言设计与分析,操作系统 }
S5={ 编译原理 }

拓扑子集划分的算法是拓扑排序算法的拓展,可以设置两个栈来处理子集的划分。一个栈用来存放当前入度为零的顶点,另一个栈则用来存放新产生的入度为零的顶点,作备用栈。交替使用这两个栈,当第一个栈退空时,启用备用栈作为当前栈,而那退空的栈就充当备用栈,继续存放新产生的入度为零的顶点。事实上,同一个栈里存放的顶点即属于同一个子集,也就是可在同一个学期开设的课程。
注意:若对每学期的课程加上总学时的限制,则要将某些课程向后调整,这会连带其后继课程安排的再变化。
最终结果以图形方式显示,显示出每个学期的可行开课方案。
【测试数据】
调研计算机学院开设的有关专业课和专业选修课情况,设计一个理想的课程清单,梳理各门课之间的优先关系,核定每学期可以承受的总学时数,以此为测试的原始数据(总门数不少于20门,每学期学时数上限定为280,1学分合16学时)。
【功能扩展】
直接求得的拓扑子集划分方案,每学期课时量总和往往大于学校要求的学期课时数,这就需要把某些课程调整到后续学期。某门课向后调整,有可能引出新的制约冲突,需要再次启动划分算法得出合情理的划分方案。
图形界面显示与人工调整的界面处理需要一定的技巧,如:可以由用户自由选择同一学期内的感兴趣的课程;灵活设置一些参数,如:每学期学时数的上限值,并根据其调整选课计划。
原始数据的输入可以通过适当的界面,输入有向弧的顶点对的办法来完成。实际的数据应能以文件的形式存储,以备再次启动本辅助编排系统时导入。

程序展现

源码联系UP主 -> https://space.bilibili.com/329101171

基于Qt实现学习课程计划的辅助编排系统(完善版)

程序主窗口
程序主窗口
编辑课程信息
编辑课程信息

以280学时绘制有向图
以280学时绘制有向图
以350学时绘制有向图
以350学时绘制有向图

【检查计划】
第一次检查
1.问题需求分析,系统的基本功能设计
2.数据结构设计
3.程序结构原型

第二次检查
使用自带的数据,演示程序的功能(代码,测试数据)

第三次检查
1.文档齐全
2.根据测试数据,运行程序;演示时适当地讲解,并且回答问题
3.扩展功能的演示

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值