版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 1 引言</b></p><p><b> 1.1 開發(fā)背景</b></p><p> 隨著信息技術(shù)的飛速發(fā)展,各個(gè)行業(yè)的信息化勢(shì)在必行??萍嫉倪M(jìn)步大大地提高了生產(chǎn)率。作為高校,如何才能提高辦學(xué)效率,更好地完成教學(xué)任務(wù),跟上社會(huì)發(fā)展步伐,這是一個(gè)擺在教學(xué)工作者面前的一個(gè)迫切的問題。應(yīng)用信息化來改造傳統(tǒng)的教學(xué)管
2、理模式是一個(gè)重要途徑1。</p><p> 近幾年來,隨著各高校辦公自動(dòng)化工作的推進(jìn),教務(wù)管理自動(dòng)化也被擺上了日程。在教務(wù)工作中占有很大比重的一項(xiàng)就是每學(xué)期的課程表排定工作。由于教工、教室和設(shè)備的相對(duì)緊張,如何進(jìn)行合理地安排和分配,從而充分利用教學(xué)資源是我們不得不面對(duì)的問題2。而人工進(jìn)行排課不僅任務(wù)重,效率低,而且易出錯(cuò),難于維護(hù),想要排出一張各方面都滿意的課表非常困難。并且隨著高校規(guī)模的擴(kuò)大手工排課的難度和工
3、作量呈幾何級(jí)數(shù)增長(zhǎng)3。</p><p> 在實(shí)際的應(yīng)用中,很多研究者都提出了各種解決排課問題的方法,由于排課問題的復(fù)雜性,還沒有找到有效的算法能獲得NP完全問題的最優(yōu)解。因此,如何運(yùn)用近似算法和新的軟件技術(shù)來降低排課問題的計(jì)算復(fù)雜度,仍然是頗具挑戰(zhàn)性的研究方向4。</p><p> 排課管理系統(tǒng)是利用數(shù)據(jù)庫(kù)管理系統(tǒng)開發(fā)的一種應(yīng)用系統(tǒng),其開發(fā)主要包括數(shù)據(jù)庫(kù)的建立,充分滿足正常的題庫(kù)管理的
4、前提下,提供了多角度的題庫(kù)信息查詢和題庫(kù)信息分析報(bào)表,使學(xué)校管理人員可以隨時(shí)掌握學(xué)校的排課情況,進(jìn)一步指導(dǎo)學(xué)校的教學(xué)。真正實(shí)現(xiàn)了業(yè)務(wù)一體化,為學(xué)校全方位的信息化管理奠定了基礎(chǔ)5。</p><p> 傳統(tǒng)的人工排課使用手工操作存在許多弊端,如重復(fù)勞動(dòng)嚴(yán)重、效率低下、且不能達(dá)到資源的最優(yōu)化配置等,將產(chǎn)生大量的文件和數(shù)據(jù),這對(duì)于查找、更新和維護(hù)都帶來了不少的困難。最令人擔(dān)心的問題就是——出現(xiàn)教室資源沖突或教師資源沖突
5、的情況,而且工作繁瑣,工作量巨大,尤其是在給大學(xué)校園進(jìn)行排課時(shí)出現(xiàn)的問題更多6。當(dāng)前高校教務(wù)管理所涉及到的信息資料數(shù)量大、類型多,還可能帶有大量的統(tǒng)計(jì)輸出,同時(shí)學(xué)校規(guī)模的不斷擴(kuò)大和招生人數(shù)的逐年攀升導(dǎo)致傳統(tǒng)的排棵手段已無法滿足現(xiàn)代化管理的要求7。</p><p> 在教學(xué)計(jì)劃的不斷完善和各高校校園網(wǎng)建立的大背景下,設(shè)計(jì)滿足高校教務(wù)要求的排課系統(tǒng)顯得十分必要。而據(jù)了解,排課管理是高校教務(wù)處重復(fù)性比較強(qiáng)且急需得到解
6、決的工作, 且排課系統(tǒng)有安全性要求高、交互性強(qiáng)、處理數(shù)據(jù)量大等人工難以實(shí)現(xiàn)的特點(diǎn)8。</p><p> 因此設(shè)計(jì)一個(gè)基于校園網(wǎng)絡(luò)的人工智能化且操作簡(jiǎn)便的排課系統(tǒng)是高校教務(wù)管理信息系統(tǒng)實(shí)現(xiàn)的首要條件,同時(shí)也是一大難點(diǎn),因?yàn)榕耪n管理要求綜合考慮教師、課程、班級(jí)、教室、時(shí)間等諸方面的因素,統(tǒng)籌兼顧,使課表既符合教學(xué)規(guī)律,又能夠充分利用現(xiàn)有資源使其最大限度地發(fā)揮作用9。</p><p> 1.
7、2 國(guó)內(nèi)外研究現(xiàn)狀</p><p> 早在20世紀(jì)50年代末,國(guó)外就有人開始研究課表編排問題。1963年,Gotlieb曾提出一個(gè)課表問題的數(shù)學(xué)模型,但由于排課問題易受實(shí)際問題的影響,求解結(jié)果也不理想10。20世紀(jì)70年代,美國(guó)人S.Even等就證明了排課問題是一個(gè)NP完全問題,其算法的時(shí)間復(fù)雜度呈指數(shù)增長(zhǎng)。S.Even的論證正式確立了排課問題的學(xué)術(shù)地位,把人們對(duì)排課問題的認(rèn)識(shí)提高到了理論高度11。此外,有些
8、文獻(xiàn)試圖從圖論的角度來求解課表問題,但是圖的染色體問題也是NP完全問題,只有在極為簡(jiǎn)單的情況下才可以將課表編排轉(zhuǎn)化為二部圖匹配問題12。</p><p> 在國(guó)內(nèi),在20世紀(jì)80年代初期,國(guó)內(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)大都是模擬手工排課過程,以“班”為單位,運(yùn)用啟發(fā)式函數(shù)來進(jìn)行編排的。但是這些課表編排系統(tǒng)往往依賴于各個(gè)學(xué)校的教學(xué)體制,不宜于進(jìn)行大量推廣13。</p><p><b> 2 相關(guān)技術(shù)介紹</b></p><p> 2.1 JSP簡(jiǎn)介</p><p> JSP應(yīng)用程序不同于其他語(yǔ)言開發(fā)的單一性程序。使用Jsp編程時(shí),必
10、須首先確定應(yīng)用程序如何與用戶交互,如鼠標(biāo)單擊,用戶必須編寫代碼控制這些事件的響應(yīng)方法。</p><p> 使用JSP開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的一般步驟如下所示:</p><p><b> 建立數(shù)據(jù)庫(kù)</b></p><p><b> 建立用戶界面</b></p><p><b> 編寫代
11、碼</b></p><p><b> 調(diào)試運(yùn)行</b></p><p><b> 編譯應(yīng)用程序</b></p><p><b> 發(fā)布應(yīng)用程序</b></p><p><b> 界面設(shè)計(jì)</b></p><p>
12、<b> 控件的位置</b></p><p><b> 界面元素的一致性</b></p><p><b> 保持界面的簡(jiǎn)明</b></p><p> 使用顏色和圖像:增加視覺的感染力</p><p> 圖像和圖標(biāo):增加應(yīng)用程序的視覺上的趣味</p>&l
13、t;p><b> 選取字體</b></p><p> JSP應(yīng)用程序的結(jié)構(gòu):</p><p> 由于JSP應(yīng)用程序是基于對(duì)象的,所以應(yīng)用程序的代碼結(jié)構(gòu)就是該程序在屏幕上物理表示的模型。根據(jù)定義,對(duì)象包含數(shù)據(jù)和代碼。在屏幕上看到的窗體代表屬性,這些屬性定義了窗體的外觀和內(nèi)在特性14。</p><p> 2.2 SQL Server
14、 2000簡(jiǎn)介</p><p> 本系統(tǒng)所用SQL Server 2000 的特性包括: 1.Internet 集成;2.企業(yè)級(jí)數(shù)據(jù)庫(kù)功能;3.易于安裝、部署和使用。同時(shí)本系統(tǒng)使用SQL Server 2000 個(gè)人版; 其特性為:</p><p> (1)高性能設(shè)計(jì),可充分利用Windows NT的優(yōu)勢(shì)。 </p><p> (2)系統(tǒng)管理先進(jìn),支持Wind
15、ows圖形化管理工具,支持本地和遠(yuǎn)程的系統(tǒng)管理和配置。 </p><p> (3)強(qiáng)壯的事務(wù)處理功能,采用各種方法保證數(shù)據(jù)的完整性。 </p><p> (4)支持對(duì)稱多處理器結(jié)構(gòu)、存儲(chǔ)過程、ODBC,并具有自主的SQL語(yǔ)言。SQL Server以其內(nèi)置的數(shù)據(jù)復(fù)制功能、強(qiáng)大的管理工具、與Internet的緊密集成和開放的系統(tǒng)結(jié)構(gòu)為廣大的用戶、開發(fā)人員和系統(tǒng)集成商提供了一個(gè)出眾的數(shù)據(jù)庫(kù)平
16、臺(tái)15。</p><p> 2.3 Tomcat簡(jiǎn)介</p><p> Tomcat 很受廣大程序員的喜歡,因?yàn)樗\(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的 </p><p> Tomcat 是一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,在本系統(tǒng)中當(dāng)在一臺(tái)機(jī)器上配置好Apache 服務(wù)器,可利用它響應(yīng)對(duì)HTML 頁(yè)面的
17、訪問請(qǐng)求。實(shí)際上Tomcat 部分是Apache 服務(wù)器的擴(kuò)展,但它是獨(dú)立運(yùn)行的,所以當(dāng)你運(yùn)行tomcat 時(shí),它實(shí)際上作為一個(gè)與Apache 獨(dú)立的進(jìn)程單獨(dú)運(yùn)行的。 </p><p> 當(dāng)配置正確時(shí),Apache 為HTML頁(yè)面服務(wù),而Tomcat 實(shí)際上運(yùn)行JSP 頁(yè)面和Servlet。另外,Tomcat具有處理HTML頁(yè)面的功能,同時(shí)它還是一個(gè)Servlet和JSP容器,獨(dú)立的Servlet容器是Tomc
18、at的默認(rèn)模式16。</p><p><b> 3 需求分析</b></p><p> 3.1 系統(tǒng)的主要功能 </p><p> 1 掌握學(xué)校所有的課程和教師的信息。包括每門課程的時(shí)間、班級(jí)以及任課老師的姓名等。</p><p> 2 針對(duì)不同的人員授予不同的權(quán)限。提供靈活的瀏覽、查詢功能。可以查看某個(gè)系、
19、某個(gè)班級(jí)所有課程的信息。</p><p> 3 可以對(duì)一個(gè)或多個(gè)班級(jí)進(jìn)入課程管理與排課表管理,可以不限次的生成該班級(jí)課程表。</p><p> 4 可以對(duì)課程進(jìn)行變動(dòng)管理。既可以手工排課,又可以實(shí)現(xiàn)自動(dòng)排序功能。</p><p> 5 幫助系統(tǒng)維護(hù)可以實(shí)現(xiàn):操作日志、重新登錄、打印設(shè)置(包括統(tǒng)計(jì)各種報(bào)表及打印等)、退出等操作。</p><p
20、> 6 提供一種或多種課程表輸出功能,并使用活動(dòng)的模板輸出功能,輸出樣式可以由用戶自定義。</p><p> 7 實(shí)現(xiàn)功能全面化,由于每個(gè)學(xué)?;虬嗉?jí)的每天課程數(shù)目或時(shí)間都不太一樣,實(shí)現(xiàn)智能計(jì)算總課程數(shù)目和管理對(duì)應(yīng)的時(shí)間段,并且根據(jù)每門課程的獨(dú)立分布式來進(jìn)行排列(例如:大學(xué)語(yǔ)文自動(dòng)排列的分布方式可以是周一至周六,那么系統(tǒng)就會(huì)自動(dòng)將其平均分布在周一至周六這些天里)。</p><p>
21、 8用戶管理:設(shè)置兩個(gè)級(jí)別用戶:管理員和普通用戶,管理員有權(quán)限操作系統(tǒng)中的所有數(shù)據(jù),普通用戶只能以執(zhí)行查詢,輸出之類的功能,無法對(duì)系統(tǒng)進(jìn)行實(shí)質(zhì)性的操作,用戶使用本系統(tǒng)之前必須先通過身份認(rèn)證(用戶級(jí)別、用戶名和密碼,密碼輸入有次數(shù)限制,連續(xù)三次輸入錯(cuò)誤密碼則鎖定該用戶)。</p><p> 3.2 排課的約束條件</p><p> 在我的排課系統(tǒng),主要對(duì)不同類型課程進(jìn)行等級(jí)劃分,排列
22、出課程的排課優(yōu)先級(jí)別,通過優(yōu)先次序?qū)Σ煌愋偷恼n程使用不同的算法進(jìn)行排課,能夠非常方便地處理各種排課約束條件的限制。</p><p> 例如教師和教室沖突、班級(jí)沖突、教師上課時(shí)間和地點(diǎn)選擇、分層次教學(xué)、單雙周排課、一課多教師教學(xué)和課程連上等各種各樣的約束。同時(shí)該系統(tǒng)還能夠非常迅速地得到排課結(jié)果,例如排一千門課只需幾分鐘時(shí)間等一系列問題。</p><p> 3.3 系統(tǒng)所需硬件環(huán)境&l
23、t;/p><p> ?。?)處理器:建議使用酷睿 2</p><p> ?。?)內(nèi)存:1G以上</p><p> 3.4 系統(tǒng)所需軟件平臺(tái)</p><p> ?。?)操作系統(tǒng):Windows XP</p><p> ?。?)數(shù)據(jù)庫(kù):Access 2003</p><p> (3)Web 服務(wù)器
24、 :IIS 6.0</p><p> (4)瀏覽器:IE 7.0,推薦使用360安全瀏覽器</p><p><b> 4 系統(tǒng)總體設(shè)計(jì)</b></p><p><b> 4.1 設(shè)計(jì)思想</b></p><p> 本系統(tǒng)采用各班級(jí)獨(dú)立劃分管理,所有教師均可為任何班級(jí)服務(wù),各班級(jí)根據(jù)每天課
25、程數(shù)目來進(jìn)行自動(dòng)排序,同時(shí)各教師允許教學(xué)多門課程,因此為了每名教師配置了時(shí)間占用表,只要與班級(jí)對(duì)應(yīng)的時(shí)間空間表未被占用,都可以參與排課,并根據(jù)用戶定義的要求排出課程。</p><p> 數(shù)據(jù)管理類:由于班級(jí),時(shí)間,教師,課程等信息都需要一個(gè)活動(dòng)的管理過程,因?yàn)樵诠?jié)省資源的情況下,將各數(shù)據(jù)所需要的代碼合并在一起進(jìn)行編寫和使用。</p><p><b> 圖4.1 數(shù)據(jù)管理<
26、;/b></p><p> 4.2 系統(tǒng)功能模塊劃分</p><p> 教務(wù)排課系統(tǒng)在功能上分四個(gè)模塊,如圖4.2:</p><p> 圖4.2 系統(tǒng)功能模塊劃分</p><p> 4.3 數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì)</p><p> 利用SQL Server2000來管理排課資源、排課約束條件等信息,利用
27、數(shù)據(jù)庫(kù)技術(shù)來實(shí)現(xiàn)設(shè)置排課優(yōu)先級(jí)、課時(shí)和時(shí)間段的匹配以及處理排課資源的沖突,從而實(shí)現(xiàn)自動(dòng)排課的目的。</p><p> 主要包含的數(shù)據(jù)實(shí)體有:專業(yè)、課程、教師、教室、課程表等。實(shí)體的具體屬性如下:</p><p> (1)專業(yè)信息包括:專業(yè)代碼、專業(yè)名稱;</p><p> (2)課程信息包括:課程代碼、課程名稱、課程類型、總學(xué)時(shí)、每周課時(shí)、任課教師、開課院系、
28、授課班級(jí)(專業(yè))、上課人數(shù)、約束條件等信息;</p><p> (3)教師信息包括:教師代碼、教師名稱、所屬院系、約束條件等;</p><p> ?。?)教室信息包括:教室代碼、教室名稱、教室類型、教室地址、容納人數(shù)等;</p><p> ?。?)課程表信息包括:課程代碼、專業(yè)代碼、教師代碼、教室代碼、上課時(shí)間等。</p><p><
29、b> 5 系統(tǒng)詳細(xì)設(shè)計(jì)</b></p><p> 5.1 登錄系統(tǒng)設(shè)計(jì)</p><p> 設(shè)計(jì)說明:進(jìn)入主界面后,等待操作用戶輸入用戶名和密碼,在輸入之后按確定進(jìn)入,驗(yàn)證用戶名和密碼,實(shí)現(xiàn)流程:</p><p> (1) 檢測(cè)數(shù)據(jù)庫(kù)中有無管理員賬號(hào),如果有,則等待用戶輸入用戶名和密碼,否則按程序本身自動(dòng)執(zhí)行插入命令,新建一個(gè)管理員用戶,
30、并等待用戶輸入.</p><p> (2) 驗(yàn)證用戶名和密碼是否正確,錯(cuò)誤次數(shù)不能超過三次,超過三次則退出系統(tǒng)登陸界面</p><p> (3) 當(dāng)驗(yàn)證通過后,檢測(cè)該登陸用戶的管理權(quán)限,并設(shè)置變量傳值給主窗體</p><p> 圖5.1 登錄系統(tǒng)流程圖</p><p> 5.2 主界面及課表生成設(shè)計(jì)</p><p
31、> 5.2.1 班級(jí)管理設(shè)計(jì)</p><p> 模塊設(shè)計(jì)說明:班級(jí)的操作部分是排課程序正常執(zhí)行的重要部分,班級(jí)的添加不允許有同名的班級(jí)出現(xiàn),而修改也不能做到修改班級(jí)名,班級(jí)名稱將作為不可修改的數(shù)據(jù)部分,而刪除部分,在刪除之前必須保證該班級(jí)的課表是否已經(jīng)生成,如果是,則需要注銷課程表,這樣做是讓該班級(jí)生成的課表占用教師空間的部分全部返回,這樣不會(huì)使教師的空間被反復(fù)占用,而最終導(dǎo)致錯(cuò)誤發(fā)生。</p&
32、gt;<p> 圖5.2 班級(jí)管理流程圖</p><p> 5.2.2 班級(jí)課程處理設(shè)計(jì)</p><p> 圖5.3 班級(jí)課程處理流程圖</p><p> 模塊設(shè)計(jì)說明:課程數(shù)據(jù)的添加,修改或刪除都會(huì)影響到已生成課程表的返回,因?yàn)樵诓僮髦氨匾WC課程表屬于未生成狀態(tài),如果當(dāng)前為生成狀態(tài),則需要注銷課程表,這樣才可以繼續(xù)操作。</p&g
33、t;<p> 注:已生成課程表的返回:由于課程表排列好后,對(duì)應(yīng)的課程后教師的排課占用表都會(huì)有標(biāo)記標(biāo)明,如果這時(shí)修改了某此數(shù)據(jù)后,這教師的占用表并沒有恢復(fù)到未生成狀態(tài),這樣就會(huì)導(dǎo)致不可預(yù)知的錯(cuò)誤發(fā)生。</p><p> 5.2.3 課表生成部分設(shè)計(jì)</p><p> 圖5.4 排課循環(huán)流程圖</p><p> 模塊設(shè)計(jì)說明:此處將執(zhí)行的數(shù)據(jù)分成
34、很多小部分來執(zhí)行,這樣做可以在測(cè)試中便如發(fā)現(xiàn)問題,因?yàn)榕耪n系統(tǒng)的要求非常高,所以在程序?qū)崿F(xiàn)方面是以由簡(jiǎn)到繁的過程。</p><p> (1)排課中要求的每周課程數(shù)相加不能超出定義的課表范圍,否則也將會(huì)出現(xiàn)死循環(huán)。</p><p> (2)列出對(duì)應(yīng)課程教師的未被占用的排課列表和班級(jí)的課程占用表。</p><p> (3)窮舉法列出以上兩者之間的共通點(diǎn),可用點(diǎn)。&
35、lt;/p><p> (4)最后通過循環(huán)隨機(jī)選擇來實(shí)現(xiàn)課程的定位與排列。</p><p> (5)課程定位中不允許每天有相同的課程重復(fù),并按規(guī)定來執(zhí)行按什么樣的格式來排列,例如兩節(jié)連排,也就是說可以把該課程在同一天排在一起,可以實(shí)現(xiàn)兩節(jié)課連上,這是大學(xué)課表里最常用的一個(gè)功能。</p><p> 圖5.5 課表生成流程圖</p><p>
36、5.2.4 報(bào)表輸出功能設(shè)計(jì)</p><p> 模塊設(shè)計(jì)說明:此處采用了兩種輸出方式,第一種是普通的報(bào)表方式輸出,可以實(shí)現(xiàn)一般的打印預(yù)覽等功能,第二種則是采用模板功能,用戶可以自由修改模板,前提是不可以更改數(shù)據(jù)位,其它的部分無論如何修改都沒有關(guān)系。</p><p> 圖5.6 報(bào)表輸出流程圖</p><p> 5.3 數(shù)據(jù)表設(shè)計(jì)</p>&l
37、t;p> 在使用SQL server創(chuàng)建“排課管理系統(tǒng)”數(shù)據(jù)庫(kù)系統(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 臨時(shí)生成表</b></p><p> 表5.4 臨時(shí)生成表</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è)計(jì)</p><p> 此處幾個(gè)模塊是經(jīng)過資源優(yōu)化將其與班級(jí)管理整合在一起的,此處工作流程基本上與班級(jí)管理的流程相同。</p><p><b> 6 系統(tǒng)的實(shí)現(xiàn)</b></p><p> 6.1 調(diào)課功能的實(shí)現(xiàn)及設(shè)計(jì)說明</p><p> 由系統(tǒng)自動(dòng)排課生成的并不一定能完全達(dá)到用戶所想需要的
41、效果,雖然在程序中解決了系統(tǒng)沖突的出現(xiàn),但是因?yàn)槟承┰蚨霈F(xiàn)臨時(shí)的原因都需要進(jìn)行調(diào)課,因此排課系統(tǒng)中除了自動(dòng)生成課表還必須有很靈活的調(diào)課功能才能讓系統(tǒng)更完整,也方便使用。</p><p> 圖6.1 調(diào)課流程圖</p><p> 此處調(diào)課是事先獲取系統(tǒng)有用資源空間,并在圖表中進(jìn)行背景色變色顯示,提示用戶該門課程可以調(diào)動(dòng)至變色顯示的地方,主要是通過班級(jí)的課程占用與該教師的排課占用情況進(jìn)
42、行對(duì)比,尋找有利和適用的位置,并等待用戶進(jìn)行調(diào)課操作。</p><p> 執(zhí)行調(diào)課:在進(jìn)行以上操作后,計(jì)算機(jī)自動(dòng)等待用戶選擇系統(tǒng)列出的調(diào)課點(diǎn),在選擇某調(diào)課點(diǎn)后,系統(tǒng)自動(dòng)清除數(shù)據(jù)庫(kù)的中該課程的教師與當(dāng)前班級(jí)該處資源占用情況,并同時(shí)清除圖表中的資料,將其重新放置到新位置,并修改新地點(diǎn)的資源占用情況,最后將圖表的可調(diào)位置背景色還原回正常狀態(tài)。</p><p><b> 6.2 核
43、心代碼</b></p><p><b> 系統(tǒng)自動(dòng)排課代碼:</b></p><p> //Class.java </p><p> package com.youngmaster; </p><p> public class Class { </p><p> priva
44、te String name;//班級(jí)名稱</p><p> private int id;//班級(jí)號(hào) </p><p> private int number;//班級(jí)人數(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("第一頁(yè)",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;//教室號(hào) </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í)數(shù) </p><p> private int tim
69、esWeek; </p><p> private int id;//課程號(hào) </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)排成的時(shí)間段 </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è)置上課班級(jí) </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, "實(shí)驗(yàn)樓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() + " 課程名,計(jì)算機(jī)范文網(wǎng) www.jsjfw.net,稱: " + cs.getName() </p><p> + " 課時(shí)數(shù):" + cs.getTimes() + "
93、; 每周課時(shí) " + cs.getTimesWeek()); </p><p><b> } </b></p><p> System.out.println("班級(jí)情況"); </p><p> for (Class c : cList) { </p><p> System.ou
94、t.println("班級(jí)ID:" + c.getId() + " 班級(jí)名稱: " + c.getName() </p><p> + " 班級(jí)人數(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存放原教師空閑時(shí)間 </p><p> t.getTs().getList().retainAll(c1.getCs().getList());// 求教師
98、與學(xué)生時(shí)間交集 </p><p> temList2 = t.getTs().getList();// temList2存放教師與學(xué)生時(shí)間交集 </p><p> sub1 = randList(temList2, course.getTimesWeek());// 取出教師和學(xué)生的一定次數(shù)的隨機(jī)組合 </p><p> c1.getCs().getList(
99、).removeAll(sub1);// 移去被分去的時(shí)間 </p><p> t.getTs().setList(temList1);// 恢復(fù)t1中時(shí)間 </p><p> t.getTs().getList().removeAll(sub1);// 移去被分去的時(shí)間 </p><p> temList1 = (LinkedList<String&g
100、t;) (t.getTs().getList().clone());// temList1存放原教師空閑時(shí)間 </p><p> t.getTs().getList().retainAll(c2.getCs().getList());// 求交集 </p><p> temList2 = t.getTs().getList();// temList2存放教師與學(xué)生時(shí)間交集 </p
101、><p> sub2 = randList(temList2, course.getTimesWeek());// 取出教師和學(xué)生的一定次數(shù)的隨機(jī)組合 </p><p> c2.getCs().getList().removeAll(sub2);// 移去被分去的時(shí)間 </p><p> t.getTs().setList(temList1);// 恢復(fù)t1中時(shí)間
102、 </p><p> t.getTs().getList().removeAll(sub2);// 移去被分去的時(shí)間 </p><p> temList1 = (LinkedList<String>) (t.getTs().getList().clone());// temList1存放原教師空閑時(shí)間 </p><p> t.getTs().get
103、List().retainAll(c3.getCs().getList());// 求交集 </p><p> temList2 = t.getTs().getList();// temList2存放教師與學(xué)生時(shí)間交集 </p><p> sub3 = randList(temList2, course.getTimesWeek());// 取出教師和學(xué)生的一定次數(shù)的隨機(jī)組合 <
104、/p><p> c3.getCs().getList().removeAll(sub3); </p><p> t.getTs().setList(temList1);// 恢復(fù)t1中時(shí)間 </p><p> t.getTs().getList().removeAll(sub3);// 移去被分去的時(shí)間 </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("班級(jí)名稱: " + c1.getName() + " 教室名稱: " + cr1.getName()); </p><p> for (String s : listToTree(sub1)) { </
109、p><p> System.out.println(s); } </p><p> System.out.println("班級(jí)名稱: " + c2.getName() + " 教室名稱: " + cr2.getName()); </p><p> for (String s : listToTree(sub2)) { &
110、lt;/p><p> System.out.println(s); } </p><p> System.out.println("班級(jí)名稱: " + 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)的管理與維護(hù)</p><p><b> 1.基礎(chǔ)數(shù)據(jù)管理</b></p><p> 將排課中涉及到的院、系、教研室、教師、班級(jí)、教室等事物的信息錄入到系統(tǒng)數(shù)據(jù)庫(kù)中,并能修改、查詢和刪除。</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è)計(jì)總結(jié)</b></p><p>
126、 本程序使用了新型控件flexcell,此控件的雙色表格與單元格的特殊賦值功能不但能帶給用戶最好的視覺感受,同時(shí)在操作時(shí)大大減少了手動(dòng)輸入操作,因此也為非計(jì)算機(jī)人員的可操作性帶來很大的方便。</p><p> 采用獨(dú)特的資料占用排除方法來生成所需要的課程表,使課程表生成速度加快。</p><p> 支持很方便的課程,用戶等模塊的添加,修改,刪除等過程。</p><
127、p> 使用定位查詢,只要選擇對(duì)應(yīng)的班級(jí),就可以找到對(duì)應(yīng)的內(nèi)容,班級(jí)就是一個(gè)整體,通過班級(jí)來尋找所想要的數(shù)據(jù)會(huì)實(shí)現(xiàn)的更為簡(jiǎn)便。</p><p> 特殊的課程表輸出功能,大大減少了課程表輸出時(shí)的格式局限性,只要修改EXECL中的模板,就可以打印出你想要的效果來。</p><p><b> 程序的不足:</b></p><p> (1)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高校自動(dòng)排課系統(tǒng)畢業(yè)設(shè)計(jì)
- 基于bs的自動(dòng)排課系統(tǒng)畢業(yè)設(shè)計(jì)
- 基于jsp的學(xué)生選課排課系統(tǒng)畢業(yè)設(shè)計(jì)
- 在線學(xué)習(xí)系統(tǒng)畢業(yè)設(shè)計(jì)
- 在線考試系統(tǒng)畢業(yè)設(shè)計(jì)
- 在線考試系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-在線考試系統(tǒng)
- 在線考試系統(tǒng)畢業(yè)設(shè)計(jì)
- 在線客服系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----在線考試系統(tǒng)
- 基于遺傳算法的自動(dòng)排課系統(tǒng)畢業(yè)設(shè)計(jì)
- 在線考試系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 在線郵件收發(fā)系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---- 公交在線查詢系統(tǒng)
- 程序在線評(píng)測(cè)系統(tǒng)畢業(yè)設(shè)計(jì)
- 在線考試系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 在線考試系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 小型在線拍賣系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--在線超市管理系統(tǒng)
- 在線考試系統(tǒng)畢業(yè)設(shè)計(jì)論文
評(píng)論
0/150
提交評(píng)論