【正文】
性別birthdaydatetime8是出生日期departchar10是外所在院系degreevarchar10是職稱passwordvarchar20是密碼 教材表(book)列名數(shù)據(jù)類型長度允許空主/外鍵自動編號含義booknochar13否是教材編號booknamevarchar30否教材名稱publish_panyvarchar50否出版社authornvarchar8是作者pricenumeric9是價格 專業(yè)表(specialty)列名數(shù)據(jù)類型長度允許空主/外鍵自動編號含義specialtychar10否是專業(yè)編號specialty_namenvarchar20是專業(yè)名稱departchar10是外院系編號 院系表(department)列名數(shù)據(jù)類型長度允許空主/外鍵自動編號含義departchar10否是院系編號depart_namenvarchar20否院系名稱depart_headernvarchar8否院系負(fù)責(zé)人teacher_numsmallint2是教師數(shù)量在完成數(shù)據(jù)庫中各個表結(jié)構(gòu)的創(chuàng)建之后,還要畫出數(shù)據(jù)庫中表之間的關(guān)系。 關(guān)系圖從關(guān)系圖中可以看出:學(xué)生表中的classno與班級表中的classno建立了關(guān)聯(lián)。班級表是主表,學(xué)生表是從表。學(xué)生表中的studentno和選課表中的studentno建立了關(guān)聯(lián),其中學(xué)生表是主表,選課表是從表。班級表中的teacherno與教師表中的teacherno建立了關(guān)聯(lián),教師表是主表,班級表是從表。教師表中的teacherno與課程表中的teacherno建立了關(guān)聯(lián),教師表是主表,課程表是從表。課程表中的courseno與選課表中的courseno建立了關(guān)聯(lián),課程表是主表,選課表是從表。選課表中的termno和學(xué)期表中的termno建立了關(guān)聯(lián),學(xué)期表是主表,選課表是從表。教材表中的bookno與課程表中bookno建立了關(guān)聯(lián),其中教材表是主表,課程表是從表。學(xué)生表中的depart與院系表中的depart建立了關(guān)聯(lián),院系表是主表,學(xué)生表是從表。學(xué)生表中的specialty與專業(yè)表中的specialty建立了關(guān)聯(lián),專業(yè)表是主表,學(xué)生表是從表。班級表中的depart與院系表中的depart建立了關(guān)聯(lián),其中,院系表是主表,班級表是從表。班級表中的specialty與專業(yè)表中的specialty建立了關(guān)聯(lián),其中專業(yè)表是主表,班級表是從表。教師表中的depart與院系表是的depart建立了關(guān)聯(lián),院系表是主表,教師表是從表。管理員表是的depart與院系表中的depart建立了關(guān)聯(lián),院系表是主表,管理員表為從表。 建立觸發(fā)器在教務(wù)管理信息系統(tǒng)中,為了實現(xiàn)課程管理中選課人數(shù)的一致性,在數(shù)據(jù)庫中的選課表上建立了增加和刪除兩個觸發(fā)器。通過編寫觸發(fā)器中的代碼,就可以控制選課人數(shù)的變化,并把數(shù)據(jù)記錄到相應(yīng)的數(shù)據(jù)表中。增加觸發(fā)器的代碼如下:CREATE TRIGGER [AddSelectnum] ON FOR INSERT AS Declare @courseno varchar(6)Select @courseno=courseno from Insertedupdate course set selectnum=selectnum+1 where courseno=@courseno通過以上程序代碼,可以保證在學(xué)生選擇課程后,選課人數(shù)的總數(shù)會在原來數(shù)量的基礎(chǔ)上自動地加一。刪除觸發(fā)器的代碼如下:CREATE TRIGGER [DeleteSelectnum] ON [dbo].[courseselect] FOR DELETE ASDeclare @courseno varchar(6)Select @courseno= courseno from deletedupdate course set selectnum=selectnum1 where courseno=@courseno 通過以上的程序代碼,可以保證在學(xué)生退選某門課程后,選課人數(shù)的總數(shù)也會在原來數(shù)量的基礎(chǔ)上自動地減一。使用了這兩個觸發(fā)器后,無論是對于選課還是退選,數(shù)據(jù)庫中的數(shù)據(jù)都會根據(jù)操作實現(xiàn)加一、減一功能。因此,使用觸發(fā)器保證了數(shù)據(jù)的一致性。 建立存儲過程在進(jìn)行數(shù)據(jù)庫設(shè)計時設(shè)計了一個用于成績統(tǒng)計的存儲過程ScoreTJ。該存儲過程主要實現(xiàn)對成績的統(tǒng)計,能夠通過程序代碼實現(xiàn)每門課程成績的最高分、最低分、平均分以及各分?jǐn)?shù)段學(xué)生人數(shù)的統(tǒng)計。具體的程序代碼如下:CREATE PROCEDURE [DBO].[ScoreTJ] @CourseNO varchar(6)ASDeclare @Num intDelete TongjiSelect @Num=max(score) from courseselect where courseno= @CourseNOInsert into Tongji values (39。最高分39。,@Num)Select @Num=min(score) from courseselect where courseno= @CourseNOInsert into Tongji values (39。最低分39。,@Num)Select @Num=avg(score) from courseselect where courseno= @CourseNOInsert into Tongji values (39。平均分39。,@Num)Select @Num=count(*) from courseselect where courseno= @CourseNO and score60Insert into Tongji values (39。不及格39。,@Num)Select @Num=count(*) from courseselect where courseno= @CourseNO and score=60 and score70Insert into Tongji values (39。606939。,@Num)Select @Num=count(*) from courseselect where courseno= @CourseNO and score=70 and score80Insert into Tongji values (39。707939。,@Num)Select @Num=count(*) from courseselect where courseno= @CourseNO and score=80 and score90Insert into Tongji values (39。808939。,@Num)Select @Num=count(*) from courseselect where courseno= @CourseNO and score=90 Insert into Tongji values (39。90分以上39。,@Num)GO 系統(tǒng)前臺的實施教務(wù)管理信息系統(tǒng)采用的前臺開發(fā)工具是Delphi 7。Delphi 7是Windows系統(tǒng)下的可視化集成開發(fā)工具,提供了強(qiáng)大的可視化VCL功能,使程序員能夠快速、高效地開發(fā)出Windows系統(tǒng)下的應(yīng)用程序,特別是在數(shù)據(jù)庫和網(wǎng)絡(luò)方面,Delphi與其他開發(fā)工具相比更是勝出一籌。Delphi 7與其它前臺開發(fā)工具相比具有以下的特點:1. 可視化開發(fā)環(huán)境Delphi的集成開發(fā)環(huán)境IDE(Integrated Development Environement)設(shè)計緊湊合理,眾多的組件被精心編排于組件面板中,使用很方便。它有1個建立于面向?qū)ο罂蚣芙Y(jié)構(gòu)之上的窗體設(shè)計器,當(dāng)在窗體中操作組件時,其后臺自動為其生成代碼。2. 豐富的VCLVCL是Delphi最重要的組成部分,包含多種類別的組件。這些組件是進(jìn)行各種程序開發(fā)的有力工具。Delphi的VCL組件還具有很好的可擴(kuò)充性,允許使用者添加第三方組件,可以如同使用Delphi自帶組件一樣使用添加的組件。3. 面向?qū)ο筇匦悦嫦驅(qū)ο蟪绦蛟O(shè)計OOP(ObjectOriented Programming)是Delphi誕生的基礎(chǔ)。OOP立意于創(chuàng)建軟件重用代碼,具備更好地模擬現(xiàn)實世界環(huán)境的能力,是最先進(jìn)的程序設(shè)計方法。Delphi是完全面向?qū)ο蟮?,它使用面對象的Pascal(Object Pascal)作為程序設(shè)計語言,提供了1個具有真正OOP擴(kuò)展的可視化編程環(huán)境,使得可視化編程與面向?qū)ο蟮拈_發(fā)框架緊密地結(jié)合起來。4. 高效的編譯器Pascal編譯器以編譯速度快而著名,Delphi正是建立在此基礎(chǔ)上的,它是針對Windows系統(tǒng)的最快的高級語言本地代碼編譯器。5. 強(qiáng)大的數(shù)據(jù)庫開發(fā)功能Delphi提供了一整套數(shù)據(jù)庫解決方案,包括建立數(shù)據(jù)庫、連接數(shù)據(jù)庫、SQL操作、保存、編輯和顯示數(shù)據(jù)集等功能的組件或工具。開發(fā)數(shù)據(jù)庫應(yīng)用程序是Delphi 7的主要功能之一。6. 良好的分布式應(yīng)用開發(fā)支持Delphi支持多種分布式應(yīng)用模式的開發(fā),從簡單的消息通信程序到龐大的多層次應(yīng)用。在Delphi中,既可以方便地建立客戶機(jī)/服務(wù)器結(jié)構(gòu)的二層分布式應(yīng)用,又可以方便地建立客戶機(jī)/應(yīng)用服務(wù)器/數(shù)據(jù)庫服務(wù)器結(jié)構(gòu)的三層分布式應(yīng)用。在多層體系結(jié)構(gòu)方面,Delphi提供MIDAS(Multitier Distributed Application Service Suite,多層分布式應(yīng)用程序服務(wù)包)技術(shù),其中利用了當(dāng)前大多數(shù)分布計算標(biāo)準(zhǔn),如:DCOM,Sockets,HTTP,SOAP(Simple Object Access Protocol,簡單對象訪問協(xié)議)、CORBA和MTS/COM+,這使得它不但用于建立通常的應(yīng)用系統(tǒng),也適于建立電子商務(wù)應(yīng)用系統(tǒng)。Delphi同時支持2種主流的分布的對象標(biāo)準(zhǔn),即CORBA和COM/COM+,這也使其在對象結(jié)構(gòu)標(biāo)準(zhǔn)紛爭中立于不敗之地。 數(shù)據(jù)庫的訪問方式在前臺應(yīng)用程序的開發(fā)當(dāng)中,首先應(yīng)該確定選用哪種方式訪問數(shù)據(jù)庫。在確定了數(shù)據(jù)庫的訪問方式之后,就應(yīng)該利用相應(yīng)的組件進(jìn)行數(shù)據(jù)庫鏈接。只有完成數(shù)據(jù)庫鏈接后,才可以進(jìn)行窗體界面的設(shè)計和程序代碼的編寫。在教務(wù)管理信息系統(tǒng)的開發(fā)過程中,并沒有采用BDE方式訪問數(shù)據(jù)庫,而是采用了ADO方式訪問數(shù)據(jù)庫。這是因為ADO組件是微軟公司面向各種數(shù)據(jù)的高層接口,這種層次接口被稱為OLE DB。OLE DB訪問速度快,可訪問數(shù)據(jù)類型豐富,包括關(guān)系型和非關(guān)系型數(shù)據(jù)庫、電子郵件與文件系統(tǒng),文本與圖片以及客戶事務(wù)對象等。ADO組件編寫的程序,可脫離Borland的BDE,而原有的數(shù)據(jù)顯示/編輯組件可直接使用ADO組件,這是ADO程序的一大優(yōu)點。ADO組件包括3個核心組件分別是用于數(shù)據(jù)庫鏈接的ADOConnection和用于執(zhí)行SQL命令的ADOCommand以及用于執(zhí)行返回結(jié)果集合請求的ADODataSet組件。還有3個兼容組件ADOTable,ADOQuery和ADOStoreProc,可以用它們將BDE的應(yīng)用程序移植到ADO中。另外1個RDSConnection組件,用于訪問遠(yuǎn)程多級應(yīng)用程序中的數(shù)據(jù)。下面對ADO組件的功能和作用分別做以介紹:1. ADOConnection組件ADOConnection組件的主要作用是建立與數(shù)據(jù)庫的連接。此外,它還有一定的事務(wù)處理能力。使用ADO訪問數(shù)據(jù)庫,必須先與其連接??梢允褂肁DOConnection作為連接的工具,也可以直接使用ADO組件與數(shù)據(jù)源作為連接。兩者的不同在于,使用ADOConnection來連接,可以使多個ADO組件共享這一連接,以便集中控制,進(jìn)行事務(wù)處理;而直接使用ADO組件連接比較簡捷、方便。2. ADOCommand組件ADOCommand組件定義了將對數(shù)據(jù)源執(zhí)行的指定命令。ADOCommand組件主要用于SQL的數(shù)據(jù)定義或執(zhí)行一個不帶返回結(jié)果集的存儲過程。如果SQL語句帶有返回結(jié)果集,最好使用ADODataSet,ADOQuery和ADOStoreProc等組件。3. ADODataSet組件ADODataSet組件是最常用的ADO數(shù)據(jù)集組件,使用該組件可以從ADO數(shù)據(jù)庫讀取1個或多個數(shù)據(jù)表??梢灾苯幼x取數(shù)據(jù)表,也可以通過SQL語句訪問數(shù)據(jù)表。在使用ADODataSet組件訪問數(shù)據(jù)前需要建立它與數(shù)據(jù)庫的的關(guān)聯(lián),建立這種關(guān)聯(lián)可以通過設(shè)置ADODataSet組件的ConnectionString屬性或者通過設(shè)置Connection屬性。4. ADOTable組件ADOTable組件是一個數(shù)據(jù)集組件,封裝了一個可訪問的ADO的數(shù)據(jù)表。使用ADOTable組件可利用ADO訪問單個數(shù)據(jù)表中的數(shù)據(jù),它提供了直接訪問數(shù)據(jù)表中每條記錄和字段的方法。ADO數(shù)據(jù)表組件也可以用于數(shù)據(jù)表中經(jīng)過限定范圍或條件過濾的記錄的子集。5. ADOQuery組件ADOQuery組件為ADO數(shù)據(jù)存儲提供發(fā)布SQL的方法,使用ADOQuery組件訪問應(yīng)用SQL語句的數(shù)據(jù)存儲中的一個或多個數(shù)據(jù)表。TADOQuery對象可從使用SELECT語句的ADO數(shù)據(jù)存儲中得到數(shù)據(jù),它對ADO數(shù)據(jù)存儲中的數(shù)據(jù)表和其他數(shù)據(jù)源對象執(zhí)行諸如INSERT、DELETE、UPDATE、ALTER TABLE和CREATE TABLE一類的操作,也執(zhí)行存儲過程。6. ADOS