當前位置:編程學習大全網 - 編程語言 - 求:用JSP寫的圖書管理系統的畢業論文

求:用JSP寫的圖書管理系統的畢業論文

1 前言 4

1.1 目的 4

1.2 範圍 4

1.3 有關本系統中的定義 4

2 資料引用 4

3 設計思路 4

3.1 數據層設計 5

user_book表的觸發器 5

用戶續借圖書的存儲過程 6

到期催還表的視圖 7

3.2 數據鏈接層設計 8

UserBook Entity Bean設計 9

UserConsumer Entity Bean設計 10

UserLogBook Entity Bean設計 11

3.3 數據邏輯層設計 12

TheBook Session Bean設計 13

TheUser Session Bean設計 14

TheLog Session Bean設計 15

3.4 網絡應用層設計 15

CheckValue bean 16

EnCode bean 16

JDBCBean bean 16

Rank bean 16

SetUp bean 16

SplitPage bean 17

UserLogin bean 17

SearchBook bean 17

SearchDeadline bean 17

ValidateIMG servlet 17

GetDelete servlet servlet 17

GetBookSubmit servlet 18

GetUserSubmit servlet 18

GetRenewBook servlet 18

GetBorrowBook servlet 18

GetReturnBook servlet 18

4 程序架構 18

4.1 程序組織結構 18

4.2 功能權限劃分 20

4.3 WEB程序/頁面設計 21

4.4 本系統實現的功能 22

5 任務分工 22

1 前言

1.1 目的

本文檔詳細描述了圖書管理系統的設計,主要是為開發人員提供,使其對本項目的構建和維護有深入的了解。

1.2 範圍

本文檔的描述只針對圖書管理系統的1.0版本。

1.3 有關本系統中的定義

以下是本說明書中用到的專門術語的定義和外文首字母組詞的原詞組:

術語或縮寫 定義與描述

booksManager 本系統的名稱

Reader 系統權限:普通讀者

BookAdmin 系統權限:圖書管理員

UserAdmin 系統權限:用戶管理員

SuperAdmin 系統權限:超級管理員(系統管理員)

Undergraduate 系統用戶角色:本科生

Graduate 系統用戶角色:研究生

Teacher 系統用戶角色:教師

2 資料引用

清華大學《應用軟件平臺與核心技術》講義 顧明

清華大學《應用軟件平臺與核心技術》助教文檔 張偉業、魏嵐、陳勇、林彩榮

《精通EJB(第二版)》

《J2EE應用與BEA Web Logic Server》,刑國慶等譯,電子工業出版社 2002.4

《設計模式——可復用面向對象軟件的基礎》,Erich Gamma等,機械工業出版社

3 設計思路

本系統嚴格按照4層結構設計,分為數據層(SQL server),數據鏈接層(entity bean),數據邏輯層(session bean),網絡應用層(java bean, java servlet, java serverpage)。

四層之間完全獨立,可以部署在四臺服務器上運行,體現了分布式應用的思想。

數據層的功能嚴格來說是實現基本的數據存儲(邏輯處理功能應該全部交給CMP管理),但因為學習原因,在數據庫中也用到了壹些邏輯處理,如使用了存儲過程+系統級臨時表處理讀者續借圖書的功能、使用觸發器防止未還書的用戶和未歸還的圖書被註銷以及使用視圖檢測借書記錄實現到期催還功能。

數據鏈接層實現了和數據庫的連接,作用在於屏蔽數據庫和平臺之間的差異,做到底層無關性。本層利用了模糊查找、多表映射、Relationship等技術,通過find,select方法數據的查找功能,拋出聚集對象或遠程接口對象給下壹層。

數據邏輯層實現了對數據的邏輯處理,例如將遠程接口對象轉化為值對象、將聚集對象轉化為值對象向量、利用日期類完成查找兩個特定日期之間的記錄等相對復雜的計算。

網絡應用層完成頁面跳轉和頁面顯示等應用功能,還有壹些附加功能如:圖片驗證,登錄驗證,等級控制,代碼過濾,分頁控制,輸入值檢測、借書日誌打印、系統運行日誌記錄以及系統設置等。(使用了JDBC實現存儲過程和模糊查找圖書的功能)

3.1 數據層設計

數據庫表

表名 功能描述

