圖書館書籍管理系統(tǒng)課程設(shè)計_第1頁
已閱讀1頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計任務(wù)書</b></p><p>  2012 —2013 學年第 一 學期</p><p>  課程名稱: 大型數(shù)據(jù)庫應用 </p><p>  設(shè)計題目: 圖書館書籍管理系統(tǒng)

2、 </p><p>  完成期限:自 2012 年 11 月 27 日至 2012 年 12 月 22 日共 一 周</p><p>  指導教師(簽字): 年 月 日</p><p>  系

3、(教研室)主任(簽字): 年 月 日</p><p><b>  圖書館書籍管理系統(tǒng)</b></p><p>  課題的介紹和課題的任務(wù)</p><p>  圖書館書籍管理系統(tǒng)主要對圖書館中書籍進行管理,包括對書籍的添加,刪除,修改,各種方式的查詢等操作,用于管理員對圖書館書籍庫的管理;

4、采用Oracle作為數(shù)據(jù)庫,應用了Java,Jsp,JavaScript,SQL等編程語言以及 Struts2,JDBC等等技術(shù),另外系統(tǒng)采用B/S結(jié)構(gòu),MVC的設(shè)計模式進行設(shè)計,在數(shù)據(jù)庫方面,多處應用了存儲過程和觸發(fā)器;</p><p><b>  二、課程設(shè)計的要求</b></p><p>  1、書籍的添加:通過觸發(fā)器和索引,使圖書的編號按照自動增長的方式進行

5、添加,其他字段還有:書籍名稱,作者,出版社,頁數(shù),藏書地址等;并且通過定義觸發(fā)器,使每增加一條圖書信息,在圖書狀態(tài)表中給其增加對應的圖書狀態(tài)信息;</p><p>  2、書籍的刪除:通過存儲過程來實現(xiàn),如果該書的狀態(tài)為已借出,就不能刪除書籍,并發(fā)出提示信息;書籍的刪除,通過定義before觸發(fā)器,假如該書籍能夠刪除,就在其刪除之前,刪掉該書籍的狀態(tài)信息;</p><p>  3、書籍的修

6、改:修改除了書籍主鍵外的其他信息,管理員先通過查詢找到需要修改的圖書,點擊修改,附帶該書籍原有的信息,跳轉(zhuǎn)到書籍修改界面,修改相應的字段,提交,系統(tǒng)返回修改成功或失敗的信息;</p><p>  4、書籍的查詢:可根據(jù)圖書的索引號進行精確查詢,可以根據(jù)圖書的書名,作者,出版社,藏書地址等進行模糊查詢,基于系統(tǒng)的需求,還提供系統(tǒng)中以所有字段作為關(guān)鍵字的模糊查詢;管理員在書籍管理主界面中選擇查詢方式,然后輸入關(guān)鍵字,

7、提交檢索請求,系統(tǒng)根據(jù)所輸入的信息,返回相應的圖書信息;</p><p>  圖書按照書名,作者,出版社,藏書地址的查詢都屬于模糊查詢,只要相應字段滿足條件,都可以查詢出來;</p><p>  圖書按照索書號搜索,為精確查詢,能精確地找到某一本書,適合于管理員通過掃描儀等電子設(shè)備獲取書籍的索書號進行準確的查詢;</p><p>  圖書按照所有字段查詢,屬于模糊查

8、詢,只要上序字段中的某一個滿足條件,都能將書籍查詢出來;</p><p>  5、用戶身份驗證,管理員通過用戶登錄,輸入驗證信息,若經(jīng)過系統(tǒng)驗證后,若正確,則進入圖書管理主頁,若出現(xiàn)錯誤,則跳到登錄界面,并返回相應的友好的錯誤提示信息;</p><p>  三、系統(tǒng)的分析和系統(tǒng)中數(shù)據(jù)庫的分析(ER圖等)</p><p><b>  1. 系統(tǒng)設(shè)計</

9、b></p><p>  1.1.系統(tǒng)概要設(shè)計-流程圖</p><p>  系統(tǒng)總體設(shè)計如圖1.1所示</p><p>  系統(tǒng)主要對圖書館中書籍進行管理,包括對書籍的添加,刪除,修改,各種方式的查詢等操作,用于管理員對圖書館書籍庫的管理;</p><p><b>  圖1-1 </b></p>&l

