數(shù)據(jù)庫課程設(shè)計---教務(wù)管理系統(tǒng)_第1頁
已閱讀1頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  數(shù)據(jù)庫系統(tǒng)課程設(shè)計</b></p><p><b>  學(xué)生姓名: </b></p><p><b>  班 學(xué) 號: </b></p><p><b>  指導(dǎo)教師: </b></p><p><b>

2、;  2012年 3月</b></p><p><b>  教務(wù)管理系統(tǒng)</b></p><p><b>  需求分析</b></p><p>  教務(wù)管理是大學(xué)的主要日常管理工作之一,涉及到校、系、師、生的諸多方面,隨著教學(xué)體制的不斷改革,尤其是學(xué)分制、選課制的展開和深入,教務(wù)日常管理工作日趨繁重、復(fù)雜。如何

3、把教務(wù)工作信息化,模塊化,便捷化是現(xiàn)代高校發(fā)展的重點,所以迫切需要研制開發(fā)一種綜合教務(wù)管理軟件,教務(wù)管理系統(tǒng)是一個輔助學(xué)校教務(wù)處教務(wù)人員完成日常工作中,涉及學(xué)籍管理,選課管理和成績管理這三項比較繁重的工作。它應(yīng)用計算機在數(shù)據(jù)處理和數(shù)據(jù)整理保存方面的優(yōu)異性能,幫助工作人員提高工作的效率、減少出錯情況。</p><p>  教務(wù)管理系統(tǒng)的總目標(biāo)是:在計算機網(wǎng)絡(luò),數(shù)據(jù)庫和先進(jìn)的開發(fā)平臺上,利用現(xiàn)有的軟件,配置一定的硬件

4、,開發(fā)一個具有開放體系結(jié)構(gòu)的、易擴充的、易維護(hù)的、具有良好人機交互界面的教務(wù)管理系統(tǒng),實現(xiàn)機關(guān)、學(xué)校、事業(yè)等單位教務(wù)的自動化的計算機管理系統(tǒng),為各單位的提供準(zhǔn)確、精細(xì)、迅速的教務(wù)信息。</p><p><b>  信息要求:</b></p><p>  教務(wù)管理系統(tǒng)涉及的實體有:</p><p>  教師(工作證號、姓名、職稱、電話、系代號);

5、</p><p>  學(xué)生(學(xué)號、姓名、性別、出生年月、班號、系代號);</p><p>  班級(班號、系代號);</p><p>  系(系代號、系名、系辦公室電話);</p><p>  課程(課序號、課名、學(xué)分、上課時間、名額)。</p><p>  這些實體之間的聯(lián)系如下:</p><p&

6、gt;  每個學(xué)生都屬于一個班,每個班都屬于一個系,每個教師也都屬于一個系。</p><p>  一名教師可以教多門課,一門課可以有幾位主講老師,但不同老師講的同一門課其課序號是相同的(課序號是唯一的)。</p><p>  一名同學(xué)可以選多門課,一門課可被若干同學(xué)選中。</p><p>  一名同學(xué)選中的課若已學(xué)完,應(yīng)該記錄有相應(yīng)成績。</p>&l

7、t;p>  本單位學(xué)生、教師都有重名,工作證號、學(xué)號可以作為標(biāo)識。</p><p><b>  處理要求:</b></p><p>  教學(xué)系統(tǒng)主要提供數(shù)據(jù)維護(hù)、選課和信息查詢。數(shù)據(jù)維護(hù)功能是由專門人員對數(shù)據(jù)庫中的數(shù)據(jù)(學(xué)生信息表、教師信息表、學(xué)生成績表、教師課程表、學(xué)生課程表、學(xué)生選課表等)進(jìn)行維護(hù),且此系統(tǒng)具有網(wǎng)上選課功能,信息查詢功能包括常見的查詢:系統(tǒng)中

8、各對象的基本信息查詢。 查詢指定班、系的學(xué)生信息(名單、人數(shù)等)。查詢學(xué)生的成績、學(xué)分情況。查詢教師授課情況和學(xué)生選課情況等。</p><p>  安全性與完整性要求:</p><p><b>  安全性要求:</b></p><p>  1.系統(tǒng)應(yīng)設(shè)置訪問用戶的標(biāo)識以鑒別是否是合法用戶,并要求合法用戶設(shè)置其密碼,保證用戶身份不被盜用;<

