2013-03-30 59 views
-2

工作在顧問預約系統。網上預訂了許多專門的預約,但沒有指定訪問時間,而是持續時間。然而,顧問將在週六和週日訪問顧客,時間爲上午9點至下午1點至晚上2點至下午5點。安排犯罪案件午餐後

在線特別請求將指定原因和持續時間。我需要編寫代碼,調度這些請求,從而顧問可以登錄並看到計劃的項目,並將其發送給客戶

的問題是,如果我發現,超過午餐的任何請求期間, 我需要忽略在循環中檢查下一個請求,持續時間小於 。我不知道如何跳過暫時和處理下一個 時間(中午後的時間表)。

約翰離婚問題60分鐘

庫馬爾土地問題100分鐘

討論與拉姆60分鐘

犯罪案件45min

就地安置15分鐘

在下面的代碼中,我需要跳過犯罪案件,因爲它超過午餐ti我和時間表當地解決。 我還需要安排午餐後的犯罪案件。我怎樣才能做到這一點?

public class OnlineRequest 
{ 
    public string Reason { get; set; } 
    public short Duration { get; set; } 
    public DateTime StartTime { get; set; } 
    public DateTime EndTime { get; set; } 
} 

    public static string LUNCH_TIME = "1:00 P.M"; 
    public static string END_OF_DAY = "6:00 P.M"; 


    public static Dictionary<String, List<String>> 
       GetSchedules(List<OnlineRequest> requests) 
    { 
     List<string> schedules = new List<string>(); 

     DateTime visitStartTime = DateTime.MinValue.Date.AddHours(9); 

     int day = 1; 
     List<String> eventTimeStr = new List<String>(); 
     Dictionary<String, List<String>> consultantData 
       = new Dictionary<String, List<String>>(); 
     //Here is the problem 
     DateTime eventTime = visitStartTime; 
     foreach (OnlineRequest req in requests) 
     { 
      req.StartTime = eventTime; 
      string flag = getTimeDiff(req); 
      if (flag.Equals(LUNCH_TIME)) 
      { 
       eventTimeStr.Add(flag + ": LUNCH"); 
       eventTime = eventTime.AddMinutes(60); 
      } 
      else if (flag.Equals(END_OF_DAY)) 
      { 
       eventTimeStr.Add(flag + ": GO HOME EOD"); 

       consultantData.Add(("Day_" + day), eventTimeStr); 
       eventTimeStr = new List<String>(); 

       eventTime = visitStartTime; 
       ++day; 
      } 
      else 
      { 
       eventTimeStr.Add(eventTime.ToString("h:mm tt") + ": " + req.Reason); 
       eventTime = req.EndTime; 
      } 
     } 
     consultantData.Add(("Day_" + day), eventTimeStr); 
     return consultantData; 
    }  

private static String getTimeDiff(OnlineRequest req) 
    { 

     DateTime startEventTime = req.StartTime; 
     DateTime finishEventTime = req.StartTime.AddMinutes(req.Duration); 

     DateTime visitEndTime = DateTime.MinValue.Date.AddHours(17); 

     DateTime visitLunchStartTime = DateTime.MinValue.Date.AddHours(12); 


     if (finishEventTime.CompareTo(visitLunchStartTime) == 0 && 
       startEventTime.CompareTo(visitLunchStartTime) > 0) 
     { 
      return LUNCH_TIME; 
     } 
     else if (startEventTime.CompareTo(visitLunchStartTime) == 0 && 
        finishEventTime.CompareTo(visitLunchStartTime) > 0) 
     { 
      return LUNCH_TIME; 
     } 
     else if (startEventTime.CompareTo(visitLunchStartTime) < 0 && 
       finishEventTime.CompareTo(visitLunchStartTime) > 0) 
     { 
      return LUNCH_TIME; 
     } 
     if (visitEndTime.CompareTo(finishEventTime) < 0) 
     { 
      return END_OF_DAY; 
     } 

     req.EndTime = finishEventTime; 
     return ""; 
    } 
+0

把更多自己的工作到這一點。 [你有什麼嘗試?](http://whathaveyoutried.com) – djechlin

回答

1

我會做這樣的事情(很蹩腳的僞代碼):

morning = new Block(3*60, 9); 
foreach (OnlineRequest req) { 
    if (req.Duration < morning.getFreeTime()) { 
     morning.add(req); 
    } 
} 

afternoon = new Block(3*60, 13); 
foreach (OnlineRequest req not in morning.requests) { 
    if (req.Duration < afternoon.getFreeTime()) { 
     afternoon.add(req); 
    } 
} 


foreach (OnlineRequest req in morning.requests) { 
    print(morning.getStartTime(req)) 
} 

foreach (OnlineRequest req in afternoon.requests) { 
    print(afternoon.getStartTime(req)) 
} 


class Block { 
    List requests; 
    int blockSize; //minutes 
    int blockStartTime; 

    Block(int bS, int bst) { 
     blockSize = bs; 
     blockStartTime = bst; 
    } 

    add(OnlineRequest req) { 
     requests.add(req); 
    } 

    getFreeTime() { 
     sum = 0; 
     foreach (OnlineRequest req in requests) { 
      sum += req.Duration; 
     } 
     return blockSize - sum; 
    } 

    getStartTime(OnlineRequest or) { 
     sum = 0; 
     foreach (OnlineRequest req in requests) { 
      if (req = or) { 
       return sum + blockStartTime; 
      } 
      sum += req.Duration; 
     } 
     return null; 
    } 

}