我正在编写一个 C# 程序来处理调度。现在每个员工都需要对他们的日程安排有限制的能力,例如:
Sally 只能在周一、周三、周五上午 9 点到下午 3 点工作
Billy 只能在周二、周四和周日下午 5 点到 9 点工作
Sally 只能在周一、周三、周五上午 9 点至下午 3 点工作 直到某某日期,然后她可以在不同的时间和日期工作。
这些是我需要应用于每个员工对象的一些限制示例。我想要的是关于如何尽可能高效和通用地构建它的一些建议。显然,我将必须能够访问这些数据并能够应用这些限制。例如,当经理试图制定时间表时,他需要能够看到当他在星期二 4 点安排 Sally 时,他们是一个问题。另外,我应该如何存储每个员工的这些数据?
最佳答案
像这样:
public class Employee
{
public string Name { get; set; }
// other important info
private List<WorkTime> _availability = new List<WorkTime>();
public List<WorkTime> Availability
{
get { return _availability; }
internal set { _availability = value; }
}
}
public class WorkTime
{
public DayOfWeek Day { get; private set; }
public int StartHour { get; private set; }
public int EndHour { get; private set; }
public WorkTime(DayOfWeek day, int startHour, int endHour)
{
// validation here (e.g. day and time range during store hours, start<end, etc.)
Day = day;
StartHour = startHour;
EndHour = endHour;
}
}
并使用 LINQ(或 foreach)查询整个员工集合,并查询每个员工的可用性,以找到有时间上类的人。
创建一些实用函数(扩展)以根据您的业务规则比较 WorkTime 对象也很有用(例如,IsAvailable 比较两个 WorkTime 对象,如果它是相同的 DoW 且至少重叠 4 小时则返回 true)
并且您可能会将其存储在数据库中,因此使用类中的属性等字段对表进行建模。
关于c# - 员工限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344531/