摘要
- 文章編號:20050503
- 投稿日期:2005/04/25
- 作者:董世尊、徐志祥、施志樹、何建良、吳致中
- 備註:
前言
在前期有介紹過物件導向的觀念及如何將物件導向應用在排課系統上,在現今資訊發展快速的社會中,已經可以透過程式設計來達成電腦排課,來解決以往人工排課所產生的問題。
在坊間也已經有許多的排課系統,也各有優缺點,而本文將利用『財團法人私立忠信工商學校』的排課資料以及『SunSet』此套排課系統,來介紹如何使用程式來排出所需的課表。
排課資料需求
當我們在做排課前,第一件所要做的事情是蒐集所需的資料,當資料越齊全越詳細時,雖然排課的難度會提高,但是所排出的課表較會符合需求。所以說『SunSet』排課系統所需的資料有下列幾項:
- 上課地點:學生上課的地點名稱,包含學校及實習地點,例如:忠信學校、山葉機車、建碁…等。
- 時間表:包含上課時間類別、星期、日期、節次、開始時間、每堂課上課時間等。
- 教學領域:依各領域作分別,例如:國文領域、英文領域….等。
- 科別:高中職以上所分的科系別,例如:電機科、電子科…等。
- 科目:課程的科目資料,例如:國文、英文、專業科目…等。
- 教室:教室的場地資料,包含一般教室、專業教室。
- 教師:教師個人資料、教學領域等。
- 班級:包含年級、班別、導師名稱等。
當備齊上述的資料後,就可以開始設定一些排課前的條件。排課前必須先將教室、科目、教師、節數、班級、科別、上課地點等資料先做關連,以及增加課程
的限制條件,因為學校的課程及時數都是固定的,每一科系、班級都有應該要上的科目及時數,不可增加或減少,而『SunSet』排課系統所做的排課動作是將
課程時間表排入星期和節次,如何將課程排入適合的時間,且必須每一課程都要有時間,每一班級必須排滿應該要上的課程,不能產生衝突,也不能有遺漏,這裡才
是排課系統關鍵的地方。
排課前準備
在開始排課前,準備好所需的資料後,就開始檢查資料的正確性,是否有遺漏或空值等,檢查完畢後,就開始進入排課的流程檢查,如圖一所示,排課流程的檢查依下列步驟說明:
步驟1,在「Sunset排課系統」中開啟舊檔(之前以Access輸入各項資料的檔案,如C:/Program Files/Sunset中”分課資料庫.mdb”),載入Teacher、Classroom、Class、Course等資料表。
步驟2,檢查輸入的資料格式是否正確,若出現下方圖示之話框,表示在Access檔案輸入資料時有誤,須再回頭去檢視修正。
步驟3,檢查課程及上課地點是否可跨越中午。如果排課的節次在上午第四節及下午第一節為同一位老師及地點的話,則跳出檢查流程。
步驟4,檢查星期的限制條件,如果排課的星期幾與預定的星期幾不符合時,則跳出檢查流程。
步驟5,檢查節次的限制條件,如果排課的節次與預定的節次不符合時,則跳出檢查流程。
步驟6,檢查班級的時間是否有衝突,以及在同一天內不可有不連續時間的同一課程出現,若不符合條件,則跳出檢查流程。
步驟7,檢查教室在排課時間內是否有其他預備使用的工作。如果有預備使用的話,會產生衝堂的問題,則跳出檢查流程。
步驟8,檢查老師的時間以及檢查路程時間,如果老師的時間有發生衝突和各地點間的路程時間過長,便不符合檢查條件則跳出檢查流程。
排課流程檢核完畢後,將資料一一填入班級名單、教師名單及教室名單中,這時就代表資料齊全,且通過之前的條件流程檢查,就可以開始進行排課的動作,如圖二所示 :
而在檢查的過程中,會利用許多的迴圈來對資料和條件做檢查,其中有用到物件導向的封裝觀念,例如:
Public Property Let ManualLock(ByVal vData As Boolean)
mManualLock = vData
End Property
Public Property Get ManualLock() As Boolean
ManualLock = mManualLock
End Property
當我們透過這種程式寫法時,利用Public、Property Get/Let,一樣可以達到所謂資訊封裝的效果,以防止誤用。其中 Property Get 是用來讓使用者讀取屬性,而 Property Let 則是用來設定屬性;vData為一儲存資料的容器。