考勤项目中遇到算法问题,比较繁琐的那种

chinank 2008-09-29 03:57:23
我主要在算法上想不通,没有找到有效的解决办法,具体内容如下:
单位要求上下班时间可以设置,每天员工上下班时间分4部分:
7:20-11:50
13:50-18:20
18:50-21:00
19:30-24:00
这些时间是可以更改的,员工们都是打卡,而且中途上厕所也得打卡,并从工时中扣除掉上厕所的时间(他们是计时工资)。
在考勤机数据库中得到的数据如下:

考勤日期 打卡时间 类别 部门编号 部门名称

39 康少山 2008-8-1 00:00 1900-1-2 07:19 03 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 09:20 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 09:27 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 11:52 03 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 14:15 03 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 15:33 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 15:41 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 17:49 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 17:54 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 18:53 03 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 19:40 03 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 20:59 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 21:03 mZ 2 喷涂车间
39 康少山 2008-8-1 00:00 1900-1-2 23:01 03 2 喷涂车间


其中打卡类别中,只要是数字则为上下班刷卡,为字母的是外出或回来时的打卡。
我现在不知道该怎么区分这些数据究竟哪些是上班的、哪些是下班的,因为有可能员工多打一次或少打一次。希望大家能给个思路或参考代码。
多谢了。只要能解决,分数由你说。
...全文
201 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinank 2008-09-30
  • 打赏
  • 举报
回复
感谢回复了我的帖子。
我目前被这个问题困扰,自己写的代码效率特别低,所以想请帮忙给部分代码,就是如何区别出考勤中哪条记录是上班、下班、上厕所、回来,并计算当日的工时。

多谢。
yinkang2008 2008-09-30
  • 打赏
  • 举报
回复
上厕所的时间都要打卡。。。你们是个啥鸟公司啊。。。不要编了 直接跳槽吧。。
yanlongwuhui 2008-09-30
  • 打赏
  • 举报
回复
2个读卡器的做法应该是比较好的。个人认为根据奇偶数判断不太可行,因为无法判断是否是重复刷。根据楼主的描述,应该是跟门禁联一起的吧。那就有可能出现,刷了门禁还没进,刚好被什么事耽搁了,等要进的时候已经需要重刷一次了,这样的事情现实中常遇到。用2个读卡器就简单了,只要连续都是进入的记录只算最后一次时间的,连续都是出的记录只算最后一次时间(当然要用第一次来算也可以,就看公司怎么统计了)
Yangbin990 2008-09-30
  • 打赏
  • 举报
回复
我看有些公司有两个读卡器,一个是入,另一个是出。
还有三楼的办法为什么不可以
yangtzeu 2008-09-30
  • 打赏
  • 举报
回复
多加一个标志字段区分一下啊
good_Alex55 2008-09-30
  • 打赏
  • 举报
回复
一个读卡器的话就要添加一个看守的,让他保证每个人进出都的涮....
两个读卡器也许可以,就是员工麻烦..........
我晕,不要做这种炸干员工血汁的软件...........
qshzf 2008-09-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinank 的回复:]
可不可以用奇偶次数来区别是出是进?
[/Quote]
没用的,
可以设置4个刷卡机
一个大门进
一个大门出
一个厕所进
一个厕所出
基本可以区分了,、
如果有上夜班的话,嘿嘿嘿...
weeyn 2008-09-29
  • 打赏
  • 举报
回复
主要思路.
对每个上班时间段进行统计
1.必须有两个数字,即上班和下班(上班前打卡和下班后打卡)
如果缺少表示有迟到或早退.迟到早退的时间从上下班时间到最近一次打卡时间(字母标记).
2.注意每个上下班时间段内(两个数字间)必须有偶次打卡记录(进入车间和离开车间)
3.如果上下班记录都有数字,表示按时上下班.中间字母记录必须为偶数,即离去/进入.
如果出现奇数,则从最后一次打卡时间到下班时间为离去时间(不管下班打卡与否,有可能代打)
4.关键是每个上班时间段一统计.

希望有帮助

yibacaidao 2008-09-29
  • 打赏
  • 举报
回复
分两个刷卡,门内的和门外的
hornbills 2008-09-29
  • 打赏
  • 举报
回复
我记得回复过这个帖子,难道是我记错了?

关键问题是你的规则依赖你的数据,否则复杂程度并不高。

解决办法是将数据转化为规则。设定中间数据字段,比如工作中,非工作中,或者出、入等,设定并存储中间值的目的是简化运算复杂度。

如果需要代码,我可以帮忙。
angeloce 2008-09-29
  • 打赏
  • 举报
回复
上下班类别都是 03 啊……
那跟打开时间联系起来
chinank 2008-09-29
  • 打赏
  • 举报
回复
可不可以用奇偶次数来区别是出是进?
brallow 2008-09-29
  • 打赏
  • 举报
回复
貌视很复杂,呵呵。要是我就一定要通过管理手段简化。因为你说是计时的情况,有多个有效的工作时段,而且他们即使出去上厕所也要打卡,而打卡记录又不能提供类别,我觉得这实在太不可管理了。
wuyi8808 2008-09-29
  • 打赏
  • 举报
回复
似乎是没办法区分的。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