苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
算法
正文
教务管理系统中智能排课的逻辑设计
苟哥
2020-05-09 PM
2080℃
0条
## 前言 ------------ 本文不是介绍如何具体用代码实现智能排课的功能,而是讨论智能排课的设计思想。因此,在描述过程中会借用伪代码来阐述思想。 排课在培训机构教学管理中是一个非常重要的工作任务,传统的手工排课方式有以下几个关键弊端: - 效率低下; - 规模较大的学校,其师资队伍、班级数量、课程种类等数据量都会比较庞大和复杂,大大增加了排课的复杂度。此时再用手工操作,会出现大量课程冲突和遗漏的现象,很有可能牵一发而动全身地推倒重来。 因此,借助自动排课系统是必要的。 ## 分析 ------------ 这里主要介绍两种快速排课方式: - 自由排课:通过日历勾选多天的同一时段批量生成课程 - 重复排课:设定开始时间和课时数量,通过某种重复规律批量生成课程,重复规律包含常见的三种情况:每周、隔周、隔天。 两种排课方式虽然计算方式不同,但是殊途同归,目的都是一次操作,批量生成大量课程。影响排课的因素有: 班级ID、教师ID、日期、时段。对于两种排课方式,班级ID、教师ID和时段都是相同的处理方式,所以无需赘述,剩下的重点就落在了日期的生成处理上。接下来,说明两种排课方式生成多个日期的实现方法。 ## 设计 ------------ ### 自由排课 1、所需参数: - 日期时间戳数组(dates=[15767123454,15767872211]) - 时间段ID(time_range); 2、这种方式生成课程比较简单: ```shell classes = []; //存储入库的课程数据 for(date in dates){ 将 {班级ID、教师ID、date、time_range} 推入 classes } ``` 运算结果得到classes的长度是: dates.length。 ### 重复排课 1、所需参数: - 开始时间(date) - 课时数(times) - 重复类型(type:1每周、2隔周、3隔天) - 周几(week_day={0周日, 1周一,2周二,3周三, 4周四,5周五,6周六},type为1或2的时候,此参数才是必须的); 2、这种方式会稍复杂些: ```shell classes = []; //存储入库的课程数据 begin_day = F(date); //根据开始日期计算得到周几 all_days = []; //存放所有课时的日期周几数,可以想象以下,例如重复每周的周二和周四,那么all_days应该是{2,4,2,4,2,4,2,4,...},all_days的长度等于times.length if(type < 3 ){ //每周和隔周的情况才需此操作 for(i = 0; i < times; i++){ all_days[] = ( week_day[i % week_day.length] == 0 ? 7 : week_day[i % week_day.length] ); // 实现{2,4,2,4,2,4,2,4,...}的形式 } } for(i = 0; i < times; i++){ switch (type){ case 3: // 隔天的日期公式 temp_date = date + 86400 * i * 2; break; case 2: //隔周的日期公式 n = 86400 * 7 * (int)(i / week_day.length) * 2; //隔周的差值 temp_date = date + 86400 * (all_days[i] - begin_day) + n; break; case 1: //每周的日期公式,与隔周的区别仅在计算n的值上 n = 86400 * 7 * (int)(i / week_day.length); temp_date = date + 86400 * (all_days[i] - begin_day) + n; break; } 将 {班级ID、教师ID、temp_date、time_range} 推入 classes } ```
标签:
智能排课系统
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/138/
上一篇
Centos7安装tomcat8
下一篇
PHP运行环境提示: curl https时error 77(Problem with reading the SSL CA cert (path? access rights?))
取消回复
评论啦~
提交评论
栏目分类
软件安装
10
开发工具
8
算法
2
测试
1
架构
3
填坑记
2
开源
6
科普
6
私域
2
读书笔记
4
编程
48
运营
3
管理
1
标签云
算法
C程序设计语言
C语言
Java
mysql
PHP
ffmpeg
golang
VueJs
脚手架
VueJs实战项目
Intellij IDEA
Centos7
Hyperf
抖音运营
杰克韦尔奇
跌荡一百年
生成海量测试数据
企业管理
习题2-3
习题2-4
习题2-6
异常分类
File
习题2-7
习题2-8
习题2-9
习题3-3
习题3-4
习题3-5
友情链接
申请
SaaS引擎
机器人框架
京东捡漏