Java自动排课

1.2 系统开发环境
本系统的开发工具主要是在windows 系统下采用MyEclipse 和Mysql。
MyEclipse 企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,结合它我们可以在JavaEE和数据库的开发、发布及应用程序服务器的整合方面能极大地提高工作效率。MyEclipse是功能丰富的JavaEE集成开发环境,它包含了完备的编码、调试、测试和发布的功能,可以完整的支持JSP、HTML、Struts、CSS、Javascript、Spring、Hibernate、SQL。
MyEclipse 是一个十分优秀的 Eclipse 插件集合,尤其是在用于开发Java, J2EE和数据库的开发、发布及应用程序服务器方面。MyEclipse的功能特别强大,支持面也十分广泛,尤其是在针对各种开源产品的支持表现十分优越。目前MyEclipse支持AJAX、 JSP、Java Servlet、Spring、JSF、 Struts、Hibernate、EJB3、JDBC数据库的链接工具等多项功能。可以说目前所有主流开源产品的专属Eclipse开发工具几乎都被MyEclipse包括了。

项目运行录频:链接: https://pan.baidu.com/s/1kqA75xAT3qsF7oBFxnVzdw 提取码: 82xj
截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自动排课功能:

首先需要选择需要排课的专业和班级,点击提交就会自动生成一个学期的课程表,排好课之后可以手动更改上课的老师和教室类型。

下图是排课界面:
在这里插入图片描述

在这里插入图片描述

2 系统分析
2.1 需求分析
对于任何开发系统而言,系统的需求分析是第一步,更是至关重要的一步。任何开发系统都需要通过需求分析来把整个系统的功能与性能的概念描述为详细的全系统需求规格说明,为以后的开发工作打下扎实的基础。当然,具体的说系统需求分析就是在描述系统的需求,目的在于将提出要求的用户与接受系统开发的人员之间达成一种共识,让彼此能够相互理解与沟通[1]。
2.1.1 研究目标
(1)掌握学校所有的课程和教师信息,包括教室,班级,上课老师及上课时间。
(2)提供查询功能,可以查看某个班级所有课程信息。
(3)可以对课程信息和教师信息进行查询和删除。
(4)可以对课程进行手动排课和自动排课功能。
2.1.2 具体模块功能分析
根据上述研究目标,本排课系统的主要功能大致包括:通过计算机可以进行排课管理,实现自动化排课,即无纸化排课,并且能了解、分析学校课程和教师资源的现状,能够充分的利用学校教室、教师等有限资源。考虑到在大学内课程变化较多,灵活性也较大,所以在功能设计上,我们将采取自动与手动相结合进行排课,以达到对课程的安排的相对合理性。
智能排课系统的整体结构:整个系统分为C/S结构的教师与教务管理员登录功能、排课功能、课程管理功能、教室管理功能、教师管理功能、B/S结构的学生查课表功能与选课功能。
登录模块:在C/S结构中,登入系统有对角色的分类与合法性的验证,并且根据不同的类型角色分配不同的权限;在B/S结构中,登入系统中只需要验证用户的合法性即可。
排课模块:包括手动排课、自动排课、查看全部课程信息、调整课程。
其他模块:主要是管理学生本人的信息、教师本人的信息、上课教室的信息、教学课程的信息、各个班级的信息等。大体是对这些信息进行增加、查找、修改、删除等操作。
2.1.3 设计系统时考虑以下各种问题
(1)要求做到每个教师、班级、实验室等各种资源不冲突,这是实验室实验教学排课系统最基本的原则。
(2)学生上课时间分布的均匀性。时间的均匀性是指在一个星期内同一门课程在一周上课天数安排不易过多。
(3)学生课程节数分布的均匀性。这是为了保证一个专业的课程安排在一周内不总是上一天内的第一、二节或者总是上最后一、二节。
(4)可以将课表导出到word 中,并进行打印操作。
(5)可以手工调整课程的时间。

