|
摘要 當(dāng)?shù)谝慌_(tái)計(jì)算機(jī)出現(xiàn)時(shí),不僅意味著新型革命的到來(lái),也預(yù)示著科技時(shí)代的來(lái)臨。尤其是踏入21世紀(jì)后,計(jì)算機(jī)技術(shù)得到了空前的發(fā)展,而網(wǎng)絡(luò)的普及使得各行各業(yè)逐漸離不開(kāi)電腦。對(duì)于高校而言,在教務(wù)辦公中已經(jīng)越來(lái)越多的實(shí)現(xiàn)了自動(dòng)化,既提高了工作的效率,也規(guī)范了教學(xué)的操作,增加了科學(xué)性。 在分析以往一些排課系統(tǒng)的基礎(chǔ)上,本設(shè)計(jì)提出一個(gè)基于動(dòng)態(tài)加權(quán)算法(即貪婪法)的排課系統(tǒng)設(shè)計(jì)方法,采用手動(dòng)預(yù)排、自動(dòng)排課、手動(dòng)調(diào)節(jié)的三級(jí)排課模式,并對(duì)一些具體的技術(shù)問(wèn)題做出相應(yīng)安排。在功能方面,它能實(shí)現(xiàn)查閱、修改、添加等比較基本的功能,也能夠?qū)崿F(xiàn)自動(dòng)排課、權(quán)限管理等較復(fù)雜的功能。本設(shè)計(jì)采用C/S模式,主要用Delphi7.0作為前臺(tái)開(kāi)發(fā)工具,用SQL Server2003作為后臺(tái)數(shù)據(jù)庫(kù)。經(jīng)過(guò)測(cè)試后,本設(shè)計(jì)已可達(dá)到預(yù)想中的效果,能夠?qū)崿F(xiàn)簡(jiǎn)易的功能。 1引言 隨著計(jì)算機(jī)的發(fā)展和教育改革的不斷深入,計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的不斷成熟,綜合教學(xué)網(wǎng)絡(luò)已廣泛應(yīng)用于學(xué)校教學(xué)、管理的各個(gè)領(lǐng)域,特別是教務(wù)排課系統(tǒng)的應(yīng)用。它代表著學(xué)校教學(xué)管理的水平,是現(xiàn)代化管理的手段。目前大多數(shù)教務(wù)排課系統(tǒng)是采用各教學(xué)單位進(jìn)行教學(xué)任務(wù)的指派,然后將教學(xué)任務(wù)單提交教務(wù)科,教務(wù)人員將數(shù)據(jù)輸入計(jì)算機(jī),進(jìn)行排課、打印課程表等工作。這種教務(wù)排課系統(tǒng)只是在一定程度上減輕了教務(wù)人員排課的負(fù)擔(dān)。 近幾年來(lái),我國(guó)高等教育事業(yè)的快速發(fā)展,高校新生的擴(kuò)招力度加大,各個(gè)高校中的多個(gè)校區(qū)、多個(gè)學(xué)院的教學(xué)管理模式已經(jīng)隨處可見(jiàn),各高校都面臨著教室資源緊張的問(wèn)題。原來(lái)每個(gè)班有一個(gè)固定教室的模式已不存在,甚至原來(lái)一個(gè)系專(zhuān)用的教學(xué)樓也要考慮參加全校的教室資源統(tǒng)一調(diào)整?,F(xiàn)在的本科院校包括研究生在內(nèi),一般都有上萬(wàn)人或幾萬(wàn)人的規(guī)模。要在每個(gè)學(xué)期末的一個(gè)短時(shí)間內(nèi)拿出一份涉及到有關(guān)全校教室統(tǒng)調(diào)的課表來(lái),對(duì)高校的教務(wù)處來(lái)說(shuō)確實(shí)是一個(gè)很艱巨的任務(wù)。 排課系統(tǒng)的主要任務(wù)是根據(jù)現(xiàn)有的教學(xué)資源對(duì)課程進(jìn)行合理的安排。由于高校班級(jí)數(shù)、課程門(mén)數(shù)較多,每門(mén)課有涉及很多信息,如果用手工進(jìn)行排課,不可避免地出現(xiàn)教室資源沖突或教師資源沖突的情況。 如何更有效地利用人力、物力資源,充分發(fā)揮計(jì)算機(jī)的輔助作用,減輕教務(wù)人員的工作強(qiáng)度,在對(duì)需求進(jìn)行詳細(xì)的分析后,本文提出了基于教學(xué)大綱的教務(wù)排課設(shè)計(jì)思想,并對(duì)其算法進(jìn)行了描述。本論文就該教務(wù)排課系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)進(jìn)行了分析探討:首先對(duì)系統(tǒng)的需求分析做了敘述,然后介紹了系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),最后進(jìn)行了系統(tǒng)測(cè)試。本系統(tǒng)采用Delphi7.0作為前臺(tái)開(kāi)發(fā)工具,采用SQL Server 2003作為后臺(tái)數(shù)據(jù)庫(kù)。 2基本理論知識(shí)介紹 2.1SQL Server2003數(shù)據(jù)庫(kù)簡(jiǎn)介 Microsoft SQL Server2003是Microsoft公司繼SQL Server 6.5和SQL Server7.0以后,推出的又一改進(jìn)的新版關(guān)系型數(shù)據(jù)管理系統(tǒng)。它能使用戶(hù)快捷地管理數(shù)據(jù)庫(kù)和開(kāi)發(fā)應(yīng)用程序。SQL Server2003使用了先進(jìn)的數(shù)據(jù)庫(kù)結(jié)構(gòu),與Windows DNA緊密集成,具有強(qiáng)大的Web功能,它可以利用高端硬件平臺(tái)以及最新網(wǎng)絡(luò)和存儲(chǔ)技術(shù),可以為最大的Web站點(diǎn)和企業(yè)應(yīng)用提供優(yōu)良的擴(kuò)展性和可靠性,使用戶(hù)能夠在Internet領(lǐng)域快速建立服務(wù)系統(tǒng),為占領(lǐng)市場(chǎng)贏(yíng)得寶貴的時(shí)間。同時(shí),SQL Server2003還為用戶(hù)提供了重要的安全性功能的增強(qiáng),為用戶(hù)的數(shù)據(jù)安全提供了可靠的保證。另外,SQL Server2003在數(shù)據(jù)庫(kù)服務(wù)器自動(dòng)管理技術(shù)方面處于數(shù)據(jù)庫(kù)領(lǐng)域的領(lǐng)先地位,它可以使用戶(hù)免去繁瑣復(fù)雜的工作 量,從而有精力處理更重要的問(wèn)題,使用系統(tǒng)在商業(yè)戰(zhàn)略上占得先機(jī)。 關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)是當(dāng)前最流行的數(shù)據(jù)庫(kù)管理系統(tǒng)。它是一個(gè)非常復(fù)雜的系統(tǒng)軟件,對(duì)數(shù)據(jù)庫(kù)的所有操作,包括定義、查詢(xún)、更新和各種運(yùn)行控制最終都通過(guò)它來(lái)實(shí)現(xiàn)的,因此它是使數(shù)據(jù)庫(kù)系統(tǒng)具有數(shù)據(jù)共享、并發(fā)訪(fǎng)問(wèn)、數(shù)據(jù)獨(dú)立等特性的根本保證。目前,Microsoft SQL Server2003是在成熟和強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)中最受歡迎、應(yīng)用最廣泛的一個(gè)。 就關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)而言,它是位于用戶(hù)與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,它主要負(fù)責(zé)強(qiáng)化數(shù)據(jù)庫(kù)的結(jié)構(gòu),簡(jiǎn)單來(lái)說(shuō)包括如下功能: (1)維持?jǐn)?shù)據(jù)庫(kù)中數(shù)據(jù)的關(guān)系。 (2)保障數(shù)據(jù)的正確存儲(chǔ),即保障定義數(shù)據(jù)之間的關(guān)系的種種規(guī)則不會(huì)被違背。 (3)在系統(tǒng)出錯(cuò)時(shí),把數(shù)據(jù)恢復(fù)到一個(gè)能保證一致性的狀態(tài)。 SQL Server2003系統(tǒng)之所以成為目前流行的大型商用數(shù)據(jù)庫(kù)系統(tǒng),有著其深刻的內(nèi)在因素,這與它鮮明的特點(diǎn)是分不開(kāi)的: (1)與Internet的高度集成。 (2)高伸縮性和適應(yīng)性。 (3)企業(yè)級(jí)數(shù)據(jù)庫(kù)功能強(qiáng)。 (4)易于安裝和使用。 (5)具有決策支持的資料倉(cāng)庫(kù)。 2.2Delphi7.0簡(jiǎn)介 Delphi是Borland公司發(fā)布的用于開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的工具,它是目前開(kāi)發(fā)客戶(hù)/服務(wù)器數(shù)據(jù)庫(kù)應(yīng)用程序的強(qiáng)有力的工具。Delphi是具有可視化界面的面向?qū)ο缶幊陶Z(yǔ)言.而最新的Delphi7.0具有以下新特點(diǎn): 和以往Delphi的每一個(gè)新版本一樣,Delphi7繼續(xù)改善了開(kāi)發(fā)環(huán)境,幫助程序員提高效率。Delphi7在集成開(kāi)發(fā)環(huán)境中加入了很多讓程序員愛(ài)不釋手的新功能,下面是對(duì)它們的一個(gè)簡(jiǎn)單介紹。 (1)Code Complete(代碼完成) Code Complete功能在Delphi5中就已經(jīng)加入了,這項(xiàng)功能非常受程序員的歡迎,因?yàn)镃ode Complete可以大幅度地減少程序員需要鍵入的程序代碼,并且減少鍵入錯(cuò)誤。Delphi7的Code Complete功能在原有的基礎(chǔ)上繼續(xù)改善,新的Code Complete窗口不但可以由程序員自行調(diào)整大小,而且可以使用不同的顏色代表不同的對(duì)象,例如變量、方法和特性等。 (2)Object TreeView(對(duì)象樹(shù)視圖) 另外一個(gè)新功能就是Delphi7的Object TreeView窗口。這個(gè)新的窗口除 了可以顯示窗體中所有的對(duì)象之外,也可以以分層方式表達(dá)組件之間的關(guān)系。當(dāng)程序員在Object TreeView窗口中單擊了一個(gè)組件之后,這個(gè)組件會(huì)立刻出現(xiàn)在對(duì)象查看器之中,這時(shí)程序員可以改變這個(gè)對(duì)象的特性值和事件處理程序。 當(dāng)窗體復(fù)雜,擁有大量的組件時(shí),Object TreeView窗口可以讓用戶(hù)迅速找到這個(gè)組件,并且知道與當(dāng)前組件相關(guān)的組件,非常方便。 (3)可定制的View窗口 Delphi7最強(qiáng)勁的集成開(kāi)發(fā)環(huán)境功能應(yīng)該要算是新的可定制的View窗口了。在Delphi7中,編輯器不但可以讓程序員觀(guān)看和編輯Object Pascal的程序代碼,而且如果程序員編輯的是Web應(yīng)用程序,那么還可以直接在編輯器中查看HTML程序代碼、腳本語(yǔ)言程序代碼,預(yù)覽Web應(yīng)用程序執(zhí)行結(jié)果的畫(huà)面以及Web 應(yīng)用程序產(chǎn)生的HTML程序代碼。 (4)新添加Indy Intercepts和Indy I/O Handler構(gòu)件組 企業(yè)版的Delphi7中,這兩個(gè)構(gòu)件組基本上提供了針對(duì)現(xiàn)今流行的Internet協(xié)議編程的構(gòu)件。可以進(jìn)行更為底層的操作。 (5)新添加IW Standard、IW Data、IW Client Side和IW Control構(gòu)件組 這些構(gòu)件也是Delphi7的顯著改革之一,將Intraweb集成到了標(biāo)準(zhǔn)的構(gòu)件板中,我們就可以很方便地開(kāi)發(fā)基于Web的應(yīng)用程序。 (6)新添加的Rave報(bào)表構(gòu)件組 Delphi7的標(biāo)準(zhǔn)構(gòu)件板中已經(jīng)沒(méi)有了原來(lái)的QuickReport構(gòu)件組,取而代之的是RAVE報(bào)表制作組件,并且提供專(zhuān)門(mén)的報(bào)表制作工具Rave Designer。 Rave報(bào)表構(gòu)件是一個(gè)可視化的報(bào)表設(shè)計(jì)工具,大大簡(jiǎn)化了在應(yīng)用程序中加入報(bào)表的工作。用Rave報(bào)表構(gòu)件可以做出各種不同的報(bào)表,從最簡(jiǎn)單的到非常復(fù)雜、個(gè)性化的報(bào)表都可以完成。它的功能包括:圖片支持、對(duì)齊、精確頁(yè)面定位、打印機(jī)設(shè)置、字體控制、打印預(yù)覽、報(bào)表內(nèi)容重用,并支持PDF、HTML、RTF 等文本格式。隨著Active X數(shù)據(jù)對(duì)象(ADO)的推出,它能讓?xiě)?yīng)用程序通過(guò)任意的OLE DB提供者訪(fǎng)問(wèn)和操作數(shù)據(jù)庫(kù),其強(qiáng)大功能使得任何數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)都黯然失色。 而在數(shù)據(jù)集方面,與BDE不同ADO是Microsoft推出的新一代數(shù)據(jù)訪(fǎng)問(wèn)規(guī)范,在Delphi7中它的地位等同于一個(gè)和BDE并列的數(shù)據(jù)引擎。本系統(tǒng)采用的就是ADO數(shù)據(jù)集。 雖然ADO的功能比BDE比起來(lái)弱一些,但和BDE相比ADO有一些重要的優(yōu)勢(shì),比如: ADO將會(huì)內(nèi)制在從Windows2000開(kāi)始Microsoft新出的所有操作系統(tǒng)中,單 就這一點(diǎn)就足以給其他的數(shù)據(jù)訪(fǎng)問(wèn)方式畫(huà)上問(wèn)號(hào)。 在Delphi7中提供了對(duì)ADO的全力支持,提供了很多ADO組件,還增加了一些新的字段類(lèi)型如:WideString,GUID,Variant,interface,IDispatch等。 ADO是面向各種數(shù)據(jù)的層次很高的接口,它提供了強(qiáng)大的數(shù)據(jù)訪(fǎng)問(wèn)功能,可以訪(fǎng)問(wèn)的數(shù)據(jù)對(duì)象有: a.關(guān)系數(shù)據(jù)庫(kù)中的各種數(shù)據(jù); b.非關(guān)系型數(shù)據(jù)庫(kù),如層次型數(shù)據(jù)庫(kù),網(wǎng)狀數(shù)據(jù)庫(kù)等; c.電子郵件與文件系統(tǒng); d.文本與圖象,聲音; e.客戶(hù)事務(wù)對(duì)象。 Delphi5.0版本成功地引入了這項(xiàng)技術(shù),極大程度地?cái)U(kuò)展了數(shù)據(jù)庫(kù)處理能力,為Delphi程序員帶來(lái)前所未有的廣闊空間。Delphi以其功能強(qiáng)大、簡(jiǎn)單易用等諸多特性,深受編程人員的歡迎。所以我選擇了Delphi7.0作為開(kāi)發(fā)工具。 2.3C/S模式介紹 C/S(Client/Server)結(jié)構(gòu),即大家熟知的客戶(hù)機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開(kāi)銷(xiāo)。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的Web應(yīng)用發(fā)展,Web和Client/Server應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶(hù)都可以訪(fǎng)問(wèn)新的和現(xiàn)有的應(yīng)用系統(tǒng),通過(guò)現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。 3教務(wù)排課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 3.1教務(wù)排課系統(tǒng)簡(jiǎn)介 課程編排作為高等院校教務(wù)管理中的一項(xiàng)重要而且繁重的工作,從一般意義上講,其實(shí)質(zhì)就是對(duì)學(xué)校學(xué)期開(kāi)設(shè)的每門(mén)課程合理地分配時(shí)間資源和教室資源的過(guò)程。其中涉及教師、教室、時(shí)間和學(xué)生等多種因素,人為要求也比較多,另外由于這幾年的高校擴(kuò)招導(dǎo)致教室資源比較緊張,諸多因素就加重了課程編排工作的難度和復(fù)雜度。如果完全由人工來(lái)編排課表,費(fèi)時(shí)費(fèi)力,其科學(xué)性、方便性更是難以保證,所以利用計(jì)算機(jī)進(jìn)行自動(dòng)排課的想法自然而生。目前,經(jīng)研究用來(lái)解決排課問(wèn)題的方法有:模擬手工排課法、圖論方法、模擬退火法等。國(guó)內(nèi)針對(duì)課表問(wèn)題也相繼研制出了一些排課軟件,但是軟件的通用性差,因各學(xué)校教學(xué)資源不盡相同,管理課表的方法也不乏個(gè)性,很難完全規(guī)范化、程序化。本文根據(jù)某高校的實(shí)際情況,結(jié)合以往的排課經(jīng)驗(yàn),通過(guò)靜態(tài)設(shè)置教學(xué)任務(wù)的優(yōu)先級(jí)、分 配時(shí)間片資源和教室資源時(shí)根據(jù)相關(guān)參數(shù)動(dòng)態(tài)設(shè)置其優(yōu)先級(jí)的算法設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)高校智能排課系統(tǒng)。如何充分利用有限的教室和時(shí)間資源合理地編排課表,是本文致力研究的主要問(wèn)題。 3.2教務(wù)排課系統(tǒng)分析 3.2.1算法分析 在排課系統(tǒng)中,關(guān)鍵的部分在于算法的選擇。好的算法不僅可以節(jié)省時(shí)間,更可以提高效率。 幾種排課算法比較: (1)自動(dòng)排課算法:此算法以課程為中心,進(jìn)行搜索匹配,取最先匹配的值;具有占有空間少,運(yùn)算速度快的特點(diǎn)。但其未對(duì)數(shù)據(jù)進(jìn)行擇優(yōu)選取,所以不能對(duì)教學(xué)資源(教師、教室)合理分配,也不能滿(mǎn)足一些特殊要求(比如有些老師喜歡上午上課,有些老師偏向于集中式上課;有些課程安排在上午更合適些,有些課程不能安排到上午等)。 (2)基于優(yōu)先級(jí)的排課算法:從數(shù)學(xué)上講,排課問(wèn)題是一個(gè)在時(shí)間、教師、學(xué)生和教室四維空間,以教學(xué)計(jì)劃和各種特殊要求為約束條件的組合規(guī)劃問(wèn)題。其實(shí)質(zhì)就是解決各因素之間的沖突。在設(shè)計(jì)算法時(shí),為了降低課程調(diào)度的算法復(fù)雜性,可采用化整為零的思想 此算法對(duì)班級(jí)及教室劃分等價(jià)類(lèi),對(duì)學(xué)校資源進(jìn)行了合理的利用。但對(duì)一些特殊要求還是無(wú)法具體體現(xiàn)出來(lái)。 (3)基于時(shí)間片優(yōu)先級(jí)排課算法:此算法屬于貪婪算法。每次對(duì)教師、教室資源的選取都是取當(dāng)前最優(yōu)的數(shù)據(jù)。按照教師、教室、班級(jí)的優(yōu)先級(jí)取最優(yōu)值,所以對(duì)各對(duì)象的一些特殊要求會(huì)很明顯的體現(xiàn)出來(lái),在教師、教室資源不緊缺的情況下,此算法能排出相對(duì)合理的課程。相對(duì)于之前介紹的兩個(gè)算法,在處理各種特殊要求的能力上有明顯的優(yōu)勢(shì)。 本系統(tǒng)采用的是動(dòng)態(tài)加權(quán)算法即貪婪算法。貪婪法是一種不追求最優(yōu)解,只希望得到較為滿(mǎn)意解的方法。貪婪法一般可以快速得到滿(mǎn)意的解,因?yàn)樗∪チ藶檎易顑?yōu)解要窮盡所有可能而必須耗費(fèi)的大量時(shí)間。貪婪法常以當(dāng)前情況為基礎(chǔ)作最優(yōu)選擇,而不考慮各種可能的整體情況。在解決排課沖突時(shí),為減少貪婪法的缺點(diǎn),特在自動(dòng)排課功能后加入手動(dòng)調(diào)節(jié)功能,使用者可對(duì)不滿(mǎn)意的課程再次調(diào)節(jié)。以下為算法過(guò)程: (1)初始化排課數(shù)組、課程申請(qǐng)數(shù)組。 (2)賦初始權(quán)值并對(duì)課程申請(qǐng)數(shù)組排序。 (3)將課程申請(qǐng)碼按序進(jìn)行排課,結(jié)果存儲(chǔ)在排課數(shù)組中。 (4)排課思想是將一星期分為幾個(gè)層:星期一至五的上午和下午一二節(jié)、 星期一至五的上午及下午三四節(jié)、星期六全天、星期一至五的晚間。對(duì)不同的層進(jìn)行排課,可避免同一天同一老師授同一門(mén)課的問(wèn)題。 (5)若全部排完,則轉(zhuǎn)(7);否則,計(jì)算并重新賦相應(yīng)權(quán)值。 (6)對(duì)申請(qǐng)數(shù)組重新排序,轉(zhuǎn)到(3)。 (7)結(jié)束。 3.2.2算法流程圖 3.2.3功能分析 3.2.4需求分析 3.3排課系統(tǒng)的功能模塊 在系統(tǒng)分析的基礎(chǔ)上,我們提出了系統(tǒng)的功能模塊 前面描述了教務(wù)排課系統(tǒng)的功能模塊劃分,但沒(méi)給出各模塊之間的關(guān)系。在本系統(tǒng)中,可以把模塊分為三個(gè)功能集合: (1)系統(tǒng)管理功能集合。該集合包括權(quán)限管理和系統(tǒng)幫助兩個(gè)模塊。當(dāng)使用者為管理員時(shí)可進(jìn)行權(quán)限管理功能,它能夠添加新的使用者,也可對(duì)已有的用戶(hù)進(jìn)行名稱(chēng)、密碼的修改和刪除。系統(tǒng)幫助功能介紹了開(kāi)發(fā)系統(tǒng)的相干信息。 (2)基本信息管理功能集合。該集合包括教師信息管理、教室信息管理、班級(jí)信息管理、課程信息管理、課程申請(qǐng)管理五個(gè)模塊。在該集合內(nèi)可查看相應(yīng)的數(shù)據(jù)表,對(duì)于管理員級(jí)別的用戶(hù)可對(duì)以上表的內(nèi)容進(jìn)行添加、修改、刪除的功能。 對(duì)于一般用戶(hù),只能實(shí)現(xiàn)查看信息的基本功能。 (3)排課管理功能集合。在基本信息設(shè)置模塊中,可查看當(dāng)前日期,又可設(shè)置限制排課的條件,如不加限制排課、不在晚上和星期六排課等。而一般用戶(hù)只能查看管理員設(shè)置的條件。在排課時(shí),管理員先在課程信息管理中設(shè)置好要預(yù)先排課的課程,然后調(diào)節(jié)限制排課的條件,就可以使用自動(dòng)排課功能。用戶(hù)可在排好后的課表中查看課表,對(duì)于不滿(mǎn)意的課程安排可用手動(dòng)進(jìn)行相應(yīng)的調(diào)節(jié),而手動(dòng)排課也可針對(duì)實(shí)驗(yàn)課等靈活性的課程。 3.4數(shù)據(jù)庫(kù)設(shè)計(jì) (1)課程信息數(shù)據(jù)表 其中課程代碼唯一標(biāo)識(shí)一門(mén)課程,課程類(lèi)型用來(lái)確定課程優(yōu)先級(jí),而課程性質(zhì)是課程所需教室條件的信息。 字段名稱(chēng)數(shù)據(jù)結(jié)構(gòu)說(shuō)明 課程名稱(chēng)varchar 課程類(lèi)別varchar 考核方式varchar有考試、考查等 課程性質(zhì)varchar有公共課、必修課等 說(shuō)明varchar (2)班級(jí)信息數(shù)據(jù)表 其中申請(qǐng)代碼唯一標(biāo)識(shí)一個(gè)申請(qǐng)記錄,是否合班,合班班級(jí),是否分班分別針對(duì)合班課與分班課設(shè)置。 字段名稱(chēng)數(shù)據(jù)結(jié)構(gòu)說(shuō)明 班級(jí)名稱(chēng)varchar 班級(jí)人數(shù)int 專(zhuān)業(yè)varchar包括系別 年級(jí)varchar 班級(jí)碼int班級(jí)的編號(hào) (3)教室信息數(shù)據(jù)表 其中教室代碼唯一標(biāo)識(shí)一個(gè)教室,教室容量和性質(zhì)分別判斷是否與班級(jí)和課程性質(zhì)的相匹配。 字段名稱(chēng)數(shù)據(jù)結(jié)構(gòu)說(shuō)明 教室名稱(chēng)varchar 教室容量int即最大限度的上課人數(shù) 教室性質(zhì)varchar一般教室、多媒體教室等 教室碼int教室的編號(hào) (4)老師信息數(shù)據(jù)表 其中教師代碼唯一標(biāo)識(shí)一位教師,教師職稱(chēng)和學(xué)位確定教師優(yōu)先級(jí),住所判斷老師是否在校外居住,排課時(shí)給予一定的優(yōu)先級(jí)。 (5)課表信息數(shù)據(jù)表 表5是在用戶(hù)使用系統(tǒng)的“保存課表”功能鍵時(shí)自動(dòng)生成。它實(shí)現(xiàn)自動(dòng)清除、自動(dòng)添加,具有流動(dòng)性和可操作性。 字段名稱(chēng)數(shù)據(jù)結(jié)構(gòu)說(shuō)明 申請(qǐng)碼int課程的編號(hào) 課程名varchar無(wú) 星期一varchar無(wú) 星期二varchar無(wú) 星期三varchar無(wú) 星期四varchar無(wú) 星期五varchar無(wú) 星期六varchar無(wú) 教室名varchar無(wú) 老師名varchar無(wú) 班級(jí)名varchar無(wú) 周課數(shù)int一周上課的次數(shù) 學(xué)分int無(wú) 開(kāi)始周int從第幾周開(kāi)始上課 周數(shù)int共上幾周的課時(shí) 是否預(yù)排課bit無(wú) 3.5系統(tǒng)流程及代碼分析 3.5.1系統(tǒng)流程圖  系統(tǒng)流程圖主要針對(duì)排課過(guò)程,即當(dāng)用戶(hù)設(shè)置好相應(yīng)的排課條件、點(diǎn)擊“自動(dòng)排課”項(xiàng),系統(tǒng)所進(jìn)行的流程。其中的“沖突解決”項(xiàng)有兩種解決方法:一是 在系統(tǒng)運(yùn)行時(shí)進(jìn)行的自我調(diào)節(jié),另一種是運(yùn)用手動(dòng)排課功能解決?!皩?xiě)入課表”項(xiàng),是在運(yùn)行時(shí)已完成寫(xiě)入課表的功能,若用戶(hù)需要,可單擊“保存課表”項(xiàng)生成Excel格式的文本。 3.5.2代碼分析 本系統(tǒng)主要由三部分構(gòu)成:權(quán)限管理,各類(lèi)信息管理,排課管理。 (1)權(quán)限管理模塊 該模塊可實(shí)現(xiàn)管理員級(jí)別用戶(hù)可以對(duì)所有用戶(hù)進(jìn)行添加、刪除、修改的功能。以下摘錄保存功能的代碼: procedure Tfrm_yh.save_ButtonClick(Sender:TObject); begin if(bSign=0) then MessageDlg('請(qǐng)先添加或修改記錄!', mtInformation, [mbOk],0) else begin if(bSign=1)//添加 then with Table1do begin Table1.First; while(not Eof)and(FieldValues['用戶(hù)名稱(chēng)']Name_Edit.Text)do Next; if FieldValues['用戶(hù)名稱(chēng)']=Name_Edit.Text then ShowMessageFmt('已有一個(gè)名為%s的用戶(hù)' #13 '請(qǐng)選另一個(gè)用戶(hù)名',[Name_Edit.Text]) else if((Name_Edit.Text='')or(PW_Edit.Text='')or(QX_ComboBox.Text= '')) then ShowMessage('你輸入的信息不全!') else InsertRecord([Name_Edit.Text, PW_Edit.Text, QX_ComboBox.Text]); ShowMessage('添加用戶(hù)成功!'); end else begin Table1.Delete; Table1.InsertRecord([Name_Edit.Text, PW_Edit.Text, QX_ComboBox.Text]); MessageDlg('修改成功!', mtInformation, [mbOk], 0); end; Name_Edit.Text:=''; PW_Edit.Text:=''; QX_ComboBox.Text:=''; Name_Edit.SetFocus; Delete_Button.Enabled:=true; Modify_Button.Enabled:=true; end (2)各類(lèi)信息管理模塊 該模塊包括課程申請(qǐng)管理、教室管理、老師管理、班級(jí)管理、課程信息管理。以下摘錄課程申請(qǐng)管理中的保存功能代碼: procedure Tfrm_Apply.Save_ButtonClick(Sender:TObject); begin if(iSign=0) then ShowMessage('請(qǐng)先添加或修改記錄!') else if(iSign=1)//添加 then begin if((kcname_ComboBox.Text='') or(lsname_ComboBox.Text='') or(bjname_ComboBox.Text='') or(zks_Edit.Text='0') or(xf_Edit.Text='0') or(bweek_edit.Text='0') or(weeknum_edit.Text='0')) then ShowMessage('你輸入的信息不全!') else begin Apply_ADOTable.InsertRecord([NULL, kcname_ComboBox.Text,'','','','','','','',lsname_ComboBox.Text,bjname_ComboBo x.Text,(StrToInt(zks_edit.Text)),(StrToInt(xf_edit.Text)),(StrToInt(bweek_edit.Text)),( StrToInt(weeknum_edit.Text)),YP_RadioButton.Checked]); ShowMessage('添加成功!'); ClearCaption; EditUnEnable; ButtonEnable; end end else begin with Apply_ADOTable do begin Edit; FieldValues['課程名稱(chēng)']:=kcname_ComboBox.Text; FieldValues['教師姓名']:=lsname_ComboBox.Text; FieldValues['班級(jí)名稱(chēng)']:=bjname_ComboBox.Text; FieldValues['周課數(shù)']:=StrToInt(zks_edit.Text); FieldValues['學(xué)分']:=StrToInt(xf_edit.Text); FieldValues['開(kāi)始周']:=StrToInt(bweek_edit.Text); FieldValues['周數(shù)']:=StrToInt(weeknum_edit.Text); FieldValues['是否預(yù)排課']:=YP_RadioButton.Checked; Post; end; ShowMessage('修改成功!'); ClearCaption; bSign:=false; EditUnEnable; ButtonEnable; end; iSign:=0; Save_Button.Enabled:=false; end; (3)排課管理模塊 該模塊可進(jìn)行預(yù)排課的設(shè)置、自動(dòng)排課、手動(dòng)調(diào)節(jié)功能。在自動(dòng)排課中分為三步:首先賦權(quán)值,其次再檢測(cè)各種沖突,最后實(shí)現(xiàn)排課過(guò)程。 a.權(quán)值計(jì)算: 設(shè)置的權(quán)值有:課程信息的權(quán)值(包括課程類(lèi)別、課程性質(zhì)),班級(jí)信息的權(quán)值(包括年級(jí)),教師信息的權(quán)值(包括職稱(chēng)、學(xué)位)。 以班級(jí)信息權(quán)值設(shè)置為例: with bjADOTable do for i:=0to appNum-1do begin First; while FieldValues['班級(jí)名稱(chēng)']app[i].className do Next; if FieldValues['年級(jí)']='1年級(jí)'then app[i].currentValue:=app[i].currentValue 12 else if FieldValues['年級(jí)']='2年級(jí)'then app[i].currentValue:=app[i].currentValue 9 else if FieldValues['年級(jí)']='3年級(jí)'then app[i].currentValue:=app[i].currentValue 6 else if FieldValues['年級(jí)']='4年級(jí)'then app[i].currentValue:=app[i].currentValue 3; b.檢測(cè)沖突: 檢測(cè)的沖突有:在同一天是否已經(jīng)排過(guò)課,(預(yù))排課的教室沖突,所安排的教室是否合適(包括教室人數(shù)、容量、性質(zhì))。 以(預(yù))排課的教室沖突為例: function Tfrm_Main.dynamicTest(day:integer;time:integer;current: integer):Boolean; var t1,t2,room:integer; begin dynamicTest:=true; for room:=0to roomNum-1dor if(arr[day][time][room][0]=0)then continue else begin t1:=0; t2:=0; while app[t1].appKeyarr[day][time][room][0]do t1:=t1 1; if arr[day][time][room][1]0then while app[t2].appKeyarr[day][time][room][1]do t2:=t2 1 else t2:=t1; if((app[t1].teaName=app[current].teaName)or (app[t1].className=app[current].className)or (app[t2].teaName=app[current].teaName)or (app[t2].className=app[current].className))then begin dynamicTest:=false; break; end; end; end; c.排課算法: 摘錄設(shè)置為“不加限制排課”的代碼為例: procedure Tfrm_Main.FirstFind1(m:integer;var a:appRecord); var i,j,k:Integer; succ:boolean; begin i:=0;//星期 j:=0;//節(jié)數(shù) k:=0;//教室號(hào) succ:=true; while((arr[i][j][k][0]0)or (not RoomCheck(a,k))or (not dynamicTest(i,j,m)) )do if(k k:=k 1 else if((i j:=j 1; k:=0; end else if((i i:=i 1; j:=j-1; k:=0; end else if((i=4)and((j=1)or(j=3)))then begin i:=i-4; j:=j 1; k:=0; end else if((i i:=i 1; k:=0; end else if((i=4)and(j=4))then begin i:=i 1; j:=j-4; k:=0; end else if((i=5)and(j begin j:=j 1; k:=0; end else begin succ:=false; break; end; if(succ=true)then begin arr[i][j][k][0]:=a.appkey; a.courseNum:=a.courseNum-1; TotalCourseNum:=TotalCourseNum-1; a.roomkey:=k; a.isFirst:=false; end else SetException(a); end; 4系統(tǒng)測(cè)試 4.1測(cè)試環(huán)境 1.硬件環(huán)境 ?CPU:Intel Pentium3500MHz ?硬盤(pán):40GB ?內(nèi)存:256MB 2.軟件環(huán)境 ?系統(tǒng)軟件:Windows XP ?工具軟件:Delphi7.0、SQL Server2003 4.2主要模塊測(cè)試 (1)管理員權(quán)限 經(jīng)過(guò)上面各節(jié)的工作后,基本上完成了一個(gè)檔案管理系統(tǒng)的開(kāi)發(fā)。經(jīng)過(guò)編譯后,在菜單中選擇Run-->Run命令,則會(huì)出現(xiàn)系統(tǒng)的登錄界面。 a.登錄界面 說(shuō)明:輸入用戶(hù)名和密碼,單擊“確定”按鈕,當(dāng)身份驗(yàn)證成功后進(jìn)入檔案管理系統(tǒng)主界面。單擊“取消”退出登錄窗口。 b.主界面, 說(shuō)明:主界面由三部分組成:基本信息管理、基本條件設(shè)置、預(yù)排課、自動(dòng)排課及手動(dòng)調(diào)節(jié)。在菜單欄中,分為系統(tǒng)、信息管理、幫助菜單。“系統(tǒng)”菜單含用戶(hù)管理和退出功能。“信息管理”可查看基本信息?!皫椭敝锌刹榭唇虅?wù)排課系統(tǒng)的相應(yīng)信息。 c.如身份驗(yàn)證失敗,則出現(xiàn)如圖7所示的提示信息框 說(shuō)明:點(diǎn)擊“OK”返回登錄界面,重新輸入用戶(hù)名和密碼。 d.點(diǎn)擊“基本信息管理”中的課程申請(qǐng)管理界面為例 說(shuō)明:選中某一記錄后可進(jìn)行刪除和修改的功能,也可直接添加記錄,修改完后點(diǎn)擊保存或退出完成管理。 e.基本條件設(shè)置管理界面 說(shuō)明:教學(xué)公歷上顯示為當(dāng)前日期,“排課條件設(shè)置”中設(shè)置需要的排課條件。 f.排課管理界面 說(shuō)明:點(diǎn)擊“清空”可清空上次所排信息,點(diǎn)擊“自動(dòng)排課”能實(shí)現(xiàn)自動(dòng)排課功能,點(diǎn)擊“檢測(cè)沖突”可檢測(cè)當(dāng)前排課有無(wú)沖突。點(diǎn)擊“保存課表”能將排課信息保存為excel格式。 g.權(quán)限管理界面 說(shuō)明:權(quán)限管理是當(dāng)管理員用戶(hù)在“系統(tǒng)”菜單內(nèi)的設(shè)置。在這里可進(jìn)行用戶(hù)的添加、刪除、修改等功能。 (2)一般用戶(hù)權(quán)限 一般用戶(hù)與管理員用戶(hù)的區(qū)別在于他只能查看相應(yīng)信息,不能進(jìn)行其他操作。以排課管理界面為例 說(shuō)明:一般用戶(hù)的界面設(shè)計(jì)上與管理員用戶(hù)基本相同,只有某些按鈕被屏蔽,不能實(shí)現(xiàn)相應(yīng)功能。 其中的清空、自動(dòng)排課、保存課表鍵被屏蔽,用戶(hù)無(wú)法進(jìn)行操作。 4.3測(cè)試結(jié)果 教務(wù)排課系統(tǒng)是一款基于動(dòng)態(tài)加權(quán)算法的人性化的教務(wù)軟件,它采用手動(dòng)預(yù)排—>自動(dòng)排課—>手動(dòng)調(diào)節(jié)的三步排課模式,具有以下特點(diǎn): (1)課表合理:具有預(yù)排,合班等功能,排出的課表合理性較強(qiáng)。 (2)排課靈活:采用了局部范圍內(nèi)的動(dòng)態(tài)隨機(jī)加權(quán),排出的課表具有靈活的特點(diǎn),使用者可以在多次排課中選擇自己認(rèn)為合適的課表。 (3)操作便捷:系統(tǒng)界面簡(jiǎn)單明了,用戶(hù)很容易掌握對(duì)排課軟件的使用。 (4)人性化:系統(tǒng)界面美觀(guān),具有很強(qiáng)的交互性。 結(jié)論 在分析以往一些排課系統(tǒng)的基礎(chǔ)上,本設(shè)計(jì)提出一個(gè)基于動(dòng)態(tài)加權(quán)算法(即貪婪法)的排課系統(tǒng)設(shè)計(jì)方案,采用手動(dòng)預(yù)排、自動(dòng)排課、手動(dòng)調(diào)節(jié)的三級(jí)排課模式,并對(duì)一些具體的技術(shù)問(wèn)題做出相應(yīng)安排。該方案采用C/S模式,采用Delphi7.0作為前臺(tái)開(kāi)發(fā)工具,用SQL Server2003作為后臺(tái)數(shù)據(jù)庫(kù)。系統(tǒng)能實(shí)現(xiàn)查閱、修改、添加等比較基本的功能,也能夠?qū)崿F(xiàn)自動(dòng)排課、權(quán)限管理等較復(fù)雜的功能。經(jīng)過(guò)測(cè)試后,該系統(tǒng)達(dá)到了預(yù)想中的效果,能夠?qū)崿F(xiàn)簡(jiǎn)易的功能。 本文的主要工作有: 1)介紹了教務(wù)排課系統(tǒng)在高校教學(xué)日常工作中使用的必要性和重要性,對(duì)CS模式、SQL Server及Delphi都進(jìn)行了簡(jiǎn)單的介紹; 2)闡述了貪婪法的基本實(shí)現(xiàn)原理和算法流程; 3)模擬了高校教務(wù)排課系統(tǒng)的開(kāi)發(fā)需求,提出了比較詳細(xì)的解決方案,闡明了系統(tǒng)的功能模塊的劃分及相互之間的關(guān)系,并詳細(xì)描述了每個(gè)模塊的實(shí)現(xiàn)過(guò)程或者實(shí)現(xiàn)方法; 本系統(tǒng)也有一些不盡人意的地方。需求分析并沒(méi)有非常細(xì)致全面,軟件的性能、健壯性、使用方便及美觀(guān)等方面離真正的商業(yè)軟件還有一定的差距;系統(tǒng)并沒(méi)有嚴(yán)格考慮安全因素;另外,本系統(tǒng)并沒(méi)有考慮與高校其他軟件系統(tǒng)之間的關(guān)系,比如數(shù)據(jù)一致性等問(wèn)題。這些都有待今后的完善。 經(jīng)過(guò)幾個(gè)月來(lái)的設(shè)計(jì),系統(tǒng)基本滿(mǎn)足排課管理方面的需要。完成后的系統(tǒng)可以實(shí)現(xiàn)諸如權(quán)限管理;不同級(jí)別用戶(hù)的查閱功能;管理員用戶(hù)對(duì)數(shù)據(jù)庫(kù)的管理功能;管理員進(jìn)行的手動(dòng)預(yù)排、自動(dòng)排課、手動(dòng)調(diào)節(jié)等功能。數(shù)據(jù)庫(kù)方面,設(shè)置了教師信息表、課程信息表等基本信息,也有課程申請(qǐng)這類(lèi)動(dòng)態(tài)數(shù)據(jù)表。綜合而言,系統(tǒng)能實(shí)現(xiàn)完整的功能,達(dá)到了預(yù)期的目的。系統(tǒng)設(shè)計(jì)期間,學(xué)習(xí)到了很多課堂上沒(méi)有的知識(shí),增強(qiáng)了動(dòng)手能力和解決實(shí)際問(wèn)題的能力,提高了認(rèn)識(shí)和學(xué)習(xí)新事物的能力,特別是增強(qiáng)了自己在程序設(shè)計(jì)方面的信心和動(dòng)手實(shí)踐能力,這些對(duì)于未來(lái)的工作無(wú)疑將是一筆寶貴的財(cái)富。
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|