摘要
- 文章編號:20050501
- 投稿日期:2005/04/25
- 作者:董世尊、徐志祥、施志樹、何建良、吳致中
- 備註:
前言
在前期已經將『SunSet』此套排課系統的排課流程,利用流程圖的方式,將程式的流程說明。現在我們將說明排課系統程式設計上的概念,來解釋如何實作檢查限制條件的方法。
「檢查流程」的設計方法
開啟排課程式後,開啟分課的資料庫,便會檢查輸入的資料。如果欲開啟的資料庫資料有誤,就會出現提示視窗,也不會載入資料。如果資料無誤,便會在主畫面顯示主要的三個表單:教師、班級、場地。
「檢查流程」包含檢查可否跨中午、檢查「星期」的限制條件、檢查「節次」的限制條件、檢查班級的時間衝突、檢查教室的時間衝突、教師的時間與距離的衝突。以下我們利用『SunSet』部分程式片斷來說明部分程式的設計方法:
首先說明上課時間與上課地點是否有衝突是如何實做的。為了檢查上課時間與上課地點是否有衝突,我們先用prdTest這個變數來代表上課的
時間,而whrTest這個變數用來代表上課的地點,然後利用屬性LocID代表地點的編號。然後先利用
IsNullValue(prdTest.LocID)
及IsNullValue(whrTest.LocID)方法來判斷prdTest.LocID及whrTest.LocID是否為空值,意思就是是否已
經使用中。再來利用判斷式來判斷兩者是否都不為空值,皆不是,便再進行下一步。下一步再利用prdTest.LocID及whrTest.LocID的
LocID,就是資料的識別號碼,來進行比較,如果prdTest及whrTest的屬性LocID不相同,就代表資料所排的上課時間與實際上課地點不符
合,就是發生了地點衝突,就跳出Function顯示錯誤。以下是示範的程式碼:
If Not (IsNullValue(prdTest.LocID) Or IsNullValue(whrTest.LocID)) Then
If prdTest.LocID <> whrTest.LocID Then
TestSchedule = tsLocConflict
Exit Function
End If
End If
如果有產生衝突,就會將tsLocConflict儲存衝突事件至TestSchedule。如圖一:
再來看看檢查星期及節次的限制條件。星期及節次的檢查方法類似,所以我們利用星期的部分來解釋。首先利用一個變數WeekDayOp來儲存星期一到星期六
分別代表的數字1~6。因為星期日是不上課的,所以這部分的檢查方法,一開始就必須先檢查資料是否大於0。然後利用「=」、「>」、「>=」、「<>」、
「<=」、「<」等判斷符號,來檢查資料是否是屬於1~6範圍內的資料。例如:「>4」這個判斷式,就是只能將課程排在星期五跟星期六。「<>3」,就是
代表不能將課程排在星期三,否則就是產生錯誤,或是「=3」代表只能將課程排在星期三。或許你會覺得奇怪,為何有些課程只能在特定的時間上?因為它是一些
特定的上課內容,比如說週會,又或者是一些需要兩班共同上課的軍訓。如果有產生衝突,就會儲存衝突事件至TestSchedule。如圖二。以上暫且對一
連串的流程檢查設計,舉兩個例子來說明。
假如資料已經通過「檢查流程」檢查無誤,我們可以利用一個物件來儲存判斷的結果,然後利用這個物件內是否存在值,來判斷資料是否已經經過檢查。因為資料若
是沒有經過「檢查流程」,資料或許是非法的。這裡指的非法是指不正確格式的資料,有時因為人為因素不小心輸入錯誤型態的資料,便會使排課系統無法正常運
作。排課流程檢核完畢後,將資料一一填入班級名單、教師名單及教室名單中,這時就代表資料齊全,且通過之前的條件流程檢查,就可以開始進行排課的動作。 |