版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 1 引言</b></p><p><b> 1.1 開發(fā)背景</b></p><p> 隨著信息技術(shù)的飛速發(fā)展,各個行業(yè)的信息化勢在必行。科技的進步大大地提高了生產(chǎn)率。作為高校,如何才能提高辦學(xué)效率,更好地完成教學(xué)任務(wù),跟上社會發(fā)展步伐,這是一個擺在教學(xué)工作者面前的一個迫切的問題。應(yīng)用信息化來改造傳統(tǒng)的教學(xué)管
2、理模式是一個重要途徑1。</p><p> 近幾年來,隨著各高校辦公自動化工作的推進,教務(wù)管理自動化也被擺上了日程。在教務(wù)工作中占有很大比重的一項就是每學(xué)期的課程表排定工作。由于教工、教室和設(shè)備的相對緊張,如何進行合理地安排和分配,從而充分利用教學(xué)資源是我們不得不面對的問題2。而人工進行排課不僅任務(wù)重,效率低,而且易出錯,難于維護,想要排出一張各方面都滿意的課表非常困難。并且隨著高校規(guī)模的擴大手工排課的難度和工
3、作量呈幾何級數(shù)增長3。</p><p> 在實際的應(yīng)用中,很多研究者都提出了各種解決排課問題的方法,由于排課問題的復(fù)雜性,還沒有找到有效的算法能獲得NP完全問題的最優(yōu)解。因此,如何運用近似算法和新的軟件技術(shù)來降低排課問題的計算復(fù)雜度,仍然是頗具挑戰(zhàn)性的研究方向4。</p><p> 排課管理系統(tǒng)是利用數(shù)據(jù)庫管理系統(tǒng)開發(fā)的一種應(yīng)用系統(tǒng),其開發(fā)主要包括數(shù)據(jù)庫的建立,充分滿足正常的題庫管理的
4、前提下,提供了多角度的題庫信息查詢和題庫信息分析報表,使學(xué)校管理人員可以隨時掌握學(xué)校的排課情況,進一步指導(dǎo)學(xué)校的教學(xué)。真正實現(xiàn)了業(yè)務(wù)一體化,為學(xué)校全方位的信息化管理奠定了基礎(chǔ)5。</p><p> 傳統(tǒng)的人工排課使用手工操作存在許多弊端,如重復(fù)勞動嚴重、效率低下、且不能達到資源的最優(yōu)化配置等,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找、更新和維護都帶來了不少的困難。最令人擔(dān)心的問題就是——出現(xiàn)教室資源沖突或教師資源沖突
5、的情況,而且工作繁瑣,工作量巨大,尤其是在給大學(xué)校園進行排課時出現(xiàn)的問題更多6。當(dāng)前高校教務(wù)管理所涉及到的信息資料數(shù)量大、類型多,還可能帶有大量的統(tǒng)計輸出,同時學(xué)校規(guī)模的不斷擴大和招生人數(shù)的逐年攀升導(dǎo)致傳統(tǒng)的排棵手段已無法滿足現(xiàn)代化管理的要求7。</p><p> 在教學(xué)計劃的不斷完善和各高校校園網(wǎng)建立的大背景下,設(shè)計滿足高校教務(wù)要求的排課系統(tǒng)顯得十分必要。而據(jù)了解,排課管理是高校教務(wù)處重復(fù)性比較強且急需得到解
6、決的工作, 且排課系統(tǒng)有安全性要求高、交互性強、處理數(shù)據(jù)量大等人工難以實現(xiàn)的特點8。</p><p> 因此設(shè)計一個基于校園網(wǎng)絡(luò)的人工智能化且操作簡便的排課系統(tǒng)是高校教務(wù)管理信息系統(tǒng)實現(xiàn)的首要條件,同時也是一大難點,因為排課管理要求綜合考慮教師、課程、班級、教室、時間等諸方面的因素,統(tǒng)籌兼顧,使課表既符合教學(xué)規(guī)律,又能夠充分利用現(xiàn)有資源使其最大限度地發(fā)揮作用9。</p><p> 1.
7、2 國內(nèi)外研究現(xiàn)狀</p><p> 早在20世紀50年代末,國外就有人開始研究課表編排問題。1963年,Gotlieb曾提出一個課表問題的數(shù)學(xué)模型,但由于排課問題易受實際問題的影響,求解結(jié)果也不理想10。20世紀70年代,美國人S.Even等就證明了排課問題是一個NP完全問題,其算法的時間復(fù)雜度呈指數(shù)增長。S.Even的論證正式確立了排課問題的學(xué)術(shù)地位,把人們對排課問題的認識提高到了理論高度11。此外,有些
8、文獻試圖從圖論的角度來求解課表問題,但是圖的染色體問題也是NP完全問題,只有在極為簡單的情況下才可以將課表編排轉(zhuǎn)化為二部圖匹配問題12。</p><p> 在國內(nèi),在20世紀80年代初期,國內(nèi)學(xué)者開始用從模擬手工排課,也有人工智能構(gòu)建的專家系統(tǒng)等等,具有代表性的有:南京工學(xué)院的UTSS(A University Timetable Seheduling System)系統(tǒng),大連理工大學(xué)的智能教學(xué)組織管理與課程調(diào)
9、度系統(tǒng)等。這些系統(tǒng)大都是模擬手工排課過程,以“班”為單位,運用啟發(fā)式函數(shù)來進行編排的。但是這些課表編排系統(tǒng)往往依賴于各個學(xué)校的教學(xué)體制,不宜于進行大量推廣13。</p><p><b> 2 相關(guān)技術(shù)介紹</b></p><p> 2.1 JSP簡介</p><p> JSP應(yīng)用程序不同于其他語言開發(fā)的單一性程序。使用Jsp編程時,必
10、須首先確定應(yīng)用程序如何與用戶交互,如鼠標單擊,用戶必須編寫代碼控制這些事件的響應(yīng)方法。</p><p> 使用JSP開發(fā)數(shù)據(jù)庫應(yīng)用程序的一般步驟如下所示:</p><p><b> 建立數(shù)據(jù)庫</b></p><p><b> 建立用戶界面</b></p><p><b> 編寫代
11、碼</b></p><p><b> 調(diào)試運行</b></p><p><b> 編譯應(yīng)用程序</b></p><p><b> 發(fā)布應(yīng)用程序</b></p><p><b> 界面設(shè)計</b></p><p>
12、<b> 控件的位置</b></p><p><b> 界面元素的一致性</b></p><p><b> 保持界面的簡明</b></p><p> 使用顏色和圖像:增加視覺的感染力</p><p> 圖像和圖標:增加應(yīng)用程序的視覺上的趣味</p>&l
13、t;p><b> 選取字體</b></p><p> JSP應(yīng)用程序的結(jié)構(gòu):</p><p> 由于JSP應(yīng)用程序是基于對象的,所以應(yīng)用程序的代碼結(jié)構(gòu)就是該程序在屏幕上物理表示的模型。根據(jù)定義,對象包含數(shù)據(jù)和代碼。在屏幕上看到的窗體代表屬性,這些屬性定義了窗體的外觀和內(nèi)在特性14。</p><p> 2.2 SQL Server
14、 2000簡介</p><p> 本系統(tǒng)所用SQL Server 2000 的特性包括: 1.Internet 集成;2.企業(yè)級數(shù)據(jù)庫功能;3.易于安裝、部署和使用。同時本系統(tǒng)使用SQL Server 2000 個人版; 其特性為:</p><p> (1)高性能設(shè)計,可充分利用Windows NT的優(yōu)勢。 </p><p> (2)系統(tǒng)管理先進,支持Wind
15、ows圖形化管理工具,支持本地和遠程的系統(tǒng)管理和配置。 </p><p> (3)強壯的事務(wù)處理功能,采用各種方法保證數(shù)據(jù)的完整性。 </p><p> (4)支持對稱多處理器結(jié)構(gòu)、存儲過程、ODBC,并具有自主的SQL語言。SQL Server以其內(nèi)置的數(shù)據(jù)復(fù)制功能、強大的管理工具、與Internet的緊密集成和開放的系統(tǒng)結(jié)構(gòu)為廣大的用戶、開發(fā)人員和系統(tǒng)集成商提供了一個出眾的數(shù)據(jù)庫平
16、臺15。</p><p> 2.3 Tomcat簡介</p><p> Tomcat 很受廣大程序員的喜歡,因為它運行時占用的系統(tǒng)資源小,擴展性好,支持負載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的 </p><p> Tomcat 是一個小型的輕量級應(yīng)用服務(wù)器,在本系統(tǒng)中當(dāng)在一臺機器上配置好Apache 服務(wù)器,可利用它響應(yīng)對HTML 頁面的
17、訪問請求。實際上Tomcat 部分是Apache 服務(wù)器的擴展,但它是獨立運行的,所以當(dāng)你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。 </p><p> 當(dāng)配置正確時,Apache 為HTML頁面服務(wù),而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat具有處理HTML頁面的功能,同時它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomc
18、at的默認模式16。</p><p><b> 3 需求分析</b></p><p> 3.1 系統(tǒng)的主要功能 </p><p> 1 掌握學(xué)校所有的課程和教師的信息。包括每門課程的時間、班級以及任課老師的姓名等。</p><p> 2 針對不同的人員授予不同的權(quán)限。提供靈活的瀏覽、查詢功能。可以查看某個系、
19、某個班級所有課程的信息。</p><p> 3 可以對一個或多個班級進入課程管理與排課表管理,可以不限次的生成該班級課程表。</p><p> 4 可以對課程進行變動管理。既可以手工排課,又可以實現(xiàn)自動排序功能。</p><p> 5 幫助系統(tǒng)維護可以實現(xiàn):操作日志、重新登錄、打印設(shè)置(包括統(tǒng)計各種報表及打印等)、退出等操作。</p><p
20、> 6 提供一種或多種課程表輸出功能,并使用活動的模板輸出功能,輸出樣式可以由用戶自定義。</p><p> 7 實現(xiàn)功能全面化,由于每個學(xué)?;虬嗉壍拿刻煺n程數(shù)目或時間都不太一樣,實現(xiàn)智能計算總課程數(shù)目和管理對應(yīng)的時間段,并且根據(jù)每門課程的獨立分布式來進行排列(例如:大學(xué)語文自動排列的分布方式可以是周一至周六,那么系統(tǒng)就會自動將其平均分布在周一至周六這些天里)。</p><p>
21、 8用戶管理:設(shè)置兩個級別用戶:管理員和普通用戶,管理員有權(quán)限操作系統(tǒng)中的所有數(shù)據(jù),普通用戶只能以執(zhí)行查詢,輸出之類的功能,無法對系統(tǒng)進行實質(zhì)性的操作,用戶使用本系統(tǒng)之前必須先通過身份認證(用戶級別、用戶名和密碼,密碼輸入有次數(shù)限制,連續(xù)三次輸入錯誤密碼則鎖定該用戶)。</p><p> 3.2 排課的約束條件</p><p> 在我的排課系統(tǒng),主要對不同類型課程進行等級劃分,排列
22、出課程的排課優(yōu)先級別,通過優(yōu)先次序?qū)Σ煌愋偷恼n程使用不同的算法進行排課,能夠非常方便地處理各種排課約束條件的限制。</p><p> 例如教師和教室沖突、班級沖突、教師上課時間和地點選擇、分層次教學(xué)、單雙周排課、一課多教師教學(xué)和課程連上等各種各樣的約束。同時該系統(tǒng)還能夠非常迅速地得到排課結(jié)果,例如排一千門課只需幾分鐘時間等一系列問題。</p><p> 3.3 系統(tǒng)所需硬件環(huán)境&l
23、t;/p><p> (1)處理器:建議使用酷睿 2</p><p> ?。?)內(nèi)存:1G以上</p><p> 3.4 系統(tǒng)所需軟件平臺</p><p> (1)操作系統(tǒng):Windows XP</p><p> ?。?)數(shù)據(jù)庫:Access 2003</p><p> ?。?)Web 服務(wù)器
24、 :IIS 6.0</p><p> ?。?)瀏覽器:IE 7.0,推薦使用360安全瀏覽器</p><p><b> 4 系統(tǒng)總體設(shè)計</b></p><p><b> 4.1 設(shè)計思想</b></p><p> 本系統(tǒng)采用各班級獨立劃分管理,所有教師均可為任何班級服務(wù),各班級根據(jù)每天課
25、程數(shù)目來進行自動排序,同時各教師允許教學(xué)多門課程,因此為了每名教師配置了時間占用表,只要與班級對應(yīng)的時間空間表未被占用,都可以參與排課,并根據(jù)用戶定義的要求排出課程。</p><p> 數(shù)據(jù)管理類:由于班級,時間,教師,課程等信息都需要一個活動的管理過程,因為在節(jié)省資源的情況下,將各數(shù)據(jù)所需要的代碼合并在一起進行編寫和使用。</p><p><b> 圖4.1 數(shù)據(jù)管理<
26、;/b></p><p> 4.2 系統(tǒng)功能模塊劃分</p><p> 教務(wù)排課系統(tǒng)在功能上分四個模塊,如圖4.2:</p><p> 圖4.2 系統(tǒng)功能模塊劃分</p><p> 4.3 數(shù)據(jù)庫結(jié)構(gòu)的設(shè)計</p><p> 利用SQL Server2000來管理排課資源、排課約束條件等信息,利用
27、數(shù)據(jù)庫技術(shù)來實現(xiàn)設(shè)置排課優(yōu)先級、課時和時間段的匹配以及處理排課資源的沖突,從而實現(xiàn)自動排課的目的。</p><p> 主要包含的數(shù)據(jù)實體有:專業(yè)、課程、教師、教室、課程表等。實體的具體屬性如下:</p><p> ?。?)專業(yè)信息包括:專業(yè)代碼、專業(yè)名稱;</p><p> ?。?)課程信息包括:課程代碼、課程名稱、課程類型、總學(xué)時、每周課時、任課教師、開課院系、
28、授課班級(專業(yè))、上課人數(shù)、約束條件等信息;</p><p> ?。?)教師信息包括:教師代碼、教師名稱、所屬院系、約束條件等;</p><p> ?。?)教室信息包括:教室代碼、教室名稱、教室類型、教室地址、容納人數(shù)等;</p><p> (5)課程表信息包括:課程代碼、專業(yè)代碼、教師代碼、教室代碼、上課時間等。</p><p><
29、b> 5 系統(tǒng)詳細設(shè)計</b></p><p> 5.1 登錄系統(tǒng)設(shè)計</p><p> 設(shè)計說明:進入主界面后,等待操作用戶輸入用戶名和密碼,在輸入之后按確定進入,驗證用戶名和密碼,實現(xiàn)流程:</p><p> (1) 檢測數(shù)據(jù)庫中有無管理員賬號,如果有,則等待用戶輸入用戶名和密碼,否則按程序本身自動執(zhí)行插入命令,新建一個管理員用戶,
30、并等待用戶輸入.</p><p> (2) 驗證用戶名和密碼是否正確,錯誤次數(shù)不能超過三次,超過三次則退出系統(tǒng)登陸界面</p><p> (3) 當(dāng)驗證通過后,檢測該登陸用戶的管理權(quán)限,并設(shè)置變量傳值給主窗體</p><p> 圖5.1 登錄系統(tǒng)流程圖</p><p> 5.2 主界面及課表生成設(shè)計</p><p
31、> 5.2.1 班級管理設(shè)計</p><p> 模塊設(shè)計說明:班級的操作部分是排課程序正常執(zhí)行的重要部分,班級的添加不允許有同名的班級出現(xiàn),而修改也不能做到修改班級名,班級名稱將作為不可修改的數(shù)據(jù)部分,而刪除部分,在刪除之前必須保證該班級的課表是否已經(jīng)生成,如果是,則需要注銷課程表,這樣做是讓該班級生成的課表占用教師空間的部分全部返回,這樣不會使教師的空間被反復(fù)占用,而最終導(dǎo)致錯誤發(fā)生。</p&
32、gt;<p> 圖5.2 班級管理流程圖</p><p> 5.2.2 班級課程處理設(shè)計</p><p> 圖5.3 班級課程處理流程圖</p><p> 模塊設(shè)計說明:課程數(shù)據(jù)的添加,修改或刪除都會影響到已生成課程表的返回,因為在操作之前必要保證課程表屬于未生成狀態(tài),如果當(dāng)前為生成狀態(tài),則需要注銷課程表,這樣才可以繼續(xù)操作。</p&g
33、t;<p> 注:已生成課程表的返回:由于課程表排列好后,對應(yīng)的課程后教師的排課占用表都會有標記標明,如果這時修改了某此數(shù)據(jù)后,這教師的占用表并沒有恢復(fù)到未生成狀態(tài),這樣就會導(dǎo)致不可預(yù)知的錯誤發(fā)生。</p><p> 5.2.3 課表生成部分設(shè)計</p><p> 圖5.4 排課循環(huán)流程圖</p><p> 模塊設(shè)計說明:此處將執(zhí)行的數(shù)據(jù)分成
34、很多小部分來執(zhí)行,這樣做可以在測試中便如發(fā)現(xiàn)問題,因為排課系統(tǒng)的要求非常高,所以在程序?qū)崿F(xiàn)方面是以由簡到繁的過程。</p><p> (1)排課中要求的每周課程數(shù)相加不能超出定義的課表范圍,否則也將會出現(xiàn)死循環(huán)。</p><p> (2)列出對應(yīng)課程教師的未被占用的排課列表和班級的課程占用表。</p><p> (3)窮舉法列出以上兩者之間的共通點,可用點。&
35、lt;/p><p> (4)最后通過循環(huán)隨機選擇來實現(xiàn)課程的定位與排列。</p><p> (5)課程定位中不允許每天有相同的課程重復(fù),并按規(guī)定來執(zhí)行按什么樣的格式來排列,例如兩節(jié)連排,也就是說可以把該課程在同一天排在一起,可以實現(xiàn)兩節(jié)課連上,這是大學(xué)課表里最常用的一個功能。</p><p> 圖5.5 課表生成流程圖</p><p>
36、5.2.4 報表輸出功能設(shè)計</p><p> 模塊設(shè)計說明:此處采用了兩種輸出方式,第一種是普通的報表方式輸出,可以實現(xiàn)一般的打印預(yù)覽等功能,第二種則是采用模板功能,用戶可以自由修改模板,前提是不可以更改數(shù)據(jù)位,其它的部分無論如何修改都沒有關(guān)系。</p><p> 圖5.6 報表輸出流程圖</p><p> 5.3 數(shù)據(jù)表設(shè)計</p>&l
37、t;p> 在使用SQL server創(chuàng)建“排課管理系統(tǒng)”數(shù)據(jù)庫系統(tǒng)中需要建立的數(shù)據(jù)表如下所示:</p><p><b> 1 課程信息</b></p><p> 表5.1 課程信息表</p><p><b> 2 用戶登錄</b></p><p> 表5.2 系統(tǒng)登錄表</p&
38、gt;<p><b> 3 課程名</b></p><p><b> 表5.3 課程名表</b></p><p><b> 4 臨時生成表</b></p><p> 表5.4 臨時生成表</p><p><b> 5 課程占用表</b&g
39、t;</p><p> 表5.5 課程占用表</p><p><b> 6 系統(tǒng)日志</b></p><p> 表5.6 系統(tǒng)日志表</p><p><b> 7 系統(tǒng)設(shè)定</b></p><p> 表5.7 系統(tǒng)設(shè)定表</p><p>
40、5.4 其它模塊設(shè)計</p><p> 此處幾個模塊是經(jīng)過資源優(yōu)化將其與班級管理整合在一起的,此處工作流程基本上與班級管理的流程相同。</p><p><b> 6 系統(tǒng)的實現(xiàn)</b></p><p> 6.1 調(diào)課功能的實現(xiàn)及設(shè)計說明</p><p> 由系統(tǒng)自動排課生成的并不一定能完全達到用戶所想需要的
41、效果,雖然在程序中解決了系統(tǒng)沖突的出現(xiàn),但是因為某些原因而出現(xiàn)臨時的原因都需要進行調(diào)課,因此排課系統(tǒng)中除了自動生成課表還必須有很靈活的調(diào)課功能才能讓系統(tǒng)更完整,也方便使用。</p><p> 圖6.1 調(diào)課流程圖</p><p> 此處調(diào)課是事先獲取系統(tǒng)有用資源空間,并在圖表中進行背景色變色顯示,提示用戶該門課程可以調(diào)動至變色顯示的地方,主要是通過班級的課程占用與該教師的排課占用情況進
42、行對比,尋找有利和適用的位置,并等待用戶進行調(diào)課操作。</p><p> 執(zhí)行調(diào)課:在進行以上操作后,計算機自動等待用戶選擇系統(tǒng)列出的調(diào)課點,在選擇某調(diào)課點后,系統(tǒng)自動清除數(shù)據(jù)庫的中該課程的教師與當(dāng)前班級該處資源占用情況,并同時清除圖表中的資料,將其重新放置到新位置,并修改新地點的資源占用情況,最后將圖表的可調(diào)位置背景色還原回正常狀態(tài)。</p><p><b> 6.2 核
43、心代碼</b></p><p><b> 系統(tǒng)自動排課代碼:</b></p><p> //Class.java </p><p> package com.youngmaster; </p><p> public class Class { </p><p> priva
44、te String name;//班級名稱</p><p> private int id;//班級號 </p><p> private int number;//班級人數(shù) </p><p> private Sequence cs; </p><p> public Class(){ </p><p>&l
45、t;b> } </b></p><p> public Class(int id,String name,int number){ </p><p> this.name = name; </p><p> this.number = number; </p><p> this.id = id; </p&g
46、t;<p> setCs(new Sequence()); </p><p><b> } </b></p><p> public String getName() { </p><p> return name; </p><p><b> } </b></p>
47、;<p> public void setName(String name) { </p><p> this.name = name; </p><p><b> } </b></p><p> public int getNumber() { </p><p> return number;
48、</p><p><b> } </b></p><p> public void setNumber(int number) { </p><p> this.number = number; </p><p><b> } </b></p><p> publi
49、c int getId() { </p><p> return id; </p><p><b> } </b></p><p> public void setId(int id) { </p><p> this.id = id; </p><p><b> } <
50、/b></p><p> public Sequence getCs() { </p><p> return cs; </p><p><b> } </b></p><p> public void setCs(Sequence cs) { </p><p> this.cs
51、= cs; </p><p><b> } } </b></p><p> //ClassDemo.java </p><p> package com.youngmaster; </p><p> import java.io.*; </p><p> import java.util
52、.Date; </p><p> import java.util.Calendar; </p><p> import jxl.*; </p><p> import jxl.write.*; </p><p> public class ClassDemo { </p><p> public void
53、print()throws Exception{ </p><p> WritableWorkbook book = Workbook.createWorkbook(new File("Teaching.xls")); </p><p> WritableSheet sheet = book.createSheet("第一頁",0); </
54、p><p> Label[] label = new Label[5]; </p><p> label[0] = new Label(0,0,"星期"); </p><p> label[1] = new Label(1,0,"日期"); </p><p> label[2] = new Labe
55、l(2,0,"劍鋒"); </p><p> label[3] = new Label(3,0,"秋靜"); </p><p> label[4] = new Label(4,0,"秦少游"); </p><p> for(Label l:label){ </p><p>
56、sheet.addCell(l); </p><p><b> } </b></p><p><b> //輸出日期 </b></p><p> for(int i=1;i<365;i++){ </p><p> Calendar cal = Calendar.getInstance(
57、); </p><p> cal.add(Calendar.DATE,i-1); </p><p> double m = cal.get(Calendar.DAY_OF_WEEK); </p><p> jxl.write.Number number = new jxl.write.Number(0,i,m); </p><p>
58、 sheet.addCell(number); </p><p> Date date = cal.getTime(); </p><p> jxl.write.DateTime dt = new jxl.write.DateTime(1,i,date); </p><p> sheet.addCell(dt); </p><p>&
59、lt;b> } </b></p><p> book.write(); </p><p> book.close(); </p><p><b> } </b></p><p> public static void main(String[] args) { </p><
60、p> ClassDemo cd = new ClassDemo(); </p><p> try {cd.print(); </p><p><b> } </b></p><p> catch(Exception e){ </p><p> System.out.println(e); </p&g
61、t;<p><b> } } } </b></p><p> //ClassRoom.java </p><p> package com.youngmaster; </p><p> public class ClassRoom { </p><p> private String name;/
62、/教室名稱 </p><p> private int id;//教室號 </p><p> private int number;//教室容納人數(shù) </p><p> public ClassRoom(){ </p><p><b> } </b></p><p> public Cl
63、assRoom(int id,String name,int number){ </p><p> this.name = name; </p><p> this.id = id; </p><p> this.number = number; </p><p><b> } </b></p>&
64、lt;p> public String getName() { </p><p> return name; </p><p><b> } </b></p><p> public void setName(String name) { </p><p> this.name = name; </
65、p><p><b> } </b></p><p> public int getId() { </p><p> return id; </p><p><b> } </b></p><p> public void setId(int id) { </p&g
66、t;<p> this.id = id; </p><p><b> } </b></p><p> public int getNumber() { </p><p> return number; </p><p><b> } </b></p><p
67、> public void setNumber(int number) { </p><p> this.number = number; </p><p><b> } </b></p><p><b> } </b></p><p> //Course.java </p&g
68、t;<p> package com.youngmaster; </p><p> public class Course { </p><p> private String name;//課程名稱 </p><p> private int times;//課時數(shù) </p><p> private int tim
69、esWeek; </p><p> private int id;//課程號 </p><p> public int getId() { </p><p> return id; </p><p><b> } </b></p><p> public void setId(int i
70、d) { </p><p> this.id = id; </p><p><b> } </b></p><p> public int getTimes() { </p><p> return times; </p><p><b> } </b></p
71、><p> public void setTimes(int times) { </p><p> this.times = times; </p><p><b> } </b></p><p> public Course(){ </p><p><b> } </b&g
72、t;</p><p> public Course(int id,String name,int times,int timesWeek){ </p><p> this.name = name; </p><p> this.id = id; </p><p> this.times = times; </p><
73、;p> this.timesWeek = timesWeek; </p><p><b> } </b></p><p> public String getName() { </p><p> return name; </p><p><b> } </b></p>
74、<p> public void setName(String name) { </p><p> this.name = name; </p><p><b> } </b></p><p> public int getTimesWeek() { </p><p> return timesWe
75、ek; </p><p><b> } </b></p><p> public void setTimesWeek(int timesWeek) { </p><p> this.timesWeek = timesWeek; </p><p><b> } } </b></p>
76、;<p> //OrderCourse.java </p><p> package com.youngmaster; </p><p> import java.util.LinkedList; </p><p> import java.util.Random; </p><p> import java.util
77、.TreeSet; </p><p> public class OrderCourse { </p><p> private Teacher t1, t2, t3; </p><p> private Class c1, c2, c3; </p><p> private Course cs1, cs2, cs3; </p&
78、gt;<p> private ClassRoom cr1, cr2, cr3; </p><p> private LinkedList<Course> csList; </p><p> private LinkedList<ClassRoom> crList; </p><p> private LinkedLis
79、t<Teacher> tList; </p><p> private LinkedList<Class> cList; </p><p> // 已經(jīng)排成的時間段 </p><p> LinkedList<String> sub1; </p><p> LinkedList<String&g
80、t; sub2; </p><p> LinkedList<String> sub3; </p><p><b> // 設(shè)置老師 </b></p><p> t1 = new Teacher(1001, "劍鋒"); </p><p> t2 = new Teacher(1002
81、, "秋靜"); </p><p> t3 = new Teacher(1003, "秦少游"); </p><p> tList = new LinkedList<Teacher>(); </p><p> tList.add(t1); </p><p> tList.add(t2
82、); </p><p> tList.add(t3); </p><p> // 設(shè)置上課班級 </p><p> c1 = new Class(0601, "JAVA0601班", 20); </p><p> c2 = new Class(0602, "JAVA0602班", 25); &l
83、t;/p><p> c3 = new Class(0603, "JAVA0603班", 19); </p><p> cList = new LinkedList<Class>(); </p><p> cList.add(c1); </p><p> cList.add(c2); </p>
84、<p> cList.add(c3); </p><p><b> // 設(shè)置課程 </b></p><p> cs1 = new Course(1001, "javabase", 29, 6); </p><p> cs2 = new Course(1002, "jsp", 35, 6
85、); </p><p> cs3 = new Course(1003, "oracle", 51, 6); </p><p> csList = new LinkedList<Course>(); </p><p> csList.add(cs1); </p><p> csList.add(cs2);
86、 </p><p> csList.add(cs3); </p><p> // 設(shè)置上課教室 </p><p> cr1 = new ClassRoom(1001, "實驗樓303", 50); </p><p> cr2 = new ClassRoom(1002, "南方商務(wù)大廈", 40)
87、; </p><p> cr3 = new ClassRoom(1003, "先鋒公司", 30); </p><p> crList = new LinkedList<ClassRoom>(); </p><p> crList.add(cr1); </p><p> crList.add(cr2);
88、 </p><p> crList.add(cr3); </p><p><b> } </b></p><p> public void initShow() { </p><p> System.out.println("目前排課的資源情況如下:"); </p><p&
89、gt; System.out.println("教師情況"); </p><p> for (Teacher t : tList) { </p><p> System.out.println("教師ID:" + t.getId() + " 教師姓名: " + t.getName()); </p><p&
90、gt;<b> } </b></p><p> System.out.println("教室情況"); </p><p> for (ClassRoom cr : crList) { </p><p> System.out.println("教室ID:" + cr.getId() + "
91、; 教室名稱: " + cr.getName() </p><p> + "" + cr.getNumber()); </p><p><b> } </b></p><p> System.out.println("課程情況"); </p><p> for (
92、Course cs : csList) { </p><p> System.out.println("課程ID:" + cs.getId() + " 課程名,計算機范文網(wǎng) www.jsjfw.net,稱: " + cs.getName() </p><p> + " 課時數(shù):" + cs.getTimes() + "
93、; 每周課時 " + cs.getTimesWeek()); </p><p><b> } </b></p><p> System.out.println("班級情況"); </p><p> for (Class c : cList) { </p><p> System.ou
94、t.println("班級ID:" + c.getId() + " 班級名稱: " + c.getName() </p><p> + " 班級人數(shù):" + c.getNumber()); </p><p><b> } } </b></p><p><b> // 排
95、課流程 </b></p><p> public void order(Teacher t){ </p><p> Course course = null; </p><p> if(t==t1){ </p><p> course = cs1; </p><p><b> } <
96、;/b></p><p> else if(t==t2){ </p><p> course = cs2; </p><p><b> } </b></p><p> else if(t==t3){ </p><p> course = cs3; </p><p
97、><b> } </b></p><p> temList1 = (LinkedList<String>) (t.getTs().getList().clone());// temList1存放原教師空閑時間 </p><p> t.getTs().getList().retainAll(c1.getCs().getList());// 求教師
98、與學(xué)生時間交集 </p><p> temList2 = t.getTs().getList();// temList2存放教師與學(xué)生時間交集 </p><p> sub1 = randList(temList2, course.getTimesWeek());// 取出教師和學(xué)生的一定次數(shù)的隨機組合 </p><p> c1.getCs().getList(
99、).removeAll(sub1);// 移去被分去的時間 </p><p> t.getTs().setList(temList1);// 恢復(fù)t1中時間 </p><p> t.getTs().getList().removeAll(sub1);// 移去被分去的時間 </p><p> temList1 = (LinkedList<String&g
100、t;) (t.getTs().getList().clone());// temList1存放原教師空閑時間 </p><p> t.getTs().getList().retainAll(c2.getCs().getList());// 求交集 </p><p> temList2 = t.getTs().getList();// temList2存放教師與學(xué)生時間交集 </p
101、><p> sub2 = randList(temList2, course.getTimesWeek());// 取出教師和學(xué)生的一定次數(shù)的隨機組合 </p><p> c2.getCs().getList().removeAll(sub2);// 移去被分去的時間 </p><p> t.getTs().setList(temList1);// 恢復(fù)t1中時間
102、 </p><p> t.getTs().getList().removeAll(sub2);// 移去被分去的時間 </p><p> temList1 = (LinkedList<String>) (t.getTs().getList().clone());// temList1存放原教師空閑時間 </p><p> t.getTs().get
103、List().retainAll(c3.getCs().getList());// 求交集 </p><p> temList2 = t.getTs().getList();// temList2存放教師與學(xué)生時間交集 </p><p> sub3 = randList(temList2, course.getTimesWeek());// 取出教師和學(xué)生的一定次數(shù)的隨機組合 <
104、/p><p> c3.getCs().getList().removeAll(sub3); </p><p> t.getTs().setList(temList1);// 恢復(fù)t1中時間 </p><p> t.getTs().getList().removeAll(sub3);// 移去被分去的時間 </p><p><b>
105、 } </b></p><p> // 輸入課表方法 </p><p> public void showCourseTable(Teacher t){ </p><p> Course course = null; </p><p> if(t==t1){ </p><p> course =
106、 cs1; </p><p><b> } </b></p><p> else if(t==t2){ </p><p> course = cs2; </p><p><b> } </b></p><p> else if(t==t3){ </p>
107、<p> course = cs3; </p><p><b> } </b></p><p> System.out.println(); </p><p> System.out.println(t.getName() + "的課表詳情排列如下: " + "課程名稱: " <
108、/p><p> + course.getName()); </p><p> System.out.println("班級名稱: " + c1.getName() + " 教室名稱: " + cr1.getName()); </p><p> for (String s : listToTree(sub1)) { </
109、p><p> System.out.println(s); } </p><p> System.out.println("班級名稱: " + c2.getName() + " 教室名稱: " + cr2.getName()); </p><p> for (String s : listToTree(sub2)) { &
110、lt;/p><p> System.out.println(s); } </p><p> System.out.println("班級名稱: " + c3.getName() + " 教室名稱: " + cr3.getName()); </p><p> for (String s : listToTree(sub3))
111、{ </p><p> System.out.println(s); } </p><p> //Sequence.java </p><p> package com.youngmaster; </p><p> import java.util.LinkedList; </p><p> public
112、class Sequence { </p><p> private LinkedList<String> list = new LinkedList<String>(); </p><p> public Sequence(){ </p><p> list.add("a-星期一 1-2 節(jié)"); </p&g
113、t;<p> list.add("b-星期一 3-4 節(jié)"); </p><p> list.add("c-星期一 5-6 節(jié)"); </p><p> list.add("d-星期一 7-8 節(jié)"); </p><p> list.add("e-星期二 1-2 節(jié)"
114、;); </p><p> list.add("f-星期二 3-4 節(jié)"); </p><p> list.add("g-星期二 5-6 節(jié)"); </p><p> list.add("h-星期二 7-8 節(jié)"); </p><p> list.add("i-星期
115、三 1-2 節(jié)"); </p><p> list.add("j-星期三 3-4 節(jié)"); </p><p> list.add("k-星期三 5-6 節(jié)"); </p><p> list.add("l-星期三 7-8 節(jié)"); </p><p> list.ad
116、d("m-星期四 1-2 節(jié)"); </p><p> list.add("n-星期四 3-4 節(jié)"); </p><p> list.add("o-星期四 5-6 節(jié)"); </p><p> list.add("p-星期四 7-8 節(jié)"); </p><p&
117、gt; list.add("q-星期五 1-2 節(jié)"); </p><p> list.add("r-星期五 3-4 節(jié)"); </p><p> list.add("s-星期五 5-6 節(jié)"); </p><p> list.add("t-星期五 7-8 節(jié)"); } <
118、/p><p> public LinkedList<String> getList() { </p><p> return list;} </p><p> public void setList(LinkedList<String> list) { </p><p> this.list = list; <
119、;/p><p><b> } } </b></p><p> //Teacher.java </p><p> package com.youngmaster; </p><p> public class Teacher { </p><p> private int id; </p
120、><p> private String name; </p><p> private Sequence ts; </p><p> public Sequence getTs() { </p><p> return ts; } </p><p> public void setTs(Sequence ts)
121、 { </p><p> this.ts = ts; } </p><p> public Teacher() { </p><p><b> } </b></p><p> public Teacher(int id,String name) { </p><p> this.name
122、 = name; </p><p> this.id = id; </p><p> setTs(new Sequence()); } </p><p> public String getName() { </p><p> return name; } </p><p> public void setN
123、ame(String name) { </p><p> this.name = name;} </p><p> public int getId() { </p><p> return id; } </p><p> public void setId(int id) { </p><p> this.
124、id = id; </p><p><b> }}</b></p><p> 6.3 系統(tǒng)的管理與維護</p><p><b> 1.基礎(chǔ)數(shù)據(jù)管理</b></p><p> 將排課中涉及到的院、系、教研室、教師、班級、教室等事物的信息錄入到系統(tǒng)數(shù)據(jù)庫中,并能修改、查詢和刪除。</p&
125、gt;<p><b> 2.權(quán)限管理</b></p><p> 不同角色的用戶登錄系統(tǒng)后,看到的用戶界面不同,用戶能操作的功能菜單也不同。</p><p><b> 7 結(jié)論</b></p><p><b> 7.1 設(shè)計總結(jié)</b></p><p>
126、 本程序使用了新型控件flexcell,此控件的雙色表格與單元格的特殊賦值功能不但能帶給用戶最好的視覺感受,同時在操作時大大減少了手動輸入操作,因此也為非計算機人員的可操作性帶來很大的方便。</p><p> 采用獨特的資料占用排除方法來生成所需要的課程表,使課程表生成速度加快。</p><p> 支持很方便的課程,用戶等模塊的添加,修改,刪除等過程。</p><
127、p> 使用定位查詢,只要選擇對應(yīng)的班級,就可以找到對應(yīng)的內(nèi)容,班級就是一個整體,通過班級來尋找所想要的數(shù)據(jù)會實現(xiàn)的更為簡便。</p><p> 特殊的課程表輸出功能,大大減少了課程表輸出時的格式局限性,只要修改EXECL中的模板,就可以打印出你想要的效果來。</p><p><b> 程序的不足:</b></p><p> (1)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高校自動排課系統(tǒng)畢業(yè)設(shè)計
- 基于bs的自動排課系統(tǒng)畢業(yè)設(shè)計
- 基于jsp的學(xué)生選課排課系統(tǒng)畢業(yè)設(shè)計
- 在線學(xué)習(xí)系統(tǒng)畢業(yè)設(shè)計
- 在線考試系統(tǒng)畢業(yè)設(shè)計
- 在線考試系統(tǒng)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計-在線考試系統(tǒng)
- 在線考試系統(tǒng)畢業(yè)設(shè)計
- 在線客服系統(tǒng)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計----在線考試系統(tǒng)
- 基于遺傳算法的自動排課系統(tǒng)畢業(yè)設(shè)計
- 在線考試系統(tǒng)畢業(yè)設(shè)計論文
- 在線郵件收發(fā)系統(tǒng)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---- 公交在線查詢系統(tǒng)
- 程序在線評測系統(tǒng)畢業(yè)設(shè)計
- 在線考試系統(tǒng)畢業(yè)設(shè)計論文
- 在線考試系統(tǒng)畢業(yè)設(shè)計論文
- 小型在線拍賣系統(tǒng)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--在線超市管理系統(tǒng)
- 在線考試系統(tǒng)畢業(yè)設(shè)計論文
評論
0/150
提交評論