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

chinank 2008-09-29 04:00:28
我主要在算法上想不通,没有找到有效的解决办法,具体内容如下:
单位要求上下班时间可以设置,每天员工上下班时间分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 喷涂车间


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

多谢。
CloudOfFly 2008-09-30
  • 打赏
  • 举报
回复
处理好一个对象就好了。。。
sunshine_anycall 2008-09-30
  • 打赏
  • 举报
回复
慢慢分情况处理吧!
我作日历的时候就是这样的了!
  • 打赏
  • 举报
回复
再买个打卡机,门里一个,门外一个。
hornbills 2008-09-29
  • 打赏
  • 举报
回复
我认为核心问题是你的规则依赖你的数据!也就是说要先根据数据分析出规则才能进一步处理。

我的抱怨:
打卡机设置有问题,既然能对每次打卡区分不同类别,为什么不干脆分为两类?进入,退出两种?

问题解决:
这个问题完全可以通过算法解决,分步运算应该是非常必要的,在数据库里就可以进行。
步骤
1、明确规则,比如,只有上班打卡,没有下班打卡是否作为某种结果?去了厕所没有回来该如何?更夸张一点,没去厕所反而回来了,又当如何?
2、搞清楚不同标准都适用于哪个时间?
3、增加字段,便于存储中间状态,比如上班,下班等,或者出,入。中间状态能减少算法复杂度。
4、设计函数,在已有数据测试。并利用此函数检测新数据。
5、优化设计,开始编码。


xuStanly 2008-09-29
  • 打赏
  • 举报
回复
是个麻烦事,呵呵,一般的考勤系统也就是区别个2次打卡或4次打卡的问题。
像这种多次打卡的问题我想可能要换个思路。
比如,只记打卡的流水帐,反正楼主是计时工资,结算时对每个卡号每一天的打卡记录逐条进行分析。
IMAGSE 2008-09-29
  • 打赏
  • 举报
回复
这些时间是可以更改的,员工们都是打卡,而且中途上厕所也得打卡,并从工时中扣除掉上厕所的时间(他们是计时工资)。

如果是不变的话,可以把这四个时间段的时间放在数组中然后,逐个对比,看但前数据中的数据是属于哪个数组的

然后如果在一个数组方范围中有两个值,表示他在这个时段的上班下班都打过卡了,然后根据大小来判断是上班还是下班,

可是,这就又有一个问题了,有人可能旷班,那样,数据可能就乱了

只想到这么多,呵呵,感觉有点乱。。

预祝国庆节快乐!~~
满衣兄 2008-09-29
  • 打赏
  • 举报
回复
这个当然是有个时间范围的了,例如12:00下班,那么只有12:00--12:30打卡才算下班打卡,否则按照漏打或旷工处理;
下午13:30上班,那么只有13:00--13:30打卡才有效,否则按照漏打或旷工处理.依次类推.我们公司的打卡机就是这么算的.

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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