9、/p><p>  2.系統(tǒng)應(yīng)對不同的數(shù)據(jù)設(shè)置不同的訪問級別,限制訪問用戶可查詢和處理數(shù)據(jù)的類別和內(nèi)容;</p><p>  3.系統(tǒng)應(yīng)對不同用戶設(shè)置不同的權(quán)限,區(qū)分不同的用戶,如學(xué)生,教師,系統(tǒng)管理員。</p><p><b>  完整性要求:</b></p><p>  1.各種信息記錄的完整性,關(guān)鍵信息記錄內(nèi)容不能為空;

10、</p><p>  2.各種數(shù)據(jù)間相互的聯(lián)系的正確性;</p><p>  3.相同的數(shù)據(jù)在不同記錄中的一致性。</p><p><b>  2、概念設(shè)計</b></p><p> ?。?)概念模型(E-R圖):</p><p>  教務(wù)管理系統(tǒng)總E-R圖</p><p>

11、;<b> ?。?)數(shù)據(jù)字典:</b></p><p><b>  1.數(shù)據(jù)項</b></p><p><b>  2、數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  3、數(shù)據(jù)流</b></p><p><b>  4、數(shù)據(jù)存儲</b>

12、</p><p><b>  5、處理過程</b></p><p><b> ?。?)數(shù)據(jù)流圖:</b></p><p><b>  3、邏輯結(jié)構(gòu)設(shè)計</b></p><p>  關(guān)系的描述(E-R圖向關(guān)系模式的轉(zhuǎn)換)</p><p>  系(系代號、系

13、名、系辦公室電話)</p><p>  此關(guān)系模式也可表示為dept(Depno,Dname,Dtelephone)</p><p>  此為系實體對應(yīng)的關(guān)系模式,系代號(Deptno)是該關(guān)系模式的主碼,這個關(guān)系模式只有一個碼,沒有任何屬性對Deptno部分依賴或傳遞依賴,所以dept屬于3NF。同時Deptno是唯一的決定因素,不存在決定因素不包含碼的情況,所以此關(guān)系模式屬于BCNF。

14、</p><p>  班級(班級號、系別號)</p><p>  此關(guān)系模式也可表示為class(CCno,Deptno)</p><p>  次臥實體班級對應(yīng)的關(guān)系模式,主碼為CCno班級號,分析可知,此關(guān)系模式,不存在其他屬性對碼的部分和傳遞依賴,且決定因素都包含碼可知,此class屬于BCNF。</p><p>  教師(工作證號、姓名

15、、職稱、電話、系代號)</p><p>  此關(guān)系模式也可表示為teacher(Tno,Tname,Tcall,Ttelephone,Deptno)</p><p>  此為教師實體對應(yīng)的關(guān)系模式。該關(guān)系模式已包含了聯(lián)系“屬于”所對應(yīng)的關(guān)系模式。工作證號(Tno)是關(guān)系的主碼,系代號(Deptno)是關(guān)系的外碼。這個關(guān)系模式只有一個碼,這里沒有任何屬性對Tno部分依賴或傳遞依賴,所以tea

16、cher屬于3NF。同時Tno是唯一的決定因素,所以teacher屬于BCNF。</p><p>  學(xué)生(學(xué)號、姓名、性別、出生年月、班級號、系代號)</p><p>  此關(guān)系模式也可表示為student(Sno,Sname,Ssex,Sdate,CCno,Deptno)</p><p>  此為學(xué)生實體對應(yīng)的關(guān)系模式。該關(guān)系模式包含了聯(lián)系“屬于”所對應(yīng)的關(guān)系模

17、式。學(xué)號(Sno)是關(guān)系的主碼,CCno和Deptno是關(guān)系的外碼,這個關(guān)系模式只有一個碼,沒有任何屬性對Sno部分依賴或傳遞依賴,所以student屬于3NF。同時Sno是唯一的決定因素,不存在決定因素不包含碼的情況,所以此關(guān)系模式屬于BCNF。</p><p>  選課(學(xué)號,課序號,成績)</p><p>  此關(guān)系模式也可表示為SC (Sno,Cno,Grade)</p>

