設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)校圖書(shū)館數(shù)據(jù)庫(kù)系統(tǒng)_第1頁(yè)
設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)校圖書(shū)館數(shù)據(jù)庫(kù)系統(tǒng)_第2頁(yè)
設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)校圖書(shū)館數(shù)據(jù)庫(kù)系統(tǒng)_第3頁(yè)
設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)校圖書(shū)館數(shù)據(jù)庫(kù)系統(tǒng)_第4頁(yè)
設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)校圖書(shū)館數(shù)據(jù)庫(kù)系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)題目:設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)校圖書(shū)館數(shù)據(jù)庫(kù)系統(tǒng)實(shí)驗(yàn)報(bào)告:一、需求分析1、 E-R圖2、 建立基本表1)圖書(shū)(書(shū)號(hào),書(shū)名,作者,出版社,定價(jià),類(lèi)別,借閱次數(shù),總借閱時(shí)間,總冊(cè)數(shù),剩余冊(cè)書(shū))2)學(xué)生讀者(學(xué)號(hào),姓名,所在系,性別,可借書(shū)量,是否有書(shū)逾期)3)學(xué)生借閱(書(shū)號(hào),學(xué)號(hào),姓名,書(shū)名,借書(shū)日期,應(yīng)還日期,實(shí)還日期)4)教師讀者(教師號(hào),姓名,單位,性別,可借書(shū)量,是否有書(shū)逾期)5)教師借閱(書(shū)號(hào),教師號(hào),姓名,書(shū)名,借書(shū)日期,應(yīng)還日期,實(shí)還日期,是否續(xù)借)2、關(guān)系圖二、查詢(xún)功能的實(shí)現(xiàn)1、判斷某位讀者是否有逾期的圖書(shū)(以學(xué)生讀者為例)CREATE PROCEDUR

