我主要在算法上想不通,没有找到有效的解决办法,具体内容如下:
单位要求上下班时间可以设置,每天员工上下班时间分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 喷涂车间
其中打卡类别中,只要是数字则为上下班刷卡,为字母的是外出或回来时的打卡。
我现在不知道该怎么区分这些数据究竟哪些是上班的、哪些是下班的,因为有可能员工多打一次或少打一次。希望大家能给个思路或参考代码。
多谢了。只要能解决,分数由你说。

解决方案 »

  1.   

    这个当然是有个时间范围的了,例如12:00下班,那么只有12:00--12:30打卡才算下班打卡,否则按照漏打或旷工处理;
    下午13:30上班,那么只有13:00--13:30打卡才有效,否则按照漏打或旷工处理.依次类推.我们公司的打卡机就是这么算的.
      

  2.   

    这些时间是可以更改的,员工们都是打卡,而且中途上厕所也得打卡,并从工时中扣除掉上厕所的时间(他们是计时工资)。 如果是不变的话,可以把这四个时间段的时间放在数组中然后,逐个对比,看但前数据中的数据是属于哪个数组的然后如果在一个数组方范围中有两个值,表示他在这个时段的上班下班都打过卡了,然后根据大小来判断是上班还是下班,可是,这就又有一个问题了,有人可能旷班,那样,数据可能就乱了只想到这么多,呵呵,感觉有点乱。。预祝国庆节快乐!~~
      

  3.   

    是个麻烦事,呵呵,一般的考勤系统也就是区别个2次打卡或4次打卡的问题。
    像这种多次打卡的问题我想可能要换个思路。
    比如,只记打卡的流水帐,反正楼主是计时工资,结算时对每个卡号每一天的打卡记录逐条进行分析。
      

  4.   

    我认为核心问题是你的规则依赖你的数据!也就是说要先根据数据分析出规则才能进一步处理。我的抱怨:
    打卡机设置有问题,既然能对每次打卡区分不同类别,为什么不干脆分为两类?进入,退出两种?问题解决:
    这个问题完全可以通过算法解决,分步运算应该是非常必要的,在数据库里就可以进行。
    步骤
    1、明确规则,比如,只有上班打卡,没有下班打卡是否作为某种结果?去了厕所没有回来该如何?更夸张一点,没去厕所反而回来了,又当如何?
    2、搞清楚不同标准都适用于哪个时间?
    3、增加字段,便于存储中间状态,比如上班,下班等,或者出,入。中间状态能减少算法复杂度。
    4、设计函数,在已有数据测试。并利用此函数检测新数据。
    5、优化设计,开始编码。
      

  5.   

    再买个打卡机,门里一个,门外一个。
      

  6.   

    感谢回复了我的帖子。 
    我目前被这个问题困扰,自己写的代码效率特别低,所以想请帮忙给部分代码,就是如何区别出考勤中哪条记录是上班、下班、上厕所、回来,并计算当日的工时。 多谢。
      

  7.   

    真是血汗工厂啊
    哈哈
    太复杂了,这是很头疼的
      

  8.   

    慢慢分情况处理吧!
    我作日历的时候就是这样的了!