|
摘要 現(xiàn)如今,隨著我國(guó)高校的快速發(fā)展,各個(gè)大學(xué)早已朝著綜合大學(xué)的發(fā)展,所開設(shè)的學(xué)科、專業(yè)以及學(xué)院都如迅猛發(fā)展,尤其是擴(kuò)招以來,各個(gè)大學(xué)的在校學(xué)生數(shù)量猛增,在這種情況,以前學(xué)校的教務(wù)排課系統(tǒng)已遠(yuǎn)遠(yuǎn)不能滿足現(xiàn)在這個(gè)快速發(fā)展的現(xiàn)狀,以前的那種手動(dòng)排課或者簡(jiǎn)單的無紙化的系統(tǒng),已經(jīng)不能滿足現(xiàn)在排課的需求,很容易出現(xiàn)紕漏,導(dǎo)致正常的教學(xué)活動(dòng)不能順暢進(jìn)行。 本文正是基于目前這種現(xiàn)狀,利用目前比較流行的B/S模式,流行的關(guān)系型數(shù)據(jù)庫MySql以及應(yīng)用非常普遍的PHP技術(shù),對(duì)本次高校智能排課系統(tǒng)進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。本次主要是利用了比較先進(jìn)的流行的排課算法對(duì)本系統(tǒng)高校智能排課進(jìn)行自動(dòng)排課。本系統(tǒng)大體的思路是,首先對(duì)各種基本資料進(jìn)行管理,并且對(duì)各個(gè)用戶(教師、教務(wù)人員、學(xué)生等)進(jìn)行用戶管理,并且對(duì)其進(jìn)行角色管理;然后設(shè)置了對(duì)所有排課信息進(jìn)行管理的模塊,進(jìn)一步對(duì)所有的排課信息進(jìn)行詳細(xì)管理,在這個(gè)基礎(chǔ)上,利用先進(jìn)的排課算法對(duì)這些信息進(jìn)行排課操作,最后,可通過課程表信息發(fā)布與查詢模塊對(duì)智能排課信息進(jìn)行查詢與下載,并可以以Excel的形式進(jìn)行下載與保存。本次對(duì)以上五個(gè)模塊從需求分析到系統(tǒng)設(shè)計(jì)再到系統(tǒng)實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析與闡述,并且在最后對(duì)各個(gè)模塊進(jìn)行了詳細(xì)的測(cè)試。 第一章緒論 1.1 背景分析 隨著科學(xué)技術(shù)的不斷發(fā)展,各個(gè)行業(yè)信息化、科學(xué)化不斷推進(jìn)。高校該如何才能提高辦學(xué)的效率。這是每個(gè)高校都會(huì)面臨的,也是每個(gè)高校需要迫切解決的問題。而采用信息化手段來代替?zhèn)鹘y(tǒng)的教學(xué)管理模式是一個(gè)重要的途徑。 高校的信息化管理和辦公自動(dòng)化的不斷推進(jìn),教務(wù)工作也逐漸實(shí)現(xiàn)辦公自動(dòng)化,新學(xué)期課程表的安排工作對(duì)指導(dǎo)整個(gè)學(xué)期日常安排是否妥當(dāng)、對(duì)教學(xué)資源的利用是否合理有著至關(guān)重要的作用。如果采取傳統(tǒng)的人工排課方法容易導(dǎo)致課程沖突、課程重復(fù)、課程錯(cuò)漏等各種問題,而且傳統(tǒng)的人工排課方法的任務(wù)非常重和教務(wù)人員的效率非常低下,當(dāng)課程安排上出現(xiàn)錯(cuò)誤要更改的時(shí)候,教務(wù)人員則需要花費(fèi)大量的時(shí)間協(xié)調(diào)老師、班級(jí)、課程、教室等各種因素。隨著高校規(guī)模的不斷擴(kuò)大,學(xué)生人數(shù)不斷增加,人工排課的難度就呈幾何級(jí)數(shù)增大。而高校通用排課系統(tǒng)正是為了減輕教務(wù)人員負(fù)擔(dān),減少課程安排的出錯(cuò)率,降低修改課程表難度,提高教學(xué)資源的合理利用率,從而真正意義上實(shí)現(xiàn)教務(wù)工作自動(dòng)化,解決排課這個(gè)大難問題的教務(wù)辦公軟件。 1.2 目前國(guó)內(nèi)發(fā)展情況 國(guó)內(nèi)多家專業(yè)開發(fā)教學(xué)管理信息系統(tǒng)的企業(yè),如杭州正方公司、湖南強(qiáng)智公司、湖南青果公司等,在其教務(wù)管理產(chǎn)品中均實(shí)現(xiàn)了自動(dòng)排課功能,但由于軟件設(shè)計(jì)局限,對(duì)合班課程、教師兼課、教室交叉重復(fù)使用等復(fù)雜的情況應(yīng)用效果不十分理想。在實(shí)際應(yīng)用中,主要使用其排課沖突檢測(cè)功能進(jìn)行計(jì)算機(jī)輔助排課。國(guó)內(nèi)軟件市場(chǎng)上也出現(xiàn)了很多通用型的排課軟件,如“51智能排課”,“啟智達(dá)排課”,“終級(jí)排課”等等,這些通用軟件可以解決簡(jiǎn)單的通用排課問題,適合學(xué)科門類和課程門數(shù)較單一的學(xué)校,不適合高校教學(xué)管理應(yīng)用,不能滿足高校多學(xué)科、專業(yè)、以及課程教學(xué)的特殊要求,比如完全學(xué)分制下課程教學(xué)班的排課問題等。 通過對(duì)國(guó)內(nèi)部分高校的調(diào)研和考察,了解到目前高校排課主要是利用人機(jī)交互式的計(jì)算機(jī)軟件輔助排課方式,這種方式能夠隨時(shí)檢測(cè)排課沖突,但在排課效率方面沒有什么優(yōu)勢(shì)。也有有少數(shù)高校自行研發(fā)了自動(dòng)排課系統(tǒng),但通常這些排課軟件依賴于各院校自身的實(shí)際需求和管理模式,不會(huì)考慮其他高校的需要,因此它們的數(shù)據(jù)共享性和擴(kuò)展性不強(qiáng),因此沒有完全適用于各高校排課的通用系統(tǒng)。 1.3 課題研究?jī)?nèi)容 本課題在充分了解和熟悉教務(wù)排課環(huán)節(jié)的基礎(chǔ)上,通過對(duì)排課的要素、制約條件的需求分析,建立基于校園網(wǎng)瀏覽器端/服務(wù)器(B/S)結(jié)構(gòu)自動(dòng)排課系統(tǒng)的業(yè)務(wù)模型,對(duì)系統(tǒng)進(jìn)行概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)和數(shù)據(jù)庫設(shè)計(jì),結(jié)合已知的排課算法,讓教務(wù)管理系統(tǒng)擴(kuò)展完善自動(dòng)排課功能,使教務(wù)人員擺脫繁瑣、機(jī)械的手工排課工作,達(dá)到提高排課效率的目的。系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)基于微軟Windows server2000操作系統(tǒng)軟件平臺(tái),采用MySql6.0數(shù)據(jù)庫系統(tǒng)作為數(shù)據(jù)庫開發(fā)平臺(tái),前端數(shù)據(jù)庫開發(fā)工具采用ThinkPhp 程序設(shè)計(jì)語言。 本人的主要工作如下: (1)進(jìn)行系統(tǒng)詳細(xì)設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì),編程實(shí)現(xiàn)自動(dòng)排課系統(tǒng)全部功能,完成軟件開發(fā)。對(duì)實(shí)際的排課問題進(jìn)行測(cè)試,分析評(píng)估排課結(jié)果的質(zhì)量和性能并論述系統(tǒng)的可行性和實(shí)用性。 (2)使用已知的排課算法,使排課效率和質(zhì)量得到提高; (3)分析分析了本學(xué)?;谕耆珜W(xué)分制教學(xué)管理模式下排課的要素和制約條件,提出排課問題的難點(diǎn)和目標(biāo),通過對(duì)排課過程的分析,構(gòu)建自動(dòng)排課系統(tǒng)的邏輯模型; (4)以本人所在單位的實(shí)際情況為背景,對(duì)排課問題進(jìn)行需求分析,建立系統(tǒng)業(yè)務(wù)模型,分析排課流程,給出排課系統(tǒng)的功能模塊框圖; 通過對(duì)以上方面的研究,完成高校自動(dòng)排課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。 第二章高校智能排課系統(tǒng)的關(guān)鍵技術(shù) 2.1 數(shù)據(jù)庫技術(shù) 1、數(shù)據(jù)庫的幾個(gè)原則 數(shù)據(jù)庫設(shè)計(jì)需要遵循以下幾個(gè)原則: 一是,在數(shù)據(jù)庫的設(shè)計(jì)中必須要全面考慮空間、屬性、設(shè)施、模型數(shù)據(jù)的兼容性。鑒于此,交通事件管理數(shù)據(jù)庫設(shè)計(jì)分為綜合數(shù)據(jù)庫設(shè)計(jì)、元數(shù)據(jù)設(shè)計(jì)和關(guān)聯(lián)數(shù)據(jù)設(shè)計(jì)這三種類型。五是,數(shù)據(jù)庫必須要建立和完善分級(jí)管理機(jī)制[16]。用戶根據(jù)訪問系統(tǒng)的角色的不同可以分為系統(tǒng)管理用戶、運(yùn)行調(diào)度用戶、運(yùn)行瀏覽用戶以及領(lǐng)導(dǎo)決策分析用戶這幾個(gè)類型,不同的角色訪問數(shù)據(jù)的權(quán)限要具有差異,并且使用系統(tǒng)的功能也要具有一定的不同,從而實(shí)現(xiàn)對(duì)角色登陸的嚴(yán)格控制,進(jìn)而實(shí)現(xiàn)數(shù)據(jù)的分級(jí)管理。六是,數(shù)據(jù)不僅獨(dú)立,同時(shí)還要可擴(kuò)展。獨(dú)立性是數(shù)據(jù)庫最基本的特點(diǎn),只有具有獨(dú)立性的數(shù)據(jù)庫才能夠獨(dú)立的應(yīng)用于程序中,并且還能使其自身的數(shù)據(jù)庫的設(shè)計(jì)及其結(jié)構(gòu)的變化不會(huì)對(duì)程序的運(yùn)行造成影響[17]。另外,結(jié)合之前的成功經(jīng)驗(yàn),詳細(xì)分析系統(tǒng)的需求,并根據(jù)業(yè)務(wù)的變化,要求在數(shù)據(jù)庫的設(shè)計(jì)中要具有較強(qiáng)的擴(kuò)展性,這樣就能夠使數(shù)據(jù)庫系統(tǒng)在增加或者減少其他需求或者應(yīng)用時(shí)能夠保持一定的穩(wěn)定性,不至于發(fā)生太大的變動(dòng)。 二是,數(shù)據(jù)不僅完整,同時(shí)還要實(shí)用。在數(shù)據(jù)庫設(shè)計(jì)中,我們不僅要考慮系統(tǒng)規(guī)模和實(shí)際需求,同時(shí)還要對(duì)工作的實(shí)際情況和實(shí)際應(yīng)用特點(diǎn)進(jìn)行全面的考慮和分析,在設(shè)計(jì)的過程中,為了保證數(shù)據(jù)的實(shí)用性,必須要遵循“先進(jìn)性與實(shí)用性并重”的原則。數(shù)據(jù)庫中的數(shù)據(jù)只有具備了完整性,才會(huì)具有準(zhǔn)確性,其中通常情況下完整性是通過約束條件來控制的[15]。另外,在數(shù)據(jù)的選擇中還具有一定的約束條件,約束條件可以檢驗(yàn)進(jìn)入數(shù)據(jù)庫中的數(shù)據(jù)值,其目的主要是為了避免那些重復(fù)或冗余的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫。在系統(tǒng)的設(shè)計(jì)中為了有效保證新建或修改后的數(shù)據(jù)能夠遵循所定義的業(yè)務(wù)知識(shí),可以對(duì)約束條件進(jìn)行科學(xué)、合理的利用。 三是,數(shù)據(jù)不僅要標(biāo)準(zhǔn),同時(shí)還要一致。為了給數(shù)據(jù)交流及功能的實(shí)現(xiàn)提供方便,一方面,數(shù)據(jù)庫的設(shè)計(jì)不僅要符合國(guó)家行業(yè)和江蘇省地方標(biāo)準(zhǔn)及ITS行業(yè)的習(xí)慣性事實(shí)標(biāo)準(zhǔn),另一方面,還必須要與數(shù)據(jù)庫設(shè)計(jì)的軟件行業(yè)標(biāo)準(zhǔn)相一致。在數(shù)據(jù)庫的設(shè)計(jì)應(yīng)考慮以前己建立系統(tǒng)的數(shù)據(jù),這主要是由于之前的數(shù)據(jù)庫在與其他系統(tǒng)之間進(jìn)行數(shù)據(jù)交換的時(shí)候具有一定的優(yōu)勢(shì)。 四是,數(shù)據(jù)必須要具有安全性的特點(diǎn)。對(duì)于整個(gè)信息系統(tǒng)來說,數(shù)據(jù)庫不僅僅是其基礎(chǔ),同時(shí)也是其核心,因此必須要保證設(shè)計(jì)的安全性才能夠?yàn)檎麄€(gè)信息系統(tǒng)的運(yùn)轉(zhuǎn)提供條件。在設(shè)計(jì)的過程中,可以構(gòu)建一個(gè)合理和有效的備份和恢復(fù)策略,這樣,當(dāng)數(shù)據(jù)庫由于意外事故,例如人為因素或者天災(zāi)等因素而損壞數(shù)據(jù)庫系統(tǒng)時(shí),就可以利用這一恢復(fù)策略來在最短的時(shí)間內(nèi)使數(shù)據(jù)庫恢復(fù)。除此之外,如果能夠很好的完善數(shù)據(jù)庫訪問的授權(quán)設(shè)計(jì),那么我們就還能夠有效的保證數(shù)據(jù)不被非法訪問。 2、MySQL數(shù)據(jù)庫 MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于Oracle 旗下公司。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在WEB應(yīng)用方面MySQL是最好的RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一。它主要通過關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。 MySQL所使用的SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇MySQL 作為網(wǎng)站數(shù)據(jù)庫。由于其社區(qū)版的性能卓越,搭配PHP 和Apache 可組成良好的開發(fā)環(huán)境。 2.2 apache(Web服務(wù)器) 1、發(fā)展歷程 Apache 起初由伊利諾伊大學(xué)香檳分校的國(guó)家超級(jí)電腦應(yīng)用中心(NCSA)開發(fā)。此后,Apache 被開放源代碼團(tuán)體的成員不斷的發(fā)展和加強(qiáng)。Apache 服務(wù)器擁有牢靠可信的美譽(yù),已用在超過半數(shù)的因特網(wǎng)站中-特別是幾乎所有最熱門和訪問量最大的網(wǎng)站。 Apache最開始是Netscape網(wǎng)頁服務(wù)器之外的開放源代碼選擇。后來它開始在功能和速度超越其他的基于Unix的HTTP服務(wù)器。1996年4月以來,Apache一直是Internet 上最流行的HTTP服務(wù)器: 1999年5月它在57% 的網(wǎng)頁服務(wù)器上運(yùn)行;到了2005年7月這個(gè)比例上升到了69%。在2005年11月的時(shí)候達(dá)到接近70%的市占率,不過隨著擁有大量域名數(shù)量的主機(jī)域名商轉(zhuǎn)換為微軟IIS平臺(tái),Apache市占率近年來呈現(xiàn)些微下滑。而Google自己的網(wǎng)頁服務(wù)器平臺(tái)GWS推出后,加上Lighttpd這個(gè)輕量化網(wǎng)頁服務(wù)器軟件使用的網(wǎng)站慢慢增加,反應(yīng)在整體網(wǎng)頁服務(wù)器市占率上,根據(jù)netcraft在2007年7月的最新統(tǒng)計(jì)數(shù)據(jù),Apache的市占率已經(jīng)降為52.65%,8月時(shí)又滑落到50.92%。盡管如此,它仍舊是現(xiàn)階段因特網(wǎng)市場(chǎng)上,市占率最高的網(wǎng)頁服務(wù)器軟件。 廣泛的解釋是(也是最顯而易見的):這個(gè)名字來自這么一個(gè)事實(shí):當(dāng)Apache在1995年初開發(fā)的時(shí)候,它是由當(dāng)時(shí)最流行的HTTP服務(wù)器NCSA HTTPd 1.3 的代碼修改而成的,因此是“一個(gè)修補(bǔ)的(a patchy)”服務(wù)器。然而在服務(wù)器官方網(wǎng)站的FAQ 中是這么解釋的:“‘Apache’這個(gè)名字是為了紀(jì)念名為Apache(印地語)的美洲印第安人土著的一支,眾所周知他們擁有高超的作戰(zhàn)策略和無窮的耐性”。無論如何,Apache 2.x 分支不包含任何NCSA 的代碼。 2、詳細(xì)介紹 Apache HTTP Server(簡(jiǎn)稱Apache)是Apache軟件基金會(huì)的一個(gè)開放源碼的網(wǎng)頁服務(wù)器,可以在大多數(shù)計(jì)算機(jī)操作系統(tǒng)中運(yùn)行,由于其多平臺(tái)和安全性被廣泛使用,是最流行的Web服務(wù)器端軟件之一。它快速、可靠并且可通過簡(jiǎn)單的API擴(kuò)展,將Perl/Python等解釋器編譯到服務(wù)器中。 Apache HTTP服務(wù)器是一個(gè)模塊化的服務(wù)器,源于NCSAhttpd服務(wù)器,經(jīng)過多次修改,成為世界使用排名第一的Web服務(wù)器軟件。 它可以運(yùn)行在幾乎所有廣泛使用的計(jì)算機(jī)平臺(tái)上。 Apache源于NCSAhttpd服務(wù)器,經(jīng)過多次修改,成為世界上最流行的Web服務(wù)器軟件之一。Apache取自“a patchy server”的讀音,意思是充滿補(bǔ)丁的服務(wù)器,因?yàn)樗亲杂绍浖?,所以不斷有人來為它開發(fā)新的功能、新的特性、修改原來的缺陷。Apache 的特點(diǎn)是簡(jiǎn)單、速度快、性能穩(wěn)定,并可做代理服務(wù)器來使用。 本來它只用于小型或試驗(yàn)Internet網(wǎng)絡(luò),后來逐步擴(kuò)充到各種Unix系統(tǒng)中,尤其對(duì)Linux的支持相當(dāng)完美。Apache有多種產(chǎn)品,可以支持SSL技術(shù),支持多個(gè)虛擬主機(jī)。Apache是以進(jìn)程為基礎(chǔ)的結(jié)構(gòu),進(jìn)程要比線程消耗更多的系統(tǒng)開支,不太適合于多處理器環(huán)境,因此,在一個(gè)Apache Web站點(diǎn)擴(kuò)容時(shí),通常是增加服務(wù)器或擴(kuò)充群集節(jié)點(diǎn)而不是增加處理器。到目前為止Apache仍然是世界上用的最多的Web服務(wù)器,市場(chǎng)占有率達(dá)60%左右。世界上很多著名的網(wǎng)站如Amazon、Yahoo!、W3 Consortium、Financial Times等都是Apache的產(chǎn)物,它的成功之處主要在于它的源代碼開放、有一支開放的開發(fā)隊(duì)伍、支持跨平臺(tái)的應(yīng)用(可以運(yùn)行在幾乎所有的Unix、Windows、Linux系統(tǒng)平臺(tái)上)以及它的可移植性等方面。 Apache的誕生極富有戲劇性。當(dāng)NCSAWWW服務(wù)器項(xiàng)目停頓后,那些使用NCSAWWW服務(wù)器的人們開始交換他們用于該服務(wù)器的補(bǔ)丁程序,他們也很快認(rèn)識(shí)到成立管理這些補(bǔ)丁程序的論壇是必要的。就這樣,誕生了Apache Group,后來這個(gè)團(tuán)體在NCSA的基礎(chǔ)上創(chuàng)建了Apache。 3、特性 Apacheweb服務(wù)器軟件擁有以下特性: 1.擁有簡(jiǎn)單而強(qiáng)有力的基于文件的配置過程 2.支持最新的HTTP/1.1通信協(xié)議 3.支持基于IP和基于域名的虛擬主機(jī) 4.支持實(shí)時(shí)監(jiān)視服務(wù)器狀態(tài)和定制服務(wù)器日志 5.支持通用網(wǎng)關(guān)接口 6.支持多種方式的HTTP認(rèn)證 7.集成Perl處理模塊 8.提供用戶會(huì)話過程的跟蹤 9.集成代理服務(wù)器模塊 10.支持服務(wù)器端包含指令(SSI) 11.通過第三方模塊可以支持JavaServlets 12.支持安全Socket層(SSL) 13.支持FastCGI 2.2 PHP技術(shù) 1、簡(jiǎn)介 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預(yù)處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點(diǎn),利于學(xué)習(xí),使用廣泛,主要適用于Web開發(fā)領(lǐng)域。PHP 獨(dú)特的語法混合了C、Java、Perl以及PHP自創(chuàng)的語法。它可以比CGI或者Perl更快速地執(zhí)行動(dòng)態(tài)網(wǎng)頁。用PHP做出的動(dòng)態(tài)頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)文檔中去執(zhí)行,執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多;PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行,使代碼運(yùn)行更快。 2、發(fā)展歷程 PHP原始為Personal Home Page的縮寫,已經(jīng)正式更名為"PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的縮寫,這種將名稱放到定義中的寫法被稱作遞歸縮寫。PHP于1994年由Rasmus Lerdorf創(chuàng)建,剛剛開始是Rasmus Lerdorf 為了要維護(hù)個(gè)人網(wǎng)頁而制作的一個(gè)簡(jiǎn)單的用Perl語言編寫的程序。這些工具程序用來顯示Rasmus Lerdorf 的個(gè)人履歷,以及統(tǒng)計(jì)網(wǎng)頁流量。后來又用C語言重新編寫,包括可以訪問數(shù)據(jù)庫。他將這些程序和一些表單直譯器整合起來,稱為PHP/FI。PHP/FI 可以和數(shù)據(jù)庫連接,產(chǎn)生簡(jiǎn)單的動(dòng)態(tài)網(wǎng)頁程序。 在1995年以Personal Home Page Tools (PHP Tools) 開始對(duì)外發(fā)表第一個(gè)版本,Lerdorf寫了一些介紹此程序的文檔。并且發(fā)布了PHP1.0!在這的版本中,提供了訪客留言本、訪客計(jì)數(shù)器等簡(jiǎn)單的功能。以后越來越多的網(wǎng)站使用了PHP,并且強(qiáng)烈要求增加一些特性。比如循環(huán)語句和數(shù)組變量等等;在新的成員加入開發(fā)行列之后,Rasmus Lerdorf 在1995年6月8日將PHP/FI 公開發(fā)布,希望可以透過社群來加速程序開發(fā)與尋找錯(cuò)誤。這個(gè)發(fā)布的版本命名為PHP 2,已經(jīng)有PHP 的一些雛型,像是類似Perl的變量命名方式、表單處理功能、以及嵌入到HTML 中執(zhí)行的能力。程序語法上也類似Perl,有較多的限制,不過更簡(jiǎn)單、更有彈性。PHP/FI加入了對(duì)MySQL 的支持,從此建立了PHP在動(dòng)態(tài)網(wǎng)頁開發(fā)上的地位。到了1996年底,有15000個(gè)網(wǎng)站使用PHP/FI。 在1997年,任職于Technion IIT公司的兩個(gè)以色列程序設(shè)計(jì)師:Zeev Suraski 和Andi Gutmans,重寫了PHP 的剖析器,成為PHP 3 的基礎(chǔ)。而PHP 也在這個(gè)時(shí)候改稱為PHP:Hypertext Preprocessor。經(jīng)過幾個(gè)月測(cè)試,開發(fā)團(tuán)隊(duì)在1997年11月發(fā)布了PHP/FI 2。隨后就開始PHP 3 的開放測(cè)試,最后在1998年6月正式發(fā)布PHP 3。Zeev Suraski 和Andi Gutmans 在PHP 3 發(fā)布后開始改寫PHP 的核心,這個(gè)在1999年發(fā)布的剖析器稱為Zend Engine,他們也在以色列的Ramat Gan 成立了Zend Technologies 來管理PHP 的開發(fā)。 在2000年5月22日,以Zend Engine 1.0為基礎(chǔ)的PHP 4正式發(fā)布,2004年7月13日則發(fā)布了PHP 5,PHP 5則使用了第二代的Zend Engine。PHP包含了許多新特色,像是強(qiáng)化的面向?qū)ο蠊δ?、引入PDO(PHP Data Objects,一個(gè)存取數(shù)據(jù)庫的延伸函數(shù)庫)、以及許多效能上的增強(qiáng)。PHP 4已經(jīng)不會(huì)繼續(xù)更新,以鼓勵(lì)用戶轉(zhuǎn)移到PHP 5。 2008年P(guān)HP 5成為了PHP唯一的有在開發(fā)的PHP版本。將來的PHP 5.3將會(huì)加入Late static binding和一些其他的功能強(qiáng)化。PHP 6 的開發(fā)也正在進(jìn)行中,主要的改進(jìn)有移除register_globals、magic quotes 和Safe mode的功能。 3、其它特點(diǎn) 數(shù)據(jù)連接:PHP可以編譯成具有與許多數(shù)據(jù)庫相連接的函數(shù)。PHP與MySQL是絕佳的組合。自己編寫外圍的函數(shù)取間接存取數(shù)據(jù)庫。通過這樣的途徑當(dāng)你更換使用的數(shù)據(jù)庫時(shí),可以輕松的更改編碼以適應(yīng)這樣的變化。PHPLIB就是最常用的可以提供一般事務(wù)需要的一系列基庫。 php編程技術(shù)可擴(kuò)展性:就像前面說的那樣,PHP已經(jīng)進(jìn)入了一個(gè)高速發(fā)展的時(shí)期。對(duì)于一個(gè)非程序員來說為PHP擴(kuò)展附加功能可能會(huì)比較難,但是對(duì)于一個(gè)PHP程序員來說并不困難。 php編程技術(shù)面向?qū)ο螅篜HP提供了類和對(duì)象?;趙eb的編程工作非常需要面向?qū)ο缶幊棠芰?。PHP支持構(gòu)造器、提取類等。 php編程技術(shù)可伸縮性:傳統(tǒng)上網(wǎng)頁的交互作用是通過CGI來實(shí)現(xiàn)的。CGI程序的伸縮性不很理想,因?yàn)樗鼮槊恳粋€(gè)正在運(yùn)行的CGI程序開一個(gè)獨(dú)立進(jìn)程。解決方法就是將經(jīng)常用來編寫CGI程序的語言的解釋器編譯進(jìn)你的web服務(wù)器(比如mod_perl,JSP)。PHP就可以以這種方式安裝,雖然很少有人愿意這樣以CGI方式安裝它。內(nèi)嵌的PHP可以具有更高的可伸縮性。 php編程技術(shù)更多特點(diǎn):PHP的開發(fā)者們?yōu)榱烁m合web編程,開發(fā)了許多外圍的流行基庫,這些庫包含了更易用的層。利用PHP連接包括Oracle,MS- Access,Mysql 在內(nèi)的大部分?jǐn)?shù)據(jù)庫??梢栽谏n蠅上畫圖,編寫程序下載或者顯示e-mail。甚至可以完成網(wǎng)絡(luò)相關(guān)的功能。最好的是,可以選擇你的PHP安裝版本需要哪些功能。引用Nissan的Xterra的話來說就是PHP可以做到你想讓它做到的一切而且無所不能! 2.3 B/S架構(gòu)介紹 B/S(Browser/Server)結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。B/S網(wǎng)絡(luò)結(jié)構(gòu)模式是基于Intranet的需求而出現(xiàn)并發(fā)展的。Intranet是應(yīng)用TCP/1P協(xié)議建立的企事業(yè)單位內(nèi)部專用網(wǎng)絡(luò),它采用諸如TCP/IP、HTTP、SMTP和HTML等Internet技術(shù)和標(biāo)準(zhǔn),能為企事業(yè)單位內(nèi)部交換信息提供服務(wù)。同時(shí),它具有連接Internet的功能和防止外界入侵的安全措施。另一方而,由于數(shù)據(jù)庫具有強(qiáng)大的數(shù)據(jù)存儲(chǔ)和管理能力,并且能夠動(dòng)態(tài)地進(jìn)行數(shù)據(jù)輸入和輸出,如果把數(shù)據(jù)庫應(yīng)用于Internet上,不僅可以實(shí)現(xiàn)大量信息的網(wǎng)上發(fā)布,而且能夠?yàn)閺V大用戶提供動(dòng)態(tài)的信息查詢和數(shù)據(jù)處理服務(wù),進(jìn)而加強(qiáng)企事業(yè)單位內(nèi)部部門之間、上級(jí)部門與下級(jí)部門之間、企事業(yè)單位員工之間、企事業(yè)單位與客戶之間以及企事業(yè)單位與企事業(yè)單位之間的信息交流,降低企事業(yè)單位的日常工作成本,提高企事業(yè)單位的經(jīng)濟(jì)效益。 B/S模式,是一種從傳統(tǒng)的二層C/S模式發(fā)展起來的新的網(wǎng)絡(luò)結(jié)構(gòu)模式,其本質(zhì)是三層及三層以上結(jié)構(gòu)的C/S模式。在B/S模式中,客戶端運(yùn)行瀏覽器軟件。瀏覽器以超文本形式向Web服務(wù)器提出訪問數(shù)據(jù)庫的要求,Web服務(wù)器接受客戶端請(qǐng)求后,將這個(gè)請(qǐng)求轉(zhuǎn)化為SQL語法,并交給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器得到請(qǐng)求后,驗(yàn)證其合法性,并進(jìn)行數(shù)據(jù)處理,然后將處理后的結(jié)果返回Web服務(wù)器,Web服務(wù)器再一次將得到的所有結(jié)果進(jìn)行轉(zhuǎn)化,變成HTML文檔形式,轉(zhuǎn)發(fā)給客戶端瀏覽器以友好的Web頁面形式顯示出來。 B/S模式最大的優(yōu)勢(shì)是靈活性,任何時(shí)間、任何地點(diǎn)、任何系統(tǒng),只要可以使用瀏覽器上網(wǎng),就可以使用B/S系統(tǒng)的終端。其主要特點(diǎn)如下: 1、B/S模式的結(jié)構(gòu)易于擴(kuò)展 由于Web的平臺(tái)無關(guān)性,B/S模式結(jié)構(gòu)可以任意擴(kuò)展,可以從一臺(tái)服務(wù)器、幾個(gè)用戶的工作組級(jí)擴(kuò)展成為擁有成千上萬用戶的大型系統(tǒng)。 2、B/S模式提供了一致的用戶界面 B/S模式的應(yīng)用軟件都是基于Web瀏覽器的,這些瀏覽器的界面都很相似。對(duì)于無用戶交互功能的頁面,用戶接觸的界面都是一致的,從而可以降低軟件的培訓(xùn)費(fèi)用。 3、系統(tǒng)開發(fā)、維護(hù)和升級(jí)的經(jīng)濟(jì)性 對(duì)于大型的管理信息系統(tǒng),軟件開發(fā)、維護(hù)與升級(jí)的費(fèi)用是非常高的,B/S模式所具有的框架結(jié)構(gòu)可以大大節(jié)省這些費(fèi)用,同時(shí),B/S模式對(duì)前臺(tái)客戶機(jī)的要求并不高,可以避免盲目進(jìn)行硬件升級(jí)造成的巨大浪費(fèi)。 4、B/S模式具有更強(qiáng)的信息系統(tǒng)集成性 在B/S模式下,集成了解決企事業(yè)單位各種問題的服務(wù),而非零散的單一功能的多系統(tǒng)模式,因而它能提供更高的工作效率。 5、B/S模式具有很強(qiáng)的開放性 在B/S模式下,外部的用戶亦可通過通用的瀏覽器進(jìn)行訪問。 6、B/S模式提供靈活的信息交流和信息發(fā)布服務(wù) B/S模式借助Internet強(qiáng)大的信息發(fā)布與信息傳送能力可以有效地解決企業(yè)、高等學(xué)校內(nèi)部的大量不規(guī)則的信息交流。 2.4 Socket技術(shù) 2.4.1 Sockets介紹 2.4.1.1 Sockets具體說明 使用Sockets Socket控件讓你建立一個(gè)利用TCP/IP和有關(guān)的協(xié)議與其他系統(tǒng)進(jìn)行通信的應(yīng)用。還能夠讀和寫通過它連接的其他機(jī)器,而不用擔(dān)心實(shí)際的網(wǎng)絡(luò)軟件的相關(guān)細(xì)節(jié)。Sockets提供基于TCP/IP協(xié)議的連接。除此以外還能很好的工作,在其他相關(guān)的協(xié)議: 例如Xerox Network System (XNS), Digital's DEC net, or Novell's IPX/S PX 家族。C Builder提供你寫網(wǎng)絡(luò)服務(wù)器或客戶應(yīng)用程序去讀和寫其他的系統(tǒng)。一個(gè)服務(wù)或客戶程序通常專注于一個(gè)單一的服務(wù)如超文本傳送協(xié)議(HTTP)或文件傳輸協(xié)議(FTP)。使用Server sockets,一個(gè)應(yīng)用程序可以提供這些服務(wù)中的一個(gè)去連接一個(gè)希望使用服務(wù)的客戶程序。Client sockets允許一個(gè)應(yīng)用使用這些服務(wù)中的一個(gè)去連接提供這個(gè)服務(wù)的服務(wù)應(yīng)用。使用sockets去寫應(yīng)用程序,你必須理解下面這些知識(shí): 2.4.1.2 服務(wù)工具 當(dāng)你需要寫網(wǎng)絡(luò)服務(wù)或客戶應(yīng)用時(shí),Sockets提供一種接合。對(duì)于許多服務(wù),象HTTP 或FTP,第三方服務(wù)商提供這些服務(wù)已經(jīng)相當(dāng)有效。有些甚至隨著操作系統(tǒng)捆綁而來,以便不用你自己寫。然而,當(dāng)你想更多的控制服務(wù)的實(shí)現(xiàn),如想讓你的應(yīng)用程序與網(wǎng)絡(luò)通信更加緊密,或當(dāng)沒有一個(gè)服務(wù)能提供你特殊需要的服務(wù)時(shí),你可能想建立你自己的服務(wù)或客戶應(yīng)用。例如,工作在分布式data sets時(shí),你可能想為數(shù)據(jù)庫寫一層與其他系統(tǒng)通信的應(yīng)用。想使用Sockets實(shí)現(xiàn)一個(gè)服務(wù),你必須理解: 1、理解服務(wù)和端口 許多標(biāo)準(zhǔn)服務(wù)都有關(guān)聯(lián)的、指定的端口號(hào)。當(dāng)執(zhí)行服務(wù)時(shí),你可以為服務(wù)考慮一個(gè)端口號(hào)。如果你實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)服務(wù),Windows socket objects 提供一些方法讓你為服務(wù)尋找端口號(hào)。如果提供一個(gè)新的服務(wù),在基于Windows 95 或NT 機(jī)器上,你能夠在文件Services中為你的服務(wù)指定一個(gè)相關(guān)聯(lián)的端口號(hào)。設(shè)置Services文件的更多信息請(qǐng)看微軟的Windows Sockets文檔。 2、服務(wù)協(xié)議 在你寫一個(gè)網(wǎng)絡(luò)服務(wù)或客戶程序前,你必須明白你的應(yīng)用將提供或使用什么服務(wù)。你的網(wǎng)絡(luò)應(yīng)用必須支持許多服務(wù)的標(biāo)準(zhǔn)協(xié)議。如果你為標(biāo)準(zhǔn)的服務(wù)例如HTTP,FTP寫網(wǎng)絡(luò)應(yīng)用,或even finger or time,你必須先理解與其他系統(tǒng)通信所使用的協(xié)議。特殊服務(wù)細(xì)節(jié)你必須看提供的或使用的文檔。如果你的應(yīng)用程序提供一個(gè)新的服務(wù)與其他系統(tǒng)通信,第一步是為這個(gè)服務(wù)的服務(wù)端和客戶端設(shè)計(jì)通信協(xié)議。什么信息將發(fā)送?如何整理這些信息?如何對(duì)這些信息進(jìn)行編碼?經(jīng)常的,你的網(wǎng)絡(luò)服務(wù)端或客戶端應(yīng)用程序要提供一層在網(wǎng)絡(luò)軟件和一個(gè)應(yīng)用之間使用的服務(wù)。例如,一個(gè)HTTP服務(wù)站點(diǎn)在INternet與一個(gè)Web 服務(wù)應(yīng)用之間為HTTP請(qǐng)求信息提供內(nèi)容和應(yīng)答。在你的網(wǎng)絡(luò)應(yīng)用(或客戶應(yīng)用)和網(wǎng)絡(luò)軟件之間Sockets 提供一個(gè)接口。該接口在你的應(yīng)用程序與應(yīng)用間使用。你可以拷貝第三方服務(wù)商提供的標(biāo)準(zhǔn)API(例如ISAPI),或你可以設(shè)計(jì)和發(fā)布你自己的API。 2.4.1.3 Socket連接的類型 Socket連接基本可以分成三個(gè)不同的類型,他們可以反映出如何開始連接和什么是本地Socket 連接。這三個(gè)不同的類型分別是: 1.服務(wù)端連接 當(dāng)傾聽socket同意客戶端發(fā)出的連接請(qǐng)求時(shí),服務(wù)器端socket形成了服務(wù)器連接。當(dāng)服務(wù)器同意連接時(shí),要將一個(gè)完整的服務(wù)端socket描述發(fā)送給準(zhǔn)備連接的客戶端,以完成連接,當(dāng)客戶端接收到這個(gè)描述時(shí),連接已被確認(rèn),連接完成。一旦連接到客戶端的Socket完成,服務(wù)器連接就無法識(shí)別從客戶端發(fā)來的連接。兩端具有相同的接收相同事件類型的能力。只有傾聽(listening)連接是根本不同的,它只有一個(gè)單一的末端。 2、傾聽連接 服務(wù)器socket不主動(dòng)連接客戶端,相反,他們形成了一個(gè)被動(dòng)的“半連接“狀態(tài),聽客戶的請(qǐng)求。服務(wù)器sockets形成一個(gè)連接請(qǐng)求隊(duì)列,來儲(chǔ)存它所接收到的連接請(qǐng)求。此隊(duì)列記錄客戶連接請(qǐng)求,就像它們已經(jīng)連接了似的。當(dāng)服務(wù)器sockets 與客戶連接請(qǐng)求相一致時(shí),它就形成了一個(gè)新的sockets連接到客戶端,所以這個(gè)監(jiān)聽連接可以保持打開以便允許其他客戶端請(qǐng)求。 3、客戶端連接 客戶端連接是由本地系統(tǒng)的客戶端socket和一個(gè)遠(yuǎn)程系統(tǒng)上的服務(wù)端Socket進(jìn)行連接??蛻舳诉B接是由本地系統(tǒng)的客戶端Socket開始。首先,由客戶端Socket 來描述它想連接到的服務(wù)端Socket. 然后由客戶端socket查找服務(wù)端socket,如果查找到了服務(wù)器,就發(fā)出連接要求。服務(wù)端socket有可能無法正確的連接到客戶端Socket。服務(wù)器sockets會(huì)形成一個(gè)客戶端申請(qǐng)連接的隊(duì)列,在他們能滿足條件是自動(dòng)進(jìn)行連接。當(dāng)服務(wù)端socket同意客戶端的連接要求時(shí),服務(wù)端socket就會(huì)向它準(zhǔn)備連接的客戶socket發(fā)送一個(gè)完整的描述,客戶端就可以完成連接。 2.4.1.4 sockets描述 Sockets可以讓您的網(wǎng)絡(luò)應(yīng)用程序與其他系統(tǒng)通過網(wǎng)絡(luò)通信。在網(wǎng)絡(luò)連接中的每個(gè)socket都可以被看作是一個(gè)終端點(diǎn)。它有指定地址。 socket連接的完整描述,您必須提供socket連接的兩端的地址。在開始一個(gè)socket連接之前,必須完成所要獲得的連接的完整的描述??梢詮膽?yīng)用程序運(yùn)行的系統(tǒng)平臺(tái)上獲取一些信息。例如,您不需要描述客戶端socket的本地IP地址,可以從操作系統(tǒng)中得到這個(gè)信息。但是你必須提供你所依賴的socket類型的信息。客戶端socket必須描述他們想要連接到的服務(wù)器。偵聽服務(wù)器socket必須描述它們提供的服務(wù)器端口的響應(yīng)。一個(gè)完整的socket連接的描述由2個(gè)部分組成: 1.端口號(hào) 在socket連接中,雖然通過IP地址提供的信息可以方便的找到另一端的系統(tǒng),但是通常也需要指定那個(gè)系統(tǒng)的端口號(hào)。沒有端口號(hào),一個(gè)系統(tǒng)同時(shí)只能進(jìn)行一個(gè)單一的連接。端口號(hào)標(biāo)識(shí)允許一個(gè)獨(dú)立的系統(tǒng)連接到支持同時(shí)多個(gè)連接的主機(jī),所以連接必須指定端口號(hào)。 在網(wǎng)絡(luò)應(yīng)用程序中,端口號(hào)是服務(wù)器工具的一個(gè)數(shù)字代碼。他們的作用是偵聽連接到他們自己固定的端口號(hào),這樣他們才能找到客戶端sockets。服務(wù)器sockets要為其服務(wù)的相關(guān)端口號(hào)進(jìn)行監(jiān)聽。當(dāng)他們被允許提供一個(gè)客戶端sockets連接時(shí),就會(huì)創(chuàng)建一個(gè)單獨(dú)的sockets連接,使用不同的端口號(hào)。以此實(shí)現(xiàn)持續(xù)監(jiān)控端口號(hào)的相關(guān)服務(wù)。 客戶端socket使用專用的本地端口號(hào),而不必使用其他socket來查找它們。通過指定他們想要連接的服務(wù)端的端口號(hào),來查找服務(wù)器應(yīng)用程序。通常是通過指定要連接的服務(wù)來指定端口號(hào)。 2.IP地址 主機(jī)是一個(gè)這樣的系統(tǒng),它運(yùn)行著含有socket的應(yīng)用程序。你需要向socket來描述主機(jī),這個(gè)描述需要給出主機(jī)的IP地址。該地址是一個(gè)字符串,有四個(gè)數(shù)字(byte)值,并在標(biāo)準(zhǔn)的internet點(diǎn)付內(nèi)。 例如123.197.2.3一個(gè)簡(jiǎn)單的系統(tǒng)可以支持多個(gè)IP地址。IP地址往往很難記住,容易打錯(cuò)。另一種方法是使用主機(jī)名。主機(jī)名就是IP地址的另一個(gè)名字,是常見的統(tǒng)一資源定位(URLs)。它是一個(gè)字符串,包括域名和服務(wù)。 例如,大部分內(nèi)部網(wǎng)中的主機(jī)名對(duì)應(yīng)的IP地址是internetIP地址。在windows95和NT機(jī)器上,如果你無法使用一個(gè)主機(jī)名,你可以在HOSTS文件中給你的本地IP地址取一個(gè)新的名字。 服務(wù)器sockets可以不指定主機(jī)??梢詮南到y(tǒng)中獲取本地IP地址。如果本地系統(tǒng)可以支持多個(gè)IP地址,則服務(wù)器sockets也會(huì)在所有的IP地址上偵聽客戶端請(qǐng)求的。當(dāng)服務(wù)器sockets同意一個(gè)連接請(qǐng)求時(shí),由客戶端提供一個(gè)遠(yuǎn)程的IP地址??蛻舳藄ockets必須通過提供主機(jī)名或地址來指定遠(yuǎn)程主機(jī)。 從主機(jī)名和IP地址之間選擇一個(gè),很多應(yīng)用程序使用主機(jī)名來指定系統(tǒng)。主機(jī)名不容易忘而且便于檢查排版是否錯(cuò)誤。此外,服務(wù)器可以改變系統(tǒng)或與IP地址相關(guān)聯(lián)的特殊的主機(jī)名。使用主機(jī)名,可以讓客戶端通過主機(jī)名來查找需要的站點(diǎn),即使主機(jī)更換了IP地址。如果不知道主機(jī)名,客戶socket必須知道服務(wù)器系統(tǒng)所使用的IP地址。通過提供IP地址來指定服務(wù)器會(huì)更快。當(dāng)您提供主機(jī)名時(shí),socket要定位服務(wù)器系統(tǒng),就要先搜索與這個(gè)主機(jī)名相關(guān)聯(lián)的IP地址。 2.4.1.5 使用socket組件 有客戶端sockets和服務(wù)器sockets兩個(gè)組件。它們?cè)试S你連接到其他的機(jī)器,并允許你通過這個(gè)連接讀寫信息。與每個(gè)sockets控件相關(guān)聯(lián)的是windows socket 對(duì)象,它們是一個(gè)實(shí)用的終端socket連接。ssocket控件使用windows socket對(duì)象去封裝windows socket API 調(diào)用,所以不需要你的應(yīng)用去關(guān)心怎么建立連接,也不需要去管理socket信息。。 1.使用客戶端sockets 在你自己的頁面上添加一個(gè)客戶端socket組件(TClientSocket),把你的應(yīng)用變成一個(gè)TCP/IP客戶。指定你想連接的服務(wù)器socket和你希望服務(wù)器提供的服務(wù)。通過描述你想得到的連接,使客戶socket控件去完成連接服務(wù)。每個(gè)客戶socket控件都使用獨(dú)立的客戶windows socket對(duì)象(TClientWinSocket)去應(yīng)答連接中的客戶終端。使用客戶sockets: A.取得關(guān)于連接的信息 當(dāng)成功連接到服務(wù)器socket后,可以使用你的客戶端socket控制相關(guān)的客戶的windows socket object獲取有關(guān)連接的信息。使用Socket property訪問客戶端窗口對(duì)象。一個(gè)properties,讓您確定在客戶端和服務(wù)器的連接中使用的地址和端口號(hào)。 當(dāng)使用一個(gè)windows socket API調(diào)用時(shí),可以通過使用SocketHandle property去獲得socket連接中使用的handle。也可以用Handle property去訪問windows,能夠獲得socket連接的信息。AsyncStyles property可以決定windows handle要接收信息類型。 B、建立連接 當(dāng)你在客戶socket控件中設(shè)置完成了你想要連接的服務(wù)器的屬性時(shí),你就可以通過Open的方法來進(jìn)行連接。如果你希望你的應(yīng)用程序在啟動(dòng)時(shí)能夠自動(dòng)連接,在設(shè)計(jì)時(shí),通過使用Object Inspector設(shè)置Active property為true來實(shí)現(xiàn)。 C、指定想得到的服務(wù) 客戶socket組件有一個(gè)數(shù)字properties,通過它可以指定你要連接到的服務(wù)器系統(tǒng)和端口??梢杂弥鳈C(jī)名指定所需要的服務(wù)器系統(tǒng)。如果您不知道主機(jī)名,或者您是關(guān)注服務(wù)器的查找速度,您可以通過使用IP地址屬性來指定服務(wù)器系統(tǒng)的地址。您必須指定一個(gè)IP地址或者主機(jī)名。如果您都指定了,客戶socket控件會(huì)自動(dòng)使用主機(jī)名。除了服務(wù)器系統(tǒng),您還必須指定客戶socket將連接到的服務(wù)器系統(tǒng)的端口。您可以使用Port property來指定服務(wù)端口號(hào)。也可以在Service property中使用服務(wù)名。如果您同時(shí)指定了端口號(hào)和服務(wù)的名稱,客戶socket控件會(huì)自動(dòng)使用服務(wù)名。 D.關(guān)閉連接 當(dāng)通訊完成要將socket連接關(guān)閉時(shí),可以調(diào)用Close方法來關(guān)閉連接。如果連接由服務(wù)器端進(jìn)行關(guān)閉,你會(huì)收到一個(gè)ondisconnect的事件通知。 2.使用服務(wù)器sockets 在你自己的頁面添加一個(gè)服務(wù)端Socket組件使你的應(yīng)用成為一個(gè)TCP / IP的服務(wù)器。你可以指定要服務(wù)器sockets提供的服務(wù)或當(dāng)探查到客戶端請(qǐng)求時(shí)使用哪個(gè)端口。您可以使用服務(wù)器socket控件來監(jiān)視和允許客戶端連接請(qǐng)求。每個(gè)socket服務(wù)器控件都有一個(gè)單獨(dú)的windows socket Object(TServerWinSocket)來回答偵聽到的連接。它使用一個(gè)服務(wù)器客戶winodws socket Object(TServerClientWinSocket)來應(yīng)答所有連接的的客戶socket。 A.指定端口 在你的服務(wù)器socket還不能監(jiān)聽客戶請(qǐng)求時(shí),你需要給你的監(jiān)聽服務(wù)指定一個(gè)端口??梢酝ㄟ^Port property來指定端口。如果您的服務(wù)器應(yīng)用程序提供了一個(gè)標(biāo)準(zhǔn)服務(wù),該服務(wù)將使用自定義相關(guān)端口。可以通過Service property指定固定的端口號(hào)。使用Service property,可以避免端口號(hào)的設(shè)置錯(cuò)誤。如果同時(shí)指定了Port property和Service property,服務(wù)socket將自動(dòng)使用服務(wù)名。 B.監(jiān)聽客戶請(qǐng)求 當(dāng)你在server socket控件上設(shè)置了端口號(hào),就可以通過調(diào)用Open方法來監(jiān)聽連接??梢酝ㄟ^使用Object Inspector設(shè)置Active 屬性為true來設(shè)置應(yīng)用程序在啟動(dòng)時(shí)可以自動(dòng)監(jiān)聽連接。 C.連接到客戶端。 監(jiān)聽服務(wù)socket控件會(huì)自動(dòng)接受監(jiān)聽到的連接請(qǐng)求。如果沒有收到通知,OnClientConnetc事件將發(fā)生。 D.取得關(guān)于連接的信息 當(dāng)你的服務(wù)器socket啟動(dòng)了監(jiān)聽連接,就可以通過與你服務(wù)器socket控件相關(guān)聯(lián)的服務(wù)器windows socket object來獲取連接的信息。可以用Socket property 來訪問server windows socket。object windows socket object的屬性可以讓你發(fā)現(xiàn)客戶端socket連接的所有活動(dòng),通過socket服務(wù)器控件允許連接。使用Handle屬性來訪問通過socket連接接收到的信息。 所有活動(dòng)的,連接的客戶應(yīng)用都是是通過服務(wù)、客戶windows socket bject (TServerClientWinSocket)封裝的??梢酝ㄟ^server windows socket object的屬性來讀取這些信息。這些server client windows socket object的屬性可以讓你決定哪些地址和端口號(hào)給連接的客戶和服務(wù)器socket使用。如果你使用windows socket API調(diào)用,那么可以通過SocketHandle屬性來獲取socket連接時(shí)所使用的handle。也可以通過Handle屬性去讀取windows從socket連接處獲得的信息。windows handle將接收的信息類型由AsyncStyles屬性來決定。 E.關(guān)閉連接 可以通過調(diào)用Close方法來關(guān)閉監(jiān)聽連接。這時(shí)所有打開著的以及連接到客戶應(yīng)用的連接將會(huì)關(guān)閉,尚未同意的連接將會(huì)取消,然后會(huì)關(guān)閉監(jiān)聽連接,使你的服務(wù)socket控件不在接受任何新的連接請(qǐng)求。如果客戶端關(guān)閉了他們連接到你的server socket的獨(dú)立的連接時(shí),服務(wù)端會(huì)在OnClientDisconnect事件中得到相關(guān)訊息。 2.4.1.6 socket事件的應(yīng)答 客戶在使用的過程中不可避免的會(huì)產(chǎn)生相應(yīng)的錯(cuò)誤事件,在產(chǎn)生錯(cuò)誤事件之后,socket就會(huì)有相應(yīng)的事件應(yīng)答的機(jī)制,在此過程中會(huì)產(chǎn)生一個(gè)OnError事件,同時(shí)把錯(cuò)誤代碼改為0,以避免socket產(chǎn)生一個(gè)例外。 2.4.2 Socket運(yùn)行原理詳解 1、Socket中連接釋放原理 上文中我們已經(jīng)對(duì)于建立連接的過程進(jìn)行了詳細(xì)的介紹,下面我們將對(duì)與連接釋放的過程進(jìn)行分析,我們?cè)谶M(jìn)行連接釋放的過程中就意味著客戶關(guān)閉了連接,也就是說首先客戶通過相應(yīng)的客戶端調(diào)用close進(jìn)行連接的關(guān)閉,這時(shí)候客戶端就會(huì)想服務(wù)器發(fā)送一個(gè)FIN M包,服務(wù)器在接收到這個(gè)包之后,就會(huì)對(duì)FIN包進(jìn)行相應(yīng)的確認(rèn),同時(shí)把結(jié)束的字符發(fā)送到相應(yīng)的客戶端上,同時(shí)客戶端也不會(huì)在接收到相應(yīng)的連接的數(shù)據(jù)。 2、Socket中TCP發(fā)送原理 在日常的實(shí)踐的過程中,我們?cè)赟ocket程序運(yùn)行的過程中關(guān)于TCP連接的建立大致可以分成三個(gè)重要的組成部分,也就說說我們?cè)诮CP連接的時(shí)候需要經(jīng)過以下流程: 我們要建立一個(gè)TCP的連接,首先需要我們自己通過我們自身的客戶端把一個(gè)SYN J發(fā)送到相應(yīng)的服務(wù)器,服務(wù)器在接收到相應(yīng)的SYN J請(qǐng)求之后,需要對(duì)這個(gè)SYN J進(jìn)行確認(rèn),也就是服務(wù)器對(duì)于用戶的SYN J發(fā)送一個(gè)SYN K作為響應(yīng),同時(shí)在響應(yīng)的過程中通過ACK J 1進(jìn)行確認(rèn);客戶在接受到服務(wù)器的響應(yīng)之后,同時(shí)需要發(fā)送一個(gè)確認(rèn)ACK K 1到響應(yīng)的服務(wù)器,只有通過這三次的流程,我們才可能建立一個(gè)TCP 連接。 TCP在Socket發(fā)送的三次流程 從上圖中我們可以清楚的看出,在建立連接的過程中,客戶端首先根據(jù)自身的需要向服務(wù)器發(fā)送一個(gè)連接請(qǐng)求的SYN J包,在這個(gè)過程中,客戶端所調(diào)用的是connect 命令,發(fā)送之后,客戶端中的connect就會(huì)進(jìn)入相應(yīng)的忙碌狀態(tài);客戶端發(fā)送相應(yīng)的連接請(qǐng)求之后,服務(wù)器就會(huì)相應(yīng)的受到SYN J包,也就是接收到客戶的連接的請(qǐng)求,這時(shí)候服務(wù)器就會(huì)調(diào)用accept函數(shù)接受客戶的請(qǐng)求,同時(shí)向客戶端發(fā)送相應(yīng)的響應(yīng)SYN K以及確認(rèn)的ACK J 1;客戶端在接收到相應(yīng)的SYN K以及確認(rèn)的ACK J 1之后,connect就會(huì)返回,同時(shí)向服務(wù)器發(fā)送確認(rèn)包SYN K,服務(wù)器在接收到確認(rèn)的ACK K 1時(shí),accept返回,這樣通過三次的流程我們就最終實(shí)現(xiàn)了建立連接的目的。 2.5 多線程技術(shù) 本次高校智能排課系統(tǒng)在應(yīng)用當(dāng)中,會(huì)出現(xiàn)同時(shí)多人、多角色同時(shí)使用同一模塊的情況,所以,需要用到多線程技術(shù)。 1)Thread t = new Thread(),初始化一個(gè)線程,實(shí)際上就是一個(gè)普通對(duì)象,此時(shí)他的狀態(tài)為New。 2)t.start(); 線程處于就緒狀態(tài)(可運(yùn)行狀態(tài)),也就是隨時(shí)等待著運(yùn)行,不要小看這個(gè)start,這個(gè)start決定了他是否是一個(gè)真正的線程實(shí)例,因?yàn)閟tart為其準(zhǔn)備了線程環(huán)境,你若只是普通調(diào)用run方法,那么這就是一個(gè)普通的方法。處在這個(gè)時(shí)候的線程,都會(huì)去競(jìng)爭(zhēng)CPU資源,所以誰被競(jìng)爭(zhēng)到了CPU資源,也就是被調(diào)度Scheduler,那么他就可以從可運(yùn)行狀態(tài)到真正運(yùn)行狀態(tài)。 3)當(dāng)線程獲取到了CPU資源時(shí),線程就從可運(yùn)行狀態(tài)到真正運(yùn)行狀態(tài),也就是Running,現(xiàn)在正在運(yùn)行。 4)如果這個(gè)線程正在等待客戶輸入,也就是IO異常,等各種阻塞事件,也有可能是自己調(diào)用了sleep等阻塞事件,線程就會(huì)從運(yùn)行狀態(tài)轉(zhuǎn)為阻塞狀態(tài),這個(gè)狀態(tài)是不會(huì)發(fā)生任何事情的! 5)一旦阻塞事件被清除,比如用戶已經(jīng)輸入完成,IO流已經(jīng)關(guān)閉,sleep也已經(jīng)超時(shí)等,線程從阻塞狀態(tài)變?yōu)榫途w狀態(tài),又一次回到了可運(yùn)行狀態(tài),隨時(shí)與別的線程競(jìng)爭(zhēng)資源,等待運(yùn)行! 6)處于運(yùn)行狀態(tài)的線程可能會(huì)在運(yùn)行當(dāng)中遇到了同步方法或同步塊,也就是synchronized標(biāo)記的方法或塊,這個(gè)時(shí)候該線程獲到了對(duì)象的鎖,其他線程就無法進(jìn)入該同步方法,那么這些無法執(zhí)行的線程怎么辦呢?他們就都阻塞在這里,等待鎖的釋放,從新去競(jìng)爭(zhēng)鎖資源,因?yàn)橹挥袚碛墟i的線程才有資格繼續(xù)往下運(yùn)行,那么這里這些線程就阻塞在鎖池(Lock Pool)。 7)一旦被阻塞在鎖池的線程競(jìng)爭(zhēng)到了鎖(之前的線程運(yùn)行完了或之前的線程在內(nèi)部跑出來異常,或者調(diào)用了wait等,都會(huì)釋放線程的鎖),那么這個(gè)線程就會(huì)從阻塞狀態(tài)轉(zhuǎn)為就緒狀態(tài),不要以為這個(gè)線程會(huì)立刻執(zhí)行,這是不可能的,你要想到線程執(zhí)行都是要獲取到CPU資源的,如果沒有操作系統(tǒng)的調(diào)度,他們都沒有資格運(yùn)行。 8)處于運(yùn)行狀態(tài)的線程可能會(huì)在運(yùn)行當(dāng)中進(jìn)入了同步方法或同步塊,這個(gè)時(shí)候他擁有了對(duì)象的鎖,至高無上,可是由于當(dāng)前環(huán)境可能導(dǎo)致他沒必要繼續(xù)執(zhí)行,所以他會(huì)自己讓出鎖資源讓別的線程也有機(jī)會(huì)繼續(xù)執(zhí)行,所以這個(gè)線程可能在synchronized內(nèi)部調(diào)用所對(duì)象的wait方法,一旦調(diào)用,當(dāng)前線程讓出鎖資源,同時(shí)自己進(jìn)入等待池(wait pool)中,直到被別的線程喚醒。如果沒有被喚醒就一直會(huì)處在等待池當(dāng)中,受到線程的阻塞,所以這個(gè)時(shí)候他們一心想要的是被喚醒,因?yàn)橹挥袉拘巡庞锌赡芾^續(xù)運(yùn)行。 9)一旦被阻塞在等待池的線程被喚醒(可能是某個(gè)synchronized的線程調(diào)用了notify或notifyAll,也可能是外部調(diào)用 interrupt導(dǎo)致內(nèi)部拋出異常,也會(huì)獲取到鎖),那么這個(gè)線程就會(huì)從等待池轉(zhuǎn)為鎖池當(dāng)中,繼續(xù)阻塞,所以不要以為線程被喚醒就會(huì)繼續(xù)運(yùn)行,這是不可能的,他們同樣需要競(jìng)爭(zhēng)鎖資源。 10)線程運(yùn)行過程中拋出異常,或者線程實(shí)在運(yùn)行完了,那么線程就結(jié)束了,也就是消亡期。運(yùn)行完了是不可以繼續(xù)start的,必須從新new 一個(gè)線程才能start。那么將是有一個(gè)生命周期。 2.6 排課算法介紹 隨著計(jì)算機(jī)信息技術(shù)的發(fā)展,進(jìn)入上世紀(jì)90年代后,國(guó)內(nèi)外對(duì)課表編排問題的研究也活躍起來。在排課問題的研究領(lǐng)域中,研究人員提出了多種不同的智能排課算法。目前,解決課表編排問題的方法主要有如下幾種: 1、優(yōu)先級(jí)算法 優(yōu)先級(jí)算法的基本原理是把現(xiàn)實(shí)中的關(guān)于排個(gè)的影響因素進(jìn)行一定的搜集和歸納,把這些因素中的關(guān)于排課所涉及的老師、學(xué)生作為主要的研究的對(duì)象,同時(shí)把時(shí)間和空間加入到其中,組成優(yōu)先級(jí)算法的四維空間的組成部分。這樣我們就把排課問題的基本要素歸納成了算法中的一個(gè)4維的空間,而在排課過程中涉及的教學(xué)方案的計(jì)劃以及其他的對(duì)于排課的特別的要求作為我們實(shí)現(xiàn)四維空間優(yōu)化的約束條件。這樣,排課問題就會(huì)轉(zhuǎn)化為算法上的優(yōu)化問題。我們通過算法進(jìn)行排課的優(yōu)化。這種算法的優(yōu)點(diǎn)在于能夠把復(fù)雜的問題簡(jiǎn)單化,進(jìn)一步實(shí)現(xiàn)了化整為零的目的,使得排課問題優(yōu)化成為一個(gè)簡(jiǎn)單的過程。 2、模擬退火法算法 模擬退火的算法是在上世紀(jì)八十年代初建立起來的,模擬退火算法建立的目的就是解決問題優(yōu)化問題。它的基本原理就是基于概率演算的基礎(chǔ)之上,首先賦予問題一個(gè)初始的解,初始解的前提就是滿足問題要求的基本條件。模擬退火法之所以叫做退火法就是在問題初始解的基礎(chǔ)上實(shí)現(xiàn)退火的過程,要求在退火的過程中實(shí)現(xiàn)我們對(duì)問題的優(yōu)化,退火的每個(gè)解都要求滿足問題的所有條件,其優(yōu)化的過程則是通過目標(biāo)函數(shù)的定義來實(shí)現(xiàn)的,因此模擬退火法非常適合在排課問題中的應(yīng)用,并且通過一些應(yīng)用的實(shí)踐的案例,證明模擬退火法的效果還是比較明顯的。 2.7 本章小結(jié) 本章主要對(duì)本次高校智能排課系統(tǒng)的實(shí)現(xiàn)過程所要使用的關(guān)鍵技術(shù)進(jìn)行了簡(jiǎn)要的介紹,本次系統(tǒng)開發(fā)主要使用了目前比較流行的關(guān)系型數(shù)據(jù)庫MySql,開發(fā)語言使用的是非常流行的PHP技術(shù),以及普遍使用的B/S開發(fā)結(jié)構(gòu),另外對(duì)本次只能開發(fā)系統(tǒng)所要使用的排課算法進(jìn)行了簡(jiǎn)單介紹。通過使用以上流行技術(shù),可以確保本次系統(tǒng)的開發(fā)各種安全、效率得到有效的保證。 第三章排課系統(tǒng)需求分析 需求分析作為軟件開發(fā)基礎(chǔ)性的工作,是軟件系統(tǒng)設(shè)計(jì)中必不可少的步驟,它是軟件系統(tǒng)開發(fā)過程實(shí)施的一項(xiàng)重要環(huán)節(jié)。因此在系統(tǒng)需求分析階段,要精心安排到教務(wù)部門走訪調(diào)研,細(xì)致的進(jìn)行分析和總結(jié),做出精煉、準(zhǔn)確、詳實(shí)的需求分析說明。 3.1 排課系統(tǒng)業(yè)務(wù)分析 課程表作為專業(yè)教學(xué)培養(yǎng)方案實(shí)施的教學(xué)安排表,是學(xué)生課堂學(xué)習(xí)和教師教學(xué)進(jìn)程的具體實(shí)施方案,排課過程就是對(duì)課程、時(shí)間、教師、學(xué)生、教學(xué)場(chǎng)地綜合一體的統(tǒng)籌安排的過程,它對(duì)教務(wù)人員來說是一項(xiàng)十分繁重而復(fù)雜的工作。 排課對(duì)每一個(gè)專業(yè)來說應(yīng)盡量滿足一個(gè)最優(yōu)的安排方案。在實(shí)際排課操作中,這種最優(yōu)的排課方案其實(shí)不是唯一的,甚至有很多種可行的方案。學(xué)生在一周的學(xué)習(xí)中課程安排需要合理且符合教學(xué)要求,針對(duì)不同課程的性質(zhì)和教學(xué)環(huán)節(jié)的特點(diǎn)進(jìn)行合理的分析安排,同時(shí)還要處理好專業(yè)必修課和公共選修課之間的關(guān)系,為學(xué)生提供最大程度地獲取知識(shí)和技能的空間。 3.1.1 排課根本的限制條件 排課基本的約束條件是排課過程始終要遵守并必須得到滿足的要求,歸納排課過程的基本約束條件有如下幾點(diǎn): (1)在同一個(gè)課程安排的時(shí)間段,同一個(gè)行政班不能排多門課程或在多個(gè)教室上課。 (2)在同一個(gè)課程安排的時(shí)間段,同一位教師的同一門課程不能安排兩個(gè)以上的教學(xué)班上課。 (3)在同一個(gè)課程安排的時(shí)間段,同一位教師不能安排兩門以上的不同課課程。 (4)滿足課程排課合理性要求,如根據(jù)課程性質(zhì)課程排在上午或下午上課,多學(xué)時(shí)要隔天排課等。 (5)在同一個(gè)課程安排的時(shí)間段,同一位教師不能安排在兩個(gè)以上的教室中上課。 (6)在同一個(gè)課程安排的時(shí)間段,同一個(gè)教室不能排兩門以上課程或有多個(gè)教學(xué)班上課。 (7)在同一個(gè)課程安排的時(shí)間段,同一專業(yè)的行政班不能排兩門以上的必修課。 (8)滿足課程對(duì)教學(xué)場(chǎng)地的要求,如容納學(xué)生數(shù)量的要求、多媒體教室的要求等。 (9)對(duì)于兼課較多的教師,為保證教師有充足的授課精力,同一位教師一天排課不能超過4學(xué)時(shí)。 3.1.2 程序智能排課的基本需求 在歸納出上述排課的基本約束的條件后,針對(duì)自動(dòng)排課系統(tǒng)的整體基本需求,即對(duì)系統(tǒng)有哪些要求,需要系統(tǒng)完成哪些工作,作了進(jìn)一步的概括與總結(jié),說明如下: (1)對(duì)課程安排的結(jié)果提供良好的系統(tǒng)反饋手段,方便教務(wù)人員對(duì)課程安排進(jìn)行調(diào)整。 (2)按照學(xué)期教學(xué)任務(wù)書中的課程所劃分的教學(xué)班,實(shí)施按專業(yè)行政班進(jìn)行沖突檢測(cè)的自動(dòng)排課過程; (3)對(duì)同一時(shí)間段的必修課與選修課的教學(xué)班總?cè)萘窟M(jìn)行控制,確保學(xué)生有充足的選課空間; (4)滿足排課的基本約束條件,并能夠自動(dòng)核查專業(yè)必修課和公選課排課沖突; 3.1.3 主要的業(yè)務(wù)流程分析 自動(dòng)排課系統(tǒng)的業(yè)務(wù)主要包括了排課信息錄入、自動(dòng)排課和課程表查詢這三項(xiàng)業(yè)務(wù)工作內(nèi)容。為了更加清楚的表達(dá)自動(dòng)排課系統(tǒng)的業(yè)務(wù)工作流程,教務(wù)人員在登錄界面輸入用戶名和登錄密碼登錄,登錄系統(tǒng)后需要對(duì)各專業(yè)課程的排課信息資料進(jìn)行錄入,包括了課程周學(xué)時(shí)的計(jì)算、使用教學(xué)場(chǎng)地的類型、課程排課的優(yōu)先級(jí)、參加自動(dòng)排課的課程等信息。教務(wù)人員在連續(xù)錄入若干個(gè)課程相關(guān)排課資料后,系統(tǒng)更新數(shù)據(jù)庫提交保存錄入的信息。 自動(dòng)排課活動(dòng)圖中,教務(wù)人員在登錄界面輸入用戶名和密碼,經(jīng)系統(tǒng)驗(yàn)證正確后,進(jìn)入系統(tǒng)進(jìn)行自動(dòng)排課業(yè)務(wù)。系統(tǒng)按照學(xué)期教學(xué)任務(wù)書中的課程所劃分的教學(xué)班,實(shí)施按專業(yè)行政班進(jìn)行沖突檢測(cè)的排課過程,應(yīng)用自動(dòng)排課算法進(jìn)行自動(dòng)排課。當(dāng)所選課程教學(xué)班中的每一個(gè)行政班排課均不沖突,則該門課程教學(xué)班排課成功,隨后更新系統(tǒng)數(shù)據(jù)庫保存排課數(shù)據(jù)。如果所選課程教學(xué)班排課沖突無法安排或未排完所有課程教學(xué)班時(shí),則繼續(xù)選擇其它未安排的課程進(jìn)行排課。全部課程教學(xué)班已排完后,結(jié)束自動(dòng)排課。 教師在登錄界面輸入用戶名和密碼,經(jīng)系統(tǒng)驗(yàn)證正確后,進(jìn)入系統(tǒng)進(jìn)行課程表查詢業(yè)務(wù)。用戶可以按要求設(shè)置查詢的專業(yè)行政班、教師姓名或課程名稱等查詢條件,系統(tǒng)生成相應(yīng)的課程表。 3.2 系統(tǒng)具體需求分析 自動(dòng)排課系統(tǒng)建立在以校園網(wǎng)為基礎(chǔ)的網(wǎng)絡(luò)環(huán)境上,實(shí)現(xiàn)高校的日常教務(wù)排課管理的功能需求。根據(jù)高校的管理和實(shí)際需求及學(xué)院的教學(xué)管理特點(diǎn),用戶權(quán)限的管理要求設(shè)置為:系統(tǒng)管理員、教務(wù)排課人員、教師等一般用戶的多級(jí)權(quán)限管理模式。利用分層授權(quán)和客戶端訪問權(quán)限等方式來保證系統(tǒng)數(shù)據(jù)的安全性。 在系統(tǒng)功能方面,根據(jù)排課系統(tǒng)業(yè)務(wù)需求分析和對(duì)目前本人工作所在學(xué)院的調(diào)查研究,并兼顧系統(tǒng)對(duì)未來可擴(kuò)展性的需求的基礎(chǔ)上,確定出高校自動(dòng)排課系統(tǒng)應(yīng)包括的功能分別為:系統(tǒng)管理、用戶管理、排課信息管理、智能排課管理、課程表信息發(fā)布與查詢,共五個(gè)功能模塊。 3.2.1 系統(tǒng)管理模塊需求 系統(tǒng)管理完成用戶登錄與退出以及系統(tǒng)基礎(chǔ)數(shù)據(jù)的管理功能。 3.2.2 用戶管理模塊需求 用戶管理完成對(duì)用戶權(quán)限授權(quán)的管理;排課信息管理負(fù)責(zé)自動(dòng)排課所需基本信息的錄入管理。 3.2.3 排課信息管理模塊需求 該模塊主要是系統(tǒng)管理員對(duì)高校智能排課系統(tǒng)所需要的基本信息的增刪改查等功能。 3.2.4 智能排課管理模塊需求 自動(dòng)排課管理完成自動(dòng)排課功能; 3.2.5 課程表信息發(fā)布與查詢模塊需求 課程表查詢提供了信息發(fā)布與信息共享的功能。 3.3 性能需求分析 系統(tǒng)的功能性需求是對(duì)高校管理教務(wù)系統(tǒng)中所有功能模塊的工作內(nèi)容進(jìn)行的需求分析,側(cè)重于系統(tǒng)的主體功能和客戶的基礎(chǔ)要求,但是一個(gè)系統(tǒng)能否正常的、穩(wěn)定的運(yùn)行還需要關(guān)注功能性需求以外的非功能性需求。通過對(duì)系統(tǒng)的非功能性需求的整理和分析,獲得了以下系統(tǒng)的非功能性需求: 系統(tǒng)的可靠性,由系統(tǒng)的可維護(hù)性和適應(yīng)性兩個(gè)方面組成。能夠保證學(xué)生公寓管理系統(tǒng)能夠保持長(zhǎng)期穩(wěn)定的運(yùn)行;在異常情況下能夠進(jìn)行一定的系統(tǒng)修復(fù)能力和數(shù)據(jù)還原能力。不可以出現(xiàn)頻繁的系統(tǒng)崩潰或者無可用狀況出現(xiàn)。 系統(tǒng)的易用性,該交通應(yīng)急指揮系統(tǒng)的操作人員主要為系統(tǒng)操作人員。因此需要保證系統(tǒng)具有良好的易用性和完備的幫助文檔或渠道。 系統(tǒng)安全性,應(yīng)急指揮系統(tǒng)中保存不少的以往突發(fā)事件信息,這些數(shù)據(jù)信息是該對(duì)后續(xù)的事故分析及其它案情分析非常有幫助,所以該系統(tǒng)需要能夠避免系統(tǒng)數(shù)據(jù)出現(xiàn)竊取、篡改的情況發(fā)生。 系統(tǒng)的可擴(kuò)展性,該應(yīng)急指揮系統(tǒng)由于涉及到方面比較廣,后期會(huì)進(jìn)行系統(tǒng)功能的優(yōu)化和修改,為了較少系統(tǒng)后期改造的成本和風(fēng)險(xiǎn),需要保證系統(tǒng)具有良好的可擴(kuò)展性。 3.4 本章小結(jié) 本章首先對(duì)自動(dòng)排課系統(tǒng)業(yè)務(wù)內(nèi)容和工作流程進(jìn)行了詳細(xì)的需求分析。對(duì)高校教育規(guī)律下的排課原則、排課基本約束條件以及排課系統(tǒng)的基本需求進(jìn)行了深入的分析。同時(shí)針對(duì)不同需求進(jìn)行分類,并通過業(yè)務(wù)的主要活動(dòng)圖的形式進(jìn)行了說明。對(duì)系統(tǒng)功能需求進(jìn)行了描述,分析了系統(tǒng)非功能性的需求,使我們對(duì)排課系統(tǒng)有了一個(gè)整體準(zhǔn)確清晰的認(rèn)識(shí)和設(shè)計(jì)方向。 第四章智能排課系統(tǒng)的設(shè)計(jì) 本章進(jìn)入智能排課系統(tǒng)的物理設(shè)計(jì)階段。通過在系統(tǒng)需求分析階段所確定的系統(tǒng)邏輯模型、功能等方面的要求,設(shè)計(jì)出能夠在校園網(wǎng)絡(luò)環(huán)境上運(yùn)行的具體的實(shí)施方案,即建立自動(dòng)排課系統(tǒng)的物理模型,完成自動(dòng)排課系統(tǒng)的設(shè)計(jì)。 4.1 智能排課系統(tǒng)總體設(shè)計(jì) 4.1.1 系統(tǒng)的設(shè)計(jì)目標(biāo) 智能排課系統(tǒng)設(shè)計(jì)目標(biāo)是提供一個(gè)準(zhǔn)確的、高效的、可靠的課程表安排的解決方案,能夠科學(xué)、合理地分配與使用各種教學(xué)資源,課程表編排符合教學(xué)規(guī)律,更加人性化,從而有利于提高高校教學(xué)管理水平和教學(xué)質(zhì)量。在新的完全學(xué)分制教學(xué)管理改革的要求下,配合新的專業(yè)培養(yǎng)方案的實(shí)施,滿足學(xué)生選課、選講臺(tái)的需要,最大限度的提供優(yōu)質(zhì)的教學(xué)資源,確保教學(xué)管理工作的順利進(jìn)行。 4.1.2 系統(tǒng)層次結(jié)構(gòu) 將系統(tǒng)劃分為四個(gè)層次。其中,硬件層是系統(tǒng)的最底層,是系統(tǒng)運(yùn)行和維護(hù)的基礎(chǔ),保證了整個(gè)系統(tǒng)的正常實(shí)施,包括校園網(wǎng)、數(shù)據(jù)庫服務(wù)器、排課工作站、課表查詢工作站等硬件資源。數(shù)據(jù)層包括計(jì)算機(jī)操作系統(tǒng)、后臺(tái)數(shù)據(jù)庫服務(wù)器系統(tǒng)、以及前臺(tái)數(shù)據(jù)庫開發(fā)平臺(tái),實(shí)現(xiàn)了系統(tǒng)排課數(shù)據(jù)的存儲(chǔ)與管理。系統(tǒng)層體現(xiàn)了自動(dòng)排課系統(tǒng)軟件的各個(gè)功能模塊的組成,它是系統(tǒng)設(shè)計(jì)的核心,包括系統(tǒng)管理、用戶管理、排課信息管理、排課系統(tǒng)管理、以及課程表查詢。系統(tǒng)的最高層是用戶層,包括系統(tǒng)的用戶界面、系統(tǒng)管理員、教務(wù)人員排課用戶、教師等一般查詢用戶。系統(tǒng)的四個(gè)層次間不允許跨層調(diào)用,只能在本層子系統(tǒng)之間或與下一級(jí)的子系統(tǒng)產(chǎn)生依賴關(guān)系。系統(tǒng)層次間的數(shù)據(jù)傳輸是通過實(shí)體在層間進(jìn)行的,各層均有實(shí)體進(jìn)行封裝,相鄰兩層之間的數(shù)據(jù)訪問是通過訪問接口實(shí)現(xiàn)的。 4.1.3 智能排課系統(tǒng)邏輯模型 根據(jù)排課系統(tǒng)業(yè)務(wù)分析和系統(tǒng)需求構(gòu)建系統(tǒng)的邏輯模型,系統(tǒng)數(shù)據(jù)流程圖如下: 根據(jù)各專業(yè)教學(xué)培養(yǎng)方案的計(jì)劃安排學(xué)期教學(xué)任務(wù)書,排課前需要向教學(xué)任務(wù)書補(bǔ)充排課相關(guān)排課信息。首先根據(jù)課程開課專業(yè)人數(shù)、課程性質(zhì)等要求,分配教學(xué)班,一般每個(gè)教學(xué)班有若干專業(yè)行政班組成。其次,根據(jù)課程開課起始周和結(jié)束周計(jì)算課程的周學(xué)時(shí),填入教學(xué)任務(wù)數(shù)據(jù)中。第三,針對(duì)課程的開課要求,設(shè)置課程排課優(yōu)先級(jí),確定哪些課先排,哪些課后排。排課數(shù)據(jù)準(zhǔn)備好后,進(jìn)入系統(tǒng)自動(dòng)排課階段,通過系統(tǒng)排課算法判斷教師、專業(yè)課程、教學(xué)班、行政班、教學(xué)場(chǎng)地的沖突,按課程排課優(yōu)先級(jí)和上課時(shí)間安排表應(yīng)用自動(dòng)排課算法進(jìn)行課程表自動(dòng)編排。排課完成后,根據(jù)不同用戶對(duì)象的使用用途的需要發(fā)布專業(yè)課程安排表、教學(xué)班課程安排表、教室使用情況表等。 4.2 智能排課系統(tǒng)功能設(shè)計(jì) 根據(jù)系統(tǒng)功能需求進(jìn)行系統(tǒng)的功能結(jié)構(gòu)圖設(shè)計(jì)。 4.2.1 系統(tǒng)管理模塊 實(shí)現(xiàn)系統(tǒng)基本管理功能,如用戶登錄,教學(xué)任務(wù)信息,教師信息、教學(xué)場(chǎng)地信息、行政班級(jí)信息、課程上課時(shí)間表等數(shù)據(jù)的導(dǎo)入功能。 4.2.2 用戶管理模塊 實(shí)現(xiàn)系統(tǒng)對(duì)用戶權(quán)限的管理。為了保證系統(tǒng)數(shù)據(jù)庫的安全,不同的用戶具有不同的操作權(quán)限,用戶權(quán)限分別為系統(tǒng)管理員一教務(wù)人員一教師,不同權(quán)限的用戶對(duì)系統(tǒng)數(shù)據(jù)的操作范圍是不同的,對(duì)于權(quán)限最低的用戶,只能進(jìn)行查詢,沒有對(duì)排課數(shù)據(jù)的修改權(quán)限。 4.2.3 排課信息管理模塊 該模塊是為了智能排課做準(zhǔn)備,沒有該模塊提供的大量的排課信息,后面的智能排課模塊就發(fā)揮不了作用,甚至排出錯(cuò)誤的課程表。排課信息包括有課程開課周學(xué)時(shí)數(shù)據(jù)、課程排課優(yōu)先級(jí)數(shù)據(jù)、其它約束條件等。這個(gè)模塊事件上就是完成這些基本數(shù)據(jù)的增刪改查及批量操作功能。 4.2.4 智能排課模塊 智能排課模塊是整個(gè)高效智能排課系統(tǒng)的非常重要的模塊,在前面系統(tǒng)管理員錄入信息的基礎(chǔ)上,使用核心的排課算法進(jìn)行計(jì)算,通過不同條件的限制,排出另教務(wù)人員和老師都滿意的課程表。 4.2.5 課程表信息發(fā)布與查詢模塊 該模塊通過不同的查詢方式,可以查詢到自己想要的課表信息,例如,可以選擇教師,也可以選擇教學(xué)班級(jí),也可以選擇專業(yè),也可以選擇課程,同樣,也可以選擇教室等。意味著可以選取其中的一個(gè)或者多個(gè)進(jìn)行查詢。 4.3 數(shù)據(jù)庫設(shè)計(jì) 對(duì)于數(shù)據(jù)庫來說,不僅僅是建立幾個(gè)表,建立幾個(gè)字段,最為重要的是分析清楚各個(gè)表之間對(duì)應(yīng)的關(guān)系,其實(shí),每個(gè)表就代表了一個(gè)實(shí)體,分析清楚了這些實(shí)體,就弄清楚了整個(gè)表之間的關(guān)系。在設(shè)計(jì)表時(shí),一定要規(guī)范,在考慮表和表之間的關(guān)系時(shí),要做到精干,防止冗余的數(shù)據(jù)出現(xiàn),盡量做到數(shù)據(jù)庫中每個(gè)表都能夠正常的分配,這樣,在算法程序調(diào)用的時(shí)候,數(shù)據(jù)需求合理。盡可能做到合理的、恰當(dāng)?shù)挠嘘P(guān)數(shù)據(jù)結(jié)構(gòu)的研究與設(shè)計(jì),這樣,就保證了整個(gè)應(yīng)用程序能夠高效的運(yùn)行,同樣,也簡(jiǎn)化了整個(gè)高效智能排課系統(tǒng)的運(yùn)行方式。 4.3.1 數(shù)據(jù)庫表結(jié)構(gòu)總體設(shè)計(jì) 4.3.2 各表詳細(xì)設(shè)計(jì) 以總體設(shè)計(jì)為基礎(chǔ),對(duì)系統(tǒng)進(jìn)行詳細(xì)分析,并且按照數(shù)據(jù)庫規(guī)范要求,從整體需求出發(fā),設(shè)計(jì)了下面總共11個(gè)數(shù)據(jù)表的表結(jié)構(gòu)信息。 1、課程代碼表(KeCheng) 課程代碼表:此表是用來描述某門課程的具體信息的表。主要包括唯一標(biāo)識(shí)、課程代碼、課程名稱、課程簡(jiǎn)稱、性質(zhì)、學(xué)分、學(xué)時(shí)等7個(gè)字段。其中,性質(zhì)有兩個(gè)選項(xiàng):即“必須”和“選修”,前者是自己所在專業(yè)方向上的課程,后者代表了沒有專業(yè)屬性的那些課。 2、教師代碼表(JiaoShi) 教師代碼表:此表是用來記錄教師信息的表。主要包括唯一標(biāo)識(shí)、教師的代碼、老師的姓名、老師所在組的代碼等4個(gè)字段。其中,考慮到一個(gè)課程有好幾個(gè)老師代課,所以教師的代碼與教師的名稱字段長(zhǎng)度要稍長(zhǎng)一些,這樣以來,可以有多個(gè)老師的信息存儲(chǔ)在表中。 3、教學(xué)任務(wù)安排表(TeaShech) 教學(xué)任務(wù)安排表:此表是整個(gè)排課系統(tǒng)的基礎(chǔ)表,存儲(chǔ)了排課信息的基本資料。主要包括唯一標(biāo)識(shí)、學(xué)期、課程代碼、代課老師代碼、班級(jí)代碼、上課類型、首周、末周、每周學(xué)時(shí)、優(yōu)先級(jí)、標(biāo)志和最大次數(shù)等12個(gè)字段。 沒有這個(gè)表,就不能進(jìn)行自動(dòng)排課,所以本系統(tǒng)必須由系統(tǒng)管理員首先錄入排課的基礎(chǔ)資料。其中,每門課程必須要有那幾周開始、那幾周結(jié)束,當(dāng)然了,也可以設(shè)置系統(tǒng)默認(rèn)的以普遍規(guī)律默認(rèn)給出每周學(xué)時(shí)。給每門課程設(shè)置優(yōu)先級(jí),這樣,排課時(shí),就有了排課前后的依據(jù),哪些優(yōu)先級(jí)高的,肯定排在前面,這樣,對(duì)學(xué)生和老師來講,都會(huì)得到較好的教學(xué)效果。另外一個(gè)字段,標(biāo)志,當(dāng)標(biāo)志為“0”時(shí),代表在系統(tǒng)自動(dòng)排課時(shí),不起作用。像哪些實(shí)際課程,還有前、后半學(xué)期課程時(shí)間、地點(diǎn)完全重合,這些都不用系統(tǒng)排課;當(dāng)值是“1”時(shí),意思是本門課程需要系統(tǒng)排課;當(dāng)值是“2”時(shí),就代表了該門課程已經(jīng)被系統(tǒng)排課;當(dāng)值是“2”時(shí),就代表了該門課程因?yàn)楹推渌n程時(shí)間相同而不能參與系統(tǒng)自動(dòng)排課。而最大次數(shù)能夠控制系統(tǒng)排課的功能與效果。 4、班級(jí)信息表(CC) 班級(jí)信息表:該表是用來記錄班級(jí)詳細(xì)信息的表。主要包括唯一標(biāo)識(shí)、班級(jí)名稱、專業(yè)標(biāo)志、班級(jí)人數(shù)等4個(gè)字段。其中,班名就包含了專業(yè)和年級(jí)信息。 5、教學(xué)班代碼表(SC) 教學(xué)班代碼表:此表是用來記錄上課的班級(jí)的表。主要包括唯一標(biāo)識(shí)、班級(jí)代碼、班級(jí)名稱、班級(jí)的容量等4個(gè)字段。其中,班代碼的格式為:學(xué)期鏈接“-”鏈接課程代碼鏈接“-”序號(hào),如“20141-ITC 140001 C-1”代表了2014-2015學(xué)年首個(gè)學(xué)期“大學(xué)英語”課程首次教學(xué)班的代碼,而班的名稱這樣命名:課程簡(jiǎn)稱 年級(jí) 序號(hào) 層次,而班的名稱和班的代碼能夠由計(jì)算機(jī)自己計(jì)算生成。 6、專業(yè)代碼表(SpecaPL) 專業(yè)代碼表:該表是用來記錄專業(yè)內(nèi)容的的表。主要包括唯一標(biāo)識(shí)、專業(yè)代碼、專業(yè)名稱、級(jí)別等4個(gè)字段。該表其實(shí)就是記錄高校所擁有的所有的專業(yè)信息的表。 7、教學(xué)班行政分配表(CDB) 教學(xué)班行政分配表:該表是用來記錄教學(xué)班行政分配內(nèi)容的的表。主要包括唯一標(biāo)識(shí)、學(xué)期、教學(xué)班代碼、行政班標(biāo)志等4個(gè)字段。這里提醒一下,該表只適用哪些必須課的教學(xué)班的。 8、上課時(shí)間表(ShangKeShiJianBiao) 上課時(shí)間表:該表是用來記錄上課名稱和代碼對(duì)應(yīng)關(guān)系的的表。主要包括唯一標(biāo)識(shí)、上課時(shí)間代碼、上課時(shí)間等3個(gè)字段。該表其實(shí)就是記錄上課的時(shí)間和其代碼所對(duì)應(yīng)的關(guān)系。上課時(shí)間代碼由5為字符組成,第2, 3位和第4, 5位分別代表課程節(jié)次。
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|