18、;<p>  此為聯(lián)系“選修”對應(yīng)的關(guān)系模式,Sno和Cno共同組成此關(guān)系模式的主碼,其他屬性不存在對碼的傳遞依賴與部分依賴,所以SC屬于3NF,同時SC中除Sno,Cno外沒有其他的決定因素,所以SC也屬于BCNF。</p><p>  授課(課序號、教師工作證號、上課時間、名額)</p><p>  此關(guān)系模式還可表示為teach(Cno,Tno,Tdate,Tnumbe

19、r)</p><p>  此為聯(lián)系“授課”所對應(yīng)的關(guān)系模式,Tno和Cno共同組成此關(guān)系模式的主碼,其他屬性不存在對碼的傳遞依賴與部分依賴,所以teach屬于3NF,同時teach中除Tno,Cno外沒有其他的決定因素,所以teach也屬于BCNF。</p><p>  課程(課序號、課名、學(xué)分)</p><p>  此關(guān)系模式還可表示為course(Cno,Cna

20、me,Cmark)</p><p>  此為實體課程對應(yīng)的關(guān)系模式,Cno為此關(guān)系模式的主碼,其他屬性不存在對碼的部分依賴,但存在傳遞依賴,所以course屬于2NF。</p><p><b>  系統(tǒng)結(jié)構(gòu)圖</b></p><p><b>  4、物理設(shè)計</b></p><p><b>

21、;  存儲安排</b></p><p>  為了提高系統(tǒng)性能,根據(jù)具體情況將數(shù)據(jù)的易變部分與穩(wěn)定部分、經(jīng)常存取部分和存取頻率較低部分分開存放。DBMS產(chǎn)品一般都提供了一些系統(tǒng)配置變量、存儲分配參數(shù),根據(jù)應(yīng)用環(huán)境確定這些參數(shù)值,并且在系統(tǒng)運行時還要根據(jù)系統(tǒng)實際運行情況進(jìn)行調(diào)整,以使系統(tǒng)性能最佳。</p><p><b>  方法選擇</b></p>

22、;<p>  存取方法是快速存取數(shù)據(jù)庫中的技術(shù),數(shù)據(jù)庫管理系統(tǒng)一般都提供多種存取方法。常用的存取方法有三類。第一類是索引方法,第二類是聚簇方法,第三類是HASH方法。</p><p>  索引存取方法的選擇:B+樹索引方法是數(shù)據(jù)庫中經(jīng)典的存取方法,使用最普遍,根據(jù)索引存取方法選擇的原則,如果一個屬性經(jīng)常在查詢條件中出現(xiàn),則考慮在這個屬性上建立索引,因?qū)W生信息管理,教師信息管理中查詢學(xué)生信息時,學(xué)生學(xué)

23、號,教師工作證號在查詢條件中經(jīng)常出現(xiàn),所以,在student表中按學(xué)號升序建唯一索引:CREATE UNIQUE INDEX stusno ON student(Sno),在teacher表中按工作證號升序建唯一索引:CREATE UNIQUE INDEX teasno ON student(Tno)。</p><p>  聚簇存取方法的選擇:根據(jù)設(shè)計候選聚簇的原則,對經(jīng)常在一起進(jìn)行連接操作的關(guān)系可以建立聚簇;如

24、果一個關(guān)系的一組屬性經(jīng)常相等比較條件中,則該單個關(guān)系可建立聚簇,所以當(dāng)通過聚簇碼進(jìn)行訪問或連接是該關(guān)系的主要應(yīng)用,與聚簇碼無關(guān)的其他訪問很少或是次要的,這時可以使用聚簇。</p><p><b>  存儲路徑的建立</b></p><p>  根據(jù)所選用的DBMS,如SQL Server 2005,從定量估算各種方案的存儲空間、存取時間和維護(hù)代價入手,對估算結(jié)果進(jìn)行權(quán)

25、衡、比較,選擇一個較優(yōu)的合理的物理結(jié)構(gòu)。</p><p><b>  5、系統(tǒng)實施</b></p><p>  編寫關(guān)系模式,裝入數(shù)據(jù)。分期分批地組織數(shù)據(jù)入庫,先輸入小批量數(shù)據(jù)做調(diào)試用,待試運行基本合格后,再大批量輸入數(shù)據(jù),逐步增加數(shù)據(jù)量,逐步完成運行評價。</p><p>  下面是數(shù)據(jù)庫建表的SQL語句:</p><p&