user_consumer 記錄了用戶的所有信息

user_book 記錄了圖書的所有信息

user_logBook 記錄了用戶使用本系統的信息,保留了所有的借書記錄,可作為系統日誌和報表資料

user_book表的觸發器

用到的觸發器之壹,作用:如果要註銷的圖書被外借沒有歸還,則回滾此刪除操作。

CREATE TRIGGER bookhavelog ON dbo.user_book

FOR DELETE

AS

declare @bookISBN varchar(50)

select @bookISBN=book_ISBN from deleted

if exists(select * from user_logBook where logb_book_ISBN=@bookISBN and

logb_backdate is null)

begin

rollback

return

end

用戶續借圖書的存儲過程

利用存儲過程實現用戶續借圖書的邏輯操作,根據用戶的當前信息判斷其是否有續借的權限,並把處理結果輸出到臨時表中去。

CREATE PROCEDURE user_renew_book @xxxparm int AS

CREATE TABLE ##temp(statement varchar(50))

DECLARE @username varchar(50)

SET @username=(select logb_cons_username from user_logBook where ID=@xxxparm)

IF @username is null

BEGIN

INSERT INTO ##temp VALUES ('The ID is not EXIST')

RETURN

END

DECLARE @timelimit int

SET @timelimit=(select logb_timelimit from user_logBook where ID=@xxxparm)

DECLARE @renewday int

SET @renewday=(select cons_maxday from user_consumer where cons_username=@username)

DECLARE @maxrenew int

SET @maxrenew=(select cons_maxrenew from user_consumer where cons_username=@username)

IF (@renewday*@maxrenew)>=@timelimit

BEGIN

update user_logBook set logb_timelimit=logb_timelimit+@renewday where ID=@xxxparm

--update user_consumer set cons_maxrenews=cons_maxrenews-1 where cons_username=@username

INSERT INTO ##temp VALUES ('renew successful')

RETURN

END

ELSE

BEGIN

INSERT INTO ##temp VALUES ('You are not allowed to renew the book')

RETURN

END

GO

到期催還表的視圖

利用DATEDIFF,DATEADD,CAST,GETDATE等函數從借書記錄表中計算出到期的記錄,然後根據此記錄找出相應的讀者信息,在網頁上以email形式催還。

CREATE VIEW dbo.deadline

AS

SELECT TOP 100 PERCENT dbo.user_logBook.logb_cons_username,

dbo.user_logBook.logb_outdate, DATEADD([day], dbo.user_logBook.logb_timelimit,

CAST(dbo.user_logBook.logb_outdate AS datetime)) AS deadline_date, GETDATE()

AS now_date, dbo.user_consumer.cons_name, dbo.user_consumer.cons_kind,

dbo.user_consumer.cons_rank, dbo.user_consumer.cons_email,

dbo.user_consumer.cons_maxrenew, dbo.user_consumer.cons_maxbook,

dbo.user_logBook.logb_book_ISBN, dbo.user_book.book_name,

dbo.user_book.book_kind, dbo.user_book.book_storage, dbo.user_book.book_rank,

dbo.user_logBook.logb_timelimit

FROM dbo.user_logBook INNER JOIN

dbo.user_consumer ON

dbo.user_logBook.logb_cons_username = dbo.user_consumer.cons_username INNER

JOIN

dbo.user_book ON

dbo.user_logBook.logb_book_ISBN = dbo.user_book.book_ISBN

WHERE (DATEDIFF([day], DATEADD([day], dbo.user_logBook.logb_timelimit,

CAST(dbo.user_logBook.logb_outdate AS datetime)), GETDATE()) >= 0) AND

(dbo.user_logBook.logb_backdate IS NULL)

ORDER BY dbo.user_logBook.logb_cons_username DESC

3.2 數據鏈接層設計

entity bean

UserBook Entity Bean設計

userbook remotehome接口

方法 描述

findAllBook 得到所有的圖書信息

findByISBN 通過圖書的書號得到圖書的信息

findSearcher 利用關鍵字模糊查找圖書信息

selectUserByBookISBN

(userbook remote) 利用select方法實現多表相關的查找

findSearcher實現模糊查找的代碼:

