版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 數(shù)據(jù)庫系統(tǒng)課程設計</b></p><p><b> 學生姓名: </b></p><p><b> 班 學 號: </b></p><p><b> 指導教師: </b></p><p><b>
2、; 2012年 3月</b></p><p><b> 教務管理系統(tǒng)</b></p><p><b> 需求分析</b></p><p> 教務管理是大學的主要日常管理工作之一,涉及到校、系、師、生的諸多方面,隨著教學體制的不斷改革,尤其是學分制、選課制的展開和深入,教務日常管理工作日趨繁重、復雜。如何
3、把教務工作信息化,模塊化,便捷化是現(xiàn)代高校發(fā)展的重點,所以迫切需要研制開發(fā)一種綜合教務管理軟件,教務管理系統(tǒng)是一個輔助學校教務處教務人員完成日常工作中,涉及學籍管理,選課管理和成績管理這三項比較繁重的工作。它應用計算機在數(shù)據(jù)處理和數(shù)據(jù)整理保存方面的優(yōu)異性能,幫助工作人員提高工作的效率、減少出錯情況。</p><p> 教務管理系統(tǒng)的總目標是:在計算機網(wǎng)絡,數(shù)據(jù)庫和先進的開發(fā)平臺上,利用現(xiàn)有的軟件,配置一定的硬件
4、,開發(fā)一個具有開放體系結(jié)構(gòu)的、易擴充的、易維護的、具有良好人機交互界面的教務管理系統(tǒng),實現(xiàn)機關、學校、事業(yè)等單位教務的自動化的計算機管理系統(tǒng),為各單位的提供準確、精細、迅速的教務信息。</p><p><b> 信息要求:</b></p><p> 教務管理系統(tǒng)涉及的實體有:</p><p> 教師(工作證號、姓名、職稱、電話、系代號);
5、</p><p> 學生(學號、姓名、性別、出生年月、班號、系代號);</p><p> 班級(班號、系代號);</p><p> 系(系代號、系名、系辦公室電話);</p><p> 課程(課序號、課名、學分、上課時間、名額)。</p><p> 這些實體之間的聯(lián)系如下:</p><p&
6、gt; 每個學生都屬于一個班,每個班都屬于一個系,每個教師也都屬于一個系。</p><p> 一名教師可以教多門課,一門課可以有幾位主講老師,但不同老師講的同一門課其課序號是相同的(課序號是唯一的)。</p><p> 一名同學可以選多門課,一門課可被若干同學選中。</p><p> 一名同學選中的課若已學完,應該記錄有相應成績。</p>&l
7、t;p> 本單位學生、教師都有重名,工作證號、學號可以作為標識。</p><p><b> 處理要求:</b></p><p> 教學系統(tǒng)主要提供數(shù)據(jù)維護、選課和信息查詢。數(shù)據(jù)維護功能是由專門人員對數(shù)據(jù)庫中的數(shù)據(jù)(學生信息表、教師信息表、學生成績表、教師課程表、學生課程表、學生選課表等)進行維護,且此系統(tǒng)具有網(wǎng)上選課功能,信息查詢功能包括常見的查詢:系統(tǒng)中
8、各對象的基本信息查詢。 查詢指定班、系的學生信息(名單、人數(shù)等)。查詢學生的成績、學分情況。查詢教師授課情況和學生選課情況等。</p><p> 安全性與完整性要求:</p><p><b> 安全性要求:</b></p><p> 1.系統(tǒng)應設置訪問用戶的標識以鑒別是否是合法用戶,并要求合法用戶設置其密碼,保證用戶身份不被盜用;<
9、/p><p> 2.系統(tǒng)應對不同的數(shù)據(jù)設置不同的訪問級別,限制訪問用戶可查詢和處理數(shù)據(jù)的類別和內(nèi)容;</p><p> 3.系統(tǒng)應對不同用戶設置不同的權限,區(qū)分不同的用戶,如學生,教師,系統(tǒng)管理員。</p><p><b> 完整性要求:</b></p><p> 1.各種信息記錄的完整性,關鍵信息記錄內(nèi)容不能為空;
10、</p><p> 2.各種數(shù)據(jù)間相互的聯(lián)系的正確性;</p><p> 3.相同的數(shù)據(jù)在不同記錄中的一致性。</p><p><b> 2、概念設計</b></p><p> (1)概念模型(E-R圖):</p><p> 教務管理系統(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> (3)數(shù)據(jù)流圖:</b></p><p><b> 3、邏輯結(jié)構(gòu)設計</b></p><p> 關系的描述(E-R圖向關系模式的轉(zhuǎn)換)</p><p> 系(系代號、系
13、名、系辦公室電話)</p><p> 此關系模式也可表示為dept(Depno,Dname,Dtelephone)</p><p> 此為系實體對應的關系模式,系代號(Deptno)是該關系模式的主碼,這個關系模式只有一個碼,沒有任何屬性對Deptno部分依賴或傳遞依賴,所以dept屬于3NF。同時Deptno是唯一的決定因素,不存在決定因素不包含碼的情況,所以此關系模式屬于BCNF。
14、</p><p> 班級(班級號、系別號)</p><p> 此關系模式也可表示為class(CCno,Deptno)</p><p> 次臥實體班級對應的關系模式,主碼為CCno班級號,分析可知,此關系模式,不存在其他屬性對碼的部分和傳遞依賴,且決定因素都包含碼可知,此class屬于BCNF。</p><p> 教師(工作證號、姓名
15、、職稱、電話、系代號)</p><p> 此關系模式也可表示為teacher(Tno,Tname,Tcall,Ttelephone,Deptno)</p><p> 此為教師實體對應的關系模式。該關系模式已包含了聯(lián)系“屬于”所對應的關系模式。工作證號(Tno)是關系的主碼,系代號(Deptno)是關系的外碼。這個關系模式只有一個碼,這里沒有任何屬性對Tno部分依賴或傳遞依賴,所以tea
16、cher屬于3NF。同時Tno是唯一的決定因素,所以teacher屬于BCNF。</p><p> 學生(學號、姓名、性別、出生年月、班級號、系代號)</p><p> 此關系模式也可表示為student(Sno,Sname,Ssex,Sdate,CCno,Deptno)</p><p> 此為學生實體對應的關系模式。該關系模式包含了聯(lián)系“屬于”所對應的關系模
17、式。學號(Sno)是關系的主碼,CCno和Deptno是關系的外碼,這個關系模式只有一個碼,沒有任何屬性對Sno部分依賴或傳遞依賴,所以student屬于3NF。同時Sno是唯一的決定因素,不存在決定因素不包含碼的情況,所以此關系模式屬于BCNF。</p><p> 選課(學號,課序號,成績)</p><p> 此關系模式也可表示為SC (Sno,Cno,Grade)</p>
18、;<p> 此為聯(lián)系“選修”對應的關系模式,Sno和Cno共同組成此關系模式的主碼,其他屬性不存在對碼的傳遞依賴與部分依賴,所以SC屬于3NF,同時SC中除Sno,Cno外沒有其他的決定因素,所以SC也屬于BCNF。</p><p> 授課(課序號、教師工作證號、上課時間、名額)</p><p> 此關系模式還可表示為teach(Cno,Tno,Tdate,Tnumbe
19、r)</p><p> 此為聯(lián)系“授課”所對應的關系模式,Tno和Cno共同組成此關系模式的主碼,其他屬性不存在對碼的傳遞依賴與部分依賴,所以teach屬于3NF,同時teach中除Tno,Cno外沒有其他的決定因素,所以teach也屬于BCNF。</p><p> 課程(課序號、課名、學分)</p><p> 此關系模式還可表示為course(Cno,Cna
20、me,Cmark)</p><p> 此為實體課程對應的關系模式,Cno為此關系模式的主碼,其他屬性不存在對碼的部分依賴,但存在傳遞依賴,所以course屬于2NF。</p><p><b> 系統(tǒng)結(jié)構(gòu)圖</b></p><p><b> 4、物理設計</b></p><p><b>
21、; 存儲安排</b></p><p> 為了提高系統(tǒng)性能,根據(jù)具體情況將數(shù)據(jù)的易變部分與穩(wěn)定部分、經(jīng)常存取部分和存取頻率較低部分分開存放。DBMS產(chǎn)品一般都提供了一些系統(tǒng)配置變量、存儲分配參數(shù),根據(jù)應用環(huán)境確定這些參數(shù)值,并且在系統(tǒng)運行時還要根據(jù)系統(tǒng)實際運行情況進行調(diào)整,以使系統(tǒng)性能最佳。</p><p><b> 方法選擇</b></p>
22、;<p> 存取方法是快速存取數(shù)據(jù)庫中的技術,數(shù)據(jù)庫管理系統(tǒng)一般都提供多種存取方法。常用的存取方法有三類。第一類是索引方法,第二類是聚簇方法,第三類是HASH方法。</p><p> 索引存取方法的選擇:B+樹索引方法是數(shù)據(jù)庫中經(jīng)典的存取方法,使用最普遍,根據(jù)索引存取方法選擇的原則,如果一個屬性經(jīng)常在查詢條件中出現(xiàn),則考慮在這個屬性上建立索引,因?qū)W生信息管理,教師信息管理中查詢學生信息時,學生學
23、號,教師工作證號在查詢條件中經(jīng)常出現(xiàn),所以,在student表中按學號升序建唯一索引:CREATE UNIQUE INDEX stusno ON student(Sno),在teacher表中按工作證號升序建唯一索引:CREATE UNIQUE INDEX teasno ON student(Tno)。</p><p> 聚簇存取方法的選擇:根據(jù)設計候選聚簇的原則,對經(jīng)常在一起進行連接操作的關系可以建立聚簇;如
24、果一個關系的一組屬性經(jīng)常相等比較條件中,則該單個關系可建立聚簇,所以當通過聚簇碼進行訪問或連接是該關系的主要應用,與聚簇碼無關的其他訪問很少或是次要的,這時可以使用聚簇。</p><p><b> 存儲路徑的建立</b></p><p> 根據(jù)所選用的DBMS,如SQL Server 2005,從定量估算各種方案的存儲空間、存取時間和維護代價入手,對估算結(jié)果進行權
25、衡、比較,選擇一個較優(yōu)的合理的物理結(jié)構(gòu)。</p><p><b> 5、系統(tǒng)實施</b></p><p> 編寫關系模式,裝入數(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)成,必須作為表級完整性進行定義*/</p><p> FOREIGN KEY (Sno) REFERENCES student(Sno) /*表級完整性約束條件,Sno是外碼*/</p><p> ON DELETE CASCADE /* 當刪除student表中的元組時,級連刪除SC表中相應的元組*/</p><p> O
36、N UPDATE CASCADE, /*當更新student表中的Sno時,級連更新SC表中相應的元組*/</p><p> FOREIGN KEY (Cno) REFERENCES course(Cno) /*表級完整性約束條件,Sno是外碼*/</p><p> ON DELETE NO ACTION /* 當刪除course表中的元組造成了與SC表不一致時,拒絕刪除*/
37、</p><p> ON UPDATE CASCADE, /*當更新course表中的Cno時,級連更新SC表中相應的元組*/</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)成,必須作為表級完整性進行定義*/</p><p><b> );</b>&
39、lt;/p><p><b> 建立視圖:</b></p><p> /*查詢某個系(以地信為例)的學生信息*/</p><p> CREATE VIEW CS_Stu /*建立某個系(以地信為例)的學生信息視圖*/</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> /*查詢學號為2的學生的課程代號,課程名及成績*/</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> /*查詢學號為2的學生所修課程的總學分*/</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、運行維護</b></p><p> 數(shù)據(jù)庫的轉(zhuǎn)儲和恢復是系統(tǒng)正式運行后最重要的維護工作之一,DBA要針對不同的應用要求制定不同的轉(zhuǎn)儲計劃,以保證一旦發(fā)生故障能盡快將數(shù)據(jù)庫恢復到某種一致的狀態(tài),并盡可能減少對數(shù)據(jù)庫的破壞。 </p><p> 為實現(xiàn)數(shù)據(jù)庫的恢復技術,我們可以定期地將整個數(shù)
46、據(jù)庫復制到磁帶或另一個磁盤上保存起來的過程,由于此數(shù)據(jù)庫系統(tǒng)不經(jīng)常使用,也沒投入正常運營階段,所以,轉(zhuǎn)儲技術選擇簡單的靜態(tài)海量轉(zhuǎn)儲。</p><p> 當系統(tǒng)運行過程中發(fā)生故障,利用數(shù)據(jù)庫后備副本和日志文件就可以將數(shù)據(jù)庫恢復到故障前的摸一個一致性狀態(tài)。事務故障、系統(tǒng)故障的恢復是由系統(tǒng)自動完成的,介質(zhì)故障的恢復方法是重載數(shù)據(jù)庫,然后重做已完成的任務,對于DBA來說,只需要重裝最近轉(zhuǎn)儲的數(shù)據(jù)庫副本和有關的各日志文件
47、副本。,然后執(zhí)行系統(tǒng)提供的恢復命令即可,具體的恢復操作仍由DBMS完成。</p><p><b> 7、用戶手冊</b></p><p> 運行程序,跳出登錄對話框:</p><p> 點擊確定后,彈出教務管理系統(tǒng)對話框界面:</p><p> 有四個選項可以選擇,點擊學生信息管理,學生信息管理對話框跳出:<
48、;/p><p> 有查詢、插入、修改、刪除四個選項,點擊查詢:</p><p> 輸入學生信息,點擊插入:</p><p> 將學生某些信息修改后,點擊修改,可知在listbox中,信息已被修改:</p><p> 點擊刪除,可將此學生信息刪除:</p><p> 若點擊教師信息管理,教師信息管理對話框彈出:&l
49、t;/p><p> 查詢,插入,修改,刪除操作方法同學生信息管理,所以在此不再贅述。</p><p> 若點擊學生選課,彈出學生選課對話框:</p><p> 在這里所有課程的代號都已經(jīng)給出來了,學生選課只需要輸入自己的學號和所選課程代號即可,輸入后,點擊確定選課,則課被選上,點擊查詢已選課程,可再下面的listbox中看到所有學生的選課信息,點擊退選,學生選課的
50、記錄將被刪除,課程也就被退選:</p><p> 若點擊教師登分,彈出對話框:</p><p> 輸入學生學號、課程號和成績后,點擊插入成績,可插入成績,點擊查看成績,在對話框的listbox中可出現(xiàn)所有學生所選課程的所有成績,修改某學生成績時,只需將學生成績修改后,再點擊修改成績即可。</p><p><b> 8、附錄</b><
51、/p><p> 在這個程序中,VC訪問SQL Server數(shù)據(jù)庫采用ADO方式,不需創(chuàng)建數(shù)據(jù)源,應用程序可通過ADO直接與數(shù)據(jù)庫連接;用ADO方式創(chuà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)庫,應用程序在調(diào)用A
54、DO前,須初始化OLE/COM庫環(huán)境。在應用程序主類的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后是服務器的計算機名dell-pc,Database后是數(shù)據(jù)庫名test</p><p>
57、 //這里使用的windows驗證,沒有設置用戶名和密碼,</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、/ 在此引用應用類中的theApp來獲取庫連接指針</p><p> 在各個對話框所對應的類的構(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> 然后為每一個對話框中的按鈕添加對應的相
63、應函數(shù):</p><p> 以學生信息管理對話框所對應的類student為例,需要為查詢,插入,修改,刪除添加相應函數(shù),為每一個編輯框添加類student的成員變量m_class,m_dept,m_sno,m_sname等等。</p><p> 在這個程序中,共自定義了四個類,student,teacher,sc,choose,分別對應四個對話框?qū)W生信息管理,教師信息管理,學生選課,教
64、師登分。如下圖:</p><p> void student::OnButton1() //查詢函數(shù)的響應函數(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> //先關閉已經(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> // 默認列表指向第一項,同時移動記錄指針并顯示</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() //插入按鈕對應的響應函數(shù)</p><p><b> {</b></p><p> UpdateData();</p><p> if(m_sname == "" || m_
85、sno == "")</p><p><b> {</b></p><p> AfxMessageBox("學號和姓名信息不能為空!");</p><p><b> return;</b></p><p> } //若學號姓名
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() //修改按鈕對應的響應函數(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> // 修改當前記錄的字段值</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() //刪除按鈕響應的相應函數(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> // 刪除當前行記錄</p><p> m_pRecordset
103、->Delete(adAffectCurrent);</p><p> m_pRecordset->Update();</p><p> // 刪除列表中當前值</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> 其他三個類中按鈕對應的響應函數(shù)這里就不再一一列出。</p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)庫課程設計---教務管理系統(tǒng)
- 數(shù)據(jù)庫課程設計---教務管理系統(tǒng)
- 數(shù)據(jù)庫教務管理系統(tǒng)課程設計
- 數(shù)據(jù)庫課程設計--學校教務管理系統(tǒng)
- 數(shù)據(jù)庫課程設計報告——教務管理系統(tǒng)
- 數(shù)據(jù)庫技術課程設計--教務管理數(shù)據(jù)庫系統(tǒng)
- 數(shù)據(jù)庫課程設計-教務信息管理系統(tǒng)
- 大型數(shù)據(jù)庫課程設計報告--教務管理系統(tǒng)后臺數(shù)據(jù)庫
- 數(shù)據(jù)庫課程設計--數(shù)據(jù)庫設計—公司管理系統(tǒng)
- 數(shù)據(jù)庫課程設計---機房管理系統(tǒng)數(shù)據(jù)庫設計
- 數(shù)據(jù)庫課程設計---圖書管理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)
- 數(shù)據(jù)庫課程設計--工資管理系統(tǒng)數(shù)據(jù)庫設計
- 數(shù)據(jù)庫課程設計-酒店管理系統(tǒng)課程設計
- 數(shù)據(jù)庫原理課程設計---教室管理系統(tǒng)數(shù)據(jù)庫設計
- 數(shù)據(jù)庫課程設計--bbs系統(tǒng)數(shù)據(jù)庫設計
- 數(shù)據(jù)庫課程設計論文---汽車銷售管理系統(tǒng)數(shù)據(jù)庫設計
- 數(shù)據(jù)庫課程設計--超市會員管理系統(tǒng)的數(shù)據(jù)庫設計
- 數(shù)據(jù)庫原理課程設計---圖書管理系統(tǒng)數(shù)據(jù)庫設計
- 數(shù)據(jù)庫課程設計-學生管理系統(tǒng)
- 數(shù)據(jù)庫課程設計-薪資管理系統(tǒng)
評論
0/150
提交評論