package com.ziyu.admin.modules.system.service.impl;
import com.ziyu.admin.modules.system.dto.*;
import com.ziyu.admin.modules.system.service.ISubjectChoose;
import com.ziyu.admin.modules.system.service.IWeightCalc;
import lombok.Data;
import java.util.*;
/**
* \* User: ziyu
* \* Date: 2019/8/1
* \* Time: 13:09
* \* Description:
* \
*/
@Data
public class ClassScheduling {
private Map<Integer, GradeInfoDto> gradeInfoMap;//基础信息 //输入信息
private List<SchedulePositionInfo> udfFixedSubjectList; //外部初始化
private Map<Integer, Map<Integer, Map<Integer, Map<Integer, SchedulePositionInfo>>>> scheduleInfos;//课表信息,年级:班级:周天:课节:课程 //最终输出
private Map<String, Map<Integer, Map<Integer, SchedulePositionInfo>>> teacherSchedule;//老师课程安排 //中间数据
private Map<Integer, Map<Integer, List<ScheduleClassInfo>>> scheduleClassInfo;//班级课程信息
private Map<Integer, Map<Integer, Map<Integer, Map<Integer, List<SchedulingProcessInfo>>>>> scheduledInfo;//已经排课位置信息 //中间数据
private Map<Integer, Integer> scheduledLesson;//已经安排的位置
private Map<Integer, Map<Integer, Integer>> classFreeSpace;//班级剩余课节数
private List<String> teacherList;//老师列表
private Integer gradeCount = 0;//多少个年级
private Integer classCount = 0;//多少个班级
private Integer maxDayPerWeek = 0;//做大周天数
private Integer maxLessonPerDay = 0;//最大节数
private Integer maxWeight = 0;
private List<SchedulePositionInfo> onlyOneChoice;
public ISubjectChoose iSubjectChoose;//科目自定义规则筛选
public IWeightCalc iWeightCalc;//科目权重外部因素计算
public Map<Integer, GradeInfoDto> getGradeInfoMap() {
return gradeInfoMap;
}
public void setGradeInfoMap(Map<Integer, GradeInfoDto> gradeInfoMap) {
this.gradeInfoMap = gradeInfoMap;
}
public List<SchedulePositionInfo> getUdfFixedSubjectList() {
return udfFixedSubjectList;
}
public void setUdfFixedSubjectList(List<SchedulePositionInfo> udfFixedSubjectList) {
this.udfFixedSubjectList = udfFixedSubjectList;
}
public Map<Integer, Map<Integer, Map<Integer, Map<Integer, SchedulePositionInfo>>>> getScheduleInfos() {
return scheduleInfos;
}
public void setScheduleInfos(Map<Integer, Map<Integer, Map<Integer, Map<Integer, SchedulePositionInfo>>>> scheduleInfos) {
this.scheduleInfos = scheduleInfos;
}
public Map<String, Map<Integer, Map<Integer, SchedulePositionInfo>>> getTeacherSchedule() {
return teacherSchedule;
}
public void setTeacherSchedule(Map<String, Map<Integer, Map<Integer, SchedulePositionInfo>>> teacherSchedule) {
this.teacherSchedule = teacherSchedule;
}
public Map<Integer, Map<Integer, List<ScheduleClassInfo>>> getScheduleClassInfo() {
return scheduleClassInfo;
}
public void setScheduleClassInfo(Map<Integer, Map<Integer, List<ScheduleClassInfo>>> scheduleClassInfo) {
this.scheduleClassInfo = scheduleClassInfo;
}
public Map<Integer, Map<Integer, Map<Integer, Map<Integer, List<SchedulingProcessInfo>>>>> getScheduledInfo() {
return scheduledInfo;
}
public void setScheduledInfo(Map<Integer, Map<Integer, Map<Integer, Map<Integer, List<SchedulingProcessInfo>>>>> scheduledInfo) {
this.scheduledInfo = scheduledInfo;
}
public Map<Integer, Integer> getScheduledLesson() {
return scheduledLesson;
}
public void setScheduledLesson(Map<Integer, Integer> scheduledLesson) {
this.scheduledLesson = scheduledLesson;
}
public Map<Integer, Map<Integer, Integer>> getClassFreeSpace() {
return classFreeSpace;
}
public void setClassFreeSpace(Map<Integer, Map<Integer, Integer>> classFreeSpace) {
this.classFreeSpace = classFreeSpace;
}
public List<String> getTeacherList() {
return teacherList;
}
public void setTeacherList(List<String> teacherList) {
this.teacherList = teacherList;
}
public Integer getGradeCount() {
return gradeCount;
}
public void setGradeCount(Integer gradeCount) {
this.gradeCount = gradeCount;
}
public Integer getClassCount() {
return classCount;
}
public void setClassCount(Integer classCount) {
this.classCount = classCount;
}
public Integer getMaxDayPerWeek() {
return maxDayPerWeek;
}
public void setMaxDayPerWeek(Integer maxDayPerWeek) {
this.maxDayPerWeek = maxDayPerWeek;
}
public Integer getMaxLessonPerDay() {
return maxLessonPerDay;
}
public void setMaxLessonPerDay(Integer maxLessonPerDay) {
this.maxLessonPerDay = maxLessonPerDay;
}
public Integer getMaxWeight() {
return maxWeight;
}
public void setMaxWeight(Integer maxWeight) {
this.maxWeight = maxWeight;
}
public List<SchedulePositionInfo> getOnlyOneChoice() {
return onlyOneChoice;
}
public void setOnlyOneChoice(List<SchedulePositionInfo> onlyOneChoice) {
this.onlyOneChoice = onlyOneChoice;
}
public ISubjectChoose getiSubjectChoose() {
return iSubjectChoose;
}
public void setiSubjectChoose(ISubjectChoose iSubjectChoose) {
this.iSubjectChoose = iSubjectChoose;
}
public IWeightCalc getiWeightCalc() {
return iWeightCalc;
}
public void setiWeightCalc(IWeightCalc iWeightCalc) {
this.iWeightCalc = iWeightCalc;
}
//开始制作课程表
public boolean makeLessonTable() {
//检查gradeInfo
if (!this.checkInputGradeInfo(this.gradeInfoMap)) {
return false;
}
//检查课程是否可以排满
if (!this.processNullPos(this.gradeInfoMap)) {
return false;
}
//c初始化老师课程安排信息
if (!initTeacherList(this.gradeInfoMap)) {
return false;
}
//初始化老师任课信息
if (!this.initTeacherLesson()) {
return false;
}
//初始化课表信息
if (!this.initLessonTableInfo(this.gradeInfoMap)) {
return false;
}
//初始化中间排课过程信息
if (!this.initScheduldInfo(this.gradeInfoMap)) {
return false;
}
this.scheduledLesson = new HashMap<Integer, Integer>();
this.onlyOneChoice = new ArrayList<SchedulePositionInfo>();
//优先安排外部设定唯一的科目
this.firstSetUdfOnlyOneSubject(this.udfFixedSubjectList);
this.firstSetOnlyChoice();
//遍历所有课节
for (Map.Entry<Integer, GradeInfoDto> item : this.gradeInfoMap.entrySet()) {
for (Map.Entry<Integer, ClassInfo> itemItem : item.getValue().getClassInfos().entrySet()) {
for (Integer weekDay = 0; weekDay < item.getValue().getDayPerWeek(); weekDay++) {
for (Integer lessonNo = 0; lessonNo < item.getValue().getLessonPerDay(); lessonNo++) {
//排课
/*
1、如果已经安排则跳过
2、筛选可排科目
3、处理科目权重
4、安排课程
5、预处理后续课程信息
*/
if (this.scheduledLesson.get(this.generateKey(item.getKey(), itemItem.getKey(), weekDay, lessonNo)) != null) {
continue;//已经排课
}
//获取可选科目列表
List<SchedulingProcessInfo> lessonValidSubjects = this.fetchValidSubject(item.getKey(), itemItem.getKey(), weekDay, lessonNo);
i
没有合适的资源?快使用搜索试试~ 我知道了~
基于java的简单的教师-课程智能排课系统
共828个文件
css:218个
png:169个
java:108个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 5 下载量 98 浏览量
2022-03-26
15:51:38
上传
评论 3
收藏 69.82MB ZIP 举报
温馨提示
基于java的简单的教师-课程智能排课系统 项目是基于 Spring Boot 2.0 + Mybatis 的轻量级后台管理系统,适用于中小型项目的管理后台以及小学,初中和高中课程智能排课管理,支持按钮级别的权限控制,系统具有最基本的用户管理、角色管理、资源管理、组织机构管理、系统日志、代码生成器等通用性功能。 学校排课问题本质上是时间表问题的一类典型应用实例,是为了解决课程安排对时间和空间资源的有效利用并避免相互冲突。在排课过程中,需要考虑课程教学效果、满足教师特殊要求等多项优化指标,将各门课程安排到相应的时间和教室(教室安排功能尚未实现)。 技术选型 后端技术:Spring Boot 应用框架、MyBatis 通用 Mapper4、MyBatis 分页插件、Maven 项目构建管理、MyBatis Generator 代码生成Thymeleaf 模板引擎、Apache Shiro 安全框架、Logback 日志组件、Druid 数据库连接池、swagger2 在线文档生成 前端技术:jQuery、基于Bootstrap的前端框架、、、、、 JDK1.8+MySQL5.6+
资源推荐
资源详情
资源评论
收起资源包目录
基于java的简单的教师-课程智能排课系统 (828个子文件)
ClassScheduling.class 45KB
WetechAdminApplicationTests.class 22KB
LessonScheduleService.class 12KB
UserController.class 11KB
ShiroConfig.class 9KB
GradeInfoDto.class 8KB
GlobalExceptionHandler.class 7KB
OrganizationServiceImpl.class 7KB
HomeController.class 6KB
GradeInfo.class 6KB
UserServiceImpl.class 6KB
SystemLogAspect.class 6KB
RoleServiceImpl.class 5KB
CurriculumInfo.class 5KB
ResourceServiceImpl.class 5KB
UserVO.class 5KB
BaseCrudController.class 5KB
BaseService.class 5KB
ScheduleClassInfo.class 5KB
SchedulePositionInfo.class 4KB
SubjectInfoDto.class 4KB
Result.class 4KB
ResourceDto.class 4KB
SubjectInfo.class 4KB
DateUtil.class 4KB
WebUtil.class 4KB
Resource.class 4KB
OrganizationController.class 4KB
UserRealm.class 4KB
CurriculumInfoServiceImpl.class 4KB
SchedulingProcessInfo.class 4KB
User.class 4KB
WebConfig.class 4KB
SubjectInfoController.class 4KB
GradeInfoController.class 4KB
RoleDto.class 4KB
ResourceController.class 4KB
ZipUtils.class 3KB
RoleController.class 3KB
SpringCacheManagerWrapper$SpringCacheWrapper.class 3KB
Log.class 3KB
JsonUtil.class 3KB
PageQuery.class 3KB
ScheduleInfo.class 3KB
GroupController.class 3KB
CurriculumInfoController.class 3KB
Organization.class 3KB
ResultCodeEnum.class 2KB
ClassInfo.class 2KB
Role.class 2KB
PasswordHelper.class 2KB
Group.class 2KB
GroupType.class 2KB
Swagger2Config.class 2KB
SpringUtils.class 2KB
RetryLimitHashedCredentialsMatcher.class 2KB
EhCacheConfig.class 2KB
TreeDto.class 2KB
SubjectInfoServiceImpl.class 2KB
LogController.class 2KB
PropertiesUtil.class 2KB
ResourceType.class 1KB
UserService.class 1KB
SpringCacheManagerWrapper.class 1KB
GradeInfoServiceImpl.class 1KB
GlobalAnnotationDrivenListener.class 1KB
UserMapper.class 1KB
PageResultSet.class 1KB
LogListener.class 1KB
ZiyuAdminApplication.class 1KB
BizException.class 1KB
AsynchronousSpringEventsConfig.class 1KB
WeightDefines.class 1KB
OrganizationService.class 1KB
IService.class 1020B
ZiyuTest.class 860B
CurriculumInfoMapper.class 857B
GroupServiceImpl.class 853B
LogServiceImpl.class 837B
ResourceService.class 810B
Constants.class 720B
SubjectInfoService.class 664B
CurriculumInfoService.class 661B
ThymeleafConfig.class 660B
SubjectInfoMapper.class 615B
SystemLog.class 546B
BaseController.class 532B
RoleService.class 530B
GradeInfoMapper.class 524B
BaseController.class 520B
MyBatisConfig.class 510B
OrganizationMapper.class 510B
ISubjectChoose.class 489B
GradeInfoService.class 466B
ResourceMapper.class 391B
GroupMapper.class 382B
RoleMapper.class 379B
LogMapper.class 376B
IWeightCalc.class 376B
MyMapper.class 350B
共 828 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
- 茫茫大地真干净6892023-02-06资源内容总结的很到位,内容详实,很受用,学到了~
- weixin_582326832022-05-01用户下载后在一定时间内未进行评价,系统默认好评。
- 今惜2023-03-24支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
- HUIJINJAVA2022-07-30资源和描述一致,质量不错,解决了我的问题,感谢资源主。
- a233333662023-02-15资源质量不错,和资源描述一致,内容详细,对我很有用。
a123560mh
- 粉丝: 60
- 资源: 134
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功