考勤项目中遇到算法问题,比较繁琐的那种
我主要在算法上想不通,没有找到有效的解决办法,具体内容如下:
单位要求上下班时间可以设置,每天员工上下班时间分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 喷涂车间
其中打卡类别中,只要是数字则为上下班刷卡,为字母的是外出或回来时的打卡。
我现在不知道该怎么区分这些数据究竟哪些是上班的、哪些是下班的,因为有可能员工多打一次或少打一次。希望大家能给个思路或参考代码。
多谢了。只要能解决,分数由你说。
------解决方案--------------------
这个当然是有个时间范围的了,例如12:00下班,那么只有12:00--12:30打卡才算下班打卡,否则按照漏打或旷工处理;
下午13:30上班,那么只有13:00--13:30打卡才有效,否则按照漏打或旷工处理.依次类推.我们公司的打卡机就是这么算的.
------解决方案--------------------这些时间是可以更改的,员工们都是打卡,而且中途上厕所也得打卡,并从工时中扣除掉上厕所的时间(他们是计时工资)。 如果是不变的话,可以把这四个时间段的时间放在数组中然后,逐个对比,看但前数据中的数据是属于哪个数组的
然后如果在一个数组方范围中有两个值,表示他在这个时段的上班下班都打过卡了,然后根据大小来判断是上班还是下班,
可是,这就又有一个问题了,有人可能旷班,那样,数据可能就乱了
只想到这么多,呵呵,感觉有点乱。。
预祝国庆节快乐!~~
------解决方案--------------------是个麻烦事,呵呵,一般的考勤系统也就是区别个2次打卡或4次打卡的问题。
像这种多次打卡的问题我想可能要换个思路。
比如,只记打卡的流水帐,反正楼主是计时工资,结算时对每个卡号每一天的打卡记录逐条进行分析。
------解决方案--------------------我认为核心问题是你的规则依赖你的数据!也就是说要先根据数据分析出规则才能进一步处理。
我的抱怨:
打卡机设置有问题,既然能对每次打卡区分不同类别,为什么不干脆分为两类?进入,退出两种?
问题解决:
这个问题完全可以通过算法解决,分步运算应该是非常必要的,在数据库里就可以进行。
步骤
1、明确规则,比如,只有上班打卡,没有下班打卡是否作为某种结果?去了厕所没有回来该如何?更夸张一点,没去厕所反而回来了,又当如何?
2、搞清楚不同标准都适用于哪个时间?
3、增加字段,便于存储中间状态,比如上班,下班等,或者出,入。中间状态能减少算法复杂度。
4、设计函数,在已有数据测试。并利用此函数检测新数据。
5、优化设计,开始编码。
------解决方案--------------------再买个打卡机,门里一个,门外一个。
------解决方案--------------------处理好一个对象就好了。。。
------解决方案--------------------有点复杂
------解决方案--------------------真是血汗工厂啊
哈哈
太复杂了,这是很头疼的
------解决方案--------------------慢慢分情况处理吧!
我作日历的时候就是这样的了!