- 項(xiàng)目環(huán)境
- Windows2000或以上版本;
- SQLServer 2005或以上版本。
- 項(xiàng)目目的
掌握數(shù)據(jù)庫(kù)設(shè)計(jì)的基本方法,了解C/S與B/S結(jié)構(gòu)應(yīng)用系統(tǒng)的特點(diǎn)與適用場(chǎng)合,了解C/S與B/S結(jié)構(gòu)應(yīng)用系統(tǒng)的不同開(kāi)發(fā)設(shè)計(jì)環(huán)境與開(kāi)發(fā)設(shè)計(jì)方法,綜合運(yùn)用前面實(shí)驗(yàn)掌握的數(shù)據(jù)庫(kù)知識(shí)與技術(shù)設(shè)計(jì)某小型數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。 完成實(shí)驗(yàn)指導(dǎo)書中p255 (2)。 - 項(xiàng)目設(shè)計(jì)開(kāi)發(fā)過(guò)程及參考源代碼
實(shí)現(xiàn)需要我們能夠?qū)D書數(shù)據(jù)進(jìn)行管理,開(kāi)發(fā)圖書管理系統(tǒng),簡(jiǎn)化管理以及借閱圖書信息的步驟。 功能分析: - 登錄功能(包括管理員登錄,讀者登錄)
- 注冊(cè)功能(自主注冊(cè))
- 讀者功能模塊
- 管理員功能模塊
- 管理員對(duì)圖書信息的管理(包括增刪改,查詢,瀏覽圖書信息)
- 管理員對(duì)讀者信息的管理(包括瀏覽,修改讀者信息,以及添加讀者信息)
- 讀者功能(包括瀏覽圖書信息,以及借閱圖書,查詢圖書信息)
- 管理員對(duì)借閱記錄的管理(保存借閱記錄,查看借閱記錄)
- 管理員對(duì)還書記錄的管理(保存還書記錄,歸還圖書,超期判斷)
- 數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)
下畫線為主碼 GUL_LOGIN ( SNAME, PASSWORD ) 管理員登錄表。
BORROW (BNO ,RNO, BNAME,BRNUM, BOTIME) 借閱表,包括圖書號(hào),讀者編號(hào),圖書名稱,借閱時(shí)間。
BOOK_LIST (BNO, BNAEM, PRICE, AUTHOR. INTIME, BNUM ,BWHERE, ISBORROW)圖書表,包括圖書編號(hào)、圖書名稱,價(jià)格,入庫(kù)時(shí)間,藏書位置,是否被借閱。
BACK_LIST (BNO , RNO , BNAME, BACKTIME, PRISE)還書表,包括圖書號(hào),讀者編號(hào),圖書名稱,還書時(shí)間,超期金額。 REDER_LIST (RNO, RNAME, RSEX, RGRADE, DEPNAME, CLASS,PASSWODE,BNUM,BMAX) 讀者信息表,包括讀者編號(hào),讀者姓名,性別,年級(jí),所在系別,班級(jí),密碼, 借閱數(shù)量,最大借閱數(shù)量。
- 存儲(chǔ)過(guò)程和觸發(fā)器的設(shè)計(jì)
當(dāng)歸還圖書或是借閱圖書時(shí),圖書信息表中要更改相應(yīng)的借出或未借出記錄。 借書時(shí)同步更改圖書表,更改屬性ISBORROW。
this.sql=
"CREATE TRIGGER DB_BOOKBOOK_INSERT2 ON BORROW_LIST\n" +
"AFTER INSERT AS\n" +
"DECLARE @bno varchar(30);\n" +
"SELECT @bno =bno \n" +
"FROM inserted \n" +
"\n" +
"BEGIN\n" +
"UPDATE BOOK_LIST \n" +
"SET ISBORROW ='已借出'\n" +
"WHERE BNO=@bno\n" +
"END";
rs = stat.executeQuery(this.sql);
還書時(shí)同步更改圖書表,更改屬性ISBORROW。
this.sql=
"CREATE TRIGGER DB_BACK_LIST_INSERT1 ON BACK_LIST\n" +
"AFTER INSERT AS\n" +
"DECLARE @bno varchar(30);\n" +
"SELECT @bno =bno \n" +
"FROM inserted \n" +
"\n" +
"BEGIN\n" +
"UPDATE BOOK_LIST \n" +
"SET ISBORROW ='未借出'\n" +
"WHERE BNO=@bno\n" +
"END";
rs = stat.executeQuery(this.sql);
設(shè)置借閱數(shù)量不能大于限制總數(shù)
String sql=
" CREATE TRIGGER BorUPDETE\n" +
" ON REDER_LIST\n" +
" AFTER UPDATE\n" +
" AS\n" +
" DECLARE @ABN INT\n" +
" DECLARE @MBN INT\n" +
" SELECT @ANUM = BNUM,@MNUMN=BMAX FROM INSERTED\n" +
" IF(@ANUM>@MNUMN)\n" +
" BEGIN\n" +
" RAISERROR('已達(dá)到最大可借書數(shù)量',17,1)\n" +
" rollback transaction\n" +
" END";
rs = stmt.executeQuery(sql);
借閱書籍時(shí)自動(dòng)更新學(xué)生借閱數(shù)量
String sql=
" CREATE TRIGGER rnumUPDETE\n" +
" ON BORROW_LIST\n" +
" AFTER INSERT\n" +
" AS\n" +
" DECLARE @NUN INT\n" +
" SELECT @NUM = BNUM FROM INSERTED\n" +
" BEGIN\n" +
" UPDATE REDER_LIST\n" +
" SET BNUM=@BNUM+1\n" +
" END";
rs = stmt.executeQuery(sql);
設(shè)置還書時(shí)間大于借閱時(shí)間。
String sql=
" CREATE TRIGGER \n" +
" ON BACK_LIST\n" +
" AFTER INSERT\n" +
" AS\n" +
" DECLARE @BOTIME1 DATE\n" +
" DECLARE @BACKTIME1 DATE\n" +
" SELECT @BOTIME1 = INSERTED.BOTIME ,@BACKTIME1 = INSERTED.@BACKTIME FROM INSERTED\n" +
" IF(@BOTIME1> @BACKTIME1 OR (SELECT YEAR(@BOTIME1) AS YEAR FROM INSERTED)!=(SELECT YEAR( @BACKTIME1) AS YEAR FROM INSERTED))\n" +
" BEGIN\n" +
" RAISERROR('輸入日期不正確!',17,1)\n" +
" rollback transaction\n" +
" END";
rs = stmt.executeQuery(sql);
判斷超期金額:
String sql=
" CREATE TRIGGER \n" +
" ON BACK_LIST\n" +
" AFTER INSERT\n" +
" AS\n" +
" DECLARE @NUMDAY DATE\n"+
" SELECT @NUMDAY =Z.TD" +
"SELECT TOTALDAY TD --得到借書時(shí)間與還書時(shí)間之間相差多少天,使用內(nèi)嵌視圖\n" +
"FROM\n" +
"(\n" +
"SELECT DAY(X.PDATE)-DAY(Y.NDATE) TOTALDAY\n" +
"FROM \n" +
"\n" +
"(SELECT RNO,BOTIME PDATE \n" +
"FROM BORROW_LIST)X,\n" +
"\n" +
"(SELECT RNO ,BACKTIME NDATE\n" +
"FROM BACK_LIST)Y\n" +
"\n" +
"WHERE X.RNO =Y.RNO \n" +
")Z\n" +
" IF(NUMDAY>=60)\n" +
" BEGIN\n" +
" RAISERROR('已超期!',17,1)\n" +
" UPDATE BACK_LIST\n" +
" SET PRISE=(NUMDAY-60)*2" +
"END";
rs = stmt.executeQuery(sql);
前臺(tái)系統(tǒng)連接數(shù)據(jù)庫(kù)代碼
String JDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL數(shù)據(jù)庫(kù)引擎
String connectDB = "jdbc:sqlserver://127.0.0.1:0;DatabaseName=db_tsgl";
try {
Class.forName(JDriver);// 加載數(shù)據(jù)庫(kù)引擎,返回給定字符串名的類
user = "sa";// 你自己創(chuàng)建的用戶名字和密碼。。。。。。。。。。。
password1 = "123456";
ct = DriverManager.getConnection(connectDB,user,password1);// 連接數(shù)據(jù)庫(kù)對(duì)象
pstmt = ct.prepareStatement(strsql);
} catch (Exception arg1) {
arg1.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
if (ct != null) {
ct.close();
ct = null;
}
} catch (Exception arg2) {
arg2.printStackTrace();
}
首先在數(shù)據(jù)庫(kù)中建立基本信息。在通過(guò)系統(tǒng)來(lái)操控其中數(shù)據(jù)。 學(xué)生登錄表基本信息: 管理員登錄基本信息: 以及圖書基本信息:
以及讀者基本信息: 1)管理員登錄 輸入相應(yīng)的用戶名,以及密碼。系統(tǒng)在數(shù)據(jù)庫(kù)中調(diào)取管理員登錄信息表,匹配其中的用戶名以及密碼是否匹配。
若不匹配,則提示輸入錯(cuò)入,累計(jì)三次輸入錯(cuò)誤,自動(dòng)退出。
輸入相應(yīng)的用戶名,以及密碼。系統(tǒng)在數(shù)據(jù)庫(kù)中調(diào)取學(xué)生登錄信息表,匹配其中的用戶名以及密碼是否匹配。
若不匹配,則提示輸入錯(cuò)入,累計(jì)三次輸入錯(cuò)誤,自動(dòng)退出。
若之前數(shù)據(jù)庫(kù)中沒(méi)有,相應(yīng)的記錄,則輸入相應(yīng)的用戶名,密碼,以及所屬權(quán)限。入下圖: 注冊(cè)之后數(shù)據(jù)插入數(shù)據(jù)庫(kù)的學(xué)生登錄表。
通過(guò)管理員賬號(hào)登錄
點(diǎn)擊按鈕瀏覽,在界面顯示圖書信息。 輸入圖書號(hào),查詢結(jié)果會(huì)顯示在界面。 3)添加圖書信息 點(diǎn)擊添加按鈕,在彈出來(lái)的界面輸入相應(yīng)信息后,再次點(diǎn)擊添加。
結(jié)果顯示:成功添加。并顯示出來(lái)。
數(shù)據(jù)庫(kù)中圖書表中也添加相應(yīng)的數(shù)據(jù)
4)修改圖書信息 點(diǎn)擊修改按鈕,提示如下: 點(diǎn)擊確定,后顯示如下
再次點(diǎn)擊確定,即可修改數(shù)據(jù) 如將圖書價(jià)格改為100. 點(diǎn)擊修改,提示修改成功 顯示如下:
數(shù)據(jù)庫(kù)中相應(yīng)也同步修改,結(jié)果顯示修改成100. 5)刪除功能 點(diǎn)擊刪除按鈕,提示 點(diǎn)擊確定,提示
點(diǎn)擊確定 ,如刪除剛才修改的數(shù)據(jù)。 顯示界面: 未顯示其信息: 成功刪除。 數(shù)據(jù)庫(kù)同步刪除: 6)借閱功能 點(diǎn)擊借閱按鈕,提示
點(diǎn)擊確定:輸入信息 點(diǎn)擊借閱,在界面中顯示,借閱的相關(guān)信息
再次瀏覽圖書信息顯示編號(hào)為1 的圖書已被借出
假如再次借同一本書(已借出的書) 借書記錄如下:
圖書基本信息如下:編號(hào)為1 2 3的圖書已借出
點(diǎn)擊還書按鈕,提示 點(diǎn)擊確定,歸還圖書編號(hào)為1 的圖書。
歸還后在還書記錄界面,顯示所還記錄。
再次瀏覽圖書信息。發(fā)現(xiàn)編號(hào)為1的圖書已被自動(dòng)歸還,更新借出記錄。之前為已借出,現(xiàn)在改為未借出。
10)修改讀者信息 點(diǎn)擊修改讀者信息按鈕, 點(diǎn)擊確定
修改名字為張飛9的讀者信息,更改其名字為岳飛。 更改成功 數(shù)據(jù)庫(kù)中也做出同步修改
通過(guò)相應(yīng)的用戶名和密碼,系統(tǒng)調(diào)取數(shù)據(jù)庫(kù)中的學(xué)生登錄信息表,匹配其中信息。若正確則顯示如下: 查詢圖書號(hào)為1的圖書信息。 借閱編號(hào)為4的圖書。 再次查看圖書信息,圖書編號(hào)為4的圖書已被借出,符合實(shí)際邏輯。 點(diǎn)擊瀏覽按鈕即可看到圖書信息。
通過(guò)此次綜合性,加強(qiáng)對(duì)數(shù)據(jù)庫(kù)的理解與運(yùn)用以及貫通java,實(shí)現(xiàn)數(shù)據(jù)庫(kù)和前端的連接。利用圖形用戶界面,實(shí)現(xiàn)用戶交互,進(jìn)行圖書信息管理?梢酝瓿蓪(duì)數(shù)據(jù)庫(kù)的操作。滿足實(shí)際需求。
以上的Word格式文檔51黑下載地址:
先哥 圖書管理子系統(tǒng).doc
(1.97 MB, 下載次數(shù): 18)
2020-11-29 14:07 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
為防止有人抄,只公開(kāi)部分代碼(不含數(shù)據(jù)庫(kù)和界面):
源碼.7z
(5.12 KB, 下載次數(shù): 17)
2020-11-29 16:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|