版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)任務(wù)書(shū)</b></p><p> 2012 —2013 學(xué)年第 一 學(xué)期</p><p> 課程名稱(chēng): 大型數(shù)據(jù)庫(kù)應(yīng)用 </p><p> 設(shè)計(jì)題目: 圖書(shū)館書(shū)籍管理系統(tǒng)
2、 </p><p> 完成期限:自 2012 年 11 月 27 日至 2012 年 12 月 22 日共 一 周</p><p> 指導(dǎo)教師(簽字): 年 月 日</p><p> 系
3、(教研室)主任(簽字): 年 月 日</p><p><b> 圖書(shū)館書(shū)籍管理系統(tǒng)</b></p><p> 課題的介紹和課題的任務(wù)</p><p> 圖書(shū)館書(shū)籍管理系統(tǒng)主要對(duì)圖書(shū)館中書(shū)籍進(jìn)行管理,包括對(duì)書(shū)籍的添加,刪除,修改,各種方式的查詢等操作,用于管理員對(duì)圖書(shū)館書(shū)籍庫(kù)的管理;
4、采用Oracle作為數(shù)據(jù)庫(kù),應(yīng)用了Java,Jsp,JavaScript,SQL等編程語(yǔ)言以及 Struts2,JDBC等等技術(shù),另外系統(tǒng)采用B/S結(jié)構(gòu),MVC的設(shè)計(jì)模式進(jìn)行設(shè)計(jì),在數(shù)據(jù)庫(kù)方面,多處應(yīng)用了存儲(chǔ)過(guò)程和觸發(fā)器;</p><p><b> 二、課程設(shè)計(jì)的要求</b></p><p> 1、書(shū)籍的添加:通過(guò)觸發(fā)器和索引,使圖書(shū)的編號(hào)按照自動(dòng)增長(zhǎng)的方式進(jìn)行
5、添加,其他字段還有:書(shū)籍名稱(chēng),作者,出版社,頁(yè)數(shù),藏書(shū)地址等;并且通過(guò)定義觸發(fā)器,使每增加一條圖書(shū)信息,在圖書(shū)狀態(tài)表中給其增加對(duì)應(yīng)的圖書(shū)狀態(tài)信息;</p><p> 2、書(shū)籍的刪除:通過(guò)存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),如果該書(shū)的狀態(tài)為已借出,就不能刪除書(shū)籍,并發(fā)出提示信息;書(shū)籍的刪除,通過(guò)定義before觸發(fā)器,假如該書(shū)籍能夠刪除,就在其刪除之前,刪掉該書(shū)籍的狀態(tài)信息;</p><p> 3、書(shū)籍的修
6、改:修改除了書(shū)籍主鍵外的其他信息,管理員先通過(guò)查詢找到需要修改的圖書(shū),點(diǎn)擊修改,附帶該書(shū)籍原有的信息,跳轉(zhuǎn)到書(shū)籍修改界面,修改相應(yīng)的字段,提交,系統(tǒng)返回修改成功或失敗的信息;</p><p> 4、書(shū)籍的查詢:可根據(jù)圖書(shū)的索引號(hào)進(jìn)行精確查詢,可以根據(jù)圖書(shū)的書(shū)名,作者,出版社,藏書(shū)地址等進(jìn)行模糊查詢,基于系統(tǒng)的需求,還提供系統(tǒng)中以所有字段作為關(guān)鍵字的模糊查詢;管理員在書(shū)籍管理主界面中選擇查詢方式,然后輸入關(guān)鍵字,
7、提交檢索請(qǐng)求,系統(tǒng)根據(jù)所輸入的信息,返回相應(yīng)的圖書(shū)信息;</p><p> 圖書(shū)按照書(shū)名,作者,出版社,藏書(shū)地址的查詢都屬于模糊查詢,只要相應(yīng)字段滿足條件,都可以查詢出來(lái);</p><p> 圖書(shū)按照索書(shū)號(hào)搜索,為精確查詢,能精確地找到某一本書(shū),適合于管理員通過(guò)掃描儀等電子設(shè)備獲取書(shū)籍的索書(shū)號(hào)進(jìn)行準(zhǔn)確的查詢;</p><p> 圖書(shū)按照所有字段查詢,屬于模糊查
8、詢,只要上序字段中的某一個(gè)滿足條件,都能將書(shū)籍查詢出來(lái);</p><p> 5、用戶身份驗(yàn)證,管理員通過(guò)用戶登錄,輸入驗(yàn)證信息,若經(jīng)過(guò)系統(tǒng)驗(yàn)證后,若正確,則進(jìn)入圖書(shū)管理主頁(yè),若出現(xiàn)錯(cuò)誤,則跳到登錄界面,并返回相應(yīng)的友好的錯(cuò)誤提示信息;</p><p> 三、系統(tǒng)的分析和系統(tǒng)中數(shù)據(jù)庫(kù)的分析(ER圖等)</p><p><b> 1. 系統(tǒng)設(shè)計(jì)</
9、b></p><p> 1.1.系統(tǒng)概要設(shè)計(jì)-流程圖</p><p> 系統(tǒng)總體設(shè)計(jì)如圖1.1所示</p><p> 系統(tǒng)主要對(duì)圖書(shū)館中書(shū)籍進(jìn)行管理,包括對(duì)書(shū)籍的添加,刪除,修改,各種方式的查詢等操作,用于管理員對(duì)圖書(shū)館書(shū)籍庫(kù)的管理;</p><p><b> 圖1-1 </b></p>&l
10、t;p> 實(shí)現(xiàn)用戶的登錄,管理員登錄后對(duì)圖書(shū)進(jìn)行書(shū)籍的添加,書(shū)籍各種方式的查詢,書(shū)籍的修改,書(shū)籍的刪除;</p><p> 1.2.系統(tǒng)的詳細(xì)設(shè)計(jì)</p><p> 1.2.1.用戶的登錄</p><p> 管理員通過(guò)用戶登錄,輸入驗(yàn)證信息,若經(jīng)過(guò)系統(tǒng)驗(yàn)證后,若正確,則進(jìn)入圖書(shū)管理主頁(yè),若出現(xiàn)錯(cuò)誤,則跳到登錄界面,并返回相應(yīng)的友好的錯(cuò)誤提示信息,具體流
11、程如圖1.2所示;</p><p><b> 圖1.2</b></p><p> 1.2.2.書(shū)籍的添加</p><p> 書(shū)籍的添加,用戶在表單中輸入書(shū)籍的信息,點(diǎn)擊錄入,數(shù)據(jù)通過(guò)Struts2 的過(guò)濾器,自動(dòng)提交數(shù)據(jù),在Struts的Action類(lèi)中進(jìn)行獲取數(shù)據(jù),然后進(jìn)行檢測(cè),如果檢測(cè)輸入信息有誤,則跳轉(zhuǎn)到添加頁(yè)面,并返回相應(yīng)的錯(cuò)誤提
12、示;如果信息正確,則調(diào)用添加數(shù)據(jù)存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)的持久化;具體流程如圖1-3所示;</p><p><b> 圖1.3</b></p><p> 1.2.3.書(shū)籍的修改</p><p> 書(shū)籍的修改,首先查詢出需要修改的書(shū)籍,點(diǎn)擊修改,跳轉(zhuǎn)到書(shū)籍修改頁(yè)面,順便通過(guò)session對(duì)象,將原有的書(shū)籍對(duì)象帶過(guò)去;在書(shū)籍修改頁(yè)面表單中修改相應(yīng)屬性
13、,提交到Struts2 的Action類(lèi)中,首先進(jìn)行數(shù)據(jù)的校驗(yàn),校驗(yàn)失敗,跳轉(zhuǎn)到修改頁(yè)面,返回相應(yīng)的出錯(cuò)信息,校驗(yàn)成功,則進(jìn)行書(shū)籍的更新處理;具體流程如圖1.4所示;</p><p><b> 圖1.4</b></p><p> 1.2.4.書(shū)籍的刪除</p><p> 書(shū)籍的刪除,首先查詢出需要修改的書(shū)籍,點(diǎn)擊刪除,提交到Struts2
14、中的Action類(lèi),順便傳入書(shū)籍編號(hào)這個(gè)值(主鍵,唯一),首先訪問(wèn)書(shū)籍庫(kù)進(jìn)行查詢?cè)摃?shū)籍的狀態(tài)是否是“在館”,是則返回true,進(jìn)入書(shū)籍的刪除環(huán)節(jié);調(diào)用數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程和觸發(fā)器,進(jìn)行書(shū)籍的刪除,確保系統(tǒng)數(shù)據(jù)的一致性;具體流程如圖1.5所示 </p><p><b> 圖1.5</b></p><p> 1.2.5.書(shū)籍的查詢</p><p>
15、; 書(shū)籍的查詢,本系統(tǒng)中書(shū)籍的查詢?cè)O(shè)定了多種方式,包括按索書(shū)號(hào)查詢,按書(shū)名查詢,按書(shū)籍作者查詢,按出版社查詢,還有按所有字段進(jìn)行查詢;先選擇查詢的方式,輸入關(guān)鍵字,然后進(jìn)行數(shù)據(jù)的提交,經(jīng)數(shù)據(jù)過(guò)濾校驗(yàn)后,進(jìn)入控制層,通過(guò)判斷其查詢類(lèi)型,進(jìn)行數(shù)據(jù)的查詢,將符合條件的數(shù)據(jù)查詢出來(lái),裝入集合框架ArrayList中,傳入顯示層進(jìn)行數(shù)據(jù)的顯示,具體流程如圖1.6所示;</p><p><b> 圖1.6<
16、;/b></p><p><b> 2.?dāng)?shù)據(jù)庫(kù)的設(shè)計(jì)</b></p><p><b> 2.1.?dāng)?shù)據(jù)庫(kù)建模</b></p><p> 2.1.1.E-R圖</p><p> 2.1.1.1.圖書(shū)信息建模</p><p> 系統(tǒng)中書(shū)籍信息建模如E-R圖2.1所示
17、:</p><p> 系統(tǒng)中書(shū)籍信息分為兩張表進(jìn)行數(shù)據(jù)的處理,分別為圖書(shū)表和圖書(shū)狀態(tài)表</p><p> 圖書(shū)表主要用來(lái)存儲(chǔ)圖書(shū)的基本信息,包括書(shū)籍編號(hào),書(shū)籍名稱(chēng),書(shū)籍作者,出版社,頁(yè)數(shù),藏書(shū)地址等信息,圖書(shū)狀態(tài)表主要存放系統(tǒng)中圖書(shū)的狀態(tài)信息,是借出去了還是在館,是誰(shuí)什么時(shí)候借的,等信息;</p><p><b> 圖2.1</b><
18、;/p><p> 2.1.1.2用戶信息的建模</p><p> 用戶信息的建模如圖2.2所示:</p><p><b> 圖2.2</b></p><p><b> 3系統(tǒng)前臺(tái)的設(shè)計(jì)</b></p><p><b> 3.1、系統(tǒng)的結(jié)構(gòu)</b>&
19、lt;/p><p> 本系統(tǒng)使用MVC模式作為系統(tǒng)的設(shè)計(jì)結(jié)構(gòu),以JSP作為視圖層;采用struts2框架,以其Acation類(lèi)作為其控制層,以各種JavaBean,F(xiàn)ormBean作為模型層;</p><p> 3.2、界面的設(shè)計(jì)和布局</p><p><b> 3.2.1登錄界面</b></p><p><b&
20、gt; 如圖3.1所示</b></p><p><b> 圖3.1</b></p><p> 3.2.2圖書(shū)管理界面</p><p> 圖書(shū)管理主頁(yè)中提供了集書(shū)籍添加,書(shū)籍修改,書(shū)籍刪除,書(shū)籍詳情查詢 及多功能的圖書(shū)檢索功能,使用方便,操作簡(jiǎn)單,并設(shè)有完善友好的錯(cuò)誤提示功能,具體展示如圖3.2所示;</p>&
21、lt;p><b> 圖3.2</b></p><p> 3.2.3圖書(shū)修改界面</p><p> 書(shū)籍修改界面如圖3.3所示;</p><p><b> 圖3.3</b></p><p> 3.2.4.圖書(shū)詳情界面</p><p> 由于數(shù)據(jù)量比較大,在查詢
22、主頁(yè)中不便顯示,通過(guò)圖書(shū)詳情界面,將對(duì)應(yīng)圖書(shū)信息進(jìn)行顯示;其界面及運(yùn)行結(jié)果如圖3.4所示;</p><p><b> 圖3.4</b></p><p> 四、系統(tǒng)的數(shù)據(jù)庫(kù)實(shí)現(xiàn)</p><p> 1.1.書(shū)籍信息表和書(shū)籍狀態(tài)表的設(shè)計(jì)</p><p> 書(shū)籍信息表中包括書(shū)籍編號(hào),書(shū)籍名稱(chēng),作者,出版社,頁(yè)數(shù),藏書(shū)地址
23、等字段,書(shū)籍編號(hào)通過(guò)觸發(fā)器的方式,以自動(dòng)增長(zhǎng)的方式進(jìn)行添加;頁(yè)數(shù)為Number類(lèi)型,其他的都為字符串行;</p><p> 圖書(shū)館中書(shū)籍的各個(gè)字段的設(shè)計(jì)如圖4.1所示分為圖書(shū)表(book)和圖書(shū)狀態(tài)表(bookstate);</p><p><b> 圖4.1</b></p><p> 表4-1 book表的設(shè)計(jì)</p>
24、<p> 表4-2 bookstate表的設(shè)計(jì)</p><p> 1.2.管理員驗(yàn)證信息的設(shè)計(jì)</p><p><b> 如圖4.2所示</b></p><p> Create table Manager(</p><p> Username varchar2(20),</p><
25、;p> Pwd varchar2(20)</p><p><b> );</b></p><p><b> 圖4.2</b></p><p> 表4-3 manage表的設(shè)計(jì)</p><p> 1.3. 觸發(fā)器,存儲(chǔ)過(guò)程的設(shè)計(jì)</p><p> 1.3.
26、1.圖書(shū)信息添加觸發(fā)器的設(shè)計(jì)</p><p> 先創(chuàng)建一個(gè)索引,計(jì)算出前一個(gè)字段的最大值,然后創(chuàng)建before觸發(fā)器,每增加一項(xiàng)書(shū)籍記錄,給書(shū)籍編號(hào)這一字段賦值;</p><p> 圖書(shū)的管理--創(chuàng)建圖書(shū)表:</p><p> Create table book(</p><p> bnum number(11),</p&g
27、t;<p> bname varchar2(20),</p><p> writer varchar2(20),</p><p> publish varchar2(50),</p><p> page number(11),</p><p> place varchar2(20),</p><p&
28、gt;<b> );</b></p><p><b> --創(chuàng)建序列:</b></p><p> create sequence book_seq</p><p> increment by 1 </p><p> start with 1</p><p> m
29、axvalue 1.0E28</p><p> minvalue 1 </p><p><b> nocache </b></p><p><b> ----創(chuàng)建觸發(fā)器</b></p><p> create or replace trigger tr_book</p>&l
30、t;p> before insert book</p><p> for each row</p><p><b> begin</b></p><p> select book_seq.nextval into :new.bnum from dual;</p><p> end tr_book;<
31、/p><p><b> --測(cè)試,插入數(shù)據(jù)</b></p><p> Insert into book( bname , writer , publish , page , place ) values ( 'compute','liusi','China',342,'一樓庫(kù)'); </p>
32、<p> insert into book ( bname , writer , publish , page , place) values ('computerr','liusi','湖工大',842,'二樓庫(kù)');</p><p> 1.3.2.添加書(shū)籍狀態(tài)信息觸發(fā)器trigger_state</p><p&
33、gt; 每創(chuàng)建一項(xiàng)書(shū)籍記錄后,自動(dòng)在圖書(shū)狀態(tài)信息表中,添加一條對(duì)應(yīng)的圖書(shū)狀態(tài)信息;</p><p><b> 創(chuàng)初始觸發(fā)器</b></p><p> create or replace trigger_state</p><p> after insert book</p><p> for each row&
34、lt;/p><p> begin --如何用到bnum的值-----></p><p> insert into bookstate(bnum) values( )</p><p><b> end ;</b></p><p> 1.3.3.刪除存儲(chǔ)過(guò)程的創(chuàng)建pro_del</p>
35、;<p> 先判斷圖書(shū)狀態(tài)State是否為”已借出”,如果是,則不能進(jìn)行刪除操作,與此同時(shí),發(fā)出提示信息;如果不是,則先刪除bookstate表中對(duì)應(yīng)的那條記錄,再將相應(yīng)的圖書(shū)信息記錄刪除。</p><p> --------刪除,過(guò)程</p><p> Create or replace procedure pro_del(</p><p>
36、 bnumber IN number(11) ,</p><p> say out varchar2(20)</p><p><b> )as</b></p><p> Num1 number</p><p> sta varchar2</p><p> date1=date<
37、/p><p> Begin </p><p> select state into sta from bookstate where bnum=bnumber;</p><p> if sta='wait' then</p><p> delete from bookstate where bnum=bnumbe
38、r;</p><p> delete from book where bnum=bnumber;</p><p> say='yes';</p><p><b> else </b></p><p><b> say='no';</b></p>
39、<p> end if; </p><p><b> end;</b></p><p> 1.3.4.更新書(shū)籍存儲(chǔ)過(guò)程的創(chuàng)建pro_update</p><p> ---更新書(shū)籍存儲(chǔ)過(guò)程</p><p> Create or replace procedure pro_update(</
40、p><p> bnum1 IN number(11) ,</p><p> bname1 IN varchar2(20),</p><p> writer1 IN varchar2(20),</p><p> publish1 IN varchar2(50),</p><p> page1 IN numbe
41、r(11),</p><p> place1 IN varchar2(20),</p><p><b> )as</b></p><p> Begin </p><p> update book set bname = bname1,writer= writer1, publish= publish1,
42、 page=page1,place=place1 where bnum=bnum1; </p><p><b> end;</b></p><p> 1.3.5.用戶登錄存儲(chǔ)過(guò)程的創(chuàng)建pro_login</p><p> --------登錄</p><p> Create or replace proce
43、dure pro_login(</p><p> mname IN varchar2(20),</p><p> mpwd IN varchar2(20),</p><p> say out varchar2(20)</p><p><b> ) as </b></p><p>
44、count number=0;</p><p> Begin </p><p> select count(*) into count from Manage where username=mname && pwd=mpwd;</p><p> if sta=0 then</p><p> say='
45、yes';</p><p><b> else </b></p><p><b> say='no';</b></p><p> end if; </p><p><b> end;</b></p><p>
46、 五、系統(tǒng)的實(shí)現(xiàn)及調(diào)試</p><p> 1.實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接</p><p> 利用JDBC實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接</p><p> public DBoracle(){</p><p><b> try {</b></p><p> Class.forName("oracle.
47、jdbc.driver.OracleDriver");//oracle名稱(chēng)還需填寫(xiě)</p><p> ct=DriverManager.getConnection("jdbc:oracle:thin:@10.0.0.248:1521:orcl","orcl","orcl");</p><p> } catch (Cl
48、assNotFoundException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated
49、catch block</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> 2.系統(tǒng)功能的實(shí)現(xiàn)</b></p><p> 2.1通過(guò)在
50、前臺(tái)JSP頁(yè)面中書(shū)籍信息,由Struts2的過(guò)濾器,將其數(shù)據(jù)自動(dòng)封裝成對(duì)應(yīng)的JavaBean,在對(duì)應(yīng)的Action中進(jìn)行處理;</p><p> <?xml version="1.0" encoding="UTF-8"?></p><p> <!DOCTYPE struts PUBLIC</p><p>
51、 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"</p><p> "http://struts.apache.org/dtds/struts-2.0.dtd"></p><p><b> <struts></b><
52、/p><p> <package name="user" extends="struts-default"></p><p> <action name="userlogin" class="lib.action.UserLoginAction" method="execute&qu
53、ot;></p><p> <result name="success">main.jsp</result></p><p> <result name="failure">main.jsp</result></p><p><b> </action
54、></b></p><p> <action name="addbook" class="lib.action.AddBookAction" method="execute"></p><p> <result name="success">BookManage.j
55、sp</result></p><p> <result name="failure">BookManage.jsp</result></p><p><b> </action></b></p><p> <action name="updatebook
56、" class="lib.action.UpdateBookAction" method="execute"></p><p> <result name="success">BookManage.jsp</result></p><p> <result name="f
57、ailure">updatebook.jsp</result></p><p> </action> </p><p> <action name="deletebook" class="lib.action.DeleteBookAction" method="execute"&
58、gt;</p><p> <result name="success">BookManage.jsp</result></p><p> <result name="failure">BookManage.jsp</result></p><p> </action&
59、gt; </p><p> <action name="cbookselect" class="lib.action.ChangeBookSelectAction" method="execute"></p><p> <result name="success">BookMana
60、ge.jsp</result></p><p> <result name="failure">BookManage.jsp</result></p><p> </action> </p><p> </package></p><p> <pac
61、kage name="sel" extends="struts-default"></p><p> <action name="select" class="lib.action.SelectAction" method="execute"></p><p> <
62、;result name="success">main.jsp</result></p><p> <result name="error">main.jsp</result></p><p><b> </action></b></p><p>
63、 </package></p><p><b> </struts></b></p><p><b> 2.2.圖書(shū)的添加</b></p><p> 在圖書(shū)管理主界面中,錄入各項(xiàng)圖書(shū)信息,通過(guò)Struts2過(guò)濾器,在Action中進(jìn)行數(shù)據(jù)的校驗(yàn),若出現(xiàn)數(shù)據(jù)格式等方面的錯(cuò)誤,將錯(cuò)誤信息寫(xiě)入一個(gè)
64、HashMap集合中,并將所有出錯(cuò)信息的集合返回到圖書(shū)管理主界面;如果數(shù)據(jù)符合要求,則向數(shù)據(jù)庫(kù)圖書(shū)表中增加一條記錄,同時(shí)往圖書(shū)狀態(tài)表中也寫(xiě)入相應(yīng)的記錄;</p><p> public boolean addBook(Book b){</p><p><b> …..</b></p><p><b> }</b>&l
65、t;/p><p><b> 2.3.圖書(shū)的修改</b></p><p> 先通過(guò)查詢,找到要修改的記錄,點(diǎn)擊進(jìn)入圖書(shū)信息修改界面,完成后,輸入新的值,進(jìn)行數(shù)據(jù)的修改;</p><p> public boolean updateBook(Book b) {</p><p><b> try {<
66、/b></p><p> CallableStatement cstmt = null;</p><p> String procedure = "{call pro_update(?,?,?,?,?,?)}";</p><p> cstmt.setString(1,b.getBname());</p><p
67、> cstmt.setString(2,b.getWriter());</p><p> cstmt.setString(3,b.getPublish());</p><p> cstmt.setInt(4,b.getPage());</p><p> cstmt.setString(5, b.getPlace());</p><p
68、> cstmt.setInt(6, b.getBnum());</p><p> cstmt = ct.prepareCall(procedure);</p><p> cstmt.executeUpdate();</p><p> return true;</p><p> } catch (SQLException e)
69、 {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }</b></p><p> return false;</p><p><b> }</b
70、></p><p><b> 2.4.圖書(shū)的刪除</b></p><p> 通過(guò)存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),如果該書(shū)的狀態(tài)為已借出,就不能刪除書(shū)籍,并發(fā)出提示信息;書(shū)籍的刪除,通過(guò)定義before觸發(fā)器,假如該書(shū)籍能夠刪除,就在其刪除之前,刪掉該書(shū)籍的狀態(tài)信息;</p><p> public boolean deleteBook(Book b
71、) {</p><p><b> try {</b></p><p> //pstmt=ct.prepareStatement("delete from bookstate where bnum=? ");</p><p> pstmt=ct.prepareCall("{ call pro_del(?) }&
72、quot;);</p><p> pstmt.setInt(1,b.getBnum());</p><p> //pstmt.executeUpdate();</p><p> //pstmt=ct.prepareStatement("delete from book where bnum=?");</p><p>
73、 //pstmt.setInt(1,b.getBnum());</p><p> pstmt.execute();</p><p> return true;</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p&g
74、t;<p> e.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p><b> 2.5.圖書(shū)的查詢</b></p>
75、<p> 系統(tǒng)中提供了圖書(shū)索引號(hào),圖書(shū)名稱(chēng),作者,出版社,等多種方式的查詢,并且為了方便起見(jiàn),還設(shè)立通過(guò)所有字段進(jìn)行模糊查詢的功能;</p><p> 圖書(shū)按照書(shū)名,作者,出版社,藏書(shū)地址的查詢都屬于模糊查詢,只要相應(yīng)字段滿足條件,都可以查詢出來(lái);</p><p> 圖書(shū)按照索書(shū)號(hào)搜索,為精確查詢,能精確地找到某一本書(shū),適合于管理員通過(guò)掃描儀等電子設(shè)備獲取書(shū)籍的索書(shū)號(hào)進(jìn)行準(zhǔn)
76、確的查詢;</p><p> 圖書(shū)按照所有字段查詢,屬于模糊查詢,只要上序字段中的某一個(gè)滿足條件,都能將書(shū)籍查詢出來(lái);</p><p> public ArrayList getLibBooks(Book b, int choice) {</p><p> ArrayList al=new ArrayList();</p><p>
77、String sql="select * from book where ";</p><p> String str=null;</p><p><b> try {</b></p><p><b> // 按照各種查詢</b></p><p> if (choice
78、== 1) {</p><p> sql="select * from book where bnum=?";</p><p> pstmt = ct.prepareStatement(sql);</p><p> pstmt.setInt(1, b.getBnum());</p><p> } else if (
79、choice == 2) {</p><p> sql="select * from book where bname like ?";</p><p> pstmt=ct.prepareStatement(sql);</p><p> pstmt.setString(1, "%"+b.getBname()+"
80、%");</p><p> } else if (choice == 3) {</p><p> sql="select * from book where writer=?";</p><p> pstmt=ct.prepareStatement(sql);</p><p> pstmt.setStri
81、ng(1, b.getWriter());</p><p> } else if (choice == 4) {</p><p> sql="select * from book where publish like ?";</p><p> pstmt=ct.prepareStatement(sql);</p><p&
82、gt; pstmt.setString(1, "%"+b.getPublish()+"%");</p><p><b> } else {</b></p><p> sql="select * from book where bname like ? OR writer like ? OR publish lik
83、e ?";</p><p> pstmt=ct.prepareStatement(sql);</p><p> pstmt.setString(1, "%"+b.getPublish()+"%"); //將所有信息寫(xiě)入publish這一欄中</p><p> pstmt.setString(2, "
84、%"+b.getPublish()+"%"); //將所有信息寫(xiě)入publish這一欄中</p><p> pstmt.setString(3, "%"+b.getPublish()+"%"); //將所有信息寫(xiě)入publish這一欄中</p><p><b> }</b></p>
85、;<p> ResultSet rs=pstmt.executeQuery();</p><p> while(rs.next()){</p><p> Book bk=new Book();</p><p> bk.setBnum(rs.getInt(1));</p><p> bk.setBname(rs.getS
86、tring(2));</p><p> bk.setWriter(rs.getString(3));</p><p> bk.setPublish(rs.getString(4));</p><p> bk.setPage(rs.getInt(5));</p><p> bk.setPlace(rs.getString(6));<
87、;/p><p> al.add(bk);</p><p><b> }</b></p><p> return al;</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p&
88、gt;<p> e.printStackTrace();</p><p> return null;</p><p><b> }</b></p><p><b> }</b></p><p> 2.6.管理員地登錄</p><p> 管理員必須通過(guò)
89、身份驗(yàn)證才能進(jìn)入書(shū)籍管理頁(yè)面,對(duì)書(shū)籍的管理;</p><p> public boolean managerLogin(String workid,String password){</p><p><b> try {</b></p><p> //pstmt=ct.prepareStatement("select * fro
90、m manager where workid=? ");</p><p> CallableStatement cstmt = null;</p><p> cstmt=ct.prepareCall("{ call pro_login(?,?,?) }");</p><p> cstmt.setString(1, workid);
91、</p><p> cstmt.setString(2, password);</p><p> ((CallableStatement) cstmt).registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);</p><p> cstmt.execute();</p><p&g
92、t; //從輸出參數(shù)中獲取值</p><p> ResultSet rs = (ResultSet) cstmt.getObject(3);//第3個(gè)?所代表的參數(shù)</p><p> ResultSetMetaData rmd =rs.getMetaData();</p><p> String str=null;</p><p>
93、 while(rs.next()){</p><p> for(int i=0;i<rmd.getColumnCount();i++){</p><p> str=rs.getString(i+1)+"";</p><p><b> }</b></p><p><b> }&l
94、t;/b></p><p> if(str.trim().equals("yes")){</p><p> return true;</p><p><b> }else{</b></p><p> return false;</p><p><b>
95、 }</b></p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p> return false;</p><p
96、><b> }</b></p><p><b> }</b></p><p><b> 六、系統(tǒng)的使用說(shuō)明</b></p><p> 圖書(shū)館管理員登錄進(jìn)入系統(tǒng),即可到圖書(shū)管理界面,在圖書(shū)管理界面上按要求進(jìn)行書(shū)籍添加,若輸入不正確,系統(tǒng)自動(dòng)顯示出提示信息,修改后進(jìn)行繼續(xù)添加;按照管理員
97、的意愿選擇適當(dāng)?shù)牟樵兎绞剑ㄋ凶侄危饕?hào),書(shū)名,出版社等),點(diǎn)擊需要更新的記錄,進(jìn)行相應(yīng)操作,若選擇刪除,操作后會(huì)有相應(yīng)的信息提示,若選擇修改,則跳入修改界面,進(jìn)行相應(yīng)圖書(shū)信息的修改;</p><p> 七、課程設(shè)計(jì)總結(jié)與心得</p><p> 本次課程設(shè)計(jì)即使學(xué)習(xí)完大型數(shù)據(jù)庫(kù)應(yīng)用后的一次實(shí)踐訓(xùn)練,也是學(xué)習(xí)使用Oracle作為數(shù)據(jù)庫(kù),以及其中的觸發(fā)器,存儲(chǔ)過(guò)程等知識(shí)的課堂,雖然此次設(shè)
98、計(jì)的系統(tǒng)功能并不齊全,但是它包含了多處觸發(fā)器,存儲(chǔ)過(guò)程等的使用;在本次課程設(shè)計(jì)中熟悉了用JDBC訪問(wèn)Oracle數(shù)據(jù)庫(kù),以及通過(guò)JDBC調(diào)用Oracle數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程和觸發(fā)器的使用,通過(guò)調(diào)用存儲(chǔ)過(guò)程可以簡(jiǎn)化很多數(shù)據(jù)庫(kù)連接層的代碼,可以做到一次調(diào)用,實(shí)現(xiàn)這一系列數(shù)據(jù)庫(kù)訪問(wèn)的操作;在數(shù)據(jù)庫(kù)表與表之間的操作中,特別是主表和從表的映射關(guān)系,通過(guò)觸發(fā)器的使用,不僅能簡(jiǎn)化操作,更重要的是可以輕松的保證數(shù)據(jù)的一致性;</p><
99、p> Oracle數(shù)據(jù)庫(kù)已經(jīng)Oracle數(shù)據(jù)庫(kù)的應(yīng)用博大精深,值的我以后繼續(xù)學(xué)習(xí)和應(yīng)用,本次課程設(shè)計(jì)雖然只是一次實(shí)踐應(yīng)用,但卻學(xué)到了知識(shí)得到了啟發(fā);最后感謝曾敏老師對(duì)我們課程設(shè)計(jì)以及這一學(xué)期來(lái)Oracle學(xué)習(xí)孜孜不倦的教導(dǎo)。</p><p> 附2:系統(tǒng)的主要程序代碼</p><p> ?。ú糠种饕拇a如下:)</p><p> public clas
100、s DBoracle implements DBinterface {</p><p> Connection ct;</p><p> PreparedStatement pstmt;</p><p> //實(shí)例化驅(qū)動(dòng)類(lèi),創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象</p><p> public DBoracle(){</p><p&g
101、t;<b> try {</b></p><p> Class.forName("oracle.jdbc.driver.OracleDriver");//oracle名稱(chēng)還需填寫(xiě)</p><p> ct=DriverManager.getConnection("jdbc:oracle:thin:@10.0.0.248:1521:or
102、cl","orcl","orcl");</p><p> } catch (ClassNotFoundException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p
103、> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b>&l
104、t;/p><p> public boolean addBook(Book b) {</p><p><b> try {</b></p><p> pstmt=ct.prepareStatement("insert into book(bname,writer,publish,page,place)values(?,?,?,?,?
105、)");</p><p> pstmt.setString(1,b.getBname() );</p><p> pstmt.setString(2, b.getWriter());</p><p> pstmt.setString(3, b.getPublish());</p><p> pstmt.setInt(4, b
106、.getPage());</p><p> pstmt.setString(5,b.getPlace());</p><p> pstmt.executeUpdate();</p><p> pstmt=ct.prepareStatement("insert into bookstate(bnum,state) values((select Max(
107、bnum)from book),'wait') ");</p><p> //這里要定義觸發(fā)器來(lái)解決</p><p> pstmt.executeUpdate();</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catc
108、h block</p><p> e.printStackTrace();</p><p><b> }</b></p><p> return true;</p><p><b> }</b></p><p> public boolean deleteBook(
109、Book b) {</p><p><b> try {</b></p><p> //pstmt=ct.prepareStatement("delete from bookstate where bnum=? ");</p><p> pstmt=ct.prepareCall("{ call pro_del
110、(?) }");</p><p> pstmt.setInt(1,b.getBnum());</p><p> //pstmt.executeUpdate();</p><p> //pstmt=ct.prepareStatement("delete from book where bnum=?");</p><
111、;p> //pstmt.setInt(1,b.getBnum());</p><p> pstmt.execute();</p><p> return true;</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block&l
112、t;/p><p> e.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p> public ArrayList getLibBooks(Book
113、b, int choice) {</p><p> ArrayList al=new ArrayList();</p><p> String sql="select * from book where ";</p><p> String str=null;</p><p><b> try {<
114、/b></p><p><b> // 按照各種查詢</b></p><p> if (choice == 1) {</p><p> sql="select * from book where bnum=?";</p><p> pstmt = ct.prepareStatement(
115、sql);</p><p> pstmt.setInt(1, b.getBnum());</p><p> } else if (choice == 2) {</p><p> sql="select * from book where bname like ?";</p><p> pstmt=ct.prepar
116、eStatement(sql);</p><p> pstmt.setString(1, "%"+b.getBname()+"%");</p><p> } else if (choice == 3) {</p><p> sql="select * from book where writer=?"
117、;</p><p> pstmt=ct.prepareStatement(sql);</p><p> pstmt.setString(1, b.getWriter());</p><p> } else if (choice == 4) {</p><p> sql="select * from book where pu
118、blish like ?";</p><p> pstmt=ct.prepareStatement(sql);</p><p> pstmt.setString(1, "%"+b.getPublish()+"%");</p><p><b> } else {</b></p>
119、<p> sql="select * from book where bname like ? OR writer like ? OR publish like ?";</p><p> pstmt=ct.prepareStatement(sql);</p><p> pstmt.setString(1, "%"+b.getPubl
120、ish()+"%"); //將所有信息寫(xiě)入publish這一欄中</p><p> pstmt.setString(2, "%"+b.getPublish()+"%"); //將所有信息寫(xiě)入publish這一欄中</p><p> pstmt.setString(3, "%"+b.getPublish(
121、)+"%"); //將所有信息寫(xiě)入publish這一欄中</p><p><b> }</b></p><p> ResultSet rs=pstmt.executeQuery();</p><p> while(rs.next()){</p><p> Book bk=new Book()
122、;</p><p> bk.setBnum(rs.getInt(1));</p><p> bk.setBname(rs.getString(2));</p><p> bk.setWriter(rs.getString(3));</p><p> bk.setPublish(rs.getString(4));</p>
123、<p> bk.setPage(rs.getInt(5));</p><p> bk.setPlace(rs.getString(6));</p><p> al.add(bk);</p><p><b> }</b></p><p> return al;</p><p>
124、 } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p> return null;</p><p><b> }</b></p><
125、;p><b> }</b></p><p> public boolean updateBook(Book b) {</p><p><b> try {</b></p><p> CallableStatement cstmt = null;</p><p> Stri
126、ng procedure = "{call pro_update(?,?,?,?,?,?)}";</p><p> cstmt.setString(1,b.getBname());</p><p> cstmt.setString(2,b.getWriter());</p><p> cstmt.setString(3,b.getPubli
127、sh());</p><p> cstmt.setInt(4,b.getPage());</p><p> cstmt.setString(5, b.getPlace());</p><p> cstmt.setInt(6, b.getBnum());</p><p> cstmt = ct.prepareCall(procedure
128、);</p><p> cstmt.executeUpdate();</p><p> return true;</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printS
129、tackTrace();</p><p><b> }</b></p><p> return false;</p><p><b> } </b></p><p> Action類(lèi)(部分)</p><p> public class AddBookAction e
130、xtends ActionSupport {</p><p> BookForm bf;</p><p> public BookForm getBf() {</p><p> return bf;</p><p><b> }</b></p><p> public void setB
131、f(BookForm bf) {</p><p> this.bf = bf;</p><p><b> }</b></p><p><b> @Override</b></p><p> public String execute() throws Exception {</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- oracle課程設(shè)計(jì)--圖書(shū)館書(shū)籍管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--圖書(shū)館管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)
- c語(yǔ)言圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)---高校圖書(shū)館管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 圖書(shū)館管理信息------系統(tǒng)課程設(shè)計(jì)
- jsp課程設(shè)計(jì)《圖書(shū)館管理系統(tǒng)》
- sqlserver課程設(shè)計(jì)——圖書(shū)館管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 軟件課程設(shè)計(jì)--圖書(shū)館管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- vfp圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)
- java課程設(shè)計(jì)----圖書(shū)館管理系統(tǒng)
- 圖書(shū)館系統(tǒng)課程設(shè)計(jì)
- javaweb課程設(shè)計(jì)——圖書(shū)館管理系統(tǒng)
- java課程設(shè)計(jì)——圖書(shū)館管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)mis課程設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告---圖書(shū)館管理系統(tǒng)
- java圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論