




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
智能排課系統(tǒng)設(shè)計與實(shí)現(xiàn)摘要排課,是給學(xué)校各專業(yè)的教學(xué)方案中設(shè)置的課程安排適宜的時間和地點(diǎn),也就是給每個班的課程安排時間和地點(diǎn)。排課工作在教學(xué)管理中很重要也很繁瑣,計算機(jī)智能排課系統(tǒng),可以降低排課人員的工作量,減少排課中的人為因素[1-2]。但排課問題屬于NP問題,即無法直接得到答案,只能通過猜想獲取可能結(jié)果。通常NP問題雖無答案,卻有算法,算法不能直接告訴答案,但可以用來判斷可能的結(jié)果是否正確可行。因此,要做好排課工作,提高排課效率,實(shí)現(xiàn)智能排課是必不可少的。本文在查閱大量相關(guān)文獻(xiàn)的根底上,對高校的排課問題進(jìn)行了分析,設(shè)計和實(shí)現(xiàn)了該功能,此系統(tǒng)主要被分為三個局部:界面的設(shè)計、排課算法的設(shè)計、以及報表的自動生成。本系統(tǒng)是采用MicrosoftVisualStudio2005作為前臺開發(fā)工具,SQLServer2005作為后臺數(shù)據(jù)庫平臺的管理系統(tǒng)。關(guān)鍵詞:智能排課、貪心、分治、VisualStudio2005、SQLServer2005。目錄TOC\o"1-3"\h\z摘要IIAbstractIII1緒論11.1系統(tǒng)開發(fā)背景11.2系統(tǒng)開發(fā)環(huán)境及方法11.2.1.開發(fā)環(huán)境1開發(fā)方法32可行性分析42.1技術(shù)可行性42.2經(jīng)濟(jì)可行性42.3操作可行性52.4法律可行性53系統(tǒng)需求分析63.1系統(tǒng)功能需求63.2系統(tǒng)非功能需求6排課中的根本原那么6排課的根本要求74總體設(shè)計84.1系統(tǒng)總體構(gòu)架84.2系統(tǒng)功能結(jié)構(gòu)84.3排課算法9目前常用算法94.3.2排課問題描述104.3.3排課問題的數(shù)學(xué)表示11排課問題的優(yōu)先級問題11算法思想124.3.6算法分析135數(shù)據(jù)庫設(shè)計145.1系統(tǒng)數(shù)據(jù)表145.2UML建模圖145.3數(shù)據(jù)字典155.4數(shù)據(jù)庫關(guān)系圖186詳細(xì)設(shè)計與實(shí)現(xiàn)196.1數(shù)據(jù)庫訪問模塊196.2條件設(shè)置模塊226.3教學(xué)方案模塊256.4排課模塊266.5課程表查詢模塊44結(jié)束語46致謝47參考文獻(xiàn)48緒論1.1系統(tǒng)開發(fā)背景在高校各項教學(xué)管理工作中,排課一直是最根本的、最重要的工作,其實(shí)質(zhì)就是給教學(xué)方案中設(shè)置的課程安排適宜的時問和地點(diǎn),保證整個教學(xué)工作能夠順利地進(jìn)行;同時,排課工作也是一項很復(fù)雜的工作,排課是一個NP問題,就是始終找不到一個最優(yōu)的方法能夠解決的問題,因?yàn)檫@個問題涉及了多種因素進(jìn)行組合規(guī)劃,有教師、學(xué)生的因素,也有教室的因素。尤其在目前各高校規(guī)模不斷擴(kuò)大,教學(xué)資源面臨緊張,教師總數(shù)缺乏的前提下,排課工作問題更為凸出。隨著計算機(jī)技術(shù)的飛速開展,特別是計算機(jī)的應(yīng)用已普及到經(jīng)濟(jì)和社會生活的各個領(lǐng)域。使原本的舊的管理方法越來越不適應(yīng)現(xiàn)在社會的開展。許多人還停留在以前的手工操作。這大大地阻礙了人類經(jīng)濟(jì)的開展。為了適應(yīng)現(xiàn)代社會人們高度強(qiáng)烈的時間觀念,利用計算機(jī)實(shí)現(xiàn)高校排課系統(tǒng)勢在必行。對于各大高校來說,利用計算機(jī)支持學(xué)校管理員排課,是適應(yīng)現(xiàn)代學(xué)校的制度要求、推動學(xué)校管理走向科學(xué)化、系統(tǒng)化、標(biāo)準(zhǔn)化的必要條件,從而到達(dá)提高校管理效率的目的。給同學(xué)和老師帶來方便。1.2系統(tǒng)開發(fā)環(huán)境及方法.開發(fā)環(huán)境在計算機(jī)硬件和軟件快速開展的今天,計算機(jī)硬件和軟件已經(jīng)遠(yuǎn)遠(yuǎn)滿足本管理系統(tǒng)的要求。在數(shù)據(jù)庫編程工具方面,各種可視化編程方法的出現(xiàn),一改正去程序設(shè)計的概念和方法,用戶用鼠標(biāo)就可以快速、簡捷地創(chuàng)立應(yīng)用程序,極大地提高了編程效率。選用MicrosoftVisualStudio2005中文版數(shù)據(jù)庫開發(fā)的應(yīng)用程序可以獨(dú)立運(yùn)行于windows平臺,而且SQLServer2005產(chǎn)生的數(shù)據(jù)庫適用范圍廣,因此本系統(tǒng)采用MicrosoftVisualStudio2005中文版來完成高校排課系統(tǒng)的設(shè)計。VisualStudio是微軟公司推出的開發(fā)環(huán)境。是目前最流行的Windows平臺應(yīng)用程序開發(fā)環(huán)境。2005年,微軟發(fā)布了VisualStudio2005。.NET字眼從各種語言的名字中被抹去,但是這個版本的VisualStudio仍然還是面向.NET框架的〔版本2.0〕。它同時也能開發(fā)跨平臺的應(yīng)用程序,如開發(fā)使用微軟操作系統(tǒng)的的程序等。總體來說是一個非常龐大的軟件,甚至包含代碼測試功能。這個版本的VisualStudio包含有眾多版本,分別面向不同的開發(fā)角色。同時還永久提供免費(fèi)的VisualStudioExpress版本。使用VisualStudio2005,專業(yè)開發(fā)人員能夠:〔1〕使用改良后的可視化設(shè)計工具、編程語言和代碼編輯器,享受高效率的開發(fā)環(huán)境;〔2〕在統(tǒng)一的開發(fā)環(huán)境中,開發(fā)并調(diào)試多層次的效勞器應(yīng)用程序;〔3〕使用集成的可視化數(shù)據(jù)庫設(shè)計和報告工具,創(chuàng)立SQLServer2005解決方案;〔4〕使用VisualStudioSDK創(chuàng)立可以擴(kuò)展VisualStudioIDE的工具[6-8]。VB2005是visualStudio2005中最重要的組件之一,是新一代的VB,但它并不是VB.NET2003的簡單升級,從開發(fā)界面到控件,VB2005與VB.NET2003之間還是有比擬大的區(qū)別[6]。新一版SQLServer的設(shè)計目標(biāo)正是幫助企業(yè)單位應(yīng)對上述挑戰(zhàn)。作為Microsoft公司的下一代數(shù)據(jù)管理與分析軟件,SQLServer2005有助于簡化企業(yè)數(shù)據(jù)與分析應(yīng)用的創(chuàng)立、部署和管理,并在解決方案伸縮性、可用性和平安性方面實(shí)現(xiàn)重大改良?;赟QLServer2000技術(shù)優(yōu)勢構(gòu)建的SQLServer2005將提供集成化信息管理解決方案,可幫助任何規(guī)模的組織機(jī)構(gòu):〔1〕創(chuàng)立并部署更具伸縮性、可靠性和平安性的企業(yè)級應(yīng)用?!?〕降低數(shù)據(jù)庫應(yīng)用創(chuàng)立、部署與管理的復(fù)雜程度,進(jìn)而實(shí)現(xiàn)IT效率最大化?!?〕憑借可供創(chuàng)立更具平安保障之?dāng)?shù)據(jù)庫應(yīng)用的豐富、靈活、現(xiàn)代化開發(fā)環(huán)境增強(qiáng)開發(fā)人員工作效能。〔4〕跨越多種平臺、應(yīng)用和設(shè)備實(shí)現(xiàn)數(shù)據(jù)共享,進(jìn)而簡化內(nèi)部系統(tǒng)與外部系統(tǒng)連接。〔5〕實(shí)現(xiàn)功能強(qiáng)勁的集成化商務(wù)智能解決方案,從而在整個企業(yè)范圍內(nèi)推進(jìn)科學(xué)決策,提高工作效率?!?〕在不必犧牲性能表現(xiàn)、可用性或伸縮性的前提下控制本錢費(fèi)用水平[9-10]。開發(fā)方法以各高校的排課需求為應(yīng)用背景,開發(fā)一個典型的高校智能排課系統(tǒng)??紤]實(shí)際情況,本系統(tǒng)將采用結(jié)構(gòu)化生命周期法進(jìn)行系統(tǒng)分析和設(shè)計,并采用原型法進(jìn)行系統(tǒng)實(shí)施。圖1-1原型法生命周期圖原型法的根本思想是在投入大量的人力,物力之前,在限定的時間內(nèi),用最經(jīng)濟(jì)的方法開發(fā)出一個可實(shí)際運(yùn)行的系統(tǒng)模型,用戶在運(yùn)行使用整個原型的根底上,通過對其評價,提出改良意見,對原型進(jìn)行修改,統(tǒng)一使用,評價過程反復(fù)進(jìn)行,使原型逐步完善,直到完全滿足用戶的需求為止。這樣能有效防止盲目開發(fā)問題,同時能充分的發(fā)揮原型法的優(yōu)勢,能順利實(shí)現(xiàn)系統(tǒng)的實(shí)施[4-5]。2可行性分析2.1技術(shù)可行性該系統(tǒng)對軟、硬件系統(tǒng)要求較低,所需硬件設(shè)備,市場上銷售且價格較低,甚至可以使用原有的設(shè)備。軟件上,操作系統(tǒng)采用Windows系列操作系統(tǒng)、MicrosoftVisualStudio2005作為前臺開發(fā)工具,它具有的“編輯后繼續(xù)運(yùn)行(editandcontinue)”的特性,超越了舊的編輯—編譯—測試模式。它還引入了面向?qū)ο蟮某绦蛟O(shè)計思想和“控件”概念,使得大量已經(jīng)編好的VisualBasic程序可以直接拿來使用。同時,VisualBasic又是最容易學(xué)習(xí)與應(yīng)用的程序語言之一。它的功能非常強(qiáng)大,已成為一種專業(yè)化的開發(fā)語言和環(huán)境。采用SQLServer2005作為后臺數(shù)據(jù)庫平臺的管理系統(tǒng),它在電子商務(wù)、數(shù)據(jù)倉庫和數(shù)據(jù)庫解決方案等應(yīng)用中起著核心作用,可為企業(yè)的數(shù)據(jù)管理提供強(qiáng)大的支持,對數(shù)據(jù)庫中的數(shù)據(jù)提供有效的管理,并采用有效的措施實(shí)現(xiàn)數(shù)據(jù)的完整性、數(shù)據(jù)的平安性以及數(shù)據(jù)的可靠易用性等等。這些軟件在高校排課系統(tǒng)開發(fā)中已被大量應(yīng)用,技術(shù)上都比擬成熟。因此在技術(shù)上是可行的。2.2經(jīng)濟(jì)可行性當(dāng)今學(xué)校內(nèi)部沒有完善的高校排課系統(tǒng),管理水平差,學(xué)校課程不能得到合理分配。迫切需要提高現(xiàn)代化管理水平、管理質(zhì)量和管理高校課程。高校排課系統(tǒng)的初步現(xiàn)代化的開發(fā)和使用,能夠大大提高學(xué)校管理者的工作效率,節(jié)省本錢提高經(jīng)濟(jì)效益。它把從事教務(wù)管理的人員從繁重的手工操作中解脫出來,用更多精力從事創(chuàng)造性的管理活動和其它重要的活動中去,從而到達(dá)節(jié)省人力、物力,財力的目標(biāo);它能使決策、方案和其它管理活動更加科學(xué)、精確、靈活。因此,開發(fā)一個專門針對高校排課系統(tǒng),在經(jīng)濟(jì)上也是可行的。2.3操作可行性本系統(tǒng)靈活方便,快捷迅速,適應(yīng)處理多項數(shù)據(jù)。采用友好、直觀的視窗界面,鼠標(biāo)、鍵盤兩種操作方式任意選擇,方便快捷。界面統(tǒng)一標(biāo)準(zhǔn),提示信息功能完整,稍一接觸就可以上手進(jìn)行所有操作。2.4法律可行性本系統(tǒng)純?yōu)閭€人設(shè)計,在開發(fā)過程中沒有涉及合同、責(zé)任、版權(quán)等與國家相關(guān)法律規(guī)定相抵觸的方面。因此,本系統(tǒng)在法律上是可行的。3系統(tǒng)需求分析3.1系統(tǒng)功能需求智能排課系統(tǒng)需要實(shí)現(xiàn)對學(xué)校教師、教室、班級、及課程的信息管理,對高校排課,都有智能的管理,主要實(shí)現(xiàn)如下的一些功能:班級各種信息的輸入,包括班級號,班級名稱,年級,班級人數(shù),是否合班。教師各種信息的輸入,包括教師號,教師姓名,職稱,聯(lián)系方式。學(xué)校課程的增加,刪除,修改。學(xué)校課程方案的制定。學(xué)校的自定義排課,根據(jù)需要,人工排課。學(xué)校的智能排課,根據(jù)需要,隨機(jī)智能排課。有一些相關(guān)的提示。課表查課界面,根據(jù)不同條件,查看課程安排。3.2系統(tǒng)非功能需求排課中的根本原那么在課程的編排中應(yīng)遵循一定的規(guī)那么,只有按照根本規(guī)那么來進(jìn)行課程的編排才能夠減少沖突的發(fā)生,這些根本規(guī)那么主要有以下幾條:1)同一班級的學(xué)生在同一時間(某些特定的選修課時間除外)不能安排兩門課程2)同一教師在同一時間不能安排兩門課程3)同一教室在同一時間不能安排兩門課程4)同一時間安排的課程總數(shù)不能大于所能提供的教室總數(shù)5)某一課程參加學(xué)習(xí)的總?cè)藬?shù)不應(yīng)大于所安排教室的座位數(shù)6)所提供教室的屬性與課程所需教室的屬性一致在時間、教師、班級、教室、課程這五維關(guān)系中,時間、教師、班級三者之間存在著緊密關(guān)系。相對而言,教室與它們關(guān)系就不那么密切。排課的根本要求課程的安排不是任意的,為了到達(dá)最好的教學(xué)效果應(yīng)遵循一定的要求。這些要求主要有:1)要盡量為所排課程安排上該類課效果最好的時間2)課程在一周上屢次時,要有一定的間隔性3)公共課等涉及面廣、學(xué)時多的課程應(yīng)優(yōu)先處理4)對同一教師,同一上課對象應(yīng)盡量選擇相對固定的幾個教室5)對同一個班級的課程應(yīng)選擇相對固定的教室6)連著的課的教室選擇不應(yīng)相隔太遠(yuǎn)7〕同一天有幾門課時盡量把課分散8)優(yōu)先滿足一些特殊要求〔比方有些教室喜歡上上午的課,可以優(yōu)先滿足〕4總體設(shè)計4.1系統(tǒng)總體構(gòu)架本系統(tǒng)采用客戶/效勞器〔Client/Server〕模式。又叫主從式架構(gòu),簡稱C/S結(jié)構(gòu),是一種網(wǎng)絡(luò)架構(gòu),它把客戶端(Client)〔通常是一個采用圖形用戶界面的程序〕與效勞器(Server)區(qū)分開來。每一個客戶端軟件的實(shí)例都可以向一個效勞器或應(yīng)用程序效勞器發(fā)出請求。圖4-1系統(tǒng)體系結(jié)構(gòu)圖C/S的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給效勞器。可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和Server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷對應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。4.2系統(tǒng)功能結(jié)構(gòu)高校排課系統(tǒng)可以用于支持各高校完成高校排課的難題,有如下幾個個方面的目標(biāo):支持各高校輸入班級信息;支持各高校輸入教師信息,班級教師的增刪改等方面。支持輸入教室,還有自定義排課和智能排課以及課表查詢。系統(tǒng)分為四大模塊:條件設(shè)置、課程方案、排課管理、課表查詢、系統(tǒng)管理。圖4-2功能模塊圖具體設(shè)計目標(biāo)如下:(1)界面友好,操作簡單,幫您輕松上手。(2)系統(tǒng)具有靈活、嚴(yán)格的權(quán)限設(shè)定功能,采用非常周密有效的權(quán)限設(shè)置,確保高校各類資料的可靠性和保密性,防止錯誤和違規(guī)操作。系統(tǒng)管理:可修改管理員權(quán)限及密碼。(3)高校排課系統(tǒng),資料詳細(xì)周到,同窗多頁的界面方式讓你輕松完成所有工作。(4)友善的登錄界面,包括學(xué)生登錄,教師登錄,和管理員登陸,根據(jù)身份不同,進(jìn)入的界面也4.3排課算法目前常用算法目前,解決排課問題常用的方法有:著色算法[11],通過研究時間資源庫的形成策略,分析基于時間資源的排課算法[12]?;诜謱臃种?、貪心算法的排課系統(tǒng)的設(shè)計與實(shí)現(xiàn)[13],基于圖論方法的自動優(yōu)化排課模型研究[14],基于資源受限的非線性約束多目標(biāo)排課模型及算法[15],整數(shù)規(guī)劃解決排課問題[16],基于遺傳禁忌算法結(jié)合解決排課問題[17]等。這些方法雖然提高了搜索效率,但由于高校普遍存在課程量大,教室、教師資源緊張,排課約束條件多且條件經(jīng)常變化等問題,排課算法的應(yīng)用仍然受到很大限制[19]。排課問題描述.1排課問題的約束條件排課即要滿足一定的硬約束條件來協(xié)調(diào)處理教師、教室、學(xué)生、時間之間的多維沖突,同時還要盡可能滿足一些軟約束條件,從而使排出的課表更加合理,滿足人性化需求。硬約束條件要求系統(tǒng)必須滿足的條件,而軟約束條件是在滿足硬約束條件以后要考慮的約束條件,軟約束條件不要求系統(tǒng)必須滿足,但滿足這些條件能得到較優(yōu)解。常用的硬約束條件有:(1)所有的課程都必須被安排;(2)除合班課外,同一時間,一個教室只能被一個班級占用;(3)除選修課外,同一時間,一個班級只能安排一門課程;(4)同一時間,一個教師只能在一個教室上課;(5)同一個教師所上的不同課程不能發(fā)生在同一時間;(6)兩門課程不能在同一個時間安排在同一個教室;(7)教室的類型必須與課程要求一致;(8)教室的最大容納人數(shù)必須大于等于在該教室上課的學(xué)生人數(shù)等;(9)不同課程時間段不同,如體育課只能在白天且不安排在第一節(jié),選修課不能安排在早上等。常用的軟約束條件有:(1)同一門課程的上課時間盡量間隔均勻。例如某課程周學(xué)時為4學(xué)時,以2學(xué)時為一個教學(xué)單位,需安排兩次。兩次的安排時間盡量間隔一天或者一天以上;(2)每個學(xué)生的課程均勻的分布在工作日中;(3)學(xué)生的上課時間要盡量選擇在較好的上課時間段;(4)對班級、教室、教師的單雙周上課時間點(diǎn)盡量匹配,以節(jié)約教學(xué)資源;排課問題的數(shù)學(xué)表示如果用C表示課程、S表示班級、N表示時間、R表示教室,T表示教師,排課問題的目標(biāo)就是找出滿足約束條件的(C,S,N,R,T)組合。并且,這五種元素之間存在一定的對應(yīng)關(guān)系:①C與S之間的對應(yīng)關(guān)系,即每個班級有其特定要上的課程;②C與T之間的對應(yīng)關(guān)系,即每門課程有一定的任課教師;③(N,R)與(S,C,T)之間的對應(yīng)關(guān)系,即每個教室在某一時間段只能有一個班級上一門課程。排課問題的實(shí)質(zhì)就是對于給定的一組(S,C,T)要分配其一個滿足上課條件的時空片(N,R)。即找到(N,R)與(S,C,T)之間的一一對應(yīng)關(guān)系。排課問題的優(yōu)先級問題排課中有很多等待分配時空片的(S,C,T),如何安排它們的分配次序,不僅關(guān)系到算法的性能、安排的合理性,更關(guān)系到最終能否求出可行解。因此,分配次序的好壞也是每個算法中要仔細(xì)處理的問題。在本文的算法中,是對每一組(S,C,T)設(shè)定優(yōu)先級,然后按照優(yōu)先級的上下次序分配時空片。設(shè)定(S,C,T)優(yōu)先級要考慮的因素有:①(S,C,T)中課程C的類別,對于不同類別的課程,給它們設(shè)定相應(yīng)的優(yōu)先值,本算法中針對課程類別的優(yōu)先級設(shè)定如下:專業(yè)根底課、公共根底課、專業(yè)限選課、專業(yè)選修課、公選課優(yōu)先級別依次降低,其中專業(yè)根底課級別最高,公選課級別最低;②(S,C,T)中課程C在一周內(nèi)要上的次數(shù)。即一門課程周學(xué)時越多,優(yōu)先級越高;③(S,C,T)中班級S所需要上的課程總數(shù)的大小。即學(xué)生每周要上的課程總數(shù)越多,優(yōu)先級越高;④(S,C,T)中學(xué)生S中的人數(shù)的大小。最后根據(jù)各個因素的重要性不同,給每個因素設(shè)置一定的權(quán)重系數(shù)p[0]、p[1]、p[2]、p[3],最后求四種因素的帶權(quán)累加和,即得到一個(S,C,T)的優(yōu)先級,每次按照(S,C,T)的優(yōu)先級的降序次序來分配時空片。算法思想該算法在選擇每一組教學(xué)任務(wù)(S,C,T)時是按貪心策略來選擇,即按(S,C,T)優(yōu)先級的降序次序選擇優(yōu)先級最高的教學(xué)任務(wù)。接下來在進(jìn)行時空片分配過程中采用分治的策略,在分配過程中分為三個層次:1〕即先分配要上課的星期數(shù)〔星期數(shù)是指星期一到星期五的任意一天〕,2〕再分配其該天的上課時間段〔在本文中某天的上課時間段分為5個時間段,上午1、2節(jié)為第1個時間段,上午3、4節(jié)為第2個時間段,下午1、2節(jié)為第3個時間段,下午3、4節(jié)為第4個時間段,晚上1、2節(jié)或者1、2、3節(jié)為第5個時間段〕,3〕最后分配上課的教室。同時在每一階段的分配過程中,都要對資源總數(shù)和使用狀況作統(tǒng)計和記錄,從而防止不計后果的資源濫用。算法主要步驟如下:Step1:初始化。Step1.1:初始化,將所有教室按類型劃分,并在每一類型中按教室容量統(tǒng)計可用教室資源的數(shù)目。例如,可將教室劃分為:普通教室、多媒體教室、語音室、物理實(shí)驗(yàn)室、機(jī)房等。然后按教室可容納人數(shù)分為0-60人、60-120人、120-140人這4個不同等級。然后統(tǒng)計記錄每一類型不同容量范圍的可用教室資源數(shù)目。Step1.2:預(yù)排序,將待排的所有課程先按周學(xué)時降序排列,然后再將待排的所有課程先按所需教室類型升序排列,再按所需教室容量降序分配,即先為上課人數(shù)多的課程分配教室,防止較小的班級占用大教室,最后再將所有需要使用同一類型和容量教室的課程按優(yōu)先級降序排序。Step2:分配上課的星期數(shù)。按照排序后的次序,再參照剩余的可用資源記錄來分配每組(S,C,T)在一周內(nèi)要上課的星期數(shù)。同時參考總課表,使得班級和教師的上課時間在一周內(nèi)盡可能均勻分布。Step3:分配某天內(nèi)上課的時間段。Step3.1對每種類型和大小的教室資源按其在一周內(nèi)的某一天的5個時段的分配情況作統(tǒng)計。Step3.2在分配時間段的時候,從第一個時段到第5個時段依次查看是否還有剩余資源,假設(shè)有,那么為其分配相應(yīng)的是時間段,否那么看能否將某個已被占用的時間段調(diào)整后再為其分配。分配的過程中要參照總課表,防止時間沖突。Step3.3假設(shè)有不能分配的,查找與其相關(guān)的已經(jīng)分配了時間段的課程,并看看能否重新為它分配時間段,從而將原來的時間段讓給不能成功找到時間段的那個課程使用。Step4:分配上課的教室:根據(jù)每一課程要求的上課時間和教室類型及大小為其分配教室。對于每個已經(jīng)分配了星期數(shù)和時間段的課程,一般來說,都是找得到可用教室的,因?yàn)樵谇皟蓚€分配階段中,是嚴(yán)格按照資源剩余狀況來進(jìn)行分配的。同時在分配上課所用的教室時,也考慮到單雙周情況,以便充分利用教室資源。算法分析基于分治貪心相結(jié)合的排課算法主要分為3個階段:即分配上課星期數(shù)、分配上課時間段、分配上課的教室。這里對算法的時間復(fù)雜度進(jìn)行分析。第一階段:分配上課星期數(shù),為每一門課程分配上課星期數(shù)的運(yùn)算次數(shù)主要與課程數(shù)目有關(guān);第二階段:分配上課的時段,為一次課分配上課時段所進(jìn)行判斷的次數(shù)最壞為5次,分配上課時段的運(yùn)算次數(shù)主要和每周上的總課程次數(shù)有關(guān)。第三階段:根據(jù)上課星期數(shù)和上課時段分配教室;因此該算法主要和問題的規(guī)模有關(guān),即與要排課的課目數(shù)、課程的周學(xué)時數(shù)及教室數(shù)目有關(guān)。和基于貪心策略、基于隨機(jī)分配時間片的排課算法進(jìn)行比擬,該算法的運(yùn)行時間介于二者之間,效率略低于基于貪心策略的排課算法,比基于隨機(jī)分配時間片的排課算法效率要高。但該算法在成功排課的數(shù)量上,性能比基于貪心策略的算法會略好。因?yàn)榉种闻c貪心相結(jié)合的算法中是當(dāng)有滿足條件的資源時,便一定會為其分配。而貪心策略中,可能雖然存在可用資源時仍會遺漏可行解。5數(shù)據(jù)庫設(shè)計5.1系統(tǒng)數(shù)據(jù)表根據(jù)系統(tǒng)需求分析,以及考慮到數(shù)據(jù)表之間的關(guān)聯(lián)性,系統(tǒng)需要建立7個表,2個視圖,其用途說明如下表4.1所示。表5-1系統(tǒng)數(shù)據(jù)表數(shù)據(jù)表名稱數(shù)據(jù)表描述Class保存班級根本信息Hb保存組成各合班的班級號Teacher記錄教師信息Classroom記錄教室信息Course保存課程信息Lesson_plans保存教學(xué)方案R_L存儲總課表表5-2系統(tǒng)視圖數(shù)據(jù)表名稱數(shù)據(jù)表描述Lp_view保存需要排課的信息,利于排課RL_view保存教室安排信息,利于查詢班級時間及教室時間5.2UML建模圖以下圖主要是對應(yīng)實(shí)體關(guān)系圖,經(jīng)過分析了各實(shí)體及其屬性,用MicrosoftOfficeVisio2007畫出以下圖。圖5-1UML建模圖5.3數(shù)據(jù)字典以下表5.2到表5.8給出7個數(shù)據(jù)表:班級信息表、合班表、教室信息表、教師信息表、課程信息表、教學(xué)方案表、總課表的具體描述,包括數(shù)據(jù)描述、數(shù)據(jù)名稱、數(shù)據(jù)類型等。表5-3Course-班級信息表字段名稱說明數(shù)據(jù)類型長度主/外鍵約束備注Class_id班級編號Char10主鍵Class_name班級名Char20非空Department專業(yè)Char20grade年級Char10number人數(shù)Int非空Hb是否合班int非空默認(rèn)0〔否〕表5-4hb-合班表字段名稱說明數(shù)據(jù)類型長度主/外鍵約束備注Hb_id合班號Char10主鍵Class_id小班號Char10外鍵非空表5-5classroom-教室信息表字段名稱說明數(shù)據(jù)類型長度主/外鍵約束備注Cr_id教室編號Char10主鍵Capacity教室容量IntCategory教室類別Char10非空表5-6Teacher-教師信息表字段名稱說明數(shù)據(jù)類型長度主/外鍵約束備注T_id教師編號Char10主鍵T_name教室姓名Char10非空profession職稱Char10age年齡IntDepartment所屬學(xué)院Char10表5-7Course-課程信息表字段名稱說明數(shù)據(jù)類型長度主/外鍵約束備注C_id課程號Char10主鍵C_name課程名Char20非空表5-8lesson_plans-教學(xué)方案表字段名稱說明數(shù)據(jù)類型長度主/外鍵約束備注Lesson_id課程方案號Char10主鍵C_id課程號Char10外鍵非空參照course表中的c_idClass_id班級號Char10外鍵非空參照class表中class_idT_id教師編號Char10外鍵非空參照Teacher表中t_idC_nature課程性質(zhì)Char10W_jieci周節(jié)次Int非空Z_jieci總節(jié)次IntPaike是否排課Int默認(rèn)為0〔未排課〕Category教室性質(zhì)Char10Qz權(quán)重Int自動計算表5-9R_L-總課表字段名稱說明數(shù)據(jù)類型長度主/外鍵約束備注Kc_id排課標(biāo)號自動編號主鍵Week星期Char10非空J(rèn)ieci節(jié)次Char10非空Cr_id教室編號Char10外鍵非空參照classroom表Lesson_id教學(xué)方案號Char10外鍵非空參照lesson_plans表Available時間可用Int非空Dsz單雙周標(biāo)記Char105.4數(shù)據(jù)庫關(guān)系圖圖5-2系統(tǒng)數(shù)據(jù)庫關(guān)系圖6詳細(xì)設(shè)計與實(shí)現(xiàn)6.1數(shù)據(jù)庫訪問模塊該模塊中包含數(shù)據(jù)庫連接、查詢、插入、和更新。本系統(tǒng)將數(shù)據(jù)庫操作做成一個公共模塊,實(shí)現(xiàn)代碼的重用。建立數(shù)據(jù)庫連接對象PublicobjSqlConnectionAsSqlConnection=NewSqlConnection("datasource=(local);initialcatalog=智能排課;"&"integratedsecurity=SSPI;userid=sa;password=123")數(shù)據(jù)查詢方法,返回dataset類型。PublicFunctionGetDataFromDB(ByValsqlstrAsString)AsDataSetobjDataSet=NewDataSet()objDataSet.Clear()TryobjSqlConnection.Open()objDataAdpter=NewSqlDataAdapter(sqlstr,objSqlConnection)objDataAdpter.Fill(objDataSet)objSqlConnection.Close()CatchexAsExceptionMsgBox("錯誤號:"&Err.Number&"錯誤描述:"&Err.Description)EndTryReturnobjDataSetobjDataSet=NothingEndFunction數(shù)據(jù)更新方法,返回boolean型PublicFunctionUpdateData(ByValsqlstrAsString)AsBooleanDimobjCommandAsSqlCommand=NewSqlCommand()TryobjSqlConnection.Open()objCommand.Connection=objSqlConnectionobjCommand.CommandText=sqlstrobjCommand.CommandType=CommandType.TextobjCommand.ExecuteNonQuery()objSqlConnection.Close()CatchexAsExceptionMsgBox("錯誤號:"&Err.Number&"錯誤描述:"&Err.Description)ReturnFalseEndTryReturnTrueEndFunction數(shù)據(jù)插入方法,返回boolean型PublicFunctionInsertData(ByValsqlstrAsString)AsBooleanDimobjCommandAsSqlCommand=NewSqlCommand()TryobjSqlConnection.Open()objCommand.Connection=objSqlConnectionobjCommand.CommandText=sqlstrobjCommand.CommandType=CommandType.TextobjCommand.ExecuteNonQuery()objSqlConnection.Close()CatchexAsExceptionMsgBox("錯誤號:"&Err.Number&"錯誤描述:"&Err.Description)ReturnFalseEndTryReturnTrueEndFunction數(shù)據(jù)刪除方法,返回boolean型PublicFunctionDeleteData(ByValsqlstrAsString)AsBooleanDimobjCommandAsSqlCommand=NewSqlCommand()TryobjSqlConnection.Open()objCommand.Connection=objSqlConnectionobjCommand.CommandText=sqlstrobjCommand.CommandType=CommandType.TextobjCommand.ExecuteNonQuery()objSqlConnection.Close()CatchexAsExceptionMsgBox("錯誤號:"&Err.Number&"錯誤描述:"&Err.Description)ReturnFalseEndTryReturnTrueEndFunction6.2條件設(shè)置模塊圖6-1班級信息管理運(yùn)行界面圖6-2插入班級信息運(yùn)行界面添加合班的代碼:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimi,numberAsIntegerDimgradeAsStringDimmydsAsDataSetnumber=0grade="null"sqlstr="insertintoclass(class_id,class_name,department,hb)values('"&TextBox1.Text&"','"&TextBox2.Text&"','"&TextBox3.Text&"','1')"InsertData(sqlstr)Fori=0ToListBox1.Items.Count-1sqlstr="select*fromclasswhereclass_name='"&ListBox1.Items.Item(i)&"'"myds=GetDataFromDB(sqlstr)number=myds.Tables(0).Rows(0)("number")+numbergrade=myds.Tables(0).Rows(0)("grade")sqlstr="insertintohb(hb_id,class_id)values('"&TextBox1.Text&"','"&myds.Tables(0).Rows(0)("class_id")&"')"InsertData(sqlstr)Nextsqlstr="updateclasssetgrade='"&grade&"',number='"&number&"'whereclass_id='"&TextBox1.Text&"'"UpdateData(sqlstr)MessageBox.Show("插入合班成功")bj_form.智能排課DataSet._Class.Clear()bj_form.ClassTableAdapter.Fill(bj_form.智能排課DataSet._Class)Me.Close()EndSub刪除班級程序代碼:PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.ClickDimdeleteAsString=DataGridView1.SelectedCells(0).Value.ToStringDimhbAsInteger=DataGridView1.SelectedCells(4).Valuesqlstr="select*fromlesson_planswhereclass_id='"&delete&"'"IfGetDataFromDB(sqlstr).Tables(0).Rows.Count>0ThenMessageBox.Show("該班已安排課程,請先刪除教學(xué)方案")ElseIfhb=0Thensqlstr="deletefromclasswhereclass_id='"&delete&"'"DeleteData(sqlstr)MessageBox.Show("刪除成功")Elsesqlstr="deletefromhbwherehb_id='"&delete&"'"DeleteData(sqlstr)sqlstr="deletefromclasswhereclass_id='"&delete&"'"DeleteData(sqlstr)MessageBox.Show("刪除成功")EndIfMe.智能排課DataSet._Class.Clear()Me.ClassTableAdapter.Fill(Me.智能排課DataSet._Class)EndIfEndSub條件設(shè)置中其他三個功能,課程管理、教室管理、教師管理與班級管理類似,限于篇幅,在此不再表達(dá)。6.3教學(xué)方案模塊圖6-3教學(xué)方案管理模塊刪除教學(xué)方案代碼:PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.ClickDimdeleteAsString=DataGridView1.SelectedCells(0).Value.ToStringsqlstr="select*fromrl_viewwherecr_id='"&delete&"'"IfGetDataFromDB(sqlstr).Tables(0).Rows.Count>0ThenMessageBox.Show("該教學(xué)方案已安排,請先刪除課表中涉及該教學(xué)方案的課程")Elsesqlstr="deletefromlesson_planswherelesson_id='"&delete&"'"DeleteData(sqlstr)MessageBox.Show("刪除成功")Me.智能排課DataSet.Lesson_plans.Clear()Me.Lesson_plansTableAdapter.Fill(Me.智能排課DataSet.Lesson_plans)EndIfEndSub6.4排課模塊智能排課模塊程序代碼:排課方法,返回boolean型PublicFunctionArrangeLesson()AsBoolean'初始化及預(yù)排序,返回資源是否夠分Test=InitQZ()IfTest=FalseThenReturnFalseEndIfsqlstr="deletefromR_l"DeleteData(sqlstr)sqlstr="updatelesson_planssetpaike=0"UpdateData(sqlstr)sqlstr="select*fromlp_vieworderbyqzdesc"myds=GetDataFromDB(sqlstr)Fori=0Tomyds.Tables(0).Rows.Count-1'給出最適宜的星期addkc=1myRow=myds.Tables(0).Rows(i)Test=ArrangeWeek(myRow)IfTest=FalseThenReturnFalseEndIf'安排節(jié)次Test=ArrangeJieci(myRow,week)IfTest=FalseThenTest=AdjustLesson(myRow)IfTest=FalseThenReturnFalseEndIfEndIfArrangeCRoom(myRow,week)IfmyRow("w_jieci")=4ThenTest=ArrangeJieci(myRow,week1)IfTest=FalseThenTest=AdjustLesson(myRow,week)IfTest=FalseThenReturnFalseEndIfEndIfTest=ArrangeCRoom(myRow,week1)IfTest=FalseThenReturnFalseEndIfElseIfmyRow("w_jieci")=3ThenTest=ArrangeDSZ(myRow)IfTest=FalseThenAdjustLesson(myRow,week1)Test=ArrangeCRoomDSZ(myRow,week1)EndIfEndIfsqlstr="updatelesson_planssetpaike=1wherelesson_id='"&myRow("lesson_id")&"'"UpdateData(sqlstr)NextReturnTrueEndFunction以下方法是初始化及預(yù)排序,返回資源是否夠分PublicFunctionInitQZ()AsBooleanDimqz,numberAsIntegerDimcategory,c_natureAsStringDimInitdsAsDataSetsqlstr="updateLP_viewsetqz=0"UpdateData(sqlstr)sqlstr="select*fromLP_view"Initds=GetDataFromDB(sqlstr)'初始化權(quán)重Fori=0ToInitds.Tables(0).Rows.Count-1qz=0myRow=Initds.Tables(0).Rows(i)'按周節(jié)次降序IfmyRow("w_jieci")=4Thenqz=qz+2ElseIfmyRow("w_jieci")=3Thenqz=qz+1EndIf'按所需教室類型降序category=myRow("category")Ifcategory.Trim="多媒體"Thenqz=qz+60ElseIfcategory.Trim="普通教室"Thenqz=qz+50ElseIfcategory.Trim="運(yùn)動場"Thenqz=qz+40ElseIfcategory.Trim="計算機(jī)實(shí)驗(yàn)室"Thenqz=qz+30ElseIfcategory.Trim="語音室"Thenqz=qz+20ElseIfcategory.Trim="物理實(shí)驗(yàn)室"Thenqz=qz+10EndIf'按人數(shù)降序number=myRow("number")Ifnumber<60Thenqz=qz+3000ElseIfnumber<120Thenqz=qz+2000ElseIfnumber<140Thenqz=qz+1000Else'特大班先排,如體育這些課qz=qz+10000EndIf'按課程性質(zhì)降序c_nature=myRow("c_nature")Ifc_nature.Trim="專業(yè)根底課"Thenqz=qz+500ElseIfc_nature.Trim="專業(yè)公共課"Thenqz=qz+400ElseIfc_nature.Trim="專業(yè)限選課"Thenqz=qz+300ElseIfc_nature.Trim="專業(yè)任選課"Thenqz=qz+200ElseIfc_nature.Trim="公共選修課"Thenqz=qz+100EndIfsqlstr="updatelesson_planssetqz="&qz&"wherelesson_id='"&myRow("lesson_id")&"'"UpdateData(sqlstr)Next'僅檢查多媒體資源sqlstr="selectcount(*)fromclassroomwherecategory='多媒體'"Initds=GetDataFromDB(sqlstr)Fori=0To6Forj=0To4dmt(i,j)=Initds.Tables(0).Rows(0)(0)NextNextsqlstr="selectsum(w_jieci)fromlp_viewwherecategory='多媒體'"Initds=GetDataFromDB(sqlstr)IfInitds.Tables(0).Rows(0)(0)>dmt(0,0)*5*5ThenMessageBox.Show("教室不夠安排")ReturnFalseEndIfReturnTrueEndFunction以下方法是給出適宜的星期,即老師和班級的課程最少的一天,PublicFunctionArrangeWeek(ByValRowAsDataRow)AsBooleanDimkAsIntegerDimtestds,fbdsAsDataSetDimmysqlstrAsStringFork=0To4weekn(k)=0Next'分班只加上合班每天的上課數(shù)IfRow("hb")=0Then'計算本班每天上課數(shù)sqlstr="selectweek,count(*)ascountfromrl_viewwhereclass_id='"&Row("class_id")&"'groupbyweek"testds=GetDataFromDB(sqlstr)AddWeek(testds)GetHBWeek(Row)Elsesqlstr="selectclass_idfromhbwherehb_id='"&Row("class_id")&"'"testds=GetDataFromDB(sqlstr)mysqlstr="selectdistincthb_idfromhbwhereclass_id='"Fork=0Totestds.Tables(0).Rows.Count-1sqlstr="selectweek,count(*)ascountfromrl_viewwhereclass_id='"&testds.Tables(0).Rows(k)("class_id")&"'groupbyweek"fbds=GetDataFromDB(sqlstr)AddWeek(fbds)Ifk<testds.Tables(0).Rows.Count-1Thenmysqlstr=mysqlstr&testds.Tables(0).Rows(k)("class_id")&"'orclass_id='"Elsemysqlstr=mysqlstr&testds.Tables(0).Rows(k)("class_id")&"'"EndIfNextDimhbdsAsDataSet=GetDataFromDB(mysqlstr)Fork=0Tohbds.Tables(0).Rows.Count-1sqlstr="selectweek,count(*)ascountfromrl_viewwhereclass_id='"&hbds.Tables(0).Rows(k)("hb_id")&"'groupbyweek"testds=GetDataFromDB(sqlstr)AddWeek(testds)NextEndIfGetTeacherWeek(Row)Dimminweek,secondweek,JAsIntegerJ=weekn(0)minweek=0secondweek=0Fork=0To4IfJ>weekn(k)ThenJ=weekn(k)minweek=kEndIfNextsecondweek=minweek+2Ifsecondweek>4Thensecondweek=0EndIfweek=NumberToWeek(minweek+1)week1=NumberToWeek(secondweek+1)IfJ>10ThenReturnFalseEndIfReturnTrueEndFunction以下方法是得到老師每天上課數(shù),用于計算最閑時間PublicFunctionGetTeacherWeek(ByValrowAsDataRow)AsBooleanDimtdsAsDataSetsqlstr="selectweek,count(*)ascountfromRL_viewwheret_id='"&row("t_id")&"'groupbyweek"tds=GetDataFromDB(sqlstr)AddWeek(tds)ReturnTrueEndFunctionPublicFunctionGetHBWeek(ByValrowAsDataRow)AsBooleanDimhbds,testdsAsDataSetDimkAsIntegersqlstr="selecthb_idfromhbwhereclass_id='"&row("class_id")&"'"hbds=GetDataFromDB(sqlstr)Fork=0Tohbds.Tables(0).Rows.Count-1sqlstr="selectweek,count(*)ascountfromrl_viewwhereclass_id='"&hbds.Tables(0).Rows(k)("hb_id")&"'groupbyweek"testds=GetDataFromDB(sqlstr)AddWeek(testds)NextReturnTrueEndFunction下面的方法是給課程安排適合的節(jié)次PublicFunctionArrangeJieci(ByValrowAsDataRow,ByValwAsString)AsBooleanDimjiecinumberAsIntegerDimIsRightAsBooleanDimtestdsAsDataSetIfrow("c_name").ToString.TrimLike"體育"Thenjiecinumber=2jieci="第二節(jié)"ElseIfrow("c_nature").ToString.TrimLike"選"Thenjiecinumber=3jieci="第三節(jié)"Elsejiecinumber=1jieci="第一節(jié)"EndIfIsRight=FalseWhile(IsRight=False)sqlstr="select*fromRL_viewwhereclass_id='"&row("class_id")&"'andweek='"&w&"'andjieci='"&jieci&"'"testds=GetDataFromDB(sqlstr)Iftestds.Tables(0).Rows.Count>0Thenjiecinumber=jiecinumber+1jieci=NumberToJieci(jiecinumber)Ifrow("c_name").ToString.TrimLike"體育"ThenIfjiecinumber>4ThenReturnFalseEndIfElseIfjiecinumber>5ThenReturnFalseEndIfEndIfElsesqlstr="select*fromRL_viewwheret_id='"&row("t_id")&"'andweek='"&w&"'andjieci='"&jieci&"'"testds=GetDataFromDB(sqlstr)Iftestds.Tables(0).Rows.Count>0Thenjiecinumber=jiecinumber+1jieci=NumberToJieci(jiecinumber)Ifrow("c_name").ToString.TrimLike"體育"ThenIfjiecinumber>4ThenReturnFalseEndIfElseIfjiecinumber>5ThenReturnFalseEndIfEndIfElseIsRight=TrueEndIfEndIfEndWhileReturnTrueEndFunction下面的方法是計算每天上課的節(jié)數(shù)PublicFunctionAddWeek(ByValdsAsDataSet)AsBooleanDimkAsIntegerDimwAsStringFork=0Tods.Tables(0).Rows.Count-1w=ds.Tables(0).Rows(k)("week")SelectCasew.TrimCase"星期一"weekn(0)=weekn(0)+ds.Tables(0).Rows(k)("count")Case"星期二"weekn(1)=weekn(1)+ds.Tables(0).Rows(k)("count")Case"星期三"weekn(2)=weekn(2)+ds.Tables(0).Rows(k)("count")Case"星期四"weekn(3)=weekn(3)+ds.Tables(0).Rows(k)("count")Case"星期五"weekn(4)=weekn(4)+ds.Tables(0).Rows(k)("count")EndSelectNextReturnTrueEndFunction下面的方法是安排教室PublicFunctionArrangeCRoom(ByValrowAsDataRow,ByValwAsString)AsBooleanDimcapacity,w_jieci,availableAsIntegerDimcategory,lesson_id,cr_id,kc_id,dszAsStringDimroomdsAsDataSetIfrow("paike")=0Thencategory=row("category")capacity=row("number")sqlstr="selectcr_idfromClassroomwherecapacity>"&capacity&"andcategory='"&category&"'andcr_idnotin(selectcr_idfromR_Lwhereweek='"&w&"'andjieci='"&jieci&"')orderbycapacityasc"roomds=GetDataFromDB(sqlstr)Ifroomds.Tables(0).Rows.Count<1ThenReturnFalseEndIfcr_id=roomds.Tables(0).Rows(0)("cr_id")lesson_id=row("lesson_id")w_jieci=row("w_jieci")available=0dsz=""kc_id="kc1"&addkc&lesson_idaddkc=addkc+1sqlstr="insertintoR_L(kc_id,week,jieci,cr_id,available,lesson_id,dsz)values('"&kc_id&"','"&w&"','"&jieci&"','"&cr_id&"','"&available&"','"&lesson_id&"','"&dsz&"')"InsertData(sqlstr)EndIfReturnTrueEndFunction下面的方法是安排周節(jié)次為3的課程及有單雙周問題PublicFunctionArrangeDSZ(ByValrowAsDataRow)AsBooleanDimtestds,roomds,fbds,hbdsAsDataSetDimk,jAsIntegerDimcr_id,class_id,kc_id,mysqlstrAsStringDimInsertAsBooleankc_id="kc31"&row("lesson_id")sqlstr="select*fromR_Lwhereavailable=1"roomds=GetDataFromDB(sqlstr)Ifroomds.Tables(0).Rows.Count>0Then'如果有單周上教室能用的查看是否可以安排Fork=0Toroomds.Tables(0).Rows.Count-1Dimkc_id1AsString=roomds.Tables(0).Rows(k)("kc_id")week=roomds.Tables(0).Rows(k)("week")jieci=roomds.Tables(0).Rows(k)("jieci")cr_id=roomds.Tables(0).Rows(k)("cr_id")class_id=row("class_id")sqlstr="select*fromRL_viewwherejieci='"&jieci&"'andweek='"&week&"'andclass_id='"&class_id&"'"testds=GetDataFromDB(sqlstr)IsRight=TrueInsert=TrueWhile(IsRight=True)Iftestds.Tables(0).Rows.Count>0Then'本班有課IsRight=FalseInsert=FalseElse'本班沒有課看是否是合班不是那么安排時間成功否那么看小班是否適宜Ifrow("hb")=1Then'是合班檢查分班及組成的合班sqlstr="selectclass_idfromhbwherehb_id='"&row("class_id")&"'"MessageBox.Show(row("class_id"))fbds=GetDataFromDB(sqlstr)mysqlstr="selectdistincthb_idfromhbwhereclass_id='"Forj=0Tofbds.Tables(0).Rows.Count-1sqlstr="select*fromRL_viewwherejieci='"&jieci&"'andweek='"&week&"'andclass_id='"&fbds.Tables(0).Rows(j)("class_id")&"'"testds=GetDataFromDB(sqlstr)Iftestds.Tables(0).Rows.Count>0ThenIsRight=FalseInsert=FalseEndIfIfj=fbds.Tables(0).Rows.Count-1Thenmysqlstr=mysqlstr&fbds.Tables(0).Rows(j)("class_id")&"'"Elsemysqlstr=mysqlstr&fbds.Tables(0).Rows(j)("class_id")&"'orclass_id='"EndIfNexthbds=GetDataFromDB(mysqlstr)Ifhbds.Tables.Count>0ThenForj=0Tohbds.Tables(0).Rows.Count-1sqlstr="select*fromrl_viewwherejieci='"&jieci&"'andweek='"&week&"'andclass_id='"&hbds.Tables(0).Rows(j)("hb_id")&"'"testds=GetDataFromDB(sqlstr)Iftestds.Tables(0).Rows.Count>0ThenIsRight=FalseInsert=FalseEndIfNextEndIfMessageBox.Show("fbdehb"&Insert)IfInsert=TrueThensqlstr="select*fromRL_viewwheret_id='"&row("t_id")&"'andweek='"&week&"'andjieci='"&jieci&"'"testds=GetDataFromDB(sqlstr)Iftestds.Tables(0).Rows.Count>0ThenInsert=FalseEndIfEndIf
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電梯贈予合同7篇
- 小產(chǎn)權(quán)轉(zhuǎn)讓合同6篇
- 國際貿(mào)易之間合作合同
- 公司技術(shù)合作合同協(xié)議書
- 2025年中山貨運(yùn)資格證模擬考試題庫
- 2025年揚(yáng)州貨運(yùn)從業(yè)資格證模擬考試下載安裝
- 室內(nèi)裝修合同二5篇
- 的擔(dān)保借款合同7篇
- 觀看湖北消防119宣傳月節(jié)目心得感悟集合4篇
- 在民主生活會上的點(diǎn)評講話模板
- 道路設(shè)施施工現(xiàn)場安全管理基本要求
- 公寓樓改造裝修施工方案
- 煙臺大學(xué)化學(xué)化工學(xué)院實(shí)驗(yàn)室儀器設(shè)備搬遷項目
- 安全生產(chǎn)管理組織架構(gòu)圖
- 2022版10kV架空配電線路無人機(jī)自主巡檢作業(yè)導(dǎo)則
- 近二十年俄羅斯修辭學(xué)研究述評
- 委托付款三方協(xié)議中英文版
- 約克中央空調(diào)冷水機(jī)組年度維保方案
- 高中英語-Unit 2 Reading and Thinking A day in the clouds教學(xué)課件設(shè)計
- 新聞采訪與寫作課件第十九章融合報道
- 常用小學(xué)生詞語成語積累歸類大全
評論
0/150
提交評論