26、gt;  CREATE TABLE class</p><p>  (Ccno CHAR(6) PRIMARY KEY, /*列級完整性約束條件,Class是主碼*/</p><p>  Deptno CHAR(3),</p><p>  FOREIGN KEY (Deptno) REFERENCES dept(Deptno) /*表級完整性約束條件,De

27、ptno是外碼*/</p><p><b>  );</b></p><p>  CREATE TABLE dept</p><p>  (Deptno CHAR(3) PRIMARY KEY, /*列級完整性約束條件,Deptno是主碼*/</p><p>  Dname CHAR(20) UNIQUE NOT

28、 NULL,</p><p>  Dtelephone CHAR(11),</p><p><b>  );</b></p><p>  CREATE TABLE teacher</p><p>  (Tno CHAR(6) PRIMARY KEY, /*列級完整性約束條件,Tno是主碼*/</p>

29、<p>  Tname CHAR(20) NOT NULL,</p><p>  Tcall CHAR(8),</p><p>  Ttelephone CHAR(11),</p><p>  Deptno CHAR(3),</p><p>  FOREIGN KEY (Deptno) REFERENCES Dept(Deptno

30、) /*表級完整性約束條件,Dqptno是外碼*/</p><p><b>  );</b></p><p>  CREATE TABLE student</p><p>  (Sno CHAR(11) PRIMARY KEY, /*列級完整性約束條件,Sno是主碼*/</p><p>  Sname CHAR

31、(20) NOT NULL,</p><p>  Ssex CHAR(2),</p><p>  Sdate DATETIME,</p><p>  Ccno CHAR(6),</p><p>  Deptno CHAR(3),</p><p>  FOREIGN KEY (Ccno) REFERENCES class

32、(Ccno) /*表級完整性約束條件,Class是外碼*/</p><p>  FOREIGN KEY (Deptno) REFERENCES Dept(Deptno) /*表級完整性約束條件,Deptno是外碼*/</p><p><b>  );</b></p><p>  CREATE TABLE course</p>

33、<p>  (Cno CHAR(6) PRIMARY KEY, /*列級完整性約束條件,Cno是主碼*/</p><p>  Cname CHAR(20) NOT NULL,</p><p>  Cmark CHAR(2)</p><p><b>  );</b></p><p>  CREATE T

34、ABLE SC</p><p>  (Sno CHAR(11) NOT NULL,</p><p>  Cno CHAR(6) NOT NULL,</p><p>  Grade SMALLINT CHECK(Grade>=0 AND Grade<=100),</p><p>  PRIMARY KEY (Sno, Cno),

35、 /*主碼由兩個屬性構(gòu)成,必須作為表級完整性進(jìn)行定義*/</p><p>  FOREIGN KEY (Sno) REFERENCES student(Sno) /*表級完整性約束條件,Sno是外碼*/</p><p>  ON DELETE CASCADE /* 當(dāng)刪除student表中的元組時,級連刪除SC表中相應(yīng)的元組*/</p><p>  O

36、N UPDATE CASCADE, /*當(dāng)更新student表中的Sno時,級連更新SC表中相應(yīng)的元組*/</p><p>  FOREIGN KEY (Cno) REFERENCES course(Cno) /*表級完整性約束條件,Sno是外碼*/</p><p>  ON DELETE NO ACTION /* 當(dāng)刪除course表中的元組造成了與SC表不一致時,拒絕刪除*/

37、</p><p>  ON UPDATE CASCADE, /*當(dāng)更新course表中的Cno時,級連更新SC表中相應(yīng)的元組*/</p><p><b>  );</b></p><p>  CREATE TABLE teach</p><p>  (Cno CHAR(6), </p><

38、p>  Tno CHAR(6),</p><p>  Tdate DATETIME,</p><p>  Tnumber CHAR(6),</p><p>  PRIMARY KEY (Sno, Cno) /*主碼由兩個屬性構(gòu)成,必須作為表級完整性進(jìn)行定義*/</p><p><b>  );</b>&

39、lt;/p><p><b>  建立視圖:</b></p><p>  /*查詢某個系(以地信為例)的學(xué)生信息*/</p><p>  CREATE VIEW CS_Stu /*建立某個系(以地信為例)的學(xué)生信息視圖*/</p><p><b>  AS</b></p><p

40、><b>  SELECT *</b></p><p>  FROM student</p><p>  WHERE Deptno IN</p><p>  (SELECT Deptno</p><p><b>  FROM dept</b></p><p>  WHE

41、RE Dname='地信')</p><p>  WITH CHECK OPTION;</p><p>  /*查詢學(xué)號為2的學(xué)生的課程代號,課程名及成績*/</p><p>  SELECT SC.Cno, Cname,</p><p>  FROM course, SC</p><p>  WHER

42、E Sno = '2' AND SC.Cno=course.Cno;</p><p>  /*查詢學(xué)號為2的學(xué)生所修課程的總學(xué)分*/</p><p>  SELECT SUM(Cmark)</p><p>  FROM SC,Course</p><p>  WHERE Sno='2' AND SC.Cno=c

