2024-06-03 08:41:03 2024-06-03 11:10:10 2024-06-03 14:43:12 2024-06-03 17:11:10 2024-06-04 08:36:45 2024-06-04 14:29:50 2024-06-04 17:07:15 2024-06-05 08:40:17 2024-06-05 11:22:12 2024-06-05 14:23:58 2024-06-05 17:21:54 2024-06-06 08:07:10 2024-06-07 08:42:28 2024-06-07 11:20:45 2024-06-07 14:31:51 比如以上数据 上午上下班2个卡 下午上下班2个卡 怎么判断其中上班或下班的未打卡情况 |
子程序名 | 返回值类型 | 公开 | 备 注 | ||||
上下班情况 | 返回真代表正常上下班 | ||||||
参数名 | 类 型 | 参考 | 可空 | 数组 | 备 注 | ||
年 | 整数型 | 月 | 整数型 | 日 | 整数型 | 判断某日是否上正常下班 | 上午 | 逻辑型 | 如果为真则表示判断上午是否打卡, 为假表示下午是否打卡 | 日期列表 | 文本型 | 是否上班 | 逻辑型 | 是否下班 | 逻辑型 |
变量名 | 类 型 | 静态 | 数组 | 备 注 | ||
i | 整数型 | |||||
日期 | 日期时间型 | |||||
上班时间 | 整数型 | |||||
下班时间 | 整数型 |
子程序名 | 返回值类型 | 公开 | 备 注 | ||
_启动子程序 | 整数型 | 本子程序在程序启动后最先执行 |
变量名 | 类 型 | 静态 | 数组 | 备 注 | ||
日期 | 文本型 | 0 | ||||
是否上班 | 逻辑型 | |||||
是否下班 | 逻辑型 |
i支持库列表 | 支持库注释 |
spec | 特殊功能支持库 |
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.程序集变量 打卡数据, 文本型, , "0"
.程序集变量 日期表, 文本型, , "0"
.程序集变量 时段定义, 打卡时段, , "4" ' 定义四个时段
.数据类型 打卡时段
.成员 时段名称, 文本型
.成员 开始小时, 整数型
.成员 结束小时, 整数型
.子程序 __启动窗口_创建完毕
初始化时段定义 ()
加载打卡数据 ()
分析漏打卡情况 ()
.子程序 初始化时段定义
' 定义四个打卡时段范围
时段定义 [1].时段名称 = "上午上班"
时段定义 [1].开始小时 = 8
时段定义 [1].结束小时 = 9
时段定义 [2].时段名称 = "上午下班"
时段定义 [2].开始小时 = 11
时段定义 [2].结束小时 = 12
时段定义 [3].时段名称 = "下午上班"
时段定义 [3].开始小时 = 14
时段定义 [3].结束小时 = 15
时段定义 [4].时段名称 = "下午下班"
时段定义 [4].开始小时 = 17
时段定义 [4].结束小时 = 18
.子程序 加载打卡数据
' 原始数据(可从文件读取)
打卡数据 = {
"2024-06-03 08:41:03",
"2024-06-03 11:10:10",
"2024-06-03 14:43:12",
"2024-06-03 17:11:10",
"2024-06-04 08:36:45",
"2024-06-04 14:29:50",
"2024-06-04 17:07:15",
"2024-06-05 08:40:17",
"2024-06-05 11:22:12",
"2024-06-05 14:23:58",
"2024-06-05 17:21:54",
"2024-06-06 08:07:10",
"2024-06-07 08:42:28",
"2024-06-07 11:20:45",
"2024-06-07 14:31:51"
}
.子程序 分析漏打卡情况
.局部变量 当前日期, 文本型
.局部变量 日期时段表, 文本型, , "0"
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 时间戳, 文本型
.局部变量 日期, 文本型
.局部变量 小时, 整数型
.局部变量 分钟, 整数型
' 按日期分组
.计次循环首 (取数组成员数 (打卡数据), i)
时间戳 = 打卡数据
日期 = 取文本左边 (时间戳, 10)
小时 = 到整数 (取文本中间 (时间戳, 12, 2))
分钟 = 到整数 (取文本中间 (时间戳, 15, 2))
' 记录日期
.如果真 (查找文本数组 (日期表, 日期) = 0)
加入成员 (日期表, 日期)
.如果真结束
' 匹配时段
.计次循环首 (4, j)
.如果真 (小时 ≥ 时段定义 [j].开始小时 且 小时 ≤ 时段定义 [j].结束小时)
加入成员 (日期时段表, 日期 + "|" + 时段定义 [j].时段名称)
跳出循环 ()
.如果真结束
.计次循环尾 ()
.计次循环尾 ()
' 检查每个日期的四个时段是否完整
.计次循环首 (取数组成员数 (日期表), i)
当前日期 = 日期表
.局部变量 缺失时段, 文本型
缺失时段 = ""
.计次循环首 (4, j)
.如果真 (查找文本数组 (日期时段表, 当前日期 + "|" + 时段定义 [j].时段名称) = 0)
缺失时段 = 缺失时段 + 时段定义 [j].时段名称 + " "
.如果真结束
.计次循环尾 ()
.如果真 (缺失时段 ≠ "")
调试输出 (当前日期, "漏打卡时段:" + 缺失时段)
.如果真结束
.计次循环尾 ()
.子程序 查找文本数组, 整数型
.参数 数组, 文本型, 数组
.参数 查找内容, 文本型
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (数组), i)
.如果真 (数组 = 查找内容)
返回 (i)
.如果真结束
.计次循环尾 ()
返回 (0)
观音 发表于 2025-2-21 20:48
刚好无聊敲了一下,判断了 早晚迟到、早晚早退、早晚缺卡,一会发到源码区
...
欢迎光临 精易论坛 (https://125.confly.eu.org/) | Powered by Discuz! X3.4 |