题目要求
大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
实现提示:
- 输入参数应包括:学期总数,一学期的学分上限
- 每门课:课程号(可以是固定占 3位的字母数字串)、学分、直接先修课的课程号表,是否基础课,是否专业核心课。至少提供30门课程信息,通过文件读入。
- 按下列策略进行课程计划编排:
1) 在各学期中的学习负担尽量均匀,即确定学分最大上限值。
2) 在没有超学分时尽可能优先安排基础课和核心专业课程。 - 若根据所给的所有课程,无法构造拓扑序列则报告适当的信息,建议修改开设的课程;
否则给出构造的拓扑序列作为一种教学安排计划,并将该教学计划输出到用户指定的文件中。
可设学期总数不超过12,课程总数不超过60。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。
要求分别输出8学期制和12学期制的一个计划。输出这两种学制下每一学期的课程选择(这些课程在本学期开课时其先修课程已经修完),且满足学分及基础、核心课优先开设的要求。
只展示了主函数和八学期和十二学期运行结果,用到了优先队列和拓扑排序,最后是数据,完整程序和报告(是用Latex写的,不是word,可以自己排一下格式)文件都是用的相对路径
完整的代码和报告都有!!!点个赞,github点个star
代码地址: https://github.com/meifannao/TopSort
国内访问Github速度慢,多刷新几次能进,另外访问GIthub是每个程序员的必修课,建议B站搜:“如何加速Github访问”,或者问问同学有没有方法访问!!
下面是运行结果
A11 高等数学(上) 5.5 0 1 0
A12 高等数学(下) 5.5 1 A11 1 0
A13 大学计算机基础 2.5 0 1 0
A14 大学物理(上) 3.5 0 1 0
A15 大学物理(下) 3.5 2 A12 A14 1 0
B11 概率论与数理统计 3.0 1 A11 1 0
B12 线性代数 2.5 1 A11 1 0
B13 C语言程序设计 4 1 A13 0 1
B14 电路与电子技术 3 1 A15 0 1
C11 数值计算方法 2 2 B11 B12 0 0
C12 离散数学 4 1 B12 0 1
C13 面向对象程序设计 3 1 B13 0 1
C14 算法分析与设计 3 1 B13 0 1
C15 数据结构 4 1 B13 0 1
C16 数字逻辑与数字系统设计 3 1 B14 0 1
D11 操作系统 3.5 4 C12 C13 C14 C15 0 1
D12 计算机组成原理 4 1 C16 0 1
E11 数据库原理 3.5 3 C11 D11 D12 0 1
E12 编译原理 3.5 3 C11 D11 D12 0 1
E13 微机原理及应用 4 3 C11 D11 D12 0 1
E14 计算机网络 3.5 4 C12 C13 C14 C15 0 1
E15 软件工程导论A 3 3 C11 D11 D12 0 1
F11 数据挖掘 2.5 5 E11 E12 E13 E14 E15 0 1
F12 人工智能导论 2 1 B11 0 1
F13 计算机图形学 2.5 1 C14 0 1
F14 数字图像处理 2 1 F13 0 1
F15 信号与系统 2 1 C16 0 1
F16 计算机创新能力训练 1 5 E11 E12 E13 E14 E15 0 0
F17 软件工具与环境(初级) 3 1 C13 0 1
F18 Unix/Linux操作系统分析 2 5 E11 E12 E13 E14 E15 0 1
F19 嵌入式系统 2.5 1 C16 0 1
F20 人机交互系统 2 5 E11 E12 E13 E14 E15 0 1
F21 信息安全技术 2 5 E11 E12 E13 E14 E15 0 1
F22 并行计算技术 2.5 5 E11 E12 E13 E14 E15 0 1
F23 计算方法 2 1 B12 0 1
F24 软件工具与环境(中级) 3 1 F17 0 1
F25 软件工具与环境(高级) 3 1 F24 0 1
G11 思想道德修养与法律基础 2 0 0 0
G12 中国近代史纲要 1 1 G11 0 0
G13 军事理论 1 1 G12 0 0
G14 毛泽东思想概论 3 1 G13 0 0
G15 英语1 4 0 0 0
G16 英语2 4 1 G15 0 0
G17 英语3 4 1 G16 0 0
G18 英语4 4 1 G17 0 0
G19 体育1 1 0 0 0
G20 体育2 1 1 G19 0 0
G21 体育3 1 1 G20 0 0
G22 体育4 1 1 G21 0 0
G23 工程训练B 2.5 0 0 0
8学期 最大学分上限为20的情况下课程安排
//学期负担尽可能均匀的情况
第1学期课程安排如下:
课程号:A11 课程名称:高等数学(上) 学分:5.5
课程号:A13 课程名称:大学计算机基础 学分:2.5
课程号:A14 课程名称:大学物理(上) 学分:3.5
课程号:G11 课程名称:思想道德修养与法律基础 学分:2.0
课程号:G15 课程名称:英语1 学分:4.0
学期总学分为: 17.5
第2学期课程安排如下:
课程号:B12 课程名称:线性代数 学分:2.5
课程号:B11 课程名称:概率论与数理统计 学分:3.0
课程号:A12 课程名称:高等数学(下) 学分:5.5
课程号:B13 课程名称:C语言程序设计 学分:4.0
课程号:G12 课程名称:中国近代史纲要 学分:1.0
课程号:G19 课程名称:体育1 学分:1.0
学期总学分为: 17.0
第3学期课程安排如下:
课程号:C12 课程名称:离散数学 学分:4.0
课程号:C13 课程名称:面向对象程序设计 学分:3.0
课程号:C14 课程名称:算法分析与设计 学分:3.0
课程号:A15 课程名称:大学物理(下) 学分:3.5
课程号:C15 课程名称:数据结构 学分:4.0
学期总学分为: 17.5
第4学期课程安排如下:
课程号:F17 课程名称:软件工具与环境(初级) 学分:3.0
课程号:B14 课程名称:电路与电子技术 学分:3.0
课程号:D11 课程名称:操作系统 学分:3.5
课程号:C11 课程名称:数值计算方法 学分:2.0
课程号:G16 课程名称:英语2 学分:4.0
课程号:G13 课程名称:军事理论 学分:1.0
课程号:G20 课程名称:体育2 学分:1.0
学期总学分为: 17.5
第5学期课程安排如下:
课程号:F24 课程名称:软件工具与环境(中级) 学分:3.0
课程号:C16 课程名称:数字逻辑与数字系统设计 学分:3.0
课程号:G17 课程名称:英语3 学分:4.0
课程号:G21 课程名称:体育3 学分:1.0
课程号:G23 课程名称:工程训练B 学分:2.5
课程号:G14 课程名称:毛泽东思想概论 学分:3.0
学期总学分为: 16.5
第6学期课程安排如下:
课程号:D12 课程名称:计算机组成原理 学分:4.0
课程号:F25 课程名称:软件工具与环境(高级) 学分:3.0
课程号:G18 课程名称:英语4 学分:4.0
课程号:G22 课程名称:体育4 学分:1.0
学期总学分为: 12.0
第7学期课程安排如下:
课程号:E15 课程名称:软件工程导论A 学分:3.0
课程号:E12 课程名称:编译原理 学分:3.5
课程号:E11 课程名称:数据库原理 学分:3.5
课程号:E13 课程名称:微机原理及应用 学分:4.0
课程号:E14 课程名称:计算机网络 学分:3.5
学期总学分为: 17.5
第8学期课程安排如下:
课程号:F23 课程名称:计算方法 学分:2.0
课程号:F20 课程名称:人机交互系统 学分:2.0
课程号:F12 课程名称:人工智能导论 学分:2.0
课程号:F13 课程名称:计算机图形学 学分:2.5
课程号:F14 课程名称:数字图像处理 学分:2.0
课程号:F19 课程名称:嵌入式系统 学分:2.5
课程号:F11 课程名称:数据挖掘 学分:2.5
课程号:F18 课程名称:Unix/Linux操作系统分析 学分:2.0
学期总学分为: 17.5
//不超过学分限制的情况下尽可能优先安排基础课和专业课
第1学期课程安排如下:
课程号:A11 课程名称:高等数学(上) 学分:5.5
课程号:A13 课程名称:大学计算机基础 学分:2.5
课程号:A14 课程名称:大学物理(上) 学分:3.5
课程号:G19 课程名称:体育1 学分:1.0
课程号:G11 课程名称:思想道德修养与法律基础 学分:2.0
课程号:G15 课程名称:英语1 学分:4.0
学期总学分为: 18.5
第2学期课程安排如下:
课程号:B12 课程名称:线性代数 学分:2.5
课程号:B11 课程名称:概率论与数理统计 学分:3.0
课程号:A12 课程名称:高等数学(下) 学分:5.5
课程号:B13 课程名称:C语言程序设计 学分:4.0
课程号:G20 课程名称:体育2 学分:1.0
课程号:G12 课程名称:中国近代史纲要 学分:1.0
课程号:G23 课程名称:工程训练B 学分:2.5
学期总学分为: 19.5
第3学期课程安排如下:
课程号:C12 课程名称:离散数学 学分:4.0
课程号:C14 课程名称:算法分析与设计 学分:3.0
课程号:C13 课程名称:面向对象程序设计 学分:3.0
课程号:C15 课程名称:数据结构 学分:4.0
课程号:A15 课程名称:大学物理(下) 学分:3.5
课程号:F23 课程名称:计算方法 学分:2.0
学期总学分为: 19.5
第4学期课程安排如下:
课程号:E14 课程名称:计算机网络 学分:3.5
课程号:D11 课程名称:操作系统 学分:3.5
课程号:F17 课程名称:软件工具与环境(初级) 学分:3.0
课程号:F13 课程名称:计算机图形学 学分:2.5
课程号:B14 课程名称:电路与电子技术 学分:3.0
课程号:F12 课程名称:人工智能导论 学分:2.0
课程号:C11 课程名称:数值计算方法 学分:2.0
学期总学分为: 19.5
第5学期课程安排如下:
课程号:F24 课程名称:软件工具与环境(中级) 学分:3.0
课程号:C16 课程名称:数字逻辑与数字系统设计 学分:3.0
课程号:F14 课程名称:数字图像处理 学分:2.0
课程号:G21 课程名称:体育3 学分:1.0
课程号:G13 课程名称:军事理论 学分:1.0
课程号:G16 课程名称:英语2 学分:4.0
学期总学分为: 14.0
第6学期课程安排如下:
课程号:D12 课程名称:计算机组成原理 学分:4.0
课程号:F25 课程名称:软件工具与环境(高级) 学分:3.0
课程号:F15 课程名称:信号与系统 学分:2.0
课程号:F19 课程名称:嵌入式系统 学分:2.5
课程号:G17 课程名称:英语3 学分:4.0
课程号:G14 课程名称:毛泽东思想概论 学分:3.0
课程号:G22 课程名称:体育4 学分:1.0
学期总学分为: 19.5
第7学期课程安排如下:
课程号:E15 课程名称:软件工程导论A 学分:3.0
课程号:E11 课程名称:数据库原理 学分:3.5
课程号:E12 课程名称:编译原理 学分:3.5
课程号:E13 课程名称:微机原理及应用 学分:4.0
课程号:G18 课程名称:英语4 学分:4.0
学期总学分为: 18.0
第8学期课程安排如下:
课程号:F22 课程名称:并行计算技术 学分:2.5
课程号:F18 课程名称:Unix/Linux操作系统分析 学分:2.0
课程号:F11 课程名称:数据挖掘 学分:2.5
课程号:F21 课程名称:信息安全技术 学分:2.0
课程号:F20 课程名称:人机交互系统 学分:2.0
课程号:F16 课程名称:计算机创新能力训练 学分:1.0
学期总学分为: 12.0
12学期 最大学分上限为20的情况
//学期负担尽可能均匀
第1学期课程安排如下:
课程号:A11 课程名称:高等数学(上) 学分:5.5
课程号:A13 课程名称:大学计算机基础 学分:2.5
课程号:A14 课程名称:大学物理(上) 学分:3.5
学期总学分为: 11.5
第2学期课程安排如下:
课程号:B12 课程名称:线性代数 学分:2.5
课程号:B11 课程名称:概率论与数理统计 学分:3.0
课程号:A12 课程名称:高等数学(下) 学分:5.5
课程号:G19 课程名称:体育1 学分:1.0
学期总学分为: 12.0
第3学期课程安排如下:
课程号:C12 课程名称:离散数学 学分:4.0
课程号:B13 课程名称:C语言程序设计 学分:4.0
课程号:A15 课程名称:大学物理(下) 学分:3.5
学期总学分为: 11.5
第4学期课程安排如下:
课程号:C13 课程名称:面向对象程序设计 学分:3.0
课程号:C14 课程名称:算法分析与设计 学分:3.0
课程号:B14 课程名称:电路与电子技术 学分:3.0
课程号:C11 课程名称:数值计算方法 学分:2.0
课程号:G20 课程名称:体育2 学分:1.0
学期总学分为: 12.0
第5学期课程安排如下:
课程号:F17 课程名称:软件工具与环境(初级) 学分:3.0
课程号:C15 课程名称:数据结构 学分:4.0
课程号:C16 课程名称:数字逻辑与数字系统设计 学分:3.0
课程号:G11 课程名称:思想道德修养与法律基础 学分:2.0
学期总学分为: 12.0
第6学期课程安排如下:
课程号:F24 课程名称:软件工具与环境(中级) 学分:3.0
课程号:D11 课程名称:操作系统 学分:3.5
课程号:D12 课程名称:计算机组成原理 学分:4.0
课程号:G12 课程名称:中国近代史纲要 学分:1.0
学期总学分为: 11.5
第7学期课程安排如下:
课程号:F25 课程名称:软件工具与环境(高级) 学分:3.0
课程号:E15 课程名称:软件工程导论A 学分:3.0
课程号:E12 课程名称:编译原理 学分:3.5
课程号:G13 课程名称:军事理论 学分:1.0
课程号:G21 课程名称:体育3 学分:1.0
学期总学分为: 11.5
第8学期课程安排如下:
课程号:E11 课程名称:数据库原理 学分:3.5
课程号:E13 课程名称:微机原理及应用 学分:4.0
课程号:E14 课程名称:计算机网络 学分:3.5
课程号:G22 课程名称:体育4 学分:1.0
学期总学分为: 12.0
第9学期课程安排如下:
课程号:F23 课程名称:计算方法 学分:2.0
课程号:F20 课程名称:人机交互系统 学分:2.0
课程号:F12 课程名称:人工智能导论 学分:2.0
课程号:F13 课程名称:计算机图形学 学分:2.5
课程号:F14 课程名称:数字图像处理 学分:2.0
课程号:F16 课程名称:计算机创新能力训练 学分:1.0
学期总学分为: 11.5
第10学期课程安排如下:
课程号:F19 课程名称:嵌入式系统 学分:2.5
课程号:F11 课程名称:数据挖掘 学分:2.5
课程号:F18 课程名称:Unix/Linux操作系统分析 学分:2.0
课程号:F22 课程名称:并行计算技术 学分:2.5
课程号:F15 课程名称:信号与系统 学分:2.0
学期总学分为: 11.5
第11学期课程安排如下:
课程号:F21 课程名称:信息安全技术 学分:2.0
课程号:G15 课程名称:英语1 学分:4.0
课程号:G23 课程名称:工程训练B 学分:2.5
课程号:G14 课程名称:毛泽东思想概论 学分:3.0
学期总学分为: 11.5
第12学期课程安排如下:
课程号:G16 课程名称:英语2 学分:4.0
课程号:G17 课程名称:英语3 学分:4.0
课程号:G18 课程名称:英语4 学分:4.0
学期总学分为: 12.0
//不超过学分上限的情况下,尽可能优先安排基础课和专业课
第1学期课程安排如下:
课程号:A11 课程名称:高等数学(上) 学分:5.5
课程号:A13 课程名称:大学计算机基础 学分:2.5
课程号:A14 课程名称:大学物理(上) 学分:3.5
课程号:G11 课程名称:思想道德修养与法律基础 学分:2.0
课程号:G15 课程名称:英语1 学分:4.0
课程号:G19 课程名称:体育1 学分:1.0
学期总学分为: 18.5
第2学期课程安排如下:
课程号:B12 课程名称:线性代数 学分:2.5
课程号:B11 课程名称:概率论与数理统计 学分:3.0
课程号:A12 课程名称:高等数学(下) 学分:5.5
课程号:B13 课程名称:C语言程序设计 学分:4.0
课程号:G12 课程名称:中国近代史纲要 学分:1.0
课程号:G16 课程名称:英语2 学分:4.0
学期总学分为: 20.0
第3学期课程安排如下:
课程号:C12 课程名称:离散数学 学分:4.0
课程号:C13 课程名称:面向对象程序设计 学分:3.0
课程号:C14 课程名称:算法分析与设计 学分:3.0
课程号:A15 课程名称:大学物理(下) 学分:3.5
课程号:C15 课程名称:数据结构 学分:4.0
课程号:C11 课程名称:数值计算方法 学分:2.0
学期总学分为: 19.5
第4学期课程安排如下:
课程号:F17 课程名称:软件工具与环境(初级) 学分:3.0
课程号:B14 课程名称:电路与电子技术 学分:3.0
课程号:D11 课程名称:操作系统 学分:3.5
课程号:G13 课程名称:军事理论 学分:1.0
课程号:G17 课程名称:英语3 学分:4.0
课程号:G20 课程名称:体育2 学分:1.0
课程号:G23 课程名称:工程训练B 学分:2.5
学期总学分为: 18.0
第5学期课程安排如下:
课程号:F24 课程名称:软件工具与环境(中级) 学分:3.0
课程号:C16 课程名称:数字逻辑与数字系统设计 学分:3.0
课程号:G21 课程名称:体育3 学分:1.0
课程号:G18 课程名称:英语4 学分:4.0
课程号:G14 课程名称:毛泽东思想概论 学分:3.0
学期总学分为: 14.0
第6学期课程安排如下:
课程号:D12 课程名称:计算机组成原理 学分:4.0
课程号:F25 课程名称:软件工具与环境(高级) 学分:3.0
课程号:G22 课程名称:体育4 学分:1.0
学期总学分为: 8.0
第7学期课程安排如下:
课程号:E15 课程名称:软件工程导论A 学分:3.0
课程号:E12 课程名称:编译原理 学分:3.5
课程号:E11 课程名称:数据库原理 学分:3.5
课程号:E13 课程名称:微机原理及应用 学分:4.0
课程号:E14 课程名称:计算机网络 学分:3.5
学期总学分为: 17.5
第8学期课程安排如下:
课程号:F23 课程名称:计算方法 学分:2.0
课程号:F20 课程名称:人机交互系统 学分:2.0
课程号:F12 课程名称:人工智能导论 学分:2.0
课程号:F13 课程名称:计算机图形学 学分:2.5
课程号:F14 课程名称:数字图像处理 学分:2.0
课程号:F19 课程名称:嵌入式系统 学分:2.5
课程号:F11 课程名称:数据挖掘 学分:2.5
课程号:F18 课程名称:Unix/Linux操作系统分析 学分:2.0
课程号:F22 课程名称:并行计算技术 学分:2.5
学期总学分为: 20.0
第9学期课程安排如下:
课程号:F15 课程名称:信号与系统 学分:2.0
课程号:F21 课程名称:信息安全技术 学分:2.0
课程号:F16 课程名称:计算机创新能力训练 学分:1.0
学期总学分为: 5.0
第10学期课程安排如下:
学期总学分为: 0.0
第11学期课程安排如下:
学期总学分为: 0.0
第12学期课程安排如下:
学期总学分为: 0.0