43、ouse.Cno;</p><p>  /*查詢教師授課信息*/</p><p>  SELECT Course.*</p><p>  FROM Course</p><p>  WHERE Tno='1';</p><p>  SELECT Student.Sno,Sname,Class,Grade

44、</p><p>  FROM Course,SC,Student</p><p>  WHERE Tno='1' AND</p><p>  course.Cno=SC.Cno AND</p><p>  SC.Sno=student.Sno;</p><p><b>  組織數(shù)據(jù)入庫:&l

45、t;/b></p><p><b>  6、運行維護(hù)</b></p><p>  數(shù)據(jù)庫的轉(zhuǎn)儲和恢復(fù)是系統(tǒng)正式運行后最重要的維護(hù)工作之一,DBA要針對不同的應(yīng)用要求制定不同的轉(zhuǎn)儲計劃,以保證一旦發(fā)生故障能盡快將數(shù)據(jù)庫恢復(fù)到某種一致的狀態(tài),并盡可能減少對數(shù)據(jù)庫的破壞。 </p><p>  為實現(xiàn)數(shù)據(jù)庫的恢復(fù)技術(shù),我們可以定期地將整個數(shù)

46、據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程,由于此數(shù)據(jù)庫系統(tǒng)不經(jīng)常使用,也沒投入正常運營階段,所以,轉(zhuǎn)儲技術(shù)選擇簡單的靜態(tài)海量轉(zhuǎn)儲。</p><p>  當(dāng)系統(tǒng)運行過程中發(fā)生故障,利用數(shù)據(jù)庫后備副本和日志文件就可以將數(shù)據(jù)庫恢復(fù)到故障前的摸一個一致性狀態(tài)。事務(wù)故障、系統(tǒng)故障的恢復(fù)是由系統(tǒng)自動完成的,介質(zhì)故障的恢復(fù)方法是重載數(shù)據(jù)庫,然后重做已完成的任務(wù),對于DBA來說,只需要重裝最近轉(zhuǎn)儲的數(shù)據(jù)庫副本和有關(guān)的各日志文件

47、副本。,然后執(zhí)行系統(tǒng)提供的恢復(fù)命令即可,具體的恢復(fù)操作仍由DBMS完成。</p><p><b>  7、用戶手冊</b></p><p>  運行程序,跳出登錄對話框:</p><p>  點擊確定后,彈出教務(wù)管理系統(tǒng)對話框界面:</p><p>  有四個選項可以選擇,點擊學(xué)生信息管理,學(xué)生信息管理對話框跳出:<

48、;/p><p>  有查詢、插入、修改、刪除四個選項,點擊查詢:</p><p>  輸入學(xué)生信息,點擊插入:</p><p>  將學(xué)生某些信息修改后,點擊修改,可知在listbox中,信息已被修改:</p><p>  點擊刪除,可將此學(xué)生信息刪除:</p><p>  若點擊教師信息管理,教師信息管理對話框彈出:&l

49、t;/p><p>  查詢,插入,修改,刪除操作方法同學(xué)生信息管理,所以在此不再贅述。</p><p>  若點擊學(xué)生選課,彈出學(xué)生選課對話框:</p><p>  在這里所有課程的代號都已經(jīng)給出來了,學(xué)生選課只需要輸入自己的學(xué)號和所選課程代號即可,輸入后,點擊確定選課,則課被選上,點擊查詢已選課程,可再下面的listbox中看到所有學(xué)生的選課信息,點擊退選,學(xué)生選課的

50、記錄將被刪除,課程也就被退選:</p><p>  若點擊教師登分,彈出對話框:</p><p>  輸入學(xué)生學(xué)號、課程號和成績后,點擊插入成績,可插入成績,點擊查看成績,在對話框的listbox中可出現(xiàn)所有學(xué)生所選課程的所有成績,修改某學(xué)生成績時,只需將學(xué)生成績修改后,再點擊修改成績即可。</p><p><b>  8、附錄</b><

51、/p><p>  在這個程序中,VC訪問SQL Server數(shù)據(jù)庫采用ADO方式,不需創(chuàng)建數(shù)據(jù)源,應(yīng)用程序可通過ADO直接與數(shù)據(jù)庫連接;用ADO方式創(chuàng)建了基于對話框的應(yīng)用程序。</p><p>  引入ADO庫文件,使用ADO前必須在工程的StdAfx.h頭文件里用直接引入符號#import</p><p><b>  代碼如下:</b></