select object(p) from UserBook as p where p.bookName like concat(concat('%',?1),'%') or p.bookAuthor like ?1 or p.bookKind like ?1 or p.bookPublish like ?1 or p.bookAbstract like ?1 or p.bookISBN like concat(concat('%',?1),'%') or p.bookRemark like ?1

UserConsumer Entity Bean設計

UserConsumer remotehome接口

方法 描述

findAllUser 查找所有的用戶信息

findByUsername 通過用戶名查找用戶信息

findSearcher 利用關鍵字模糊查找用戶信息

selectBookByUsername

(userconsumer remote) 利用select方法實現多表相關的查找

findSearcher實現模糊查找的代碼:

select object(p) from UserConsumer as p where p.consUsername like concat(concat('%',?1),'%') or p.consSerial like ?1 or p.consName like concat(concat('%',?1),'%') or p.consRemark like ?1 or p.consEmail like ?1

UserLogBook Entity Bean設計

UserLogBook remotehome接口

方法 描述

findallbybookISBN 查找此書所有的借閱記錄

findbybookISBN 查找此書當前的借出記錄

findallbyusername 查找此用戶所有的借閱記錄

findbyusername 查找此用戶當前的借出書記錄

findbacklog 得到所有已經歸還圖書的借書記錄

findoutlog 得到所有尚未歸還圖書的借書記錄

findbyID 通過記錄流水號查找借書記錄

findlogbyday 查找某壹日期的借書記錄

(模糊匹配,例如提交“2004-5”可得到最終記錄時間——借閱或歸還在2004年5月份的所有借書記錄)

findallog 得到所有的借書記錄

FindLogByDay通過模糊匹配得到壹組最終記錄時間的代碼:

select object(p) from UserLogBook as p where ( p.logbBackdate is null and p.logbOutdate like concat(concat('%',?1),'%') ) or ( p.logbBackdate is not null and p.logbBackdate like concat(concat('%',?1),'%') )

3.3 數據邏輯層設計

session bean

TheBook Session Bean設計

TheBook bean

實現圖書的增刪改查以及模糊搜索、通過書查讀者等功能

方法內部實現所有的邏輯處理和轉化,返回到遠程接口值對象或值對象向量

TheUser Session Bean設計

TheUser bean

實現用戶(讀者)的增刪改查以及模糊搜索、通過讀者查書等功能

方法內部實現所有的邏輯處理和轉化,返回到遠程接口值對象或值對象向量

TheLog Session Bean設計

TheLog bean

主要實現對日誌(借書記錄)的各項操作,提供多種獲得日誌的方法(按讀者、按圖書、按日期、按借還狀態等),方法內部實現所有的邏輯處理和轉化,返回到遠程接口值對象或值對象向量,另外還有如下方法:

方法 功能

public boolean userBorrowBook(String username, String bookISBN) 以壹個事務封裝讀者借書的所有邏輯操作,借書成功返回真值,無法借書返回假值,調用enCode bean對中文進行轉碼

public boolean userReturnBook(String logbid) 以壹個事務封裝讀者還書的所有邏輯操作,即實現使壹筆借書記錄銷賬的功能,調用enCode bean對中文進行轉碼

public Vector showLogBetweenDays(String dayBegin, String dayEnd) 返回兩個日期之間的所有日誌,主要利用Calendar類實現

3.4 網絡應用層設計

本層本著面向對象思想的封裝性、數據模糊性、可重用性等原則設計。

本著系統運行錯誤在系統中打印(System.out.println)、用戶輸入和誤操作錯誤導向友好的錯誤處理頁並給出友好的提示的錯誤處理原則。

每次對會話bean的調用寫入系統運行日誌文件,默認路徑是C:\\booksManagerLog.dat。

CheckValue bean

封裝多個靜態方法。

可以用於檢測某表中某個字段是否已經存在某個值(可用於檢測重名用戶、重號圖書)、檢測用戶名合法性、檢測密碼合法性、檢測年齡合法性、檢測電子郵件合法性、檢測數字合法性、檢測日期合法性等。

EnCode bean

封裝編碼轉碼工作:

html顯示轉碼,例如:將<轉為<,將>轉為&rt;,將數據庫中的換行轉為html中的換行等等,這樣可以屏蔽用戶提交文本中的可執行代碼。

可重載的中文轉碼。

密碼的加密和解密編碼。

JDBCBean bean

