|
发表于 2025-3-11 21:32:45
|
显示全部楼层
上海市上海市
[color=rgba(0, 0, 0, 0.9)]以下是使用易语言实现分组排班系统的完整解决方案,包含详细注释和代码示例:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 花名数组 | 文本型 | 0 | 分组数据 | 文本型 | 0 | 周四日期数组 | 日期时间型 | 0 |
高级表格1. 置列数 (2 )高级表格1. 置行数 (1 )高级表格1. 置表头 ("日期|值班人员" ) 编辑框1.内容 = “玫瑰” + #换行符 + “百合” + #换行符 + “郁金香” + #换行符 + “向日葵” + #换行符 + “兰花” + #换行符 + “菊花” + #换行符 + “梅花”变量名 | 类 型 | 静态 | 数组 | 备 注 | 开始日期 | 日期时间型 | | | 结束日期 | 日期时间型 | | | 分组人数 | 整数型 | | 0 | 总人数 | 整数型 | | |
开始日期 = 到日期 (“2025-03-03”)结束日期 = 到日期 (“2025-11-26”)分组人数 = { 2, 2, 2, 1 } 花名数组 = 分割文本 (编辑框1.内容, #换行符, )总人数 = 取数组成员数 (花名数组 ) 如果真 (数组求和 (分组人数 ) ≠ 总人数 ) 信息框 (“分组人数总和与总人数不符!”, #错误图标, ) 返回 分组处理 () 生成周四日期数组 (开始日期, 结束日期 ) 填充排班表 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | 当前索引 | 整数型 | | | 组号 | 整数型 | | |
当前索引 = 1 重定义数组 (分组数据, 假, 0 ) 计次循环首 (取数组成员数 (分组人数 ), 组号 ) 重定义数组 (分组数据 [组号 ], 真, 分组人数 [组号 ])  计次循环首 (分组人数 [组号 ], i )  如果真 (当前索引 > 总人数 )  跳出循环 ()    分组数据 [组号 ] [i ] = 花名数组 [当前索引 ]  当前索引 = 当前索引 + 1  计次循环尾 () 计次循环尾 ()|
生成周四日期数组 | | | |
开始日期 | 日期时间型 | | | | 结束日期 | 日期时间型 | | | | 重定义数组 (周四日期数组, 假, 0 )当前日期 = 开始日期 判断循环首 (当前日期 ≤ 结束日期 ) 如果真 (取星期几 (当前日期 ) = 4 )  加入成员 (周四日期数组, 当前日期 ) 当前日期 = 增加时间 (当前日期, #日, 1) 判断循环尾 () 如果真 (取数组成员数 (周四日期数组 ) = 0 ) 当前日期 = 开始日期  判断循环首 (真)  当前日期 = 增加时间 (当前日期, #日, 1 )  如果真 (取星期几 (当前日期 ) = 4 )  加入成员 (周四日期数组, 当前日期 )  跳出循环 ()  判断循环尾 () 变量名 | 类 型 | 静态 | 数组 | 备 注 | 当前行 | 整数型 | | | 组号 | 整数型 | | | i | 整数型 | | |
高级表格1. 清空 ()高级表格1. 置列数 (2 )高级表格1. 置行数 (1 )高级表格1. 置表头 ("日期|值班人员" ) 计次循环首 (取数组成员数 (周四日期数组 ), i ) 组号 = ( (i - 1 ) % 取数组成员数 (分组数据 )) + 1   高级表格1. 插入行 () 当前行 = 高级表格1.行数  高级表格1. 置数据 (当前行, 0, 到文本 (周四日期数组 [i ]))   计次循环首 (取数组成员数 (分组数据 [组号 ]), j )  如果真 (j = 1 )   高级表格1. 置数据 (当前行, 1, 分组数据 [组号 ] [j ])   高级表格1. 置数据 (当前行, 1, 高级表格1. 取数据 (当前行, 1 ) + “、” + 分组数据 [组号 ] [j ])  计次循环尾 () 计次循环尾 () 高级表格1. 自动调整列宽 (0 )高级表格1. 自动调整列宽 (1 ) 计次循环首 (取数组成员数 (数组 ), i ) 和 = 和 + 数组 [i ] 计次循环尾 ()返回 (和 )
#
实现原理说明:数据结构设计:
花名数组:存储从编辑框读取的花名列表
分组数据:二维数组,第一维表示组号,第二维存储该组成员
周四日期数组:存储所有需要排班的周四日期
关键算法:分组算法:根据预设的每组人数,按顺序分配花名到不同组
日期生成算法:遍历开始到结束日期,筛选所有周四
循环排班算法:使用取模运算实现分组循环 组号 = ((i-1) % 组数) + 1
界面交互:
使用高级表格展示排班结果
第一列为日期,第二列为该天值班人员(多人用顿号分隔)
使用说明:
在编辑框输入花名(每行一个)
在代码中修改分组人数数组(当前为{2,2,2,1})
点击生成按钮,查看排班结果
扩展功能建议:
增加分组人数输入界面
添加导出Excel功能
实现节假日的自动跳过
添加分组校验提示功能
#
日期处理细节:
间隔天数 = (4 - 取星期几 (当前日期 )) % 7 间隔天数 = 选择 (间隔天数 ≥ 0, 间隔天数, 间隔天数 + 7 )返回 (增加时间 (当前日期, #日, 间隔天数 ))
#
高级表格优化技巧:
高级表格1. 置列宽 (0, 100 ) 高级表格1. 置对齐方式 (0, 0, 2, 高级表格1.行数, 1, #表格对齐方式_居中 ) 计次循环首 (高级表格1.行数, i ) 如果真 (i % 2 = 0 )  高级表格1. 置背景颜色 (i, 0, #白色 )  高级表格1. 置背景颜色 (i, 0, #浅 ** ) 计次循环尾 ()
[color=rgba(0, 0, 0, 0.9)]#该方案可实现动态分组排班需求,通过调整分组人数和日期范围,可适应不同场景的排班需求,楼主参考在!
|
|