10、t;p>  實現(xiàn)用戶的登錄,管理員登錄后對圖書進行書籍的添加,書籍各種方式的查詢,書籍的修改,書籍的刪除;</p><p>  1.2.系統(tǒng)的詳細設(shè)計</p><p>  1.2.1.用戶的登錄</p><p>  管理員通過用戶登錄,輸入驗證信息,若經(jīng)過系統(tǒng)驗證后,若正確,則進入圖書管理主頁,若出現(xiàn)錯誤,則跳到登錄界面,并返回相應的友好的錯誤提示信息,具體流

11、程如圖1.2所示;</p><p><b>  圖1.2</b></p><p>  1.2.2.書籍的添加</p><p>  書籍的添加,用戶在表單中輸入書籍的信息,點擊錄入,數(shù)據(jù)通過Struts2 的過濾器,自動提交數(shù)據(jù),在Struts的Action類中進行獲取數(shù)據(jù),然后進行檢測,如果檢測輸入信息有誤,則跳轉(zhuǎn)到添加頁面,并返回相應的錯誤提

12、示;如果信息正確,則調(diào)用添加數(shù)據(jù)存儲過程進行數(shù)據(jù)的持久化;具體流程如圖1-3所示;</p><p><b>  圖1.3</b></p><p>  1.2.3.書籍的修改</p><p>  書籍的修改,首先查詢出需要修改的書籍,點擊修改,跳轉(zhuǎn)到書籍修改頁面,順便通過session對象,將原有的書籍對象帶過去;在書籍修改頁面表單中修改相應屬性

13、,提交到Struts2 的Action類中,首先進行數(shù)據(jù)的校驗,校驗失敗,跳轉(zhuǎn)到修改頁面,返回相應的出錯信息,校驗成功,則進行書籍的更新處理;具體流程如圖1.4所示;</p><p><b>  圖1.4</b></p><p>  1.2.4.書籍的刪除</p><p>  書籍的刪除,首先查詢出需要修改的書籍,點擊刪除,提交到Struts2

14、中的Action類,順便傳入書籍編號這個值(主鍵,唯一),首先訪問書籍庫進行查詢該書籍的狀態(tài)是否是“在館”,是則返回true,進入書籍的刪除環(huán)節(jié);調(diào)用數(shù)據(jù)庫中的存儲過程和觸發(fā)器,進行書籍的刪除,確保系統(tǒng)數(shù)據(jù)的一致性;具體流程如圖1.5所示 </p><p><b>  圖1.5</b></p><p>  1.2.5.書籍的查詢</p><p>

15、;  書籍的查詢,本系統(tǒng)中書籍的查詢設(shè)定了多種方式,包括按索書號查詢,按書名查詢,按書籍作者查詢,按出版社查詢,還有按所有字段進行查詢;先選擇查詢的方式,輸入關(guān)鍵字,然后進行數(shù)據(jù)的提交,經(jīng)數(shù)據(jù)過濾校驗后,進入控制層,通過判斷其查詢類型,進行數(shù)據(jù)的查詢,將符合條件的數(shù)據(jù)查詢出來,裝入集合框架ArrayList中,傳入顯示層進行數(shù)據(jù)的顯示,具體流程如圖1.6所示;</p><p><b>  圖1.6<

16、;/b></p><p><b>  2.數(shù)據(jù)庫的設(shè)計</b></p><p><b>  2.1.數(shù)據(jù)庫建模</b></p><p>  2.1.1.E-R圖</p><p>  2.1.1.1.圖書信息建模</p><p>  系統(tǒng)中書籍信息建模如E-R圖2.1所示

17、:</p><p>  系統(tǒng)中書籍信息分為兩張表進行數(shù)據(jù)的處理,分別為圖書表和圖書狀態(tài)表</p><p>  圖書表主要用來存儲圖書的基本信息,包括書籍編號,書籍名稱,書籍作者,出版社,頁數(shù),藏書地址等信息,圖書狀態(tài)表主要存放系統(tǒng)中圖書的狀態(tài)信息,是借出去了還是在館,是誰什么時候借的,等信息;</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)前臺的設(shè)計</b></p><p><b>  3.1、系統(tǒng)的結(jié)構(gòu)</b>&

19、lt;/p><p>  本系統(tǒng)使用MVC模式作為系統(tǒng)的設(shè)計結(jié)構(gòu),以JSP作為視圖層;采用struts2框架,以其Acation類作為其控制層,以各種JavaBean,F(xiàn)ormBean作為模型層;</p><p>  3.2、界面的設(shè)計和布局</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圖書管理界面</p><p>  圖書管理主頁中提供了集書籍添加,書籍修改,書籍刪除,書籍詳情查詢 及多功能的圖書檢索功能,使用方便,操作簡單,并設(shè)有完善友好的錯誤提示功能,具體展示如圖3.2所示;</p>&