2、E 判斷某位學(xué)生讀者是否有逾期的圖書(shū) (學(xué)號(hào)_1 char(5)ASIF(SELECT COUNT (書(shū)號(hào))FROM 學(xué)生借閱WHERE (DATEDIFF(day,(SELECT 應(yīng)還日期 FROM 學(xué)生借閱 WHERE 學(xué)號(hào)=學(xué)號(hào)_1),getdate()>0) AND (學(xué)號(hào)=學(xué)號(hào)_1)=0) /*計(jì)算是否逾期*/BEGINprint'該讀者無(wú)逾期的書(shū)'UPDATE 學(xué)生讀者 SET是否有書(shū)逾期=1WHERE 學(xué)號(hào)=學(xué)號(hào)_1ENDELSE print'該讀者有逾期的書(shū)'GO功能:該存儲(chǔ)過(guò)程通過(guò)對(duì)輸入的讀者號(hào)所對(duì)應(yīng)的預(yù)期借閱信息進(jìn)行統(tǒng)計(jì),若結(jié)果集非空則

3、通知逾期,同時(shí)將是否有書(shū)逾期置為1,否則通知逾期。(教師讀者查詢(xún)同理,此處不再贅述)2、圖書(shū)按借閱量排序CREATE PROCEDURE 圖書(shū)按借閱量排序 ASSELECT 圖書(shū).書(shū)號(hào),圖書(shū).書(shū)名,(圖書(shū).總冊(cè)數(shù)-圖書(shū).剩余冊(cè)數(shù)) as 借出量FROM 圖書(shū)ORDER BY 圖書(shū).借出量 ASC /*按借出量升序排序*/GO功能:該存儲(chǔ)過(guò)程通過(guò)圖書(shū)屬性中總冊(cè)數(shù)與剩余冊(cè)數(shù)作差作為借出量,并在結(jié)果集中按升序排列。3、查詢(xún)已全部借出的書(shū)CREATE PROCEDURE 查詢(xún)已全部借出的書(shū) ASSELECT 圖書(shū).書(shū)號(hào),圖書(shū).書(shū)名FROM 圖書(shū)WHERE 圖書(shū).剩余冊(cè)數(shù)=0GO功能:該存儲(chǔ)過(guò)程通過(guò)對(duì)剩

4、余冊(cè)書(shū)是否為零的判斷實(shí)現(xiàn)對(duì)是否全部借出的判斷。4、查詢(xún)未借出的書(shū)CREATE PROCEDURE 查詢(xún)未借出的書(shū) ASSELECT 圖書(shū).書(shū)號(hào),圖書(shū).書(shū)名,圖書(shū).剩余冊(cè)數(shù)FROM 圖書(shū)WHERE 圖書(shū).總冊(cè)數(shù)=圖書(shū).剩余冊(cè)數(shù)GO功能:該存儲(chǔ)過(guò)程通過(guò)對(duì)總冊(cè)數(shù)與剩余冊(cè)數(shù)的比較實(shí)現(xiàn)對(duì)未借出的圖書(shū)的判斷。5圖書(shū)按類(lèi)統(tǒng)計(jì)CREATE PROCEDURE 圖書(shū)按類(lèi)統(tǒng)計(jì) ASSELECT 類(lèi)別,sum(剩余冊(cè)數(shù)) as 館藏冊(cè)數(shù),(sum(總冊(cè)數(shù))-sum(剩余冊(cè)數(shù)) as 借出冊(cè)數(shù),(sum(總借閱時(shí)間) as 總借閱時(shí)間FROM 圖書(shū)GROUP BY 類(lèi)別GO功能:該存儲(chǔ)過(guò)程通過(guò)分組統(tǒng)計(jì)函數(shù)實(shí)現(xiàn)對(duì)基本屬

5、性的運(yùn)算,并在結(jié)果集中以新屬性名列出。三、存儲(chǔ)過(guò)程和觸發(fā)器1、 存儲(chǔ)過(guò)程1)新增圖書(shū)信息CREATE PROCEDURE 新增圖書(shū)信息(書(shū)號(hào)_1 char(10), 書(shū)名_2 varchar(50), 作者_(dá)3 varchar(50), 出版社_4 varchar(50), 定價(jià)_5 float, 類(lèi)別_6 varchar(50), 借閱次數(shù)_7 int, 總借閱時(shí)間_8 int, 總冊(cè)數(shù)_9 int, 剩余冊(cè)數(shù)_10 int)AS INSERT INTO PB 宮永超.dbo.圖書(shū) ( 書(shū)號(hào), 書(shū)名, 作者, 出版社, 定價(jià), 類(lèi)別, 借閱次數(shù), 總借閱時(shí)間, 總冊(cè)數(shù), 剩余冊(cè)數(shù)) VALU

6、ES ( 書(shū)號(hào)_1, 書(shū)名_2, 作者_(dá)3, 出版社_4, 定價(jià)_5, 類(lèi)別_6, 借閱次數(shù)_7, 總借閱時(shí)間_8, 總冊(cè)數(shù)_9, 剩余冊(cè)數(shù)_10)GO說(shuō)明:該存儲(chǔ)過(guò)程實(shí)現(xiàn)新圖書(shū)信息向圖書(shū)表中的添加,每次只能添加一個(gè)元組。2)新增學(xué)生讀者信息CREATE PROCEDURE 新增學(xué)生讀者信息(學(xué)號(hào)_1 char(10), 姓名_2 varchar(10), 所在系_3 char(3), 性別_4 char(2), 可借書(shū)量_5 int, 是否有書(shū)逾期_6 bit)AS INSERT INTO 學(xué)生讀者 ( 學(xué)號(hào), 姓名, 所在系, 性別, 可借書(shū)量, 是否有書(shū)逾期) VALUES ( 學(xué)號(hào)_1

7、, 姓名_2, 所在系_3, 性別_4, 可借書(shū)量_5, 是否有書(shū)逾期_6)GO說(shuō)明:該存儲(chǔ)過(guò)程實(shí)現(xiàn)新學(xué)生讀者信息向?qū)W生讀者表中的添加,每次只能添加一個(gè)元組。3)新增教師讀者信息CREATE PROCEDURE 新增教師讀者信息(教師號(hào)_1 char(10), 姓名_2 varchar(50), 單位_3 varchar(50), 性別_4 char(2), 可借書(shū)量_5 int, 是否有書(shū)逾期_6 bit)AS INSERT INTO PB 宮永超.dbo.教師讀者 ( 教師號(hào), 姓名, 單位, 性別, 可借書(shū)量, 是否有書(shū)逾期) VALUES ( 教師號(hào)_1, 姓名_2, 單位_3, 性別

8、_4, 可借書(shū)量_5, 是否有書(shū)逾期_6)GO說(shuō)明:該存儲(chǔ)過(guò)程實(shí)現(xiàn)新教師讀者信息向教師讀者表中的添加,每次只能添加一個(gè)元組。4)插入學(xué)生借閱信息CREATE PROCEDURE 插入學(xué)生借閱信息(書(shū)號(hào)_1 char(10), 學(xué)號(hào)_2 char(5), 姓名_3 varchar(10), 書(shū)名_4 varchar(10), 借書(shū)日期_5 datetime)AS INSERT INTO 學(xué)生借閱 ( 書(shū)號(hào), 學(xué)號(hào), 姓名, 書(shū)名, 借書(shū)日期) VALUES ( 書(shū)號(hào)_1, 學(xué)號(hào)_2, 姓名_3, 書(shū)名_4, 借書(shū)日期_5)GO說(shuō)明:該存儲(chǔ)過(guò)程將輸入信息在教師借閱表中產(chǎn)生一個(gè)新的元組,即插入新的借

