前陣子在開發排課系統中,遇到了很多難點,一直排不出來,然後專案就一直死在那裡了。最近抽了點時間想再拿出來弄弄,可難點依舊,現在遇到的最大問題就是他們的模組化課程的設計。
一、相關定義描述
1.模組化課程:指乙個學期內通過一定週數內完成的若干個分階段模組的課程。
2.模組化課程授課方式:模組化課程通常會有乙個實訓教室和最多三個教師授課,其中乙個是主任老師,其餘1-2位是輔助老師,也可以沒有輔助老師,但是必須有主任課老師。
3.模組化課程衝突:教師同時上兩門課,實訓場地只能乙個班級上或者是指定幾個班級上。
4.排課流程:
1.名單錄入(老師、教室、課程、班級)->2.1排課特徵錄入(老師、教師)
->2.2
排課時間限制錄入(老師、教室、課程、班級、模組課程)
->3.
安排教學計畫(根據班級安排課程、老師、教室)
「模組課程示例」,該資料夾中存放的是模組課程的班級課表和教師課表示例。
二、問題描述及現有解決思路
假如有模組課程a,b,c,d,e,f,一學期共有18周,一周上兩門模組課程
a課程完成教學週期為:6周,每週上課節數為12節
b課程完成教學週期為:6周,每週上課節數為12節
c課程完成教學週期為:2周,每週上課節數為12節
d課程完成教學週期為:8周,每週上課節數為12節
e課程完成教學週期為:8周,每週上課節數為12節
f課程完成教學週期為:6周,每週上課節數為12節
拆分周次演算法示意:以下數字代表的是模組化課程的週數
示例1:
2 6 8 8 6 6
8 8(2 6 6 6) 先求一組中相同課時數的課程
2 6-2(4 6 6) 取最小值和最大值拆分
4 6-2 6-2 剩下三個需兩兩拆分
4 4
示例2:
5 6 7 8 10
5 10-5 (6,7,8,5)
5 8-5 (6,7,3)
3 6-1 7-2
5 5示例3:
3 3 4 4 5 5 12
3 3 (4 4 5 5 12)
4 12-4 (4 5 5 8)
4 8-4 (5 5 4)
4 5-2 5-2
3 3如果不檢測老師和教室衝突,那麼上述演算法正好得到完成拆分周次。但現實中就不得不再去檢測老師衝突和實訓場地衝突,那麼就勢必就得把拆分好的課程再回溯拆分了,上例課表中,若:e
課程在1-8周存在衝突,若第7週中有衝突(該課程的老師在其它處已經上課),那麼就必須再重新安排到另外周次了,此時問題就出現了,拆分比想像中的要難很多,如果回溯將第二次以後課調換,使其後面正好安排沒衝突,那麼問題也就不會難了,可關鍵是如果和後面調換課程,又存在了衝突怎麼辦?是不是得再重新拆分周次了?
上次示例是排課一種,演算法上感覺已經很難實現了,事實上在實際中又會遇到其它情況,比如:
a課程完成教學週期為:
6周,每週上課節數為24節
b課程完成教學週期為:
6周,每週上課節數為12節
c課程完成教學週期為:
2周,每週上課節數為12節
d課程完成教學週期為:
8周,每週上課節數為12節
e課程完成教學週期為:
8周,每週上課節數為12節
以上24
節課的其實就是上兩門模組課程一樣
還有一種更複雜的情況:假如我一周要安排三門模組化課程的時候又怎麼處理?問題感覺越來越複雜了!
什麼是模組化?模組化的好處
1.高內聚低耦合,有利於團隊作戰,當專案很複雜的時候,將專案劃分為子模組分給不同的人開發,最後再組合在一起,這樣可以降低模組與模組之間的依賴關係體現低耦合,模組又有特定功能體現高內聚。2.可重用,方便維護,模組的特點就是有特定功能,當兩個專案都需要某種功能的時候,我們定義乙個特定的模組來實現該功能,...
什麼是模組化?模組化的好處
什麼是模組化?j a 應用架構設計 模組化模式與 osgi 一書中對它的定義是 模組化是一種處理複雜系統分解為更好的可管理模組的方式。所謂的模組化開發就是封裝細節,提供使用介面,彼此之間互不影響,每個模組都是實現某一特定的功能。模組化開發的基礎就是函式。模組化開發使 耦合度降低,模組化的意義在於最大...
模組化的理解,以及模組化的好處
先理解模組 在程式設計中,為完成某一功能所需的一段程式或子程式 或指能由編譯程式 裝配程式等處理的獨立程式單位 或指大型軟體系統的一部分。可以這樣理解每乙個頁面中的部分都可以看成乙個模組。模組化是指解決乙個複雜問題時自頂向下逐層把系統劃分成若干模組的過程,有多種屬性,分別反映其內部特性。是指將每乙個...