21、lt;p><b>  圖3.2</b></p><p>  3.2.3圖書修改界面</p><p>  書籍修改界面如圖3.3所示;</p><p><b>  圖3.3</b></p><p>  3.2.4.圖書詳情界面</p><p>  由于數(shù)據(jù)量比較大,在查詢

22、主頁中不便顯示,通過圖書詳情界面,將對應圖書信息進行顯示;其界面及運行結(jié)果如圖3.4所示;</p><p><b>  圖3.4</b></p><p>  四、系統(tǒng)的數(shù)據(jù)庫實現(xiàn)</p><p>  1.1.書籍信息表和書籍狀態(tài)表的設(shè)計</p><p>  書籍信息表中包括書籍編號,書籍名稱,作者,出版社,頁數(shù),藏書地址

23、等字段,書籍編號通過觸發(fā)器的方式,以自動增長的方式進行添加;頁數(shù)為Number類型,其他的都為字符串行;</p><p>  圖書館中書籍的各個字段的設(shè)計如圖4.1所示分為圖書表(book)和圖書狀態(tài)表(bookstate);</p><p><b>  圖4.1</b></p><p>  表4-1 book表的設(shè)計</p>

24、<p>  表4-2 bookstate表的設(shè)計</p><p>  1.2.管理員驗證信息的設(shè)計</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è)計</p><p>  1.3. 觸發(fā)器,存儲過程的設(shè)計</p><p>  1.3.

26、1.圖書信息添加觸發(fā)器的設(shè)計</p><p>  先創(chuàng)建一個索引,計算出前一個字段的最大值,然后創(chuàng)建before觸發(fā)器,每增加一項書籍記錄,給書籍編號這一字段賦值;</p><p>  圖書的管理--創(chuàng)建圖書表:</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>  --測試,插入數(shù)據(jù)</b></p><p>  Insert into book( bname , writer , publish , page , place ) values ( 'compute','liusi','China',342,'一樓庫'); </p>

32、<p>  insert into book ( bname , writer , publish , page , place) values ('computerr','liusi','湖工大',842,'二樓庫');</p><p>  1.3.2.添加書籍狀態(tài)信息觸發(fā)器trigger_state</p><p&

