2009-06-27 12 views
2

私たちはスロット予約システムを構築していますが、スロットは動的であり、ハンドヘルドからライブを更新します。私は予約画面を持っている段階にいます。私は利用可能な日と時間帯があることを知っています。午前8時と午前10時。私はスロットを予約するときに、私は仕事時間と旅行時間のためのテーブル1に2レコードを入れる必要があります。利用可能なタイムスロットを見つけるC#

スロット8 am-10am

所要時間= 20分(スタート8:00終了8:20)

仕事時間= 30分(8:20終了8:50開始)

これは、視覚的にスケジュール・ガント・ビューに表示され、彼の旅行時間と仕事時間を2ブロックとして見ることができます。

他のアポイントメントが予約されていない場合、最初のアポイントメントは午前8時に開始し、午前8時50分に終了しますが、このスロットに予定が予約されているかどうかを確認できます。次の仕事の開始時間を何に設定するか。

第2の問題 - 私は午前8時 - 午前8時半と午前9時30分 - 午前10時(中間のギャップは顧客のキャンセルによるものです)の予定がある場合があります。私はギャップを埋めることができます、はい、終了時間を取得して(8:30)、ギャップを埋めるレコードを挿入する合計40分ジョブを持っていると言う。

私はC#でやりたいと思っています。何か案は??

答えて

3

これは、a)あなたのデータをどのように保存していますか?また、データスキーマはどのように見えますか?

私はこのようなものを使用します:あなたの最初の質問に関しては

TaskId (int) 
TaskName (string) 
TaskStart (DateTime) 
TaskEnd (DateTime) 

を、あなたは「このスロットに予約したすべての予定がある場合はどのように見ることができますか?」尋ね、答えは、にチェック他のアポイントメントがあるかどうかを確認し、開始時刻と期間(旅行を含む)を決定してください。次に、旅行の開始時刻を最初の予定の最後に設定します。 (注:コードで、私は実際のタスクの終了時間のための旅行タスクとNewTaskEndTimeためNewTaskTravelを使用)、あなたの2番目の質問に関しては

SELECT TaskId, TaskEnd FROM Tasks WHERE @NewTaskTravelStartTime < TaskEnd; 

if TaskId is not null then 
    NewTaskTravelStartTime = TaskEnd 
    NewTaskTravelEndTime = ... 
end if 

SELECT TaskId, TaskEnd FROM Tasks WHERE @NewTaskEndTime > TaskStart; 

if TaskId is not null then 
    a) warn user about conflict or 
    b) automatically re-schedule following task or 
    c) place task in different place 
end if 

、「どのように私は約束の間のギャップにレコードを挿入します1と予定2 "の場合、8時30分(または何時でも)のTaskStart時間で新しいレコードを作成し、終了時刻が次のタスク開始時刻を超えないようにしてください。

0

あなたが仕様デザインパターンを見てみたいことがあり、それはビルダーの一部として使用する方法(この場合は検索し、使用可能なスロットを埋めるために)。素晴らしいDomain-Driven Design本を読んでください。

3

私はこれが古い質問であることを知っていますが、私はそれを見つけたので、誰かが探していると言いたいと思いました。このTime Period libraryを.Netでご覧ください。スペアスロットを探すことができるギャップ計算機能があります。

私は、私のプロジェクトの1つで予約の隙間を見つけるためにそれを使用します。私はそれがあなたの問題を解決できると思うだろう。

今では時間帯図書館は素晴らしいライブラリであり、あなたはライブラリを記述にリンク記事は、様々な時間計算難問に把握を取得するための非常に便利ですNuget here

+1

で見つけることができます。 – Ted

関連する問題