多条件循环,安排值班
做一个排班表,但是有多个条件限制.
1、10个人排班。但是如果有人出差了,就不参加值班。
2、出差人回来当天,如果是张三值班,那么等到下一轮到张三的时候,出差人排在张三前面进行值班。
3、从此按新排班顺序进行轮流值班。如果再有出差的,按此办理。所以排班顺序是经常变的。
我的做法是:
先在数据库中,建立总值班表zblist
建立值班人表zhibanren,添加值班人字段:zbman,假设值班人是A B C D E F G H I J
再出差表chuchai,添加字段:出发日期time1,返回日期time2,出差人chman
如果排30天的班,那么:
***取得表zblist中ID最大的记录,即最后值班的记录,找出最后值班人,假设为A,并得出A在值班人表zhibanren中的ID,定为myid***
i=1
do while i<31
********在出发日期这天,把出差人从值班表中删除,不参与值班*********
sql="select * from chuchai" '打开出差表chuchai
rs.open sql,conn,1,1
if date()=rs("time1") then '如果今天是出发日期
conn.execute("delete from zhibanren where zbman="&chman) '把出差人 从值班表中删除
end if
rs.close
*********排出当前值班人**********
'先找出值班人表中第一人
sql3="select * from zhibanren order by id desc"
rs3.open sql3,conn,1,1
man3=rs3("zbman")
rs3.close
'计算当前值班人
aa=1
sql2="select * from zhibanren where id>"&myid '打开值班人表zhibanren,从上一个值班人开始向下轮流
rs2.open sql2,conn,1,1
rcount2=rs2.recordcount
if rcount2>0 then '%%%如果值班人表中,上一个值班人下面有人,就向下轮流%%%
for j=1 to rcount2
if j=1 then '向下轮流的这个人就是当前值班人theman
theman=rs2("zbman")
end if
rs2.movenext
next
else '%%%如果下面没人,就让值班表中第一人来值班%%%
theman=man3
end if
****************返回日期这天,把出差人插入值班表中*****************
sql4="select * from chuchai"
rs4.open sql4,conn,1,1
if date()=rs4("time2") then
sql5="select * from zhibanren"
rs5.open sql5,conn,1,1
rcount5=rs5.recordcount
tt=1
for k=1 to rcount5
'如果循环到的人是当前值班人,则停止,否则全部移到值班人表最下方,让当前值班人保持在值班人表的最上方
if rs5("zbman")=theman then
tt=2 '多层循环,所以不能用exit for 来停止循环
end if
if tt<>2 then
tid=rs5("id")
temp=rs5("zbman")
conn.execute("insert into zhibanren (zbman)values('"&temp&"')")
conn.execute("delete from zhibanren where id="&tid)
end if
rs5.movenext
next
conn.execute("insert into zhibanren (zbman)values('"&chman&"')") '把出差回来人安排在最下方
rs5.close
end if
rs4.close
i=i+1
loop
我运行了几次,有时排班正常,有时不对,请问我这个思路有什么问题吗?