多条件循环,安排值班

rdnglydm 2010-10-30 06:27:52
做一个排班表,但是有多个条件限制.
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




我运行了几次,有时排班正常,有时不对,请问我这个思路有什么问题吗?
...全文
274 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlcsdf 2011-02-11
  • 打赏
  • 举报
回复
  指针问题,你既然用这个表循环排班,同时又对表进行更改,容易指针出错,建议作两个一模一样的表,改变表内容的时候,用判断语句跳到第二个表中进行循环,如果下次再对表进行更改(有人出差回来),再用回第一个表。
  判断条件用奇偶数字来判断。
  定义变量XH=1,
  DIM XH=1
  如果遇到表更改,则XH=XH+1
  IF XH MOD 2=0 THEN
  用第一个表循环,
  IF XH MOD 2=1 THEN
  用第二个表循环。
  
NoddyGood 2010-10-31
  • 打赏
  • 举报
回复
在总值班表中 增加 值班出差,出差日期,返回日期
在代码中用where 来出数据呀不就得了.如果要记录出差时间记录下了就再建一个表记录值班人的时间,希望对你有帮助

C程序 课程设计报告 201— 201 学年第 学期 课程名称 C语言课程设计 设计题目 《排班系统》 学生姓名 学 号 专业班级 指导教师 201 年 月 日 目录 一、设计任务书…………………………………………………………3 1、题目与要求…………………………………………………3 2、本程序涉及的知识点………………………………………3 二、程序流程图…………………………………………………………4 三、程序代码设计………………………………………………………5 四、程序调试过程………………………………………………………6 五、程序运行过程………………………………………………………6 六、程序有待改进的地方………………………………………………9 七、程序设计总结………………………………………………………9 八、致谢…………………………………………………………………9 参考文献…………………………………………………………………9 附录…………………………………………………………………… 10 一、设计任务书 1、题目与要求 赵:星期二、星期四本程序实现的功能是对7名保安人员进行排班,要求每个人在一 星期中可以休息一天。每名保安可以自行选择自己想要的休息日,而对于休息日的选择 既可以是某一天,也可以是某几天中的其中一天。当7名保安依次输入自己想要的休息日 后,系统将会给出可能的值班安排。若系统给出的值班安排是0种,证明系统对7名保安 的选择无法作出排班,需要重新输入。 具体题目:学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需 要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日 。请编制程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息 日如下: 钱:星期一、星期六 孙:星期三、星期日 李:星期五 周:星期一、星期四、星期六 吴:星期二、星期五 陈:星期三、星期六、星期日 2、本程序涉及的知识点 输入函数和输出函数、变量的定义、for语句和switch-case语句的使用等 二、程序流程图 三、程序代码设计 输入函数和输出函数、变量的定义、for语句和switch- case语句、ss字符串的使用等。 输入函数: 1)函数原形:自定义swap(int *a, int *b)函数 2) 功 能:swap()函数利用取地址符号&完成对程序中某个变量的赋值,进而程序中判断交换的 功能。 3)函数原形:get char() 4)功 能:向计算机输入一个字符。 5)变量及类型: int a,b,m,k: 整型形参变量,接收main()传过来的随机数字。 int i:循环控制变量,其中i 具有自加功能。 int j: 整型形参变量,其中j 具有自加功能。 6)说 明:输入字符后需要输入-1,待系统做出判断后往下执行。 选择判断结构 switch- case语句:从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行 ,直到遇到一个break为止。随后,switch语句将结束,程序从switch结束大括号之后的 第一个语句继续执行,并忽略其他case;假如任何一个case语句的值都不等于表达式的 值,就运行可选标签default之下的语句。 假如表达式的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会 跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。 for语句:for(语句1 ; 语句2 ; 语句3 ) {循环体} 执行时,先执行一次语句1(注意只执行一次) 之后判断语句2是否成立 1).如果成立执行循环体,之后执行语句3。再返回语句2判断条件是否成立?成立执行循 环体后再执行语句3,如此直到循环体不成立则跳出循环 2)如果语句2不成立,则不执行循环体也不执行语句3直接跳出循环。 输出函数: 1)函数原形:printf("======",*) 2)功 能:输出相关提示信息及最后结果。 3)相关变量: int n:输出正确结果。 int i,j:输出计算正确,计算排班情况。 4)说 明:输出时要把要输出的信息用双引号括起来,输出数字时要在其代表变量前 加逗号。 四、程序调试过程 由于对C语言知识储备有限,且时间精力有限,我们在设计程序程序的过程中遇到了 不少问题。 首先遇到的问题是:使用何种数组以及如何使输出变得简洁易懂,易操作。在思考讨 论之后,我们决定尽量"使输入数字化,输出结果文字化"的做法,也就是再输入星期几 的时候直接用数字代替,在输出的时候,为了更加直观,就需要把原先的数字输出为星 期几这种文字的形式;在单个对象输出结束之后,我们选择了 -1这个不会与其他日期混淆的数字,以此表示可以对下一个对象进行输出。这就需要

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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