

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘 要</b></p><p> 大學(xué)期間總會(huì)有很多公共選修課,以往的選課方法是隨堂報(bào)名。這種方法雖然直接,但是造成選課的盲目性,有些課堂選課時(shí)人滿為患,有些課堂無(wú)人選課。原因是傳統(tǒng)的選課方法沒(méi)有預(yù)見性,大家沒(méi)有事先協(xié)調(diào)好。使用了網(wǎng)上選課系統(tǒng)以后,可以在開課前就在網(wǎng)上選課,每個(gè)學(xué)生的課程在開課前就確定好,不用浪費(fèi)體力去選課,還可以使教學(xué)資源合理平均地分配。該
2、B/S結(jié)構(gòu)的系統(tǒng)在Windows XP系統(tǒng)和VS.NET平臺(tái)下開發(fā)完成,使用C#作為ASP.NET的開發(fā)語(yǔ)言,SQL Server 2000作為數(shù)據(jù)庫(kù)。系統(tǒng)有較高的安全性和較好的性能。其中連接數(shù)據(jù)庫(kù)的字符串可以隨時(shí)在web.config里修改,并經(jīng)過(guò)編碼加密,增加了靈活性,保護(hù)了數(shù)據(jù)庫(kù)的安全。代碼中通過(guò)使用進(jìn)程中的Session、盡量使用存儲(chǔ)過(guò)程和盡量減少數(shù)據(jù)庫(kù)連接的打開時(shí)間等手段來(lái)提高性能。通過(guò)分析B/S結(jié)構(gòu)的特點(diǎn)并結(jié)合我校公共選修課
3、的實(shí)際情況,提出了基于B/S結(jié)構(gòu)網(wǎng)上選課系統(tǒng)的基本設(shè)計(jì)思想,簡(jiǎn)要介紹了系統(tǒng)各功能模塊及數(shù)據(jù)庫(kù)的設(shè)計(jì),著重討論了用 ASP.NET技術(shù)和SQL Server 2000開發(fā)網(wǎng)上選課系統(tǒng)時(shí)的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)和動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù),并給出了部分實(shí)現(xiàn)</p><p> 關(guān)鍵詞:網(wǎng)上選課; 瀏覽器/服務(wù)器結(jié)構(gòu); 數(shù)據(jù)庫(kù)管理系統(tǒng); 存儲(chǔ)過(guò)程</p><p><b> ABSTRACT</b
4、></p><p> There are many public elective courses during university period, and always we should goto classroom to enroll. Although this method directly, but result in blindness of the course enrollment.
5、Some classrooms overcrowding during course choosing period, on the contrary some classrooms desolate. The reason of this situation is that the traditional method of course choosing lack prescience, and there are no prior
6、 coordination. With the help of public elective courses online course elect system, eve</p><p> Keywords: online course elect; B/S structure; DBMS; stored procedure</p><p><b> 目 錄<
7、/b></p><p><b> 緒 論1</b></p><p><b> 課題背景1</b></p><p> 課題研究的目的和意義1</p><p><b> 國(guó)內(nèi)外概況1</b></p><p> Browser/Ser
8、ver結(jié)構(gòu)2</p><p> ASP.NET和ADO.NET2</p><p><b> 本文的工作4</b></p><p> 第一章 需求分析5</p><p> 1.1 系統(tǒng)簡(jiǎn)介5</p><p> 1.2 系統(tǒng)運(yùn)行環(huán)境5</p><p>
9、 1.2.1 硬件平臺(tái)5</p><p> 1.2.2 操作系統(tǒng)5</p><p> 1.2.3 應(yīng)用軟件及開發(fā)平臺(tái)5</p><p> 1.3 系統(tǒng)的功能需求5</p><p> 1.4 系統(tǒng)的數(shù)據(jù)需求6</p><p> 第二章 系統(tǒng)設(shè)計(jì)7</p><p>
10、 2.1 系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)7</p><p> 2.1.1 數(shù)據(jù)流圖7</p><p> 2.1.2 數(shù)據(jù)字典8</p><p> 2.1.3 系統(tǒng)的主要E-R圖10</p><p> 2.1.4 模式圖(shema diagram)11</p><p> 2.1.5 表的設(shè)計(jì)12&
11、lt;/p><p> 2.1.6 數(shù)據(jù)庫(kù)模式所達(dá)到的范式分析15</p><p> 2.1.7 觸發(fā)器的設(shè)計(jì)16</p><p> 2.1.8 存儲(chǔ)過(guò)程的設(shè)計(jì)17</p><p> 2.2 系統(tǒng)功能設(shè)計(jì)21</p><p> 2.2.1 學(xué)生模塊22</p><p>
12、 2.2.2 管理員模塊22</p><p> 第三章 系統(tǒng)實(shí)現(xiàn)23</p><p> 3.1 網(wǎng)業(yè)設(shè)計(jì)23</p><p> 3.1.1 學(xué)生頁(yè)面設(shè)計(jì)23</p><p> 3.1.2 管理員頁(yè)面設(shè)計(jì)27</p><p> 3.2 功能模塊設(shè)計(jì)28</p><p>
13、; 3.2.1學(xué)生模塊設(shè)計(jì)29</p><p> 3.2.2管理員模塊設(shè)計(jì)30</p><p> 3.3 身份認(rèn)證設(shè)計(jì)31</p><p> 3.4 連接數(shù)據(jù)庫(kù)的相關(guān)設(shè)計(jì)34</p><p> 3.4.1 連接字符串相關(guān)問(wèn)題34</p><p> 3.4.2 綁定數(shù)據(jù)庫(kù)數(shù)據(jù)的相關(guān)設(shè)計(jì)36
14、</p><p> 3.5 優(yōu)化性能的相關(guān)設(shè)計(jì)37</p><p> 3.5.1 使用存儲(chǔ)在進(jìn)程中的Session37</p><p> 3.5.2 數(shù)據(jù)庫(kù)連接打開的時(shí)間盡可能短38</p><p> 3.5.3 使用帶有參數(shù)的SQL命令38</p><p> 3.5.4 使用SQL Ser
15、ver存儲(chǔ)過(guò)程38</p><p><b> 總結(jié)與展望39</b></p><p><b> 致 謝41</b></p><p><b> 參考文獻(xiàn)42</b></p><p><b> 緒 論</b></p>&l
16、t;p><b> 課題背景</b></p><p> 在信息全球化、網(wǎng)絡(luò)化的今天,校園網(wǎng)已成為每所高校必備的信息基礎(chǔ)設(shè)施,也成為學(xué)校提高教學(xué)管理水平的重要手段。為了更好地實(shí)現(xiàn)管理的科學(xué)化、現(xiàn)代化,進(jìn)一步提高教學(xué)質(zhì)量和管理水平,各種依托于校園網(wǎng)的管理信息系統(tǒng)應(yīng)運(yùn)而生。選修課網(wǎng)上選課系統(tǒng)就是這些信息系統(tǒng)中不可或缺的一員。以往的選課方法是隨堂報(bào)名。這種方法雖然直接,但是存在很多弊病,如造
17、成選課的盲目性,去不同的課堂報(bào)名的學(xué)生人數(shù)天壤之別,浪費(fèi)學(xué)生的時(shí)間和體力,使教學(xué)資源不能得到合理的充分利用。這些都是因?yàn)閭鹘y(tǒng)的選課方法沒(méi)有預(yù)見性,大家沒(méi)有事先協(xié)調(diào)好。這就需要有一個(gè)選修課網(wǎng)上選課系統(tǒng)來(lái)改變這種現(xiàn)狀,在課程開始之前就安排好各個(gè)學(xué)生要上的課程,合理充分地利用好教學(xué)資源。</p><p> 課題研究的目的和意義</p><p><b> 課題研究的意義:</b
18、></p><p> (1) 給出解決傳統(tǒng)選課方式浪費(fèi)時(shí)間和精力的問(wèn)題的方法,討論實(shí)現(xiàn)一個(gè)網(wǎng)上選課系統(tǒng)的可行性,使在網(wǎng)上進(jìn)行選課成為可能;</p><p> (2) 對(duì)一個(gè)基于B/S結(jié)構(gòu)的選修課網(wǎng)上選課系統(tǒng)進(jìn)行設(shè)計(jì)并具體實(shí)現(xiàn),做出一個(gè)可以完成基本選課功能及學(xué)生信息管理、教師信息管理和課程信息管理功能的MIS系統(tǒng)。</p><p><b> 國(guó)內(nèi)
19、外概況</b></p><p> 選修課網(wǎng)上選課系統(tǒng)已經(jīng)出現(xiàn)很長(zhǎng)時(shí)間了,實(shí)現(xiàn)該系統(tǒng)的方法也多種多樣,主要有JSP+MySql+Tomcat,PHP+MySql+Apache,ASP+SQL Server+I(xiàn)IS和ASP.NET+SQL Server+I(xiàn)IS等。這些實(shí)現(xiàn)方法中前三種的開發(fā)語(yǔ)言都是HTML設(shè)計(jì)代碼和后臺(tái)編程代碼不分離的,造成代碼不容易讀懂和不利于后期維護(hù)。ASP.NET是微軟推出的新一代
20、開發(fā)工具,實(shí)現(xiàn)了HTML設(shè)計(jì)代碼與后臺(tái)編程代碼的分離。該系統(tǒng)中使用ASP.NET+SQL Server+I(xiàn)IS,主要考慮到同學(xué)們選課主要使用Windows系統(tǒng),對(duì)ASP.NET支持良好,而且ASP.NET代碼更易于維護(hù)。對(duì)于數(shù)據(jù)庫(kù)存取操作,多數(shù)系統(tǒng)直接將SQL語(yǔ)句寫在代碼里進(jìn)行數(shù)據(jù)庫(kù)查詢,在該系統(tǒng)中,絕大部分功能都使用存儲(chǔ)過(guò)程來(lái)完成數(shù)據(jù)庫(kù)訪問(wèn)的工作。</p><p> Browser/Server結(jié)構(gòu)</
21、p><p> Browser/Server(B/S)結(jié)構(gòu)是一種以Web技術(shù)為基礎(chǔ)的新型的MIS系統(tǒng)平臺(tái)模式。他把傳統(tǒng)的 C/S結(jié)構(gòu)中的服務(wù)器部分分解為一個(gè)數(shù)據(jù)服務(wù)器與一個(gè)或多個(gè)應(yīng)用服務(wù)器(web服務(wù)器),從而構(gòu)成一個(gè)三層結(jié)構(gòu)的客戶服務(wù)器體系[1]如圖1.1所示。</p><p> 圖1.1 三層B/S結(jié)構(gòu)</p><p> 采用這種胖服務(wù)器端,瘦客戶端的運(yùn)行模式,
22、主要的數(shù)據(jù)計(jì)算操作都在服務(wù)器端進(jìn)行,應(yīng)用程序也在服務(wù)器端安裝,客戶端不用安裝應(yīng)用程序,所有操作均通過(guò)瀏覽器來(lái)完成。與傳統(tǒng)的C/S結(jié)構(gòu)相比,它具備以下的優(yōu)點(diǎn): </p><p> (1)簡(jiǎn)化了客戶端,客戶端軟件僅需安裝瀏覽器,客戶端硬件配置要求較低。 </p><p> (2)使用戶的操作變得更簡(jiǎn)單,用戶只需了解瀏覽器的使用,就可訪問(wèn)不同的應(yīng)用,獲取所需的信息。 </p>
23、<p> (3)特別適用于網(wǎng)上信息發(fā)布與獲取,使得傳統(tǒng)的MIS的功能有所擴(kuò)展。 </p><p> 鑒于B/S結(jié)構(gòu)的諸多優(yōu)點(diǎn)與本系統(tǒng)的實(shí)際需求,最終決定采用 B/S結(jié)構(gòu)。 </p><p> ASP.NET和ADO.NET</p><p> Visual Studio.NET是Microsoft公司推出的可視化編程工具,ASP.NET作為Visua
24、l Studio.NET 的組成部分之一,已經(jīng)成為Internet中Web應(yīng)用程序的新 一代開發(fā)工具,并逐漸被廣大程序員普遍采用[2]。</p><p> 在微軟的.NET戰(zhàn)略中,ASP.NET是非常重要的一環(huán),它相對(duì)于以前的ASP有了相當(dāng)大的改進(jìn)。相對(duì)于其他的Web應(yīng)用開發(fā)模型來(lái)講,ASP.NET具有更大的優(yōu)勢(shì),其主要特點(diǎn)包括:</p><p> ASP.NET與其前版ASP不同
25、,它是在服務(wù)器上運(yùn)行的編譯好的公用語(yǔ)言運(yùn)行時(shí)代碼,可以更好地提高程序運(yùn)行性能。</p><p> ASP.NET與語(yǔ)言無(wú)關(guān),它可以采用C#、VB.NET以及Jscript等支持.NET框架的語(yǔ)言來(lái)進(jìn)行開發(fā),開發(fā)者可以根據(jù)自己的情況進(jìn)行選擇。在這個(gè)系統(tǒng)中使用的是C#作為開發(fā)語(yǔ)言。C#是一門嶄新的語(yǔ)言,學(xué)過(guò)C++的很容易掌握它,而且它和Java也有很多相似之處。它具有開發(fā)效率高,應(yīng)用范圍廣等特點(diǎn),成為當(dāng)前程序開發(fā)領(lǐng)
26、域的一大熱門。</p><p> ASP.NET支持開發(fā)Web服務(wù),它對(duì)XML技術(shù)提供了很好的支持,使得Web應(yīng)用程序的開發(fā)更具可擴(kuò)展性和跨平臺(tái)性。</p><p> ASP.NET提供了很多功能強(qiáng)大的服務(wù)器端控件,使得程序的開發(fā)更趨于簡(jiǎn)單化。同時(shí),它還提供了HTML設(shè)計(jì)代碼和后臺(tái)編程代碼分離的技術(shù),并在后臺(tái)代碼開發(fā)中提供強(qiáng)大的智能化支持,使得開發(fā)工具更具有條理性。</p>
27、<p> 采用ASP.NET技術(shù)開發(fā)的系統(tǒng)在性能上有了很大的改善,其主要表現(xiàn)在以下幾方面: </p><p> (1)由于ASP頁(yè)面每次打開都必須經(jīng)過(guò)先編譯后解釋的過(guò)程,所以頁(yè)面在反復(fù)打開時(shí)速度沒(méi)有任何提升,而ASP.NET頁(yè)面只需要一次編譯后不需要再重新編譯,直到該頁(yè)面被修改或 Web應(yīng)用程序重新啟動(dòng)。這使得在多次訪問(wèn)時(shí)速度有了極大的提升。尤其在這種訪問(wèn)量很大,很多人同時(shí)并發(fā)訪問(wèn)的情況下,訪問(wèn)
28、速度的提升更加明顯。</p><p> (2)由于ASP沒(méi)有提供任何輸出數(shù)據(jù)為內(nèi)容的元件,所以在使用ASP撰寫數(shù)據(jù)庫(kù)頁(yè)面時(shí)只能借助ADO的RecordSet對(duì)象逐筆讀取記錄,而ASP.NET 通過(guò)ADO.NET提供的DataGrid等數(shù)據(jù)庫(kù)元件可以直接和數(shù)據(jù)庫(kù)聯(lián)系。在這個(gè)選課系統(tǒng)中就是用DataGrid綁定查詢結(jié)果來(lái)展示課程信息,并在DataGrid的列里綁定按鈕進(jìn)行相應(yīng)的刪除和編輯等操作。</p>
29、<p> (3)ASP.NET支持應(yīng)用程序的實(shí)時(shí)更新。管理員不必關(guān)掉網(wǎng)絡(luò)服務(wù)器或者甚至不用停止應(yīng)用程序的運(yùn)行就可以更新應(yīng)用文件。應(yīng)用程序文件永遠(yuǎn)不會(huì)被加鎖,因此甚至在程序運(yùn)行時(shí)文件就可以被覆蓋。當(dāng)文件更新后,系統(tǒng)會(huì)溫和地轉(zhuǎn)換到新的版本。 </p><p> (4)ASP.NET采取”code—behind”方式編寫代碼,使得代碼更易于編寫,結(jié)構(gòu)更清晰,降低了系統(tǒng)的開發(fā)與維護(hù)的復(fù)雜度和費(fèi)用[3]。
30、</p><p> ADO.NET用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。與數(shù)據(jù)庫(kù)相連,ADO.NET提供了如下3種方式:通過(guò)ODBC相連;通過(guò)OLEDB相連;直接與SQL Server相連。3種方式由于應(yīng)用層次的差異,使得效率由低到高,獨(dú)立性由高到低。在這個(gè)系統(tǒng)中,使用SQL Server作為數(shù)據(jù)庫(kù),保證了系統(tǒng)的高效 [4]。</p><p> 傳統(tǒng)的應(yīng)用程序是通過(guò)先建立到數(shù)據(jù)庫(kù)的連接,在程序的整個(gè)運(yùn)行過(guò)程
31、中維護(hù)連接的方式來(lái)設(shè)計(jì)的。ASP.NET采取了斷開連接方式的數(shù)據(jù)結(jié)構(gòu)。當(dāng)瀏覽器向Web服務(wù)器請(qǐng)求網(wǎng)頁(yè)時(shí),服務(wù)器處理這個(gè)請(qǐng)求,并將所請(qǐng)求的網(wǎng)頁(yè)發(fā)送給瀏覽器,然后連接就被斷開,直到瀏覽器發(fā)出下一個(gè)請(qǐng)求。</p><p> ADO.NET的另一個(gè)創(chuàng)新是引人了數(shù)據(jù)集(Dataset)。一個(gè)數(shù)據(jù)集是內(nèi)存中提供數(shù)據(jù)關(guān)系圖的高速緩沖區(qū)。數(shù)據(jù)集對(duì)數(shù)據(jù)源一無(wú)所知,它們可以由程序或通過(guò)從數(shù)據(jù)倉(cāng)庫(kù)中調(diào)入數(shù)據(jù)而被生成、填充。不論數(shù)據(jù)從
32、何處獲取,數(shù)據(jù)集都是通過(guò)使用同樣的程序模板而被操作的,并且它使用相同的潛在的數(shù)據(jù)緩沖區(qū)。 </p><p><b> 本文的工作</b></p><p> 本文以 Visual Studio.NET為開發(fā)工具,使用ASP.NET(C#)為開發(fā)語(yǔ)言[5],以SQL Server 2000為后臺(tái)數(shù)據(jù)庫(kù),在需求分析的基礎(chǔ)上,提出了系統(tǒng)的設(shè)計(jì),并最終實(shí)現(xiàn)了選修課網(wǎng)上選
33、課系統(tǒng).。系統(tǒng)的主要功能有: 課程信息的管理,教師信息的管理,學(xué)生信息的管理和學(xué)生網(wǎng)上選課的管理。</p><p> 第1章介紹了當(dāng)前選課系統(tǒng)的發(fā)展現(xiàn)狀,開發(fā)工具和一些背景知識(shí)。</p><p> 第2章對(duì)該系統(tǒng)進(jìn)行了需求分析。</p><p> 第3至4章介紹了系統(tǒng)設(shè)計(jì)與系統(tǒng)的具體實(shí)現(xiàn)。</p><p><b> 第一章
34、需求分析</b></p><p><b> 1.1 系統(tǒng)簡(jiǎn)介</b></p><p> 這是一個(gè)在Visual Studio.NET集成環(huán)境中使用C#開發(fā)出來(lái)的系統(tǒng),可以在任何安裝有IIS(Internet Information Services)和Microsoft.net framework的windows系統(tǒng)下安裝服務(wù)器端,數(shù)據(jù)庫(kù)可以放在本地
35、,也可以放在網(wǎng)絡(luò)上的任意位置。但是服務(wù)器和數(shù)據(jù)庫(kù)連接的網(wǎng)絡(luò)帶寬要足夠大,從而保證數(shù)據(jù)存取的快速有效。在任何裝有瀏覽器并可以上網(wǎng)的電腦上都可以訪問(wèn)該系統(tǒng)。</p><p> 1.2 系統(tǒng)運(yùn)行環(huán)境</p><p> 1.2.1 硬件平臺(tái)</p><p> Intel或AMD平臺(tái),CPU 1G以上,內(nèi)存128M以上,硬盤10G以上。</p><
36、;p> 1.2.2 操作系統(tǒng)</p><p> 服務(wù)器在Windows操作系統(tǒng)中,數(shù)據(jù)庫(kù)在服務(wù)器可以訪問(wèn)的網(wǎng)絡(luò)中,瀏覽器可以在Windows或Unix,Linux系統(tǒng)下。</p><p> 1.2.3 應(yīng)用軟件及開發(fā)平臺(tái)</p><p> 服務(wù)器所在的電腦上應(yīng)安裝Windows操作系統(tǒng),要安裝IIS(Internet Information Ser
37、vices)和Microsoft.net framework。開發(fā)系統(tǒng)的電腦中要安裝Visual Studio.NET開發(fā)環(huán)境和IIS及SQL Server2000,以便于調(diào)試。開發(fā)平臺(tái)為Windows操作系統(tǒng)下的VS.NET平臺(tái),使用C#作為開發(fā)語(yǔ)言。數(shù)據(jù)庫(kù)語(yǔ)言為T-SQL[6],可以編寫存儲(chǔ)過(guò)程(Stored procedure)和觸發(fā)器(Trigger)。</p><p> 1.3 系統(tǒng)的功能需求<
38、;/p><p> 系統(tǒng)需要完成以下功能:</p><p> (1)課程信息的管理,包括課程的錄入,修改,刪除等。</p><p> (2)教師信息的管理,包括教師信息的錄入和修改,刪除等。</p><p> (3)學(xué)生信息的管理,包括學(xué)生信息的錄入,修改和刪除,學(xué)生登錄密碼初始化等。</p><p> (4)學(xué)生
39、網(wǎng)上選課的管理,包括學(xué)生通過(guò)瀏覽器進(jìn)行選課,取消選課,查詢選課及修改登錄密碼等。</p><p> 這個(gè)系統(tǒng)有兩種用戶,一是學(xué)生用戶,二是網(wǎng)絡(luò)管理員,都通過(guò)瀏覽器訪問(wèn)系統(tǒng)。學(xué)生用戶在這個(gè)系統(tǒng)中可以進(jìn)行的操作不是很多,包括選課,取消選課,查詢選課和修改登錄密碼等。但是因?yàn)閷W(xué)生用戶很多,而且很可能同時(shí)選課,因此要增強(qiáng)系統(tǒng)的并發(fā)性,提高性能。網(wǎng)絡(luò)管理員要進(jìn)行課程信息、學(xué)生信息和教師信息的錄入及維護(hù),可以進(jìn)行的操作比較
40、多,而且有比較大的風(fēng)險(xiǎn)性,因?yàn)閷?duì)一些敏感操作要提醒進(jìn)行確認(rèn);同時(shí)由于管理員比較少,不用太多考慮并發(fā)性。</p><p> 1.4 系統(tǒng)的數(shù)據(jù)需求</p><p> 系統(tǒng)需要數(shù)據(jù)庫(kù)支持,該系統(tǒng)使用的是SQL Server 2000作為數(shù)據(jù)庫(kù)。學(xué)生信息,教師信息和課程信息的錄入由管理員完成。因?yàn)檫x課系統(tǒng)的數(shù)據(jù)不是十分海量,所以選用了對(duì)系統(tǒng)要求不是很高而且比較易用的SQL Server 2
41、000,同時(shí)可以使用ADO.NET更方便地編寫程序。在SQL Server 2000中新建一個(gè)名為WYH的數(shù)據(jù)庫(kù)專門存放該系統(tǒng)所要用到的數(shù)據(jù),并新添加一個(gè)名為WYH的用戶只能訪問(wèn)這個(gè)數(shù)據(jù)庫(kù),從而減少數(shù)據(jù)庫(kù)的風(fēng)險(xiǎn)。</p><p><b> 第二章 系統(tǒng)設(shè)計(jì)</b></p><p> 2.1 系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)</p><p> 數(shù)據(jù)庫(kù)的設(shè)
42、計(jì)是一個(gè)MIS系統(tǒng)中至關(guān)重要的部分,良好的數(shù)據(jù)庫(kù)設(shè)計(jì)是一個(gè)系統(tǒng)成功設(shè)計(jì)并實(shí)現(xiàn)的先決條件。如果數(shù)據(jù)庫(kù)設(shè)計(jì)得不好,系統(tǒng)可能會(huì)不穩(wěn)定,而數(shù)據(jù)庫(kù)的修改可能會(huì)造成整個(gè)系統(tǒng)都要推倒重新編寫??梢姅?shù)據(jù)庫(kù)的設(shè)計(jì)是至關(guān)重要的。一般要求數(shù)據(jù)庫(kù)中的關(guān)系模式都達(dá)到第三范式(3NF)。而存儲(chǔ)過(guò)程、觸發(fā)器也是一個(gè)基于SQL Server 2000的數(shù)據(jù)庫(kù)中不可缺少的部分。</p><p> 2.1.1 數(shù)據(jù)流圖</p>&
43、lt;p> 數(shù)據(jù)流圖是一種圖形化技術(shù),它描繪信息流和數(shù)據(jù)從輸入移動(dòng)到輸出過(guò)程中所經(jīng)受的變換。在數(shù)據(jù)流圖中沒(méi)有任何具體的物理元素,它只是描繪信息在軟件中流動(dòng)和被處理的情況。因?yàn)閿?shù)據(jù)流圖是系統(tǒng)邏輯功能的圖形表示,即使不是專業(yè)的計(jì)算機(jī)技術(shù)人員也容易理解它,所以是分析員與用戶之間極好的通信工具。 </p><p> 本系統(tǒng)的主要數(shù)據(jù)流圖如圖2.1和圖2.2。</p><p> 圖2.
44、1 學(xué)生相關(guān)的數(shù)據(jù)流圖</p><p> 圖2.2 管理員相關(guān)的數(shù)據(jù)流圖</p><p> 2.1.2 數(shù)據(jù)字典</p><p> 為了使各數(shù)據(jù)流,數(shù)據(jù)處理過(guò)程,存儲(chǔ)過(guò)程能反映其中的數(shù)據(jù)層,數(shù)據(jù)項(xiàng)目,數(shù)據(jù)特性,所以用數(shù)據(jù)字典來(lái)對(duì)數(shù)據(jù)流圖中的各成份進(jìn)行具體的定義,為系統(tǒng)的分析,設(shè)計(jì)及以后的實(shí)現(xiàn)提供有關(guān)元素一致性定義和詳細(xì)的描述。數(shù)據(jù)字典是為了描述在結(jié)構(gòu)化分析過(guò)
45、程中定義的對(duì)象內(nèi)容而使用的一種半形式化的工具,是描述數(shù)據(jù)的信息的集合,是對(duì)系統(tǒng)中使用的所有數(shù)據(jù)元素的定義的集合。</p><p> 該系統(tǒng)的主要數(shù)據(jù)字典如表2.1、表2.2及表2.3所示:</p><p> 表2.1 系統(tǒng)的數(shù)據(jù)流說(shuō)明</p><p> 表2.2 系統(tǒng)的數(shù)據(jù)流構(gòu)成</p><p> 表2.3 數(shù)據(jù)流的主要數(shù)據(jù)項(xiàng)詳解&l
46、t;/p><p> 2.1.3 系統(tǒng)的主要E-R圖</p><p> 實(shí)體—關(guān)系(E-R)數(shù)據(jù)模型基于對(duì)現(xiàn)實(shí)世界的這樣一種認(rèn)識(shí):現(xiàn)實(shí)世界由一組稱為實(shí)體的基本對(duì)象以及這些對(duì)象間的聯(lián)系構(gòu)成。實(shí)體是現(xiàn)實(shí)世界中可區(qū)別于其他對(duì)象的一個(gè)“事件”或一個(gè)“物體”[7]。</p><p> 該數(shù)據(jù)庫(kù)的主要E-R圖如圖2.3所示。</p><p> 圖2.
47、3 數(shù)據(jù)庫(kù)設(shè)計(jì)的主要E-R圖</p><p> 為了節(jié)省篇幅,實(shí)體與屬性的關(guān)系沒(méi)有用圖形表示,每個(gè)實(shí)體定義的屬性如下,其標(biāo)識(shí)碼用下橫線畫出:[8]</p><p> 院系:{ 院系簡(jiǎn)寫,院系名稱,院系負(fù)責(zé)人,院系辦公電話}</p><p> 學(xué)生:{ 學(xué)號(hào),學(xué)生姓名,性別,年齡,登錄密碼}</p><p> 教師:{ 教師編號(hào),教師姓
48、名,教師職稱,教師性別,教師年齡}</p><p> 課程:{ 課程編號(hào),課程名稱,任課老師編號(hào),學(xué)時(shí),課程容量,已選人數(shù),開課周次,上課時(shí)間,上課教室,備注信息}</p><p> 因?yàn)槊總€(gè)課程只有一個(gè)確定的任課老師,所以把任課老師作為課程的一個(gè)屬性來(lái)存儲(chǔ),也不會(huì)出現(xiàn)冗余的現(xiàn)象,而且比較簡(jiǎn)單,查詢信息的時(shí)候也避免了大量的自然連接操作,可以提高系統(tǒng)的性能??墒沁@樣的話老師和課程的關(guān)系就
49、隱含在屬性中,不是那么明顯。從數(shù)據(jù)庫(kù)模式設(shè)計(jì)上來(lái)說(shuō),更好的方法是把課程和任課教師的聯(lián)系作為一個(gè)新的關(guān)系模式,而不是把教師作為課程的屬性,這樣即使一個(gè)課程有多個(gè)老師也可以表示,但是由于要多一個(gè)表,會(huì)多使用一定的存儲(chǔ)空間。在這里使用了比較簡(jiǎn)單的方法。</p><p> 2.1.4 模式圖(shema diagram)</p><p> 一個(gè)含有主碼和外碼依賴的數(shù)據(jù)庫(kù)模式可以用模式圖來(lái)表示
50、,可以直觀地展示出數(shù)據(jù)庫(kù)各個(gè)表之間的外碼依賴。該數(shù)據(jù)庫(kù)的關(guān)系圖如圖2.4。[7]</p><p> 圖2.4 數(shù)據(jù)庫(kù)設(shè)計(jì)關(guān)系圖</p><p> 2.1.5 表的設(shè)計(jì)</p><p> 表的設(shè)計(jì)又是數(shù)據(jù)庫(kù)設(shè)計(jì)中最重要的部分,因?yàn)樗鼪Q定了數(shù)據(jù)庫(kù)的關(guān)系模式能達(dá)到哪個(gè)范式,是否會(huì)出現(xiàn)數(shù)據(jù)冗余的現(xiàn)象,是否存在數(shù)據(jù)不一致的風(fēng)險(xiǎn),是否能達(dá)到實(shí)體完整性、數(shù)據(jù)完整性和用戶定
51、義完整性的要求。</p><p> 在這個(gè)系統(tǒng)中,最重要的是表有4個(gè),包括學(xué)生信息表,教師信息表,課程信息表和選課信息表。其中選課信息表是最經(jīng)常存取的表,因?yàn)閷W(xué)生要選課、取消選課或查詢自己的選課信息。學(xué)生信息表要包含學(xué)生的個(gè)人信息,還要包含登錄選課系統(tǒng)的密碼。教師信息表含有教師的信息。課程信息表包含了所有課程信息,而每個(gè)課程要有一個(gè)老師來(lái)上課(在本校的公選課里,每個(gè)公選課都有一個(gè)課程編號(hào),對(duì)應(yīng)一個(gè)任課老師,不同
52、時(shí)間的相同課程的課程編號(hào)也不一樣。所以可以認(rèn)為每個(gè)課程編號(hào)只對(duì)應(yīng)一個(gè)教師。而且通常情況下,課程編號(hào)不同的名稱相同的課程也是由同一個(gè)老師來(lái)上的),所以這個(gè)表里有一個(gè)屬性是教師編號(hào),而教師編號(hào)是教師表的主碼。選課表保存學(xué)生的選課信息。還有一個(gè)管理員表和院系信息表,其中管理員表用來(lái)記錄管理員的基本信息及登錄密碼,院系信息表用來(lái)存儲(chǔ)院系信息,而學(xué)生和教師都只屬于某個(gè)特定院系,所以學(xué)生表和教師表都有一個(gè)“院系編號(hào)”的屬性,而“院系編號(hào)”是院系信息
53、表的主碼。</p><p> 各個(gè)表的具體設(shè)計(jì)如下:</p><p> (1) 院系信息表(Department):這個(gè)表用來(lái)保存全校各個(gè)院系的信息,包括院系簡(jiǎn)寫(dno),院系名稱(dname),院系負(fù)責(zé)人(dmaster)和院系辦公室電話(dtel)。一般情況下,每個(gè)院系有一個(gè)負(fù)責(zé)人,有一個(gè)辦公電話。所以簡(jiǎn)單地這樣設(shè)計(jì)這個(gè)表,當(dāng)然實(shí)際情況中還應(yīng)該有更多的屬性。這個(gè)系統(tǒng)中只是為了說(shuō)明
54、學(xué)生和教師所在院系才引入這個(gè)表的。這個(gè)表的各屬性詳細(xì)信息如表2.4。</p><p> 表2.4 表Department的詳細(xì)說(shuō)明</p><p> (2)學(xué)生信息表(Student):這個(gè)表用來(lái)保存所有學(xué)生的信息,包括學(xué)生學(xué)號(hào)(sno),學(xué)生姓名(sname),學(xué)生所在院系(sdept),學(xué)生性別(ssex),學(xué)生年齡(sage)和學(xué)生登錄密碼(spwd)。學(xué)生學(xué)號(hào)是主碼,唯一標(biāo)識(shí)一
55、個(gè)學(xué)生。學(xué)生性別只能為m(male)或f(female),學(xué)生年齡要在10歲和40歲之間。為了實(shí)際需要,所有項(xiàng)均不可以為空;學(xué)生登錄密碼初始為“8888”,可由學(xué)生以后自行更改。學(xué)生所在院系(sdept)為外碼,引用表Department的dno屬性。這個(gè)表的各屬性詳細(xì)信息如表2.5。</p><p> 表2.5 表Student的詳細(xì)說(shuō)明</p><p> (3)教師信息表(Teac
56、her);這個(gè)表用來(lái)保存全校教師的信息,包括教師編號(hào)(tno),教師姓名(tname),教師所在院系(tdept),教師職稱(ttitle),教師性別(tsex)和教師年齡(tage)。教師編號(hào)是主碼,唯一標(biāo)識(shí)一個(gè)教師。教師職稱為“教授”、“副教授”、“講師”等有實(shí)際意義的字符串,教師性別只能為m(male)或f(female),教師年齡要在20歲和80歲之間。為了實(shí)際需要,所有項(xiàng)均不可以為空。教師所在院系(sdept)為外碼,引用表D
57、epartment的dno屬性。這個(gè)表的各屬性詳細(xì)信息如表2.6。</p><p> 表2.6 表Teacher的詳細(xì)說(shuō)明</p><p> (4)課程信息表(Course):這個(gè)表保存著所有公共選修課的信息,包括課程編號(hào)(cno),課程名稱(cname),任課老師編號(hào)(ctno),課程學(xué)時(shí)(cperiod),課堂容量(ccapacity),課程的已報(bào)名人數(shù)(cnumber),課程的開
58、課周次(cweeks),課程的開課時(shí)間(ctime),課程所在教室(croom),課程信息備注(cremark)。課程編號(hào)是主碼,唯一標(biāo)識(shí)一個(gè)課程,同一個(gè)名稱的課可以有不同的課程編號(hào),認(rèn)為是不同的課。課程學(xué)時(shí)為課程所對(duì)應(yīng)的課堂節(jié)數(shù),而16個(gè)學(xué)時(shí)對(duì)應(yīng)一個(gè)課程學(xué)分。因?yàn)橐话銇?lái)說(shuō)選修課只有1學(xué)分,1.5學(xué)分,2學(xué)分這三種,所以學(xué)時(shí)只能在16和32之間,學(xué)分只能在1和2之間。而控制課程學(xué)時(shí)只能出現(xiàn)16,24,32這三種則需要在程序中進(jìn)行限制(使
59、用Dropdownlist控件而不是使用文本框TextBox,限制可以輸入的內(nèi)容)。輸入課程信息時(shí)只用給出課程學(xué)時(shí)即可,學(xué)分在查詢時(shí)自行算出。如果把學(xué)分當(dāng)成這個(gè)表的一個(gè)屬性,則學(xué)時(shí)決定學(xué)分,存在傳遞依賴,不符合第三范式。關(guān)于范式的具體論述見2.1.6節(jié)。</p><p> 表2.7 表Course的詳細(xì)說(shuō)明</p><p> (5)選課信息表(SC):這個(gè)表存放所有的學(xué)生的選課信息,是
60、這個(gè)系統(tǒng)中最常訪問(wèn)的表。該表包括學(xué)生學(xué)號(hào)(sno),課程編號(hào)(cno)和分?jǐn)?shù)(mark)。其中學(xué)生學(xué)號(hào)和課程編號(hào)構(gòu)成主碼,也都是外碼,分別引用了Student表的sno和Course表的cno。分?jǐn)?shù)(mark)則標(biāo)識(shí)該選課的得分,默認(rèn)為-1。在學(xué)期結(jié)束的時(shí)候,會(huì)有相應(yīng)的分?jǐn)?shù),最低為0,最高為100。通過(guò)分?jǐn)?shù)可以判定課程是該學(xué)期選的還是以前就選了并且通過(guò)的。一般情況下,如果公選課沒(méi)有通過(guò),則將該選課刪除,而不是記不及格。所有分?jǐn)?shù)為-1的課
61、程為該學(xué)期所選,并通過(guò)相應(yīng)手段控制一個(gè)學(xué)期最多選2門。這個(gè)表的各屬性詳細(xì)信息如表2.8。</p><p> 表2.8 表SC的詳細(xì)說(shuō)明</p><p> (6)管理員信息表(Admin):存放管理員信息,包括管理員編號(hào)(ano),管理員名稱(aname),管理員電話(dtel),管理員密碼(apwd)。其中管理員編號(hào)為主碼,唯一標(biāo)識(shí)一個(gè)管理員,管理員密碼用來(lái)管理員登錄時(shí)的身份驗(yàn)證。這個(gè)
62、表的各屬性詳細(xì)信息如表2.9。</p><p> 表2.9 表Admin的詳細(xì)說(shuō)明</p><p> 2.1.6 數(shù)據(jù)庫(kù)模式所達(dá)到的范式分析</p><p> 一般而言,關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的目標(biāo)是生成一組關(guān)系模式,使之既不必存儲(chǔ)不必要的重復(fù)信息,又可以方便地獲取信息。所以要設(shè)計(jì)滿足適當(dāng)范式的模式。如果達(dá)到了第三范式(3NF),就可以比較好地實(shí)現(xiàn)無(wú)冗余并不會(huì)出現(xiàn)更
63、新或刪除錯(cuò)誤,不容易出現(xiàn)數(shù)據(jù)不一致的情況。下面討論一下本系統(tǒng)所設(shè)計(jì)的數(shù)據(jù)庫(kù)達(dá)到了哪個(gè)范式。</p><p> 先分析比較簡(jiǎn)單的Admin表和Department表,顯然Admin表里管理員編號(hào)(ano)是主碼,直接決定了其他三個(gè)屬性管理員姓名(aname)、管理員電話(atel)和管理員密碼(apwd),沒(méi)有部分函數(shù)依賴和傳遞函數(shù)依賴,符合第三范式;Department表和Admin表差不多,院系簡(jiǎn)寫(dno)
64、直接決定了其他三個(gè)屬性院系名稱(dname)、院系負(fù)責(zé)人(dmaster)和院系電話(dtel),符合第三范式。</p><p> 表Student、表Teacher和表Course相對(duì)于先前分析的兩個(gè)表來(lái)說(shuō),都多了一個(gè)外碼。Student和Teacher的所在院系都為Department的主碼,Course的任課老師為Teacher的主碼。但是這三個(gè)表同樣都是主碼直接決定其他屬性,不存在部分函數(shù)依賴和傳遞函數(shù)
65、依賴,同樣符合第三范式。表SC為選課信息表,它由學(xué)生學(xué)號(hào)sno和課程編號(hào)cno共同組成主碼,而這兩個(gè)又都是外碼,主碼能直接確定其他兩個(gè)屬性,不存在部分函數(shù)依賴和傳遞函數(shù)依賴,符合第三范式。</p><p> 如果把學(xué)分設(shè)計(jì)成Course表的一個(gè)屬性,則學(xué)時(shí)決定學(xué)分,存在傳遞函數(shù)依賴,不符合第三范式。故不把學(xué)分設(shè)計(jì)成Course表的屬性,而是在查詢數(shù)據(jù)庫(kù)時(shí)通過(guò)學(xué)時(shí)把學(xué)分計(jì)算出來(lái)展示給用戶。這樣Course表中就不
66、存?zhèn)鬟f函數(shù)依賴,符合第三范式。</p><p> 綜上,該數(shù)據(jù)庫(kù)模式符合第三范式(3NF)。</p><p> 2.1.7 觸發(fā)器的設(shè)計(jì)</p><p> 觸發(fā)器是一系列SQL語(yǔ)句的集合,當(dāng)對(duì)數(shù)據(jù)庫(kù)作修改時(shí),它自動(dòng)被執(zhí)行。數(shù)據(jù)庫(kù)就像存儲(chǔ)普通數(shù)據(jù)一樣存儲(chǔ)觸發(fā)器,所以它們被永久保存,也可以被所有的數(shù)據(jù)庫(kù)操作訪問(wèn)。一旦把一個(gè)觸發(fā)器輸入數(shù)據(jù)庫(kù),只要指定的事情發(fā)生,相
67、應(yīng)的條件被滿足,數(shù)據(jù)庫(kù)系統(tǒng)就有責(zé)任去執(zhí)行它。</p><p> 觸發(fā)器可以幫助用戶做許多很有用的事情,使用戶要進(jìn)行的操作更加簡(jiǎn)化,同時(shí)還可以避免某些數(shù)據(jù)不一致的情況。</p><p> 在這個(gè)系統(tǒng)所用的數(shù)據(jù)庫(kù)中,就是為了簡(jiǎn)化操作、避免數(shù)據(jù)不一致而使用了觸發(fā)器。</p><p> 在SC表中如果要插入一行的話,就表示某個(gè)學(xué)生選取了一門選課。那么這個(gè)時(shí)候?qū)?yīng)的課程
68、的已選人數(shù)(cnumber)會(huì)加一,留給其他學(xué)生的位置變少。這時(shí)考慮可以使用觸發(fā)器實(shí)現(xiàn)這個(gè)功能:在SC表中建立一個(gè)觸發(fā)器,每當(dāng)插入一行的時(shí)候就觸發(fā),這個(gè)觸發(fā)器的作用就是把SC表中增加的這行里對(duì)應(yīng)的課程編號(hào)的已選人數(shù)(cnumber)在Course表中加一,這樣簡(jiǎn)化了操作,只要在SC中插入一行即可,不用同時(shí)考慮Course表的相關(guān)動(dòng)作。</p><p> 下面是這個(gè)觸發(fā)器的代碼:</p><p
69、> Create Trigger AddSCTrigger</p><p><b> On SC</b></p><p> After Insert</p><p><b> As</b></p><p> Set nocount on</p><p> D
70、eclare @cno char(7)</p><p> Select @cno=cno</p><p> From inserted</p><p> Update Course</p><p> Set cnumber=cnumber+1 </p><p> where cno=@cno</p>
71、;<p> 這個(gè)觸發(fā)器在從SC表中插入一行時(shí)被激發(fā)。它首先定義變量@cno,它的數(shù)據(jù)類型和長(zhǎng)度必須與Course表的cno(課程編號(hào))一致。然后它通過(guò)“Select @cno=cno From inserted”讀入插入行的課程編號(hào)(cno)并存入已經(jīng)定義好的變量@cno中備用。最后,它通過(guò)這個(gè)課程編號(hào)(@cno)找到Course表中的相應(yīng)行,對(duì)它的已選人數(shù)(cnumber)進(jìn)行加一操作。</p><
72、;p> 這個(gè)觸發(fā)器邏輯清楚,功能簡(jiǎn)單但是實(shí)用,在SC表中插入新行的時(shí)候,不用再考慮Course表的相應(yīng)操作,使用簡(jiǎn)單,同時(shí)避免了潛在的數(shù)據(jù)不一致的情況,增加了系統(tǒng)的可靠性。</p><p> 在從SC表中刪除某一行的時(shí)候也會(huì)遇到類似問(wèn)題,因此定義一個(gè)類似的觸發(fā)器DelSCTrigger來(lái)完成在Course表中對(duì)應(yīng)課程的已選人數(shù)(cnumber)減一的做操,因?yàn)榕c上面的觸發(fā)器類似,在此不再贅述。</
73、p><p> 在數(shù)據(jù)庫(kù)中,觸發(fā)器有著很大的作用。這個(gè)系統(tǒng)中的數(shù)據(jù)庫(kù)設(shè)計(jì)比較簡(jiǎn)單,只在這兩個(gè)個(gè)地方使用了觸發(fā)器。在復(fù)雜的數(shù)據(jù)庫(kù)模式中,觸發(fā)器的作用更加強(qiáng)大??上б恍?shù)據(jù)庫(kù)管理系統(tǒng)不支持觸發(fā)器,使得這個(gè)工具不能隨時(shí)隨地發(fā)揮作用。MS SQL Server 2000對(duì)觸發(fā)器及存儲(chǔ)過(guò)程的支持非常好,這也是選用它作為數(shù)據(jù)庫(kù)的一個(gè)重要原因。</p><p> 2.1.8 存儲(chǔ)過(guò)程的設(shè)計(jì)</p&
74、gt;<p> 在大型數(shù)據(jù)庫(kù)系統(tǒng)中,存儲(chǔ)過(guò)程和觸發(fā)器具有很重要的作用。無(wú)論是存儲(chǔ)過(guò)程還是觸發(fā)器,都是SQL 語(yǔ)句和流程控制語(yǔ)句的集合。就本質(zhì)而言,觸發(fā)器也是一種存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程在運(yùn)算時(shí)生成執(zhí)行方式,所以,以后對(duì)其再運(yùn)行時(shí)其執(zhí)行速度很快。SQL Server 2000 不僅提供了用戶自定義存儲(chǔ)過(guò)程的功能,而且也提供了許多可作為工具使用的系統(tǒng)存儲(chǔ)過(guò)程。</p><p> 存儲(chǔ)過(guò)程(Stored P
75、rocedure)是一組為了完成特定功能的SQL 語(yǔ)句集,完成某一個(gè)特定的功能,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。它就像是編程語(yǔ)言中的函數(shù),事先定義好函數(shù)以后,在需要使用的時(shí)候只要調(diào)用一下就能完成需要的工作。用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。</p><p> 存儲(chǔ)過(guò)程有許多優(yōu)點(diǎn):</p><p> (1) 存儲(chǔ)過(guò)程允許標(biāo)準(zhǔn)組件式編程存儲(chǔ)過(guò)程在被創(chuàng)建以后可以
76、在程序中被多次調(diào)用,而不必重新編寫該存儲(chǔ)過(guò)程的SQL語(yǔ)句。而且數(shù)據(jù)庫(kù)專業(yè)人員可隨時(shí)對(duì)存儲(chǔ)過(guò)程進(jìn)行修改,但對(duì)應(yīng)用程序源代碼毫無(wú)影響(因?yàn)閼?yīng)用程序源代碼只包含存儲(chǔ)過(guò)程的調(diào)用語(yǔ)句),從而極大地提高了程序的可移植性。</p><p> ?。?)存儲(chǔ)過(guò)程能夠?qū)崿F(xiàn)較快的執(zhí)行速度。如果某一操作包含大量的Transaction-SQL代碼或分別被多次執(zhí)行,那么存儲(chǔ)過(guò)程要比批處理的執(zhí)行速度快很多。因?yàn)榇鎯?chǔ)過(guò)程是預(yù)編譯的,在首次運(yùn)行
77、一個(gè)存儲(chǔ)過(guò)程時(shí),查詢優(yōu)化器對(duì)其進(jìn)行分析、優(yōu)化,并給出最終被存在系統(tǒng)表中的執(zhí)行計(jì)劃。而批處理的Transaction-SQL 語(yǔ)句在每次運(yùn)行時(shí)都要進(jìn)行編譯和優(yōu)化,因此速度相對(duì)要慢一些。</p><p> ?。?) 存儲(chǔ)過(guò)程能夠減少網(wǎng)絡(luò)流量。對(duì)于同一個(gè)針對(duì)數(shù)據(jù)庫(kù)對(duì)象的操作(如查詢、修改),如果這一操作所涉及到的Transaction-SQL 語(yǔ)句被組織成一存儲(chǔ)過(guò)程,那么當(dāng)在客戶計(jì)算機(jī)上調(diào)用該存儲(chǔ)過(guò)程時(shí),網(wǎng)絡(luò)中傳送的只
78、是該調(diào)用語(yǔ)句,否則將是多條SQL 語(yǔ)句,可見存儲(chǔ)過(guò)程可以有效提高網(wǎng)絡(luò)性能。</p><p> ?。?) 存儲(chǔ)過(guò)程可被作為一種安全機(jī)制來(lái)充分利用系統(tǒng)管理員通過(guò)對(duì)執(zhí)行某一存儲(chǔ)過(guò)程的權(quán)限進(jìn)行限制,從而能夠?qū)崿F(xiàn)對(duì)相應(yīng)的數(shù)據(jù)訪問(wèn)權(quán)限的限制,避免非授權(quán)用戶對(duì)數(shù)據(jù)的訪問(wèn),保證數(shù)據(jù)的安全。</p><p> 由于存儲(chǔ)過(guò)程有以上諸多優(yōu)點(diǎn),所以在這個(gè)系統(tǒng)中,幾乎所有的功能都是用存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),在程序中直接調(diào)
79、用存儲(chǔ)過(guò)程并通過(guò)存儲(chǔ)過(guò)程的返回值來(lái)確定執(zhí)行后的狀態(tài)。</p><p> 大量使用存儲(chǔ)過(guò)程是這個(gè)系統(tǒng)的一大特點(diǎn)。數(shù)據(jù)庫(kù)設(shè)計(jì)中一共編寫了16個(gè)存儲(chǔ)過(guò)程,分別如下。</p><p> AddStudent:增加一個(gè)學(xué)生信息;</p><p> AddTeacher:增加一個(gè)教師信息;</p><p> AddCourse:增加課程信息;&l
80、t;/p><p> AddSC:增加學(xué)生選課信息;</p><p> DeleteStudent:刪除一個(gè)學(xué)生信息;</p><p> DeleteTeacher:刪除一個(gè)教師信息;</p><p> DeleteCourse:刪除課程信息;</p><p> DeleteSC:刪除學(xué)生選課信息(取消選課);&l
81、t;/p><p> EditStudent:編輯修改學(xué)生信息;</p><p> EditTeacher:編輯修改教師信息;</p><p> EditCourse:編輯修改課程信息;</p><p> StudentLogIn:學(xué)生登錄時(shí)驗(yàn)證學(xué)生身份;</p><p> AdminLogIn:管理員登錄時(shí)驗(yàn)證管
82、理員身份;</p><p> ChangeStudentPwd:學(xué)生登錄后修改登錄密碼;</p><p> ChangeAdminPwd:管理員登錄后修改密碼;</p><p> InitStudentPwd:管理員登陸后對(duì)特定學(xué)生的密碼進(jìn)行初始化,用于學(xué)生忘記個(gè)人登錄密碼的情況。</p><p> 以上的16個(gè)存儲(chǔ)過(guò)程幾乎完成了該系
83、統(tǒng)中所有的功能。而且?guī)缀趺總€(gè)存儲(chǔ)過(guò)程都會(huì)驗(yàn)證作為參數(shù)輸入的學(xué)號(hào)或教師編號(hào)或課程編號(hào)是否存在,并以特定的返回值來(lái)標(biāo)識(shí)不存在的情況。所以這些存儲(chǔ)過(guò)程同樣可以用來(lái)判斷學(xué)號(hào)等是否存在。</p><p> 對(duì)于院系信息的輸入和管理員信息的添加,因?yàn)橄到y(tǒng)要完成的功能中不包括對(duì)院系信息的管理,所以默認(rèn)院系信息在數(shù)據(jù)庫(kù)中已經(jīng)存在。而管理員的信息應(yīng)該由DBA在查詢分析器中用SQL語(yǔ)句輸入。</p><p>
84、; 下面以增加選課信息來(lái)說(shuō)明一下存儲(chǔ)過(guò)程的設(shè)計(jì)思想和運(yùn)行邏輯,如圖2.5:</p><p> 圖2.5 增加選課存儲(chǔ)過(guò)程流程圖</p><p> 要增加學(xué)生選課信息,首先要先驗(yàn)證學(xué)生學(xué)號(hào)是否存在,再驗(yàn)證課程編號(hào)是否存在,再驗(yàn)證該學(xué)生是否選修了這門課,接著驗(yàn)證該學(xué)生是否已經(jīng)選了兩門課(按規(guī)定一個(gè)學(xué)期最多只能選兩門課),最后驗(yàn)證該課程是否人數(shù)已滿。如果都符合則把該課程作為該學(xué)生的選修課寫
85、入SC表,有一個(gè)不符合則通過(guò)返回值返回出錯(cuò)的地方。這個(gè)存儲(chǔ)過(guò)程條理清楚,邏輯明了。盡管學(xué)號(hào)不存在和課程編號(hào)不存在的可能性非常小(只有學(xué)生已經(jīng)登錄,然后管理員刪除了該學(xué)生信息才可能出現(xiàn)學(xué)號(hào)不存在的情況),可是為了增強(qiáng)程序的健壯性,以防萬(wàn)一,還是把它寫了進(jìn)去。</p><p> 這里還涉及到一個(gè)加鎖的問(wèn)題。這是一個(gè)并發(fā)系統(tǒng),很有可能很多同學(xué)同一時(shí)間一起選課。為了防止讀臟數(shù)據(jù)的情況,在一個(gè)學(xué)生選某門課的時(shí)候,其他的不
86、能讀該課程的已選人數(shù)。只有該同學(xué)選課完畢,才釋放該課程,其他同學(xué)可以查看和選課。否則可能會(huì)出現(xiàn)某門課只有一個(gè)名額了,而兩個(gè)同學(xué)同時(shí)讀到該課程還可以選擇,同時(shí)選擇則會(huì)出現(xiàn)數(shù)據(jù)不一致的情況。存儲(chǔ)過(guò)程中的時(shí)延是為了測(cè)試加鎖的效果。測(cè)試完畢后就將延時(shí)語(yǔ)句注釋掉。</p><p> 2.2 系統(tǒng)功能設(shè)計(jì)</p><p> 系統(tǒng)共有兩個(gè)大的模塊,分別為學(xué)生使用的模塊和管理員使用的模塊。學(xué)生登錄后
87、可以進(jìn)行選課、取消選課、查詢已選課程和修改個(gè)人登錄密碼等操作。管理員登錄后可以進(jìn)行學(xué)生信息管理、教師信息管理、課程信息管理和密碼管理等操作。對(duì)于管理員來(lái)說(shuō),每個(gè)管理員在同一時(shí)間只能登錄一次,學(xué)生登錄則不受此限制。系統(tǒng)的功能模塊圖如圖2.6。</p><p> 圖2.6 系統(tǒng)功能模塊圖</p><p> 2.2.1 學(xué)生模塊</p><p> 學(xué)生模塊是學(xué)生登
88、錄后使用的模塊,有4個(gè)功能,分別是選課操作,取消選課,查選選課信息和修改個(gè)人登錄密碼。選課操作是這個(gè)系統(tǒng)最經(jīng)常進(jìn)行的操作,是系統(tǒng)的瓶頸,最能體現(xiàn)對(duì)系統(tǒng)性能的要求,提高該部分的性能可以大大提高整個(gè)系統(tǒng)的性能。取消選課是將已經(jīng)選上的課程取消,有些同學(xué)選錯(cuò)了課程可以用這個(gè)取消選課的功能來(lái)更正。當(dāng)然這也會(huì)留下安全隱患,如有的同學(xué)在機(jī)房或網(wǎng)吧上網(wǎng),離開電腦的時(shí)候忘了注銷登錄,則會(huì)給其他人留下可乘之機(jī),如被其他人惡意取消選課(也許是那個(gè)人想選這個(gè)課
89、,而這個(gè)課的人數(shù)已滿),但是為了系統(tǒng)功能的完整還是把這個(gè)功能做了出來(lái),希望使用該選課系統(tǒng)的同學(xué)能夠注意離開的時(shí)候注銷。修改密碼可以修改用來(lái)登錄的密碼,初始密碼都是“8888”,同學(xué)們上網(wǎng)以后要盡快修改密碼,以防有人用自己的帳號(hào)登錄后進(jìn)行惡意操作。修改密碼的時(shí)候需要輸入原來(lái)的密碼以確認(rèn)身份,還要兩次輸入新密碼,以防按鍵錯(cuò)誤輸錯(cuò)想要的密碼。如果忘記了密碼,可以憑學(xué)號(hào)和姓名讓管理員將自己的密碼恢復(fù)到初始設(shè)置。</p><p
90、> 2.2.2 管理員模塊</p><p> 管理員模塊為管理員所使用,包含學(xué)生信息管理、教師信息管理、課程信息管理和密碼管理四個(gè)子模塊,前三個(gè)字模塊分別可以進(jìn)行學(xué)生信息、教師信息和課程信息的增刪改查,密碼管理模塊可以修改管理員自己的登錄密碼,也可以根據(jù)學(xué)生提供的學(xué)號(hào)和姓名來(lái)進(jìn)行學(xué)生密碼初始化,以應(yīng)對(duì)學(xué)生忘記密碼的情況。管理員在同一時(shí)間只能登錄一次,離開時(shí)要注銷登錄才可以在下次正常登錄。如果忘了注銷登
91、錄而直接關(guān)閉了窗口,則要等20分鐘后Session過(guò)了有效期才可以再次登錄。不過(guò)管理員都是經(jīng)過(guò)培訓(xùn)的,應(yīng)該會(huì)知道各個(gè)要注意的地方。</p><p><b> 第三章 系統(tǒng)實(shí)現(xiàn) </b></p><p> 整個(gè)系統(tǒng)使用ASP.NET(C#)作為編程語(yǔ)言,在一些必要的時(shí)候使用了少量Jscript來(lái)完成ASP.NET無(wú)法完成的功能。下面具體講述一下整個(gè)系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié)。&
92、lt;/p><p><b> 3.1 網(wǎng)業(yè)設(shè)計(jì)</b></p><p> 這個(gè)系統(tǒng)的所有網(wǎng)頁(yè)均在Visual Studio.NET集成環(huán)境中設(shè)計(jì),沒(méi)有使用DreamWaver等界面設(shè)計(jì)軟件,主要考慮到該系統(tǒng)最重視的應(yīng)該是性能,而不是外表,畢竟不同于商用系統(tǒng)要靠外表吸引用戶,選課系統(tǒng)是固定用戶一定會(huì)使用的,而且并發(fā)量很大,要首先考慮性能。以后要對(duì)如何把網(wǎng)頁(yè)設(shè)計(jì)得更漂亮
93、進(jìn)行進(jìn)一步學(xué)習(xí),畢竟商用網(wǎng)站還是更常見一點(diǎn)。</p><p> 該系統(tǒng)里網(wǎng)頁(yè)的風(fēng)格是簡(jiǎn)潔明朗,畢竟是個(gè)選課系統(tǒng),只要能達(dá)到選課的目的,一眼能看出來(lái)該怎么選課就可以,沒(méi)有太多華麗的裝飾。太多的圖片會(huì)使網(wǎng)頁(yè)的打開速度過(guò)慢,影響性能。</p><p> 3.1.1 學(xué)生頁(yè)面設(shè)計(jì)</p><p> 學(xué)生登錄后能使用的功能只有4個(gè),分別是選課、取消選課、查詢選課信息和
94、修改個(gè)人密碼,功能頁(yè)面不多,將連接到這4個(gè)功能頁(yè)面的超級(jí)鏈接放在登陸后的主頁(yè)面上一目了然,進(jìn)入相應(yīng)頁(yè)面也很容易。學(xué)生登陸后的主頁(yè)面如圖3.1所示</p><p> 圖3.1 學(xué)生用戶的主界面</p><p> 其上有提示信息,還在靠上的位置顯示當(dāng)前的學(xué)生用戶的學(xué)號(hào)和姓名信息,給人帶來(lái)親切感。選課頁(yè)面如圖3.2所示:</p><p> 圖3.2 學(xué)生用戶的選課界
95、面</p><p> 其中課程信息從數(shù)據(jù)庫(kù)查詢出來(lái)后綁定在一個(gè)DataGrid上顯示出來(lái)。具體如何綁定在3.4節(jié)討論。同時(shí)這個(gè)DataGrid上綁定一列按鈕列,通過(guò)點(diǎn)擊按鈕來(lái)對(duì)相應(yīng)行進(jìn)行選課操作,而選課操作是通過(guò)傳遞參數(shù)給存儲(chǔ)過(guò)程并返回特定的值來(lái)完成的,通過(guò)返回值可以看出選課成功與否并再把選課結(jié)果通過(guò)彈出框的形式返回給用戶。</p><p> 按鈕列的綁定過(guò)程如下:在DataGrid上
96、點(diǎn)右鍵,選擇“屬性生成器”進(jìn)入屬性編輯頁(yè)面,然后點(diǎn)左邊的“列”按鈕,在“列列表”的“可用列”里選中“按鈕列”,點(diǎn)擊向右的箭頭添加到“選定的列”,選定新添加的項(xiàng),填寫各項(xiàng)屬性[9],如圖3.3。其中“頁(yè)眉文本”是要顯示在頁(yè)眉中的文字,“文本”是顯示在綁定列中的按鈕文字,“命令名”則在對(duì)該按鈕添加點(diǎn)擊事件時(shí)來(lái)標(biāo)識(shí)這個(gè)按鈕。然后點(diǎn)擊“確定”回到VS.NET設(shè)計(jì)頁(yè)面,點(diǎn)DataGrid,在右下腳的屬性欄點(diǎn)擊閃電圖標(biāo),調(diào)出各個(gè)事件屬性,然后雙擊I
97、temCommand事件編輯即可,如圖3.4。</p><p> 圖3.3 DataGrid屬性生成器</p><p> 圖3.4 DataGrid屬性</p><p> 雙擊ItemCommand后會(huì)定位到函數(shù)DataGrid1_ItemCommand中,在其代碼中輸入if(e.CommandName=="SelectCourse")
98、{……}即可,大括號(hào)里編寫點(diǎn)擊按鈕要進(jìn)行的相應(yīng)操作即可,“SelectCourse”即為當(dāng)時(shí)定義的命令名,如果有兩列以上的按鈕列,可以通過(guò)“命令名”來(lái)識(shí)別點(diǎn)擊了哪個(gè)按鈕列的按鈕。如何具體將各參數(shù)</p><p> 傳回用存儲(chǔ)過(guò)程處理留待3.2節(jié)討論。</p><p> 3.1.2 管理員頁(yè)面設(shè)計(jì)</p><p> 因?yàn)楣芾韱T所要進(jìn)行的操作較多,用一個(gè)樹型導(dǎo)航
99、欄來(lái)導(dǎo)航會(huì)使操作輕松并且條理清楚。管理員頁(yè)面里的DataGrid綁定按鈕列和在學(xué)生頁(yè)面中的一樣,在此不再贅述。不同的是有些DataGrid需要綁定兩個(gè)按鈕列,分別是編輯相應(yīng)行和刪除相應(yīng)行的信息,這時(shí)需要給不同的列定義不同的“命令名”,在ItemCommand通過(guò)不同的命令名來(lái)識(shí)別不同按鈕列的點(diǎn)擊事件;同時(shí),由于刪除按鈕是很危險(xiǎn)的,容易誤點(diǎn),所以要加入一個(gè)要求用戶確認(rèn)刪除的彈出對(duì)話框。只要在相應(yīng)列的“文本”里輸入如下內(nèi)容:</p&g
100、t;<p> <div id="de" onclick="JavaScript:return confirm('確定刪除該學(xué)生嗎?')">刪除</div> </p><p> 刪除的時(shí)候彈出提示框。這是一個(gè)JavaScript,在這里和ASP.NET結(jié)合很好的解決了問(wèn)題。從這點(diǎn)可以看出,ASP.NET還是無(wú)法完成Ja
101、vaScript的所有功能。管理員頁(yè)面如圖3.5:</p><p> 圖3.5 管理員界面</p><p> 管理員頁(yè)面的主要特點(diǎn)是使用了導(dǎo)航欄,這個(gè)樹性導(dǎo)航欄是用了微軟的TreeView控件。這個(gè)控件在該系統(tǒng)開發(fā)使用的VS2003中沒(méi)有附帶,需要到微軟的網(wǎng)站去下載,然后安裝后就可以了。具體安裝過(guò)程可以到網(wǎng)上查找。安裝好以后,新建一個(gè)Frameset,分為左右兩邊,左邊名稱為“Cont
102、ent”,右邊名稱為“Main”,其定義為:</p><p> <frameset cols="170,78%"></p><p> <frame name="contents" src="AdminMainxxx.aspx"></p><p> <frame name=
103、"main" src="AdminEditCourse.aspx"></p><p> 然后把TreeView控件拖到一個(gè)空白頁(yè)面AdminMainxxx.aspx中,在屬性的“Nodes”中加入各個(gè)要導(dǎo)航的名稱和要導(dǎo)航到的頁(yè)面。導(dǎo)航的名稱為樹形導(dǎo)航欄顯示的名稱,要導(dǎo)航的頁(yè)面鏈接(NavigateUrl)是要在右邊顯示的相應(yīng)頁(yè)面,Target是要顯示這個(gè)頁(yè)面的位置,
104、寫為“main”,因?yàn)檫@個(gè)frameset的右半邊的名字就是“main”。如圖3.6所示。編輯完treeview的Nodes屬性后,這個(gè)有frameset和樹型導(dǎo)航欄的頁(yè)面就做好了。確實(shí)感覺到VS.NET功能強(qiáng)大。</p><p> 圖3.6 TreeView的Nodes屬性</p><p> 3.2 功能模塊設(shè)計(jì)</p><p> 系統(tǒng)中,各個(gè)功能模塊都是
105、用存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)的,在程序中直接調(diào)用存儲(chǔ)過(guò)程并通過(guò)存儲(chǔ)過(guò)程的返回值來(lái)確定執(zhí)行后的狀態(tài)。使用存儲(chǔ)過(guò)程是這個(gè)系統(tǒng)的一大特點(diǎn)。</p><p> 3.2.1學(xué)生模塊設(shè)計(jì)</p><p> 學(xué)生模塊包括 選課操作,取消選課,查詢選課,修改密碼等。下面重點(diǎn)介紹下選課操作功能的具體實(shí)現(xiàn)。選課操作主要還是調(diào)用增加選課信息的存儲(chǔ)過(guò)程AddSC,根據(jù)返回的不同信息來(lái)判斷不同情況。AddSC存儲(chǔ)過(guò)程的詳細(xì)
106、流程見圖2.5。調(diào)用其存儲(chǔ)過(guò)程如下:</p><p> 建立好數(shù)據(jù)庫(kù)連接,調(diào)用增加學(xué)生選課信息存儲(chǔ)過(guò)程(AddSC)</p><p> Execute @returnValue = AddSC @sno,@cno</p><p> 增加一個(gè)存儲(chǔ)過(guò)程的返回信息@returnValue,</p><p> mySqlCommand.Par
107、ameters.Add("@returnValue",SqlDbType.Int);</p><p><b> 設(shè)置為輸出參數(shù)</b></p><p> mySqlCommand.Parameters["@returnValue"].Direction = </p><p> ParameterDi
108、rection.Output;</p><p> 再聲明兩個(gè)變量@sno,@cno,其數(shù)據(jù)長(zhǎng)度應(yīng)對(duì)應(yīng)選課表SC中sno,cno</p><p> mySqlCommand.Parameters.Add("@sno",SqlDbType.NChar,8);</p><p> mySqlCommand.Parameters.Add("
109、@cno",SqlDbType.NChar,7);</p><p> 根據(jù)這個(gè)返回值看出執(zhí)行結(jié)果:</p><p> switch((int)mySqlCommand.Parameters["@returnValue"].Value)</p><p><b> {</b></p><p&g
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ài)網(wǎng)頁(yè)制作——畢業(yè)論文
- 網(wǎng)上選課系統(tǒng)---畢業(yè)論文
- 網(wǎng)上選課系統(tǒng)畢業(yè)論文
- 網(wǎng)上選課系統(tǒng)畢業(yè)論文
- 網(wǎng)上選課系統(tǒng)畢業(yè)論文
- 網(wǎng)上選課系統(tǒng)畢業(yè)論文
- 畢業(yè)論文——網(wǎng)上選課系統(tǒng)
- 畢業(yè)論文——網(wǎng)上選課管理系統(tǒng)
- 基于jsp技術(shù)的網(wǎng)上選課系統(tǒng)畢業(yè)論文
- jsp網(wǎng)上選課系統(tǒng)畢業(yè)論文
- 學(xué)生網(wǎng)上選課系統(tǒng) 畢業(yè)論文
- 畢業(yè)論文——?jiǎng)討B(tài)口令認(rèn)證的網(wǎng)上選課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 網(wǎng)上選課系統(tǒng)畢業(yè)論文(含外文翻譯)
- 畢業(yè)論文——網(wǎng)上選課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文——?jiǎng)討B(tài)口令認(rèn)證的網(wǎng)上選課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 網(wǎng)上選課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)——畢業(yè)論文
- 動(dòng)態(tài)網(wǎng)頁(yè)設(shè)計(jì)畢業(yè)論文
- 動(dòng)態(tài)網(wǎng)頁(yè)設(shè)計(jì)畢業(yè)論文
- 選課畢業(yè)論文---學(xué)生網(wǎng)上選課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 網(wǎng)上選課系統(tǒng)畢業(yè)設(shè)計(jì)論文
評(píng)論
0/150
提交評(píng)論