私はタイムテーブルのコードに取り組んでいます。私は大学のモジュールとそれらのモジュールに関連するイベントのシステムを使用しています。
モジュール CSC3039 Event1 - 講義 Event2 - 講義 Event3 - 実習など
モジュール内の各イベントの時間を相互にチェックし、衝突を比較する必要があります。衝突は修正する必要はなく、強調表示するだけです。私が使用するテーブルには、ここでは関係のない他のフィールドがEvents
含まれています。Event_ID (PK), Module_code (FK), Start_Date_Time, End_Date_Time
ステートメントを実装する必要があることがわかりましたFor Each
。最終的には、次のような if ステートメントになります。
if (startTime1 <= endTime2 または endTime1 >= startTime2) CLASH
私の問題は、ここで実際の for ループを理解しようとすることです。開始時刻と終了時刻を宣言するために何を書けばよいかわかりません。event1 を取得し、その開始と終了を取得してから、イベント 2、3、または 4 が上記の if ステートメントに適合するかどうかを確認する場合だと思います。私はこれを取得しようとしていますが、実際にはいくつかのガイダンスを使用できます。
編集...以下の提案に基づいて、次のコードを実装しました:
'return all relevant tables from the Modules database, based on the module code entered by the user.
Dim eventTime = (From mods In db.Modules
Join evnt In db.Events On mods.Module_code Equals evnt.Module_code
Join rm In db.Rooms On rm.Room_ID Equals evnt.Room_ID
Join build In db.Buildings On build.Building_code Equals rm.Building_code
Where ((mods.Module_code = initialModCode) And (evnt.Room_ID = rm.Room_ID))
Select evnt.Event_ID, evnt.Module_code, evnt.Event_type, evnt.Start_Date_Time, evnt.End_Date_Time, build.Building_code, rm.Room_Number)
'use the gridview to display the result returned by the above query
gdvEventsTable.DataSource = eventTime
gdvEventsTable.DataBind()
Dim listClashes As New List(Of Array)
For i As Integer = 0 To eventTime.Count - 1
For j As Integer = i + 1 To eventTime.Count - 1
If (eventTime.ToList(i).Start_Date_Time < eventTime.ToList(j).End_Date_Time) And (eventTime.ToList(i).End_Date_Time > eventTime.ToList(j).Start_Date_Time) Then
MsgBox("Clash", MsgBoxStyle.MsgBoxSetForeground, "")
listClashes.Add(eventTime)
Else
MsgBox("No Clash", MsgBoxStyle.MsgBoxSetForeground, "")
End If
Next
Next
配列リストにイベントを追加しようとすると、デバッグ中にリストにイベントが送信されないことに気付きました。