9、閱信息,從而實(shí)現(xiàn)借書(shū)功能。5)插入教師借閱信息CREATE PROCEDURE 插入教師借閱信息(書(shū)號(hào)_1 char(10), 教師號(hào)_2 char(4), 姓名_3 varchar(10), 書(shū)名_4 varchar(10), 借書(shū)日期_5 datetime)AS INSERT INTO PB 宮永超.dbo.教師借閱 ( 書(shū)號(hào), 教師號(hào), 姓名, 書(shū)名, 借書(shū)日期) VALUES ( 書(shū)號(hào)_1, 教師號(hào)_2, 姓名_3, 書(shū)名_4, 借書(shū)日期_5)GO說(shuō)明:該存儲(chǔ)過(guò)程將輸入信息在教師借閱表中產(chǎn)生一個(gè)新的元組,即插入新的借閱信息,從而實(shí)現(xiàn)借書(shū)功能。6) 教師借閱數(shù)據(jù)更新CREATE PROC

10、EDURE 教師借閱數(shù)據(jù)更新(書(shū)號(hào)_1 char, 教師號(hào)_2 char, 是否續(xù)借_6 int)AS UPDATE 教師借閱SET 是否續(xù)借 = 是否續(xù)借_6 /*“是否續(xù)借”置為“1”*/WHERE ( 書(shū)號(hào) = 書(shū)號(hào)_1 AND 教師號(hào) = 教師號(hào)_2)IF( 是否續(xù)借_6=1) UPDATE 教師借閱 SET應(yīng)還日期=DATEADD(day,30,教師借閱.應(yīng)還日期) /*將應(yīng)還日期推遲一個(gè)月*/FROM 教師借閱GO說(shuō)明:該存儲(chǔ)過(guò)程通過(guò)輸入的教師號(hào)和書(shū)號(hào)找到對(duì)應(yīng)的借閱信息后對(duì)其進(jìn)行更新,將標(biāo)記信息“是否續(xù)借”置為“1”,并將應(yīng)還日期推遲一個(gè)月,從而實(shí)現(xiàn)續(xù)借功能。7)學(xué)生還書(shū)CREAT

