关于考勤中的逻辑问题

liuchao85 2006-07-04 04:15:24
语言:C#(Winform),Access
实现功能:查出某个时间段里有迟到,早退,缺勤的员工次数
判断条件:正常:9:00-18:00,9:30-18:30,但如果前一天离开时间是22:00则是11:00-18:00
缺勤是除星期六、星期天没有打卡记录
问题:在一堆的时间记录里怎么判断是否正常工作?
怎么确认星期六和星期天?
...全文
754 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuchao85 2006-07-16
  • 打赏
  • 举报
回复
取每天的第一条记录和最后的记录
for(DateTime dti=startday;dti<=endday;dti=dti.AddDays(1))// for IODate
{
string week=dti.DayOfWeek.ToString();
if(week=="Saturday"||week=="Sunday")
{
// MessageBox.Show("xiuxi");
}
else
{
string sql="select IOTime from CardV3 where IODate=#"+dti+"# and holdname='"+name+"' order by IOTime asc";
this.cardv3(sql);//数据填充
int hang=dat.Rows.Count;
if(hang>0)//table zhong you zhi
{
string start=dat.Rows[0][0].ToString();//时间转变
string end=dat.Rows[hang-1][0].ToString();
DateTime dtam=DateTime.Parse(start);//am time
DateTime dtpm=DateTime.Parse(end);//pm time
if(dtam>DateTime.Parse("6:00:00")&&dtam<DateTime.Parse("12:00:00"))//上午记录
{
swu=dat.Rows[0][0].ToString();
}
else
{
swu=null;
}
if(dtpm>=DateTime.Parse("12:00:00")&&dtpm<DateTime.Parse("23:59:59"))
{
xwu=dat.Rows[hang-1][0].ToString();
}
else
{
xwu=null;
}
}
else
{
this.queqin();
}
}
erental 2006-07-15
  • 打赏
  • 举报
回复
考勤是麻烦,不过也就是预先要做个参照,比较而已。
蓝琦 2006-07-15
  • 打赏
  • 举报
回复
先去周末,然后取上班的最早记录和下班的最晚记录,
1:先算缺勤
上午没的记录则说明上午缺勤,下午没的记录则下午缺勤,全天没记录则全天缺勤
2:再算迟到和早退
if(上午记录!="")
{
⑴上午记录<=9:00 下午记录<18:00 ---早退
⑵上午记录>9:00&&<=9:30 if(下午记录!="")
{
下午记录< 18:30 ---迟到和早退
else
{
---迟到
}
⑶上午记录>9:30&&<=10:30 if(下午记录!="")
{
IF(上一次下午记录>22:00&&<24:00) //0:00-5:00不考虑
{

下午记录<18:00 --早退
}ELSE{
下午记录<18:00 --早退迟到
下午记录>18:00 --迟到

}
}
else
{
IF(上一次下午记录>22:00&&<24:00) //0:00-5:00不考虑
{}
ELSE
{
--迟到
}
}
}else
{
下午记录<18:00 --早退

}
//
蓝琦 2006-07-13
  • 打赏
  • 举报
回复
两个字~麻烦
wumylove1234 2006-07-13
  • 打赏
  • 举报
回复
考勤软件真的是件忙烦的东西.以前做过模型,试了各种算法.但最终没有实践,呵呵,白扯蛋了.
marvelstack 2006-07-13
  • 打赏
  • 举报
回复
如果没有考勤系统也自动记录一个记录,标志没有考勤,如果是星期六或星期天,可作标志说明是休息日。这样统计出来比较方便。
scott_chou 2006-07-07
  • 打赏
  • 举报
回复
按时间排序,取最靠近进入时间为进入时间,最靠近出时间为出时间(无直落班情况下),直落从上次开始,以有入就有出为原则.
liuchao85 2006-07-07
  • 打赏
  • 举报
回复
这不是要实际开发产品而只是一种练习吧,主要是考虑其中的逻辑性,所以不会把字段改为进入时间和进出时间来区分的。各位还有没有好的想法。
liaodanz 2006-07-06
  • 打赏
  • 举报
回复
字段有HoldId(卡号)HoldName(持卡人名)IODate(进出日期)InTime(进入时间)OutTime(退出时间)
这些做表.当天就只有一条记录~~.多次打卡只能改写退出时间..
scott_chou 2006-07-06
  • 打赏
  • 举报
回复
首先你要确认正常的上班时间,然后进行比较
liuchao85 2006-07-06
  • 打赏
  • 举报
回复
我的思路是:首先排除休息日,在剩余的日期里,
if 6:00-12:00有记录,再判断是否迟到;没有则为缺勤;
if 12:00-24:00有记录,再判断是否早退;没有则为缺勤;
if 6:00-24:00 都没记录则为整天缺勤
 
liuchao85 2006-07-06
  • 打赏
  • 举报
回复
看来还是要重新说明一下数据结构,一个表,主要字段有HoldId(卡号)HoldName(持卡人名)IODate(进出日期)IOTime(进出时间),要实现根据姓名查出某个日期段(一个月或一年)该员工缺勤,迟到,早退的次数.
liuchao85 2006-07-06
  • 打赏
  • 举报
回复
谁能告诉我, 怎么取得有记录的当天的第一条记录和最后一条记录,用什么方法?
SolidGL 2006-07-06
  • 打赏
  • 举报
回复
seesee
liaodanz 2006-07-05
  • 打赏
  • 举报
回复
迟到就判断上午的.早退就判断下午..当天没记录的就缺勤...
liaodanz 2006-07-05
  • 打赏
  • 举报
回复
你的表应该设两个时间字段..上午打的.和下午打的...一天内就这两个时间..
飓风2000 2006-07-05
  • 打赏
  • 举报
回复
我的建议,你把你认为可能发生的情况以及你需要解决的问题都写在word里面,对照你的word文档,进行分析归类,我想你应该能够整理出你的设计思路的!
liuchao85 2006-07-05
  • 打赏
  • 举报
回复
允许一天内多条记录,在许多天内怎么取得每一天的第一条记录和最后的一条记录?
down12345 2006-07-05
  • 打赏
  • 举报
回复
表中设一个进的时间,再设一个出的时间..再拿一个字段来记录日期~~多次刷卡就只能改写当天出的时间..
liuchao85 2006-07-05
  • 打赏
  • 举报
回复
问题是表中只给出一个字段用来记录进出的时间,另一个字段是用来记录日期的,而我们要做的是根据这些时间和日期来筛选(允许一天多次刷卡),然后再判断是否迟到,早退,缺勤。
加载更多回复(9)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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