日期:2014-05-20  浏览次数:20588 次

求指教一个小程序,万分感谢,目前没有思路
大家好,目前遇到一个课程设计,苦于没有思路,特来求教。
先说下需求:
假设一家小公司需要排值班表,17-18人分成三组,每组都分为白班、晚班、休息。每天有两个组的人上班,一组晚班,一组白班。两组人员分配:A类业务两个人,晚班白班各一个,B类业务共5个人,晚班三个白班两个,剩下的C类业务,全班白班各半。大概是三天一个循环,即一个人今天白班、明天晚班、后天休息,然后继续。每个月每个人大概4天A类业务,10天B类业务,6天C类业务,尽量公平

另外,人数可变,不一定要均分,例如刚好17个人,那差不多每天11个人上班,C类业务剩4个,那白晚班各2个
如果18个人,每天12个人上班,那C类还有5个人,那就3个白,两个晚

目前我的想法,建个员工类,员工有名字、工作种类、工作时间这三个属性,然后工作种类建一个类,有A/B/C三个属性,工作时间建一个类有白/晚/休息这三个属性,开始第一天先随机抽出比如12个人来工作,然后再随机一下哪2个去A类,哪5个B类,剩余C类,然后工作时间的安排就是在抽中的业务小组中再随机安排哪几个白,那几个晚,这样一天做完了。但是问题来了,接下来第二天怎么搞。。。第一天白班的你第二天就不能继续白班了,要晚班,这样是不是不太好搞。。是不是我的逻辑有问题呢

请大家帮帮我,这个应该怎么搞啊,谢谢!

------解决方案--------------------
做个网页版的就可以,代码大部分一样的。
------解决方案--------------------
总体思路不变,在员工类中增加一个属性,表示员工的工作时间。该属性是一个大小为3的数组,数组元素为所有的工作时间。当该员工白天工作时,消除该数组中对应的元素;然后该员工晚上工作时,消除该数组中对应的元素;接着就是消除最后的元素。然后检查数组中的元素的值是否为空,为空则重新赋值。