封裝所有的數據庫操作。包括壹個帶結果集返回的SQL執行方法和壹個不帶結果集返回的SQL執行方法。

Rank bean

封裝4種權限(普通讀者、用戶管理員、圖書管理員、系統管理員)的頁面訪問,相當於頁面加鎖功能。

SetUp bean

public static String title="SuperLibrary";//系統名稱

public static String dbS="booksManagerDS";//數據庫的JNDI名

public static String errorPage="dealError.jsp?theError=";//友好的錯誤處理頁,用get方法傳遞出錯原因

public static String homePage="default.jsp";//默認首頁

//權限-------------------------------------------------------------------------

public static String Reader="Reader";//讀者

public static String UserAdmin="UserAdmin";//用戶管理員

public static String BookAdmin="BookAdmin";//圖書管理員

public static String SuperAdmin="SuperAdmin";//系統管理員

//等級-------------------------------------------------------------------------

public static String Undergraduate="Undergraduate";//本科生

public static int UndergraduateRenew=1;//本科生可續借的次數

public static int UndergraduateMaxday=30;//本科生壹次可借的天數

public static String Graduate="Graduate";//研究生

public static int GraduateRenew=2;//研究生可續借的次數

public static int GraduateMaxday=45;//研究生壹次可借的天數

public static String Teacher="Teacher";//教師

public static int TeacherRenew=3;//教師可續借的次數

public static int TeacherMaxday=60;//教師壹次可借的天數

//----------------------------------------------------------------------------

public static int rsPerPage=5;//每頁顯示記錄的數量

public static int minBooks=4;//系統默認的最小借書數

SplitPage bean

將數據記錄分頁的邏輯實現和頁面顯示(最簡,可在外部由樣式表美化)封裝在壹個bean中,重用時實際只需要傳遞壹個記錄集數量的為參數即可,可重用。壹般作為session級java bean在頁面中被調用,在會話中保存用戶對此頁面的訪問狀態,在會話結束之前始終記憶用戶訪問此頁對應的頁碼。

UserLogin bean

將用戶登錄的邏輯實現和頁面顯示(最簡,可在外部由樣式表美化)封裝在壹個bean中,包括對用戶各種登錄情況的處理,可重用。

SearchBook bean

利用JDBC實現模糊查找和按指定類別精確查找圖書的功能。

SearchDeadline bean

利用JDBC調用視圖實現到期圖書的催還功能。

ValidateIMG servlet

動態生成含有隨機驗證碼的圖片,在生成圖片的同時將驗證碼寫入session中,與用戶的登錄輸入比較。可有效的防止機器人登錄。

GetDelete servlet servlet

處理圖書、用戶、日誌的註銷操作,根據返回值進行相應頁面的跳轉。

GetBookSubmit servlet

處理圖書的入庫和圖書信息的修改,根據返回值進行相應頁面的跳轉。

GetUserSubmit servlet

處理用戶的註冊和用戶信息的修改,根據返回值進行相應頁面的跳轉。

GetRenewBook servlet

處理用戶續借圖書的請求(JDBC調用存儲過程實現),從系統臨時表中讀取狀態值,根據狀態值進行相應頁面的跳轉。

GetBorrowBook servlet

處理用戶的借書請求,將用戶借書限額已滿、庫存為零等錯誤導向友好的錯誤頁,如果借書成功則跳轉到圖書信息頁面,並給與相應的提示。

GetReturnBook servlet

處理用戶的還書請求,如果還書成功則跳轉到用戶的借書記錄頁面,並給與相應的提示。

4 程序架構

4.1 程序組織結構

說明:圖書搜索和用戶登錄看作系統外部功能,通過JDBC直接調用數據庫,其中用戶登錄模塊封裝在壹個java bean中,可重用。另外,用戶續借圖書是通過存儲過程實現,從而繞過了使用CMP技術管理事務的實體bean。

本系統其余程序的組織結構嚴格按照下圖實現:

程序組織結構圖

4.2 功能權限劃分

站點頁面地圖

權限名稱 系統定義字符 權限 可訪問頁面

普通讀者 Reader 查看自己的信息(還書、續借);

修改自己的信息;

查看圖書(借書); userModify

userView

booklist

圖書管理員 BookAdmin 擁有普通讀者的權限;