33、gt;  每創(chuàng)建一項書籍記錄后,自動在圖書狀態(tài)信息表中,添加一條對應的圖書狀態(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.刪除存儲過程的創(chuàng)建pro_del</p>

35、;<p>  先判斷圖書狀態(tài)State是否為”已借出”,如果是,則不能進行刪除操作,與此同時,發(fā)出提示信息;如果不是,則先刪除bookstate表中對應的那條記錄,再將相應的圖書信息記錄刪除。</p><p>  --------刪除,過程</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.更新書籍存儲過程的創(chuàng)建pro_update</p><p>  ---更新書籍存儲過程</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.用戶登錄存儲過程的創(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)的實現(xiàn)及調(diào)試</p><p>  1.實現(xiàn)數(shù)據(jù)庫的連接</p><p>  利用JDBC實現(xiàn)數(shù)據(jù)庫的連接</p><p>  public DBoracle(){</p><p><b>  try {</b></p><p>  Class.forName("oracle.

47、jdbc.driver.OracleDriver");//oracle名稱還需填寫</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)功能的實現(xiàn)</b></p><p>  2.1通過在

50、前臺JSP頁面中書籍信息,由Struts2的過濾器,將其數(shù)據(jù)自動封裝成對應的JavaBean,在對應的Action中進行處理;</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.圖書的添加</b></p><p>  在圖書管理主界面中,錄入各項圖書信息,通過Struts2過濾器,在Action中進行數(shù)據(jù)的校驗,若出現(xiàn)數(shù)據(jù)格式等方面的錯誤,將錯誤信息寫入一個

64、HashMap集合中,并將所有出錯信息的集合返回到圖書管理主界面;如果數(shù)據(jù)符合要求,則向數(shù)據(jù)庫圖書表中增加一條記錄,同時往圖書狀態(tài)表中也寫入相應的記錄;</p><p>  public boolean addBook(Book b){</p><p><b>  …..</b></p><p><b>  }</b>&l

65、t;/p><p><b>  2.3.圖書的修改</b></p><p>  先通過查詢,找到要修改的記錄,點擊進入圖書信息修改界面,完成后,輸入新的值,進行數(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.圖書的刪除</b></p><p>  通過存儲過程來實現(xiàn),如果該書的狀態(tài)為已借出,就不能刪除書籍,并發(fā)出提示信息;書籍的刪除,通過定義before觸發(fā)器,假如該書籍能夠刪除,就在其刪除之前,刪掉該書籍的狀態(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.圖書的查詢</b></p>

75、<p>  系統(tǒng)中提供了圖書索引號,圖書名稱,作者,出版社,等多種方式的查詢,并且為了方便起見,還設(shè)立通過所有字段進行模糊查詢的功能;</p><p>  圖書按照書名,作者,出版社,藏書地址的查詢都屬于模糊查詢,只要相應字段滿足條件,都可以查詢出來;</p><p>  圖書按照索書號搜索,為精確查詢,能精確地找到某一本書,適合于管理員通過掃描儀等電子設(shè)備獲取書籍的索書號進行準

76、確的查詢;</p><p>  圖書按照所有字段查詢,屬于模糊查詢,只要上序字段中的某一個滿足條件,都能將書籍查詢出來;</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()+"%"); //將所有信息寫入publish這一欄中</p><p>  pstmt.setString(2, "

84、%"+b.getPublish()+"%"); //將所有信息寫入publish這一欄中</p><p>  pstmt.setString(3, "%"+b.getPublish()+"%"); //將所有信息寫入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>  管理員必須通過

89、身份驗證才能進入書籍管理頁面,對書籍的管理;</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個?所代表的參數(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)的使用說明</b></p><p>  圖書館管理員登錄進入系統(tǒng),即可到圖書管理界面,在圖書管理界面上按要求進行書籍添加,若輸入不正確,系統(tǒng)自動顯示出提示信息,修改后進行繼續(xù)添加;按照管理員

97、的意愿選擇適當?shù)牟樵兎绞剑ㄋ凶侄?,索引號,書名,出版社等),點擊需要更新的記錄,進行相應操作,若選擇刪除,操作后會有相應的信息提示,若選擇修改,則跳入修改界面,進行相應圖書信息的修改;</p><p>  七、課程設(shè)計總結(jié)與心得</p><p>  本次課程設(shè)計即使學習完大型數(shù)據(jù)庫應用后的一次實踐訓練,也是學習使用Oracle作為數(shù)據(jù)庫,以及其中的觸發(fā)器,存儲過程等知識的課堂,雖然此次設(shè)

98、計的系統(tǒng)功能并不齊全,但是它包含了多處觸發(fā)器,存儲過程等的使用;在本次課程設(shè)計中熟悉了用JDBC訪問Oracle數(shù)據(jù)庫,以及通過JDBC調(diào)用Oracle數(shù)據(jù)庫的存儲過程和觸發(fā)器的使用,通過調(diào)用存儲過程可以簡化很多數(shù)據(jù)庫連接層的代碼,可以做到一次調(diào)用,實現(xiàn)這一系列數(shù)據(jù)庫訪問的操作;在數(shù)據(jù)庫表與表之間的操作中,特別是主表和從表的映射關(guān)系,通過觸發(fā)器的使用,不僅能簡化操作,更重要的是可以輕松的保證數(shù)據(jù)的一致性;</p><

99、p>  Oracle數(shù)據(jù)庫已經(jīng)Oracle數(shù)據(jù)庫的應用博大精深,值的我以后繼續(xù)學習和應用,本次課程設(shè)計雖然只是一次實踐應用,但卻學到了知識得到了啟發(fā);最后感謝曾敏老師對我們課程設(shè)計以及這一學期來Oracle學習孜孜不倦的教導。</p><p>  附2:系統(tǒng)的主要程序代碼</p><p>  (部分主要的代碼如下:)</p><p>  public clas

100、s DBoracle implements DBinterface {</p><p>  Connection ct;</p><p>  PreparedStatement pstmt;</p><p>  //實例化驅(qū)動類,創(chuàng)建數(shù)據(jù)庫連接對象</p><p>  public DBoracle(){</p><p&g

101、t;<b>  try {</b></p><p>  Class.forName("oracle.jdbc.driver.OracleDriver");//oracle名稱還需填寫</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ā)器來解決</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()+"%"); //將所有信息寫入publish這一欄中</p><p>  pstmt.setString(2, "%"+b.getPublish()+"%"); //將所有信息寫入publish這一欄中</p><p>  pstmt.setString(3, "%"+b.getPublish(

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

評論

0/150

提交評論