11、E PROCEDURE 學(xué)生還書(shū) 學(xué)號(hào)_1 char(5), 書(shū)號(hào)_1 char(5), 實(shí)還日期_1 datetime, 是否丟失 int ASDECLARE 罰金 floatDECLARE 借期_1 intDECLARE 超期_2 intBEGINSET 借期_1=DATEDIFF(day, /*計(jì)算借期并用變量借期_1表示*/(SELECT 借書(shū)日期 FROM 學(xué)生借閱 WHERE 學(xué)號(hào)=學(xué)號(hào)_1 AND 書(shū)號(hào)=書(shū)號(hào)_1),實(shí)還日期_1)SET 超期_2=DATEDIFF(day, /*計(jì)算超期并用變量超期_2表示*/(SELECT 應(yīng)還日期 FROM 學(xué)生借閱 WHERE 學(xué)號(hào)=學(xué)號(hào)_

12、1 AND 書(shū)號(hào)=書(shū)號(hào)_1),實(shí)還日期_1)IF (超期_2>0) /*計(jì)算超期罰金并打印結(jié)果*/SET 罰金=超期_2*0.05PRINT '超期罰款'+CAST(罰金 AS char(5)IF (是否丟失=1) /*計(jì)算丟書(shū)罰金并打印結(jié)果*/SET 罰金= 2*(SELECT 定價(jià) FROM 圖書(shū) WHERE 書(shū)號(hào)_1=書(shū)號(hào) )PRINT '丟書(shū)罰款'+CAST(罰金 AS char(5)UPDATE 圖書(shū) SET /*對(duì)對(duì)應(yīng)圖書(shū)信息進(jìn)行更新*/剩余冊(cè)數(shù)=剩余冊(cè)數(shù)+1, 總借閱時(shí)間=總借閱時(shí)間+借期_1WHERE 書(shū)號(hào)=書(shū)號(hào)_1UPDATE 學(xué)生借閱

13、SET /*對(duì)對(duì)應(yīng)學(xué)生借閱信息進(jìn)行更新*/實(shí)還日期=實(shí)還日期_1WHERE 學(xué)號(hào)=學(xué)號(hào)_1UPDATE 學(xué)生讀者 SET /*對(duì)對(duì)應(yīng)學(xué)生讀者信息進(jìn)行更新*/可借書(shū)量=可借書(shū)量+1WHERE 學(xué)號(hào)=學(xué)號(hào)_1DELETE /*刪除該借閱信息,實(shí)現(xiàn)還書(shū)功能*/FROM 學(xué)生借閱 WHERE 學(xué)號(hào)=學(xué)號(hào)_1 AND 書(shū)號(hào)=書(shū)號(hào)_1ENDGO說(shuō)明:該存儲(chǔ)過(guò)程主要根據(jù)輸入信息實(shí)現(xiàn)還書(shū)、計(jì)算并打印罰款(包括超期和丟書(shū))的功能,同時(shí)對(duì)其他表中相關(guān)信息作出更新,最后刪除該借閱信息。在實(shí)驗(yàn)過(guò)程中本想用觸發(fā)器實(shí)現(xiàn),但遇到了一系列問(wèn)題,最后選擇用存儲(chǔ)過(guò)程實(shí)現(xiàn),并成功地實(shí)現(xiàn)了以上各功能。8)教師還書(shū)(注釋、說(shuō)明與上一存

14、儲(chǔ)過(guò)程類(lèi)似,不再贅述)CREATE PROCEDURE dbo.教師還書(shū) 教師號(hào)_1 char(5), 書(shū)號(hào)_1 char(5), 實(shí)還日期_1 datetime, 是否丟失 int ASDECLARE 罰金 floatDECLARE 借期_1 intDECLARE 超期_2 intBEGINSET 借期_1=DATEDIFF(day,(SELECT 借書(shū)日期 FROM 教師借閱 WHERE 教師號(hào)=教師號(hào)_1 AND 書(shū)號(hào)=書(shū)號(hào)_1),實(shí)還日期_1)SET 超期_2=DATEDIFF(day,(SELECT 應(yīng)還日期 FROM 教師借閱 WHERE 教師號(hào)=教師號(hào)_1 AND 書(shū)號(hào)=書(shū)號(hào)_1

15、),實(shí)還日期_1)IF (超期_2>0)SET 罰金=超期_2*0.05PRINT '超期罰款'+CAST(罰金 AS char(5)IF (是否丟失=1)SET 罰金= 2*(SELECT 定價(jià) FROM 圖書(shū) WHERE 書(shū)號(hào)_1=書(shū)號(hào) )PRINT '丟書(shū)罰款'+CAST(罰金 AS char(5)UPDATE 圖書(shū) SET 剩余冊(cè)數(shù)=剩余冊(cè)數(shù)+1,圖書(shū).總借閱時(shí)間=圖書(shū).總借閱時(shí)間+借期_1WHERE 圖書(shū).書(shū)號(hào)=書(shū)號(hào)_1UPDATE 教師借閱 SET實(shí)還日期=實(shí)還日期_1WHERE 教師號(hào)=教師號(hào)_1UPDATE 教師讀者 SET可借書(shū)量=可借書(shū)

16、量+1WHERE 教師號(hào)=教師號(hào)_1DELETE FROM 教師借閱 WHERE 教師號(hào)=教師號(hào)_1 AND 書(shū)號(hào)=書(shū)號(hào)_1ENDGO2、 觸發(fā)器1)Tri_學(xué)生借閱CREATE TRIGGER Tri_學(xué)生借閱 ON 學(xué)生借閱 FOR INSERT ASIF /*借書(shū)要求,有逾期、借書(shū)量滿(mǎn)或借同一本書(shū)不可借,回滾INSERT操作*/(SELECT 學(xué)生讀者.是否有書(shū)逾期 FROM 學(xué)生讀者,Inserted WHERE 學(xué)生讀者.學(xué)號(hào)=Inserted.學(xué)號(hào))=1) /*有逾期*/OR(SELECT 學(xué)生讀者.可借書(shū)量 FROM 學(xué)生讀者,Inserted WHERE 學(xué)生讀者.學(xué)號(hào)=Ins

17、erted.學(xué)號(hào))=0) /*借書(shū)量滿(mǎn)*/OR(SELECT 學(xué)生借閱.書(shū)號(hào)FROM 學(xué)生借閱,Inserted WHERE 學(xué)生借閱.書(shū)號(hào)=Inserted.書(shū)號(hào) AND 學(xué)生借閱. 學(xué)號(hào)=Inserted.學(xué)號(hào))!=NULL) /*借同一本書(shū)*/ROLLBACK TRANSACTIONBEGIN /*符合借書(shū)要求,執(zhí)行以下操作,對(duì)相關(guān)表的相關(guān)屬性值進(jìn)行更新*/UPDATE 圖書(shū) SET圖書(shū).借閱次數(shù)=圖書(shū).借閱次數(shù)+1,圖書(shū).剩余冊(cè)數(shù)=圖書(shū).剩余冊(cè)數(shù)-1FROM 圖書(shū),InsertedWHERE 圖書(shū).書(shū)號(hào)=Inserted.書(shū)號(hào)UPDATE 學(xué)生讀者 SET學(xué)生讀者.可借書(shū)量=學(xué)生讀者.

