现在正做的考勤系统中需要得到每个月中连续请假3天以上(包括3天)的时间段.用于统计该月中不扣伙食费的天数.想到用for从1号到月底最后一天做个循环,但问题是当找到请假的日期以后怎么使下次循环跳过两天?
如:某人12月6~8号请假,循环到6后判断他请假了,跟着判断6+1,6+2,即7,8号也请假了.则记录这3天请假,但下次循环时怎么让变量跳过7,8而直接从9开始呢?
如:某人12月6~8号请假,循环到6后判断他请假了,跟着判断6+1,6+2,即7,8号也请假了.则记录这3天请假,但下次循环时怎么让变量跳过7,8而直接从9开始呢?
i,j:integer;
begin
j:=0;
for i:=开始天数 to 结素天数 do
begin
if (请假) then j:=j+1 //用一个变量来记录不就行了
end;
if j>3 then showmeeage('大过三天');
end;不太清楚你数据是怎么存储的,其实一个SQL语句就可以解决的问题.
顺便问一下楼上:用一个SQL怎么写?
数据存储格式为一天一个字符串,例如:1/8,前面的代表出勤类型,后面为出勤时间,我是要找出"连续的"3天,不是某个时间段里面累计超过3天.to:ssq237712(流亡帅哥)
具体怎么写,给个例子,谢谢!to:caiso(十年磨一剑)
那到不必关心,我们这里规定的8小时制度,我只要知道出勤类型为"请假"且时间为8小时就算这天请假.
如果检测到 一条记录 (代表请假的)---取出日期给一个日期变量---dateAdd()函数每垒加一天查询一次---如果连续三次都是请假---》我就是这么个意思!
var
j: integer;
IsContinous: Boolean;//是否连续请假
LeaveDate: TDate;//请假开始时间
d: TDate;//循环变量
begin
IsContinous := False;
d := 月初时间;
while d <= 月抹时间 do
begin
if (请假) then
begin
if not IsContinous then//开始连续记录
begin
LeaveDate := d;//开始时间
j := 1;
IsContinous := True;
end
else Inc(j);
end
else
begin
if IsContinous and (j >= 3) then
记录请假时间段(LeaveDate, d - 1);
IsContinous := False;
end;
d := d + 1;
end;
end;