52、p><p>  #import "c:\program files\common files\system\ado\msado15.dll" \</p><p>  no_namespace \</p><p>  rename ("EOF", "adoEOF") </p><p> 

53、 // 定義ADO連接、命令、記錄集變量指針</p><p>  _ConnectionPtrm_pConnection;</p><p>  _CommandPtrm_pCommand;</p><p>  _RecordsetPtr m_pRecordset;</p><p>  ADO庫是一組COM動態(tài)庫,應(yīng)用程序在調(diào)用A

54、DO前,須初始化OLE/COM庫環(huán)境。在應(yīng)用程序主類的InitInstance成員函數(shù)里初始化OLE/COM庫環(huán)境,寫如下代碼:</p><p>  //初始化COM,創(chuàng)建ADO連接等操作</p><p>  AfxOleInit();</p><p>  m_pConnection.CreateInstance(__uuidof(Connection));<

55、/p><p>  //用try...catch()來捕獲錯誤信息,</p><p>  try </p><p><b>  {</b></p><p>  //打開本地 Sql Server庫student</p><p>  m_pConnection->O

56、pen("driver={SQL Server}; Server=dell-pc;Database=test;",</p><p>  "","",adModeUnknown);</p><p>  //Server后是服務(wù)器的計算機名dell-pc,Database后是數(shù)據(jù)庫名test</p><p> 

57、 //這里使用的windows驗證,沒有設(shè)置用戶名和密碼,</p><p><b>  }</b></p><p>  catch(_com_error e)</p><p><b>  {</b></p><p>  AfxMessageBox("數(shù)據(jù)庫連接失敗!");<

58、/p><p>  return FALSE;</p><p><b>  } </b></p><p>  在test_db3Dlg.cpp文件中寫如下代碼。</p><p>  在#endif下面寫如下代碼:</p><p>  extern CTest_db3App theApp; /

59、/ 在此引用應(yīng)用類中的theApp來獲取庫連接指針</p><p>  在各個對話框所對應(yīng)的類的構(gòu)造函數(shù)后寫如下代碼:</p><p>  //使用ADO創(chuàng)建數(shù)據(jù)庫記錄集</p><p>  m_pRecordset.CreateInstance(__uuidof(Recordset));</p><p>  //用try...catch()

60、來捕獲錯誤信息</p><p><b>  try</b></p><p><b>  {</b></p><p>  m_pRecordset->Open("SELECT * FROM test", // 查詢test表中所有字段</p><p>  theAp

61、p.m_pConnection.GetInterfacePtr(), // 獲取庫接庫的IDispatch指針</p><p>  adOpenDynamic,</p><p>  adLockOptimistic,</p><p>  adCmdText);</p><p><b>  }</b></p>

62、<p>  catch(_com_error *e)</p><p><b>  {</b></p><p>  AfxMessageBox(e->ErrorMessage());</p><p><b>  }</b></p><p>  然后為每一個對話框中的按鈕添加對應(yīng)的相

63、應(yīng)函數(shù):</p><p>  以學(xué)生信息管理對話框所對應(yīng)的類student為例,需要為查詢,插入,修改,刪除添加相應(yīng)函數(shù),為每一個編輯框添加類student的成員變量m_class,m_dept,m_sno,m_sname等等。</p><p>  在這個程序中,共自定義了四個類,student,teacher,sc,choose,分別對應(yīng)四個對話框?qū)W生信息管理,教師信息管理,學(xué)生選課,教

64、師登分。如下圖:</p><p>  void student::OnButton1() //查詢函數(shù)的響應(yīng)函數(shù)</p><p><b>  {</b></p><p>  UpdateData(TRUE);</p><p>  CString strSql;</p><p>  if(m_

65、sname != "" && m_sno != "")</p><p>  strSql.Format("SELECT * FROM student WHERE sname = '%s' AND sno = '%s'",</p><p>  m_sname,m_sno);</p

66、><p>  else if(m_sname != "" && m_sno == "")</p><p>  strSql.Format("SELECT * FROM student WHERE sname = '%s'",m_sname);</p><p>  else if(

67、m_sname == "" && m_sno != "")</p><p>  strSql.Format("SELECT * FROM student WHERE sno = '%s'",m_sno);</p><p><b>  else</b></p>&l