圖書的增刪改查;

到期催還; userModify

userView

booklist

bookAdder

bookModify

deadline

用戶管理員 UserAdmin 擁有普通讀者的權限;

用戶的增刪改查; userModify

userView

booklist

userRegister

userModify

userList

系統管理員 SuperAdmin 擁有圖書管理員和用戶管理員的權限;

查看系統日誌;

刪除系統日誌;

系統設置; 包括setupSYS.jsp(系統設置,利用application級java bean控制整個應用程序)在內的所有頁面

4.3 WEB程序/頁面設計

利用<input style="ime-mode:disabled">代碼關閉客戶端的輸入法,實現用戶名、密碼不能出現中文的問題。

利用onfocus=this.select() onmouseover=this.focus()代碼使文本框自動吸附獲得焦點,方便用戶輸入。

利用WMODE="transparent"參數使flash的背景透明,更好的融入網頁。

在每頁中,利用代碼:

<IFRAME frameBorder=0 height=88 marginHeight=0 marginWidth=0 scrolling=no src="../iframe/top.htm" width=755 BORDERCOLOR="#000000"></IFRAME>

<IFRAME frameBorder=0 height=68 marginHeight=0 marginWidth=0 scrolling=no src="../iframe/below.htm" width=755 BORDERCOLOR="#000000"></IFRAME>

嵌入上下導航條,使網站導航明確,方便用戶瀏覽。

在網頁頭部加入代碼:

<meta HTTP-EQUIV="pragma" CONTENT="no-cache">

<meta HTTP-EQUIV="expires" CONTENT="0">

使客戶端不緩存網頁,保證了客戶每次瀏覽該頁都從服務器獲得最新的版本,以求正確顯示。

提供智能搜索(獲得盡可能多的匹配)和精確搜索(獲得盡可能精確的匹配)圖書,服務器端編程都采用模糊查找的方式。

在客戶端用javascript對表單提交進行第壹次驗碼,通過後提交到服務器端,再進行第二次驗碼,驗碼包括:用戶名是否重復、年齡是不是合適的數字,兩次密碼輸入的是否壹致、電子郵件是否合法、密碼是否太短、用戶名是否太短、用戶名密碼是否為空等等。

利用隨機生成JPG圖片驗證碼的方法,防止機器人登錄。

在頁面中使用session級java bean實現分頁,在會話中保存用戶對此頁面的訪問狀態,在會話結束之前始終記憶用戶訪問此頁對應的頁碼。

在頁面中使用application級java bean實現安全的系統設置,當服務器啟動後,即可對系統運行參數進行應用程序級的設置,只要服務器不關閉,此設置始終有效且作用於所有用戶,如果設置不慎造成系統錯誤或想恢復系統默認設置,則只需重新啟動服務器即可。

在對會話bean的調用包ejbClient中,創建系統運行日誌,通過包中的writeF類寫入web服務器的C:\\booksManagerLog.dat中,可做查詢用。

4.4 本系統實現的功能

確定圖書的基本信息,有書名、作者、出版日期、當前借閱狀態等屬性

系統的使用者包括讀者、圖書管理員、用戶管理員、系統管理員四種

讀者可以查詢圖書;圖書管理員可以完成圖書管理、借閱管理;讀者管理員可以完成讀者管理的功能;系統管理員可以使用系統的所有功能

圖書管理:新書登記,圖書查詢,圖書註銷;

借閱管理:借書,還書,查詢到期讀者

讀者管理:增加讀者、刪除讀者、查詢讀者、讀者類別管理(設置研究生,本科生,教師的可借冊數,可借天數,可續借次數等)

系統管理:系統管理員使用,包括用戶權限管理(增加用戶,刪除用戶,密碼修改等),系統借書日誌,系統運行日誌,系統設置等功能

頁面輸入有驗碼,密碼存取有加密

圖書到期催還

體現分層設計思想,使用MVC架構

實現了多個Beans,Bean之間實現了對應的關系

使用了EJB QL,事務控制等

使用了jsp->sessionBean->entityBean->數據庫模式

數據庫使用了觸發器和存儲過程等壹些高級技術

  • 上一篇:解答JAVA筆試題
  • 下一篇:新余市第三中學的校園作品
  • copyright 2024編程學習大全網