查询rota应用程序的开发

时间:2011-08-24 15:01:55

标签: vb.net algorithm

我们如何准备一个改变轮班的轮换应用程序,以便所有员工能够以不同的班次工作,并且在月末,所有员工的班次数应该相同......

任何帮助?

1 个答案:

答案 0 :(得分:0)

好的,如果我理解正确,您要解决的问题如下:

输入:您为一个月S定义了M个不同的班次,并且您有E名员工。

输出:根据输入,您必须为每位员工定义一个计划,即在S月内将M的班次转移给他们。这样做时,您必须达到两个目标:

  • 所有员工都可以在不同的班次工作
  • 分配给每位员工的班次总数必须相同

为实现这一目标,有许多可能的算法。在我的脑海中,这是一个C风格的伪代码(你用VB.NET编写):

CircularArray shifts = GetDefinedShifts();
foreach(day in Month){
    foreach( employee in Employees ){
       employee.Schedule.AssignShift( Month, day, shifts.Current() );
       shifts.Next();
    }
}

CircularArray站在最后一个元素上时,Next会返回第一个元素。但是,如果#E == #S,则此算法失败:每个员工总是获得相同的班次。所以这并不容易。但是这种天真的算法可以让你开始思考一个更好的算法。如果我想出更好的东西,我会发布它。

另一方面,为什么重新发明轮子?有可用的开源解决方案,例如this one。还有一个类似软件的列表here