首頁‎ > ‎電子期刊‎ > ‎2005 年 第 13 期‎ > ‎

排課系統解析-物件導向程式設計案例研究(八)


摘要

  • 文章編號:20051001
  • 投稿日期:2005/09/25
  • 作者:董世尊、徐志祥、施志樹、何建良、吳致中、葉志強
  • 備註:


前言

在前幾期當中,已簡略述說到排課之分課方法,在這邊將對程式內演算法作更進一步的完整說明。 首先述說Scheduler中的Function。


手動調課

在調課當中,首先想到是1 to 1是最簡單的方法,然而不管是一對一,還是一對多,都得先一個對著一個掉換,所以在這我們先找兩門A、B的課堂資訊,在資料庫裡頭我們給予它們分課編號, 再利用編號找出所有所需的資訊,一一設置其迴圈條件,以便調課成功。如:比對其堂數長度是否相等,A與B原先排定的星期、節次是否有值,兩者值互換置入檢 查流程中,觀看是否產生衝突,如果兩者皆通過檢查則調課成功。如果當中A與B有發生問題的話則恢復原先的星期、節次。

對於該系統,整個程式核心在於TestSchedule之中,存著該系統的演算法,我們將在這作深入的解說。


跨中午(檢查上課地點可否跨中午)

在用法上,可先寫出判別式,等需要使用時呼叫此判斷式,針對我們在限制條件中取得的資料,作一個判斷。謂何要做此判定呢?因為要考量某些課可能需要 連續上課的連續性,如:實習課所需時段較長,所以每次上課時段皆為數節,所以必須考慮老師所能配合的時段,因此加入能否跨中午此因素為考量。


至於該怎麼寫呢?檢查是否空值是必備的,再來就是看此課堂的節數,有沒有大於1,沒有的話就完全不用考慮能否跨中午了,再來只要檢查排定課堂任一節的開始時刻大於我們所制定的中午時段的話,表示可跨中午。


檢查地點與節次的時效性

一般節次呢?只需要檢查課表是否有符合此學制的課表,如日間、夜間部的課表排課不同,在職專班跟日校實驗班、補校等等皆有所不同。所以必須先確認是 否符合此學制的課表單。地點,則是印證排定課表中的地點ID有沒有跟地點ID中所排定的資料有所符合,如果沒有雷同,即可表達出資料有誤,產生地點衝突。


這兩者因素,對於排課而言,也是必備的要素之一,因為節次決定了該班課表大小型態,地點決定了學生的上課地點。對一個學校而言,沒有妥善的分配好上課教室,就是無法使教室達到最大效益、物盡其用之效果。


檢查星期與節次的限制條件

星期與節次為何要檢查呢?因為有些專業科目因設備不足,事先排定好給各班的使用時間,或者是老師時間上的無法配合,更還有因為週會、軍訓….等科目 有數班聯合起來上,所以需檢查已排定星期、跟節次的限制條件,遵循此項規則,把課排好。至於寫法重點,在於預先設定限制條件,不外乎是『 >、<、=、>=、<=、<>』等六項關係,找出資料的值已足以。節次也與星期雷同寫法,這就不多加說明了。


檢查班級的時間衝突和重複的科目

檢察一個班級當中,相同科目是否有重覆安排第二次的動作,每班的課表早已在開課前決定好上哪些科目,避免系統重覆排課,所以需要檢查是否課表中有把 科目重覆排入。在排課時,需判斷我們所要求的課單能否排入指定的空堂之中,如不可行,表已排入其他科目,而無法排入,就代表產生了衝突,只好再找尋下一個 適合的空間排入。 檢查上課地點的時間衝突。


一個教室都有限制一定的人數,所以一間教室只會給予一堂課的使用,不論教室容納數大小,還是數個班一起上課,在課表上都只是一堂課,不會因為人數而改變 的。所以地點是很單一的,一次只能給一堂課使用。我們在寫判別式時,地點也該先建立出來一個使用表單,我們只需檢查該時段是否有班級使用,教室空堂的節數 是否能符合科目的節數大小,如產生衝突表示該時段場地已滿,只好在找尋下一個時段或者新地點。

Comments