18、可借書(shū)量-1FROM 學(xué)生讀者,InsertedWHERE 學(xué)生讀者.學(xué)號(hào)=Inserted.學(xué)號(hào)UPDATE 學(xué)生借閱 SET學(xué)生借閱.應(yīng)還日期=DATEADD(day,60,學(xué)生借閱.借書(shū)日期)FROM 學(xué)生借閱,InsertedWHERE 學(xué)生借閱.書(shū)號(hào)=Inserted.書(shū)號(hào)END說(shuō)明:該觸發(fā)器建立在INSERT操作之上,即在插入新的借閱信息時(shí)觸發(fā)器動(dòng)作,先對(duì)讀者的借閱條件進(jìn)行檢查,若不符合要求回滾INSERT操作,即借閱失敗,否則即實(shí)現(xiàn)插入新的借閱信息,借閱成功。之后,觸發(fā)器對(duì)相關(guān)聯(lián)的表中的某些屬性值進(jìn)行更新,比如圖書(shū)的“剩余冊(cè)數(shù)”、讀者的“可借書(shū)量”等等實(shí)現(xiàn)自動(dòng)修改,使其符合實(shí)際要

19、求。2)Tri_教師借閱(注釋、說(shuō)明與上一觸發(fā)器類(lèi)似,不再贅述)CREATE TRIGGER Tri_教師借閱 ON 教師借閱 FOR INSERT ASIF(SELECT 教師讀者.是否有書(shū)逾期 FROM 教師讀者,Inserted WHERE 教師讀者.教師號(hào)=Inserted.教師號(hào))=1)OR(SELECT 教師讀者.可借書(shū)量 FROM 教師讀者,Inserted WHERE 教師讀者.教師號(hào)=Inserted.教師號(hào))=0)OR(SELECT 教師借閱.書(shū)號(hào) FROM 教師借閱,Inserted WHERE 教師借閱.書(shū)號(hào)=Inserted.書(shū)號(hào) AND 教師借閱. 教師號(hào)=Inse

20、rted.教師號(hào))!=NULL)ROLLBACK TRANSACTIONBEGINUPDATE 圖書(shū) SET圖書(shū).借閱次數(shù)=圖書(shū).借閱次數(shù)+1,圖書(shū).剩余冊(cè)數(shù)=圖書(shū).剩余冊(cè)數(shù)-1FROM 圖書(shū),InsertedWHERE 圖書(shū).書(shū)號(hào)=Inserted.書(shū)號(hào)UPDATE 教師讀者 SET教師讀者.可借書(shū)量=教師讀者.可借書(shū)量-1FROM 教師讀者,InsertedWHERE 教師讀者.教師號(hào)=Inserted.教師號(hào)UPDATE 教師借閱 SET教師借閱.應(yīng)還日期=DATEADD(day,90,教師借閱.借書(shū)日期)FROM 教師借閱,InsertedWHERE 教師借閱.書(shū)號(hào)=Inserted.書(shū)號(hào)END四、實(shí)驗(yàn)分析與總結(jié)管理規(guī)則的實(shí)現(xiàn)1) 只有本校師生才能借書(shū)利用學(xué)號(hào)、教師號(hào)定義時(shí)的CHECK約束(學(xué)號(hào)LIKE“PB0-90-90-9”,教師號(hào)LI

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論