68、t;p>  strSql = "SELECT * FROM student";</p><p><b>  try</b></p><p><b>  {</b></p><p>  //先關(guān)閉已經(jīng)打開的記錄集對象</p><p>  m_pRecordset->Cl

69、ose();</p><p>  //根據(jù)新的Sql查詢語句,重新打開記錄集對象</p><p>  m_pRecordset->Open(strSql.AllocSysString(), </p><p>  theApp.m_pConnection.GetInterfacePtr(),</p><p>

70、  adOpenDynamic,</p><p>  adLockOptimistic,</p><p>  adCmdText);</p><p><b>  }</b></p><p>  catch(_com_error *e)</p><p><b>  {</b>&

71、lt;/p><p>  AfxMessageBox(e->ErrorMessage());</p><p><b>  } </b></p><p>  //將查詢后得到的新記錄集顯示出來</p><p>  ListData();</p><p><b>  }</b>

72、;</p><p>  此函數(shù)最后調(diào)用的函數(shù)ListData()是在student類中添加的一個函數(shù),功能是將查詢后得到的新記錄集顯示出來。</p><p>  void student::ListData()</p><p><b>  {</b></p><p>  _variant_t var;</p>

73、<p>  CString strsno,strsname,strssex,strsdate,strclass,strdept;</p><p>  m_list.ResetContent(); //清空列表框</p><p>  strdept=strclass=strsno=strsname=strssex=strsdate=""

74、;;</p><p><b>  try</b></p><p><b>  {</b></p><p>  if(!m_pRecordset->BOF)</p><p>  m_pRecordset->MoveFirst();</p><p><b>

75、  else</b></p><p><b>  {</b></p><p>  AfxMessageBox("表內(nèi)數(shù)據(jù)為空");return;</p><p><b>  }</b></p><p>  // 讀入庫中各字段并加入列表框中</p>&l

76、t;p>  while(!m_pRecordset->adoEOF)</p><p><b>  {</b></p><p>  var = m_pRecordset->GetCollect("Sno");</p><p>  if(var.vt != VT_NULL)</p><p&g

77、t;  strsno = (LPCSTR)_bstr_t(var);</p><p>  var = m_pRecordset->GetCollect("Sname");</p><p>  if(var.vt != VT_NULL)</p><p>  strsname = (LPCSTR)_bstr_t(var);</p>

78、<p>  var = m_pRecordset->GetCollect("Ssex");</p><p>  if(var.vt != VT_NULL)</p><p>  strssex = (LPCSTR)_bstr_t(var);</p><p>  var = m_pRecordset->GetCollect(&

79、quot;Sdate");</p><p>  if(var.vt != VT_NULL)</p><p>  strsdate = (LPCSTR)_bstr_t(var);</p><p>  var = m_pRecordset->GetCollect("CCno");</p><p>  if(va

80、r.vt != VT_NULL)</p><p>  strclass = (LPCSTR)_bstr_t(var);</p><p>  var = m_pRecordset->GetCollect("Deptno");</p><p>  if(var.vt != VT_NULL)</p><p>  strde

81、pt = (LPCSTR)_bstr_t(var);</p><p>  m_list.AddString( strsno + " / " +strsname + " / "+strssex+ " / "+ strsdate+ " / "+ strclass+" / "+strdept);</p>&

82、lt;p>  m_pRecordset->MoveNext();</p><p><b>  }</b></p><p>  // 默認(rèn)列表指向第一項,同時移動記錄指針并顯示</p><p>  m_list.SetCurSel(0);OnSelchangeList1();</p><p><b>

83、  }</b></p><p>  catch(_com_error *e)</p><p><b>  {</b></p><p>  AfxMessageBox(e->ErrorMessage());</p><p><b>  }</b></p><p&g

84、t;<b>  }</b></p><p>  void student::OnButton2() //插入按鈕對應(yīng)的響應(yīng)函數(shù)</p><p><b>  {</b></p><p>  UpdateData();</p><p>  if(m_sname == "" || m_

85、sno == "")</p><p><b>  {</b></p><p>  AfxMessageBox("學(xué)號和姓名信息不能為空!");</p><p><b>  return;</b></p><p>  } //若學(xué)號姓名