2.2 系统流程分析
智能化的校园排课系统可以用于各大高校完美的解决排课的难题。在高校教务管理问题中常常会有如下几个个方面的目标:掌握学校所有的课程和教师信息,包括教室,班级,上课老师及上课时间;提供查询功能,可以查看某个班级所有课程信息;可以对课程信息和教师信息进行查询和删除;可以对课程进行手动排课和自动排课功能。在本系统将很好的解决这些问题。
本系统分为俩大结构部分:B/S结构的学生操作部分,C/S结构的教职工与管理员的操作部分。
具体B/S结构部分(见图2.1)设计目标如下:
(1)系统界面友好,操作简单,能轻松上手;
(2)实现对院校的课表按条件查询;
(3)实现学生的选修课的报名;
(4)实现按条件导出、打印课表。

具体C/S结构部分(见图2.2)设计目标如下:
(1) 系统界面友好,操作简单,能轻松上手;
(2) 分角色的登录系统;
(3) 教职工查看课表、管理个人信息、查看教师信息;
(4) 管理员对班级、教师、教室、课程的信息管理;
(5) 管理员进行自动或手动排课;
(6) 管理员开放选修课系统。

3 排课算法
3.1 目前常用算法
现今,用来解决排课问题的算法常用的方法有:着色算法,即是通过研究时间资源库的形成策略,来分析基于时间资源的排课算法;基于分层分治、贪心算法的排课系统的设计与实现;基于图论方法的自动优化排课模型;基于资源受限的非线性约束多目标排课模型及算法;整数规划解决排课问题;基于遗传禁忌算法结合解决排课问题等。虽然这些方法在一定程度上提高了排课效率,但是在各大高校中,课程量大,教师、教室资源紧张,排课约束条件多、条件经常多变等问题是普遍存在,排课算法的应用瞬间便受到很大限制,完整性也受到质疑[2]。
3.2 排课问题的描述
3.2.1 排课问题的约束条件
排课问题中即有一定的硬约束条件,也存在一些软的约束条件。硬的约束条件当然都些是要求系统必须满足的条件,而一般的硬约束条件是协调处理好课程、学生、教师、教室、时间之间的多维冲突;软约束条件则是在满足硬约束条件的大前提后要考虑到的系统使用的实际环境的约束条件,多数是由多方面的具体学校实际情况而孕育出来的约束条件。软约束条件也不是要求系统必须满足的,但尽可能多的满足这些条件会使系统排出较优解的课表。这样才可以使排出的课表能够更加合理,更为人性化需求[2]。
常用的硬约束条件有:
(1) 所有的校方开出的课程都必须被安排;
(2) 除了可以合班上的课程以外,在同一时间内,同一个教室只能被一个班级使用;
(3) 除了选修课程以外,在同一时间内,一个班级只能安排一门课程;
(4) 在同一时间内,一个教师只能被安排在一个教室上一门课程;
(5) 同一个教师所上的所有不同的课程不能安排在同一时间上;
(6) 两个班的不同课程不能在同一个时间被安排在同一个教室;
(7) 教室的类型必须满足课程的要求;
(8) 教室的最大容纳人数必须大于安排在该教室上课的学生人数;
(9) 不同课程对时间段的不同要求,如体育课只能安排在白天上,选修课程只能安排在晚上上等[2]。
常用的软约束条件有:
(1) 同一班级的同一门课程的上课时间尽量间隔均匀些。例如,某班级的高等数学课在一周内需要安排俩次授课。两次授课时间的安排时间就需要尽量间隔一天或者一天以上;
(2) 每个班级在一周中的课程分布要均匀;
(3) 要尽量在较好的上课时间段安排课程;
(4) 对特定的课程、班级、教室、教师的单双周上课时间点尽量匹配,合理安排、节约教学资源[2];
3.2.2 排课问题的数学表示
假设C 表示课程、 S表示班级、N表示时间、 R表示教室,T表示教师, 排课问题的直接目标便是找出满足约束条件的(C,S,N,R,T)最佳组合。而这五种元素之间还存在着一定的对应关系[2]:
①C和S之间的n:m对应关系,即每门课程有其特定可上班级,每个班级有其特定要上的课程;
②C和T之间的n:m对应关系,即每门课程有一定的任课教师,每个任课老师有一定的可上课程;
③(N,R)与(S,C,T)之间的1:1对应关系,即在某一时间段内,某一教室只能有某一班级上某一门课程。故可以看出排课问题的核心就在于给特定的一组(S,C,T)分配一个能满足所需上课条件的时空片段(N,R)。即找到合适的(N,R)与(S,C,T)之间的1:1对应关系[2]。
3.2.3 排课问题的优先级问题介绍
在排课时会有很多等待分配时空片段的(S,C,T),按怎样的分配次序安排它们,不仅仅关系到整个算法的性能、课程安排的合理性,更关系到最终得到的解的可行性。因此分配次序选择的也是在每个算法中要认真处理的问题。在本系统中本打算使用的算法是对每一组 (S,C,T)设定优先级的,然后,根据优先级的高低次序来分配时空片段,但人力、物力有限,换用的是将所有的课程优先级视为同等级的算法。但有必要提下,设定一个合理的(S,C,T) 优先级要考虑的因素有[2]:
①在(S,C,T)中课程C的类别,对于不同类别的课程要给它们设定相应的优先级,本系统原打算选用的原算法是针对课程类别,将优先级设定如下:专业基础课、公共基础课、专业限选课、专业选修课、公选课优先级别,依次降低, 其中是将专业基础课级别最高,公选课级别最低。
②在一周内,(S,C,T)中的课程C要授课的次数。即某一门课程的学时越多的话,可以将优先级设计的高些;
③(S,C,T)中某一班级S所需要上的课程总数的多少。即某个班级在一周内要上的课程总数越多的话,可以考虑将优先级设计的越高;
④(S,C,T)中一个班级S的总体人数的多少[2]。
最后,根据不同重要性的各个因素,为每个因素分配一个权重系数,如p[0]、p[1]、p[2]、p[3],再求出四种因素的带权累加和的值,即可以确定一个(S,C,T)的优先级,每次排课时只需按照(S,C,T)的优先级的降序次序来分配时空片段即可得到可行解[2]。
3.3 系统使用算法
本系统的排课算法是先将数据库中已有的所有班级取出来,再分别为每个有的班级分别添加上每一周内的20个时间片段(时间片段的意思是一个班级在一周内所能上课的时间点,是将一天分4大节课,一周共20节大课);后面,是为每个班级随机加入其要上的课程,加入完成以后,将其按照从大到小的顺序排序(也可以从小到大顺序排序);接着是循环这20个时间片段,分别取出该时间片段内有课的所有班级;同时将数据库中已有未使用的教室取出来,并且按从大到小排序(也可以从小到大排序);算法将教室可容纳人数与班级人数进行对比,一旦发现有教室的人数大于等于某个班级人数,便将该教室名称与班级名称的记录;随后算法就开始判断该班级的相关的授课教师是否存在,如果没有就直接将这次的排序教室与班级放入失败表中,如果授课教师存在,便接着看该授课老师是否在该时间片段已经有课了,如果没有课就将给授课老师分配给该班级,并将这排课成功的排课放入在成功的表内,且教室计数自加一表示该时间片段有课;如果该授课老师在该时间片段有课,则进行判断下一个授课老师,如果所有授课老师都有课,那么就认为该班级在该时间点是没有老师可以教授该课程,该班级在该时间片段的排课失败,填入失败排课表中。如果教室的可容纳人数小于该班级人数,就认为该班级在该时间片段内不能找到符合条件的教室上课,并将其放入失败排课表中。

猜你喜欢

转载自blog.csdn.net/broccoli2/article/details/91355046