86、為空時,跳出提示的對話框</p><p><b>  try</b></p><p><b>  {</b></p><p><b>  // 寫入各字段值</b></p><p>  m_pRecordset->AddNew();</p><p>

87、;  m_pRecordset->PutCollect("Deptno", _variant_t(m_dept));</p><p>  m_pRecordset->PutCollect("CCno", _variant_t(m_class));</p><p>  m_pRecordset->PutCollect("Sn

88、o", _variant_t(m_sno));</p><p>  m_pRecordset->PutCollect("Sname", _variant_t(m_sname));</p><p>  m_pRecordset->PutCollect("Ssex", _variant_t(m_ssex));</p>

89、<p>  m_pRecordset->PutCollect("Sdate", atol(m_sdate));</p><p>  m_pRecordset->Update();</p><p>  AfxMessageBox("插入成功!");</p><p>  // 更新顯示其庫內(nèi)容</p&g

90、t;<p>  int nCurSel = m_list.GetCurSel();</p><p>  ListData();</p><p>  m_list.SetCurSel(nCurSel);</p><p>  // 移動記錄指針到新的位置</p><p>  OnSelchangeList1();</p>

91、<p><b>  }</b></p><p>  catch(_com_error *e)</p><p><b>  {</b></p><p>  AfxMessageBox(e->ErrorMessage());</p><p><b>  }</b>

92、;</p><p><b>  }</b></p><p>  void student::OnButton3() //修改按鈕對應(yīng)的響應(yīng)函數(shù)</p><p><b>  {</b></p><p>  // TODO: Add your control notification handl

93、er code here</p><p>  UpdateData(); // 更新對話框數(shù)據(jù)</p><p>  if(m_list.GetCount() == 0)</p><p><b>  {</b></p><p>  AfxMessageBox("表中記錄數(shù)據(jù)為空!");&l

94、t;/p><p><b>  return;</b></p><p><b>  }</b></p><p>  else if(m_list.GetCurSel() < 0 || m_list.GetCurSel() > m_list.GetCount())</p><p>  m_lis

95、t.SetCurSel(0);</p><p>  // 修改當(dāng)前記錄的字段值</p><p><b>  try</b></p><p><b>  {</b></p><p>  m_pRecordset->PutCollect("Sno", _variant_t(m_

96、sno));</p><p>  m_pRecordset->PutCollect("Sname", _variant_t(m_sname));</p><p>  m_pRecordset->PutCollect("CCno", _variant_t(m_class));</p><p>  m_pRecords

97、et->PutCollect("Ssex", _variant_t(m_ssex));</p><p>  m_pRecordset->PutCollect("Deptno", _variant_t(m_dept));</p><p>  m_pRecordset->PutCollect("Sdate", _va

98、riant_t(m_sdate));</p><p>  m_pRecordset->Update();</p><p>  // 重新讀入庫記錄更新顯示</p><p>  int nCurSel = m_list.GetCurSel();</p><p>  ListData();</p><p>  m_l

99、ist.SetCurSel(nCurSel);</p><p>  // 移動記錄指針到新的位置</p><p>  OnSelchangeList1();</p><p><b>  }</b></p><p>  catch(_com_error *e)</p><p><b>  

100、{</b></p><p>  AfxMessageBox(e->ErrorMessage());</p><p><b>  }</b></p><p><b>  }</b></p><p>  void student::OnButton4() //刪除按鈕響應(yīng)的相應(yīng)函數(shù)&l

101、t;/p><p><b>  {</b></p><p>  if(m_list.GetCount() == 0)</p><p><b>  return;</b></p><p>  else if(m_list.GetCurSel() < 0 || m_list.GetCurSel() &g

102、t; m_list.GetCount())</p><p>  m_list.SetCurSel(0);</p><p><b>  try</b></p><p><b>  {</b></p><p>  // 刪除當(dāng)前行記錄</p><p>  m_pRecordset

103、->Delete(adAffectCurrent);</p><p>  m_pRecordset->Update();</p><p>  // 刪除列表中當(dāng)前值</p><p>  int nCurSel = m_list.GetCurSel();</p><p>  m_list.DeleteString(nCurSel);

104、</p><p>  if(nCurSel == 0 && (m_list.GetCount() != 0))</p><p>  m_list.SetCurSel(nCurSel);</p><p>  else if(m_list.GetCount() != 0)</p><p>  m_list.SetCurSel(nC

105、urSel-1);</p><p>  // 移動記錄指針到新的位置</p><p>  OnSelchangeList1();</p><p><b>  }</b></p><p>  catch(_com_error *e)</p><p><b>  {</b><

106、;/p><p>  AfxMessageBox(e->ErrorMessage());</p><p><b>  }</b></p><p><b>  }</b></p><p>  其他三個類中按鈕對應(yīng)的響應(yīng)函數(shù)這里就不再一一列出。</p><p><b>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論