1.1目的4
1.2範圍4
1.3本系統中的定義4
2數據引用4
3設計理念4
3.1數據層設計5
user_book表的觸發器5
用戶續借圖書的存儲過程6
到期還款表7視圖
3.2數據鏈路層設計8
用戶手冊實體Bean設計9
用戶消費者實體Bean設計10
用戶日誌實體Bean設計11
3.3數據邏輯層設計12
圖書會話Bean設計13
用戶會話Bean設計14
日誌會話Bean設計15
3.4網絡應用層設計15
檢查值bean 16
編碼bean 16
JDBCBean bean 16
排名豆16
安裝bean 16
SplitPage bean 17
用戶登錄bean 17
SearchBook bean 17
搜索截止日期bean 17
驗證servlet 17
get delete 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網頁程序/頁面設計21
4.4該系統實現的功能22
5任務分工22
1前言
1.1目的
本文檔詳細描述了圖書管理系統的設計,主要是為了讓開發人員對本項目的建設和維護有壹個深入的了解。
1.2範圍
本文檔中的描述僅適用於1.0版本的庫管理系統。
1.3本系統中的定義
以下是本手冊中使用的專業術語的定義和外文首字母單詞的原始短語:
術語或縮寫的定義和描述
BooksManager該系統的名稱。
讀者系統權限:普通讀者
BookAdmin系統權限:圖書管理員
用戶管理員系統權限:用戶管理員
超級管理員系統權限:超級管理員(系統管理員)
本科生系統的用戶角色:本科生
研究生系統用戶角色:研究生
教師系統用戶角色:教師
2數據引用
清華大學應用軟件平臺與核心技術講座筆記顧銘。
清華大學應用軟件平臺與核心技術助教文件:張、、陳勇、林。
掌握EJB(第二版)
J2EE應用程序和BEA Web邏輯服務器。反式。邢國慶等。電子工業出版社2002年4月。
設計模式-可重用面向對象軟件的基礎,Erich Gamma等,機械工業出版社。
3設計理念
系統嚴格按照四層結構設計,分為數據層(SQL server)、數據鏈路層(實體bean)、數據邏輯層(會話bean)和網絡應用層(Java Bean、Java Servlet、Java Server Page)。
四層完全獨立,可以部署在四臺服務器上,體現了分布式應用的思想。
嚴格來說,數據層的功能是實現基本的數據存儲(所有邏輯處理功能應交給CMP管理),但出於學習的原因,數據庫中也使用了壹些邏輯處理,例如使用存儲過程+系統級臨時表來處理讀者的續借圖書,使用觸發器來防止未還書和未還書的用戶被取消,使用視圖來檢測借閱記錄以實現到期提醒的功能。
數據鏈路層實現與數據庫的連接,其作用是屏蔽數據庫與平臺的差異,實現底層獨立。該層使用模糊搜索、多表映射、關系等技術,通過find find、select method data的搜索功能將聚合對象或遠程接口對象拋出到下壹層。
數據邏輯層實現對數據的邏輯處理,例如將遠程接口對象轉換為值對象,將聚合對象轉換為值對象向量,以及使用日期類來完成相對復雜的計算,例如查找兩個特定日期之間的記錄。
網絡應用層完成頁面跳轉、頁面顯示等應用功能,還有壹些附加功能如:圖片驗證、登錄驗證、等級控制、代碼過濾、分頁控制、輸入值檢測、圖書借閱日誌打印、系統運行日誌記錄和系統設置。(JDBC用於實現存儲過程和模糊圖書搜索功能)
3.1數據層設計
數據庫表
表名函數描述
User_consumer記錄用戶的所有信息。
User_book記錄了這本書的所有信息。
User_logBook記錄使用本系統的用戶信息,並保留所有圖書借閱記錄,可用作系統日誌和報告材料。
user_book表的觸發器
如果要取消的圖書已簽出且未歸還,用於回滾刪除操作的觸發器之壹。
在dbo.user_book上創建觸發器bookhavelog
用於刪除
如同
declare @ bookISBN varchar(50)
從已刪除中選擇@bookISBN=book_ISBN
如果存在(select * from user _ logBook where log b _ book _ ISBN = @ book ISBN and
logb_backdate為空)
開始
反轉
返回
結束
用戶續借圖書的存儲過程
存儲過程用於實現用戶續借圖書的邏輯操作。根據用戶的當前信息,判斷其是否有權續借圖書,並將處理結果輸出到臨時表中。
創建過程user_renew_book @xxxparm int AS
創建表##temp(語句varchar(50))
聲明@ username varchar(50)
SET @username=(從用戶日誌中選擇日誌b_cons_username,其中ID=@xxxparm)
如果@用戶名為空
開始
插入到# #臨時值中(“ID不存在”)
返回
結束
聲明@timelimit int
SET @ time limit =(select log b _ time limit from user _ logBook where ID = @ xxxparm)
聲明@renewday int
SET @ renew day =(select cons _ maxday from user _ consumer where cons _ username = @ username)
聲明@maxrenew int
SET @ max renew =(select cons _ max renew from user _ consumer where cons _ username = @ username)
IF(@ renew day * @ max renew)& gt;= @時間限制
開始
update user _ logBook set logb _ time limit = logb _ time limit+@ renew day其中ID=@xxxparm
-update user _ consumer set cons _ max renews = cons _ max renews-1其中cons_username=@username
插入# #臨時值(“續訂成功”)
返回
結束
其他
開始
插入# #臨時值(“不允許您續借圖書”)
返回
結束
去
到期提醒表視圖
使用DATEDIFF、DATEADD、CAST、GETDATE等函數從圖書借閱記錄表中計算出到期記錄,然後根據該記錄找出相應的讀者信息,並在網頁上通過電子郵件返回。
創建視圖dbo.deadline
如同
SELECT TOP 100% dbo . user _ logbook . log b _ cons _ username,
dbo.user_logBook.logb_outdate,DATEADD(【day】,dbo . user _ logbook . logb _ time limit,
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 _ max renew,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 _ time limit
FROM dbo.user_logBook內部連接
dbo.user_consumer ON
dbo . user _ logbook . log b _ cons _用戶名= dbo . user _ consumer . cons _用戶名INNER
加入
dbo.user_book ON
dbo . user _ logbook . logb _ book _ ISBN = dbo . user _ book . book _ ISBN
其中(DATEDIFF(【day】,DATEADD(【day】,dbo . user _ logbook . logb _ time limit,
CAST(dbo . user _ logbook . logb _ outdate AS datetime)),GETDATE())& gt;= 0)和
(dbo.user_logBook.logb_backdate為空)
訂單依據dbo . user _ logbook . log b _ cons _ username desc
3.2數據鏈路層設計
實體bean
用戶手冊實體Bean設計
用戶手冊遠程主頁界面
方法描述
FindAllBook獲取所有圖書信息。
FindByISBN通過圖書編號獲取圖書信息。
FindSearcher使用關鍵字模糊性來查找圖書信息。
selectUserByBookISBN
(userbook remote)使用select方法實現多表關聯搜索。
實現模糊搜索的代碼:
從用戶手冊中選擇對象(p)作為p其中p.bookName類似concat(concat(‘%‘,?1)、‘%‘)還是p . book作者喜歡?1或p . book壹類的?1或p . book發布喜歡嗎?1或p.bookAbstract like?1或p . books bn like concat(concat‘%‘,?1)、‘%‘)或p.bookRemark like?1
用戶消費者實體Bean設計
用戶消費者遠程家庭界面
方法描述
查找所有用戶信息。
FindByUsername通過用戶名查找用戶信息。
FindSearcher使用關鍵字歧義來查找用戶信息。
選擇bookby用戶名
(userconsumer remote)使用select方法實現多表關聯搜索。
實現模糊搜索的代碼:
從UserConsumer中選擇對象(p)作為p其中p . consumer name like concat(concat(‘%‘,?1)、‘%‘)或p.consSerial like?1或p . consname like concat(concat(‘%‘,?1)、‘%‘)或p.consRemark like?1或p.consEmail之類的?1
用戶日誌實體Bean設計
用戶日誌遠程主頁界面
方法描述
FindallbybookISBN搜索這本書的所有借閱記錄。
查找這本書的當前借閱記錄。
Findallbyusername查找該用戶的所有借閱記錄。
查找用戶當前的借閱記錄。
Findbacklog獲取所有還書的借閱記錄。
Findoutlog獲取所有未歸還圖書的借閱記錄。
FindbyID通過記錄序列號來查找圖書借閱記錄。
查找某壹日期的圖書借閱記錄。
(模糊匹配,例如提交“2004年5月”以獲得最終記錄時間-借閱或返回2004年5月的所有借閱記錄)
Findallog得到了所有的借書記錄。
FindLogByDay通過模糊匹配獲得壹組最終記錄時間的代碼:
從用戶日誌中選擇對象(p)作為p其中(p.logbBackdate為空,p.logbOutdate為concat(concat(%‘,?1)、‘%‘))或(p.logbBackdate不為空且p.logbBackdate喜歡concat(concat(‘%‘,?1),'%') )
3.3數據邏輯層設計
會話bean
圖書會話Bean設計
書豆
實現圖書的增刪改查、模糊查找、通過圖書查找讀者等功能。
方法在內部實現所有邏輯處理和轉換,並返回到遠程接口值對象或值對象向量。
用戶會話Bean設計
用戶豆
用戶(讀者)可以通過閱讀器等功能添加、刪除、更改、搜索、搜索圖書。
方法在內部實現所有邏輯處理和轉換,並返回到遠程接口值對象或值對象向量。
日誌會話Bean設計
長豆角
主要實現對日誌(圖書借閱記錄)的各種操作,並提供多種獲取日誌的方法(按讀者、按圖書、按日期、按借閱和歸還狀態等。).所有邏輯處理和轉換都在方法內部實現,並返回到遠程接口值對象或值對象向量。此外,還有以下方法:
方法函數
Public Boolean Userborrowbook(字符串用戶名,字符串圖書ISBN)封裝了讀者通過壹次交易借書的所有邏輯操作。借書成功返回真值時不能返回假值,所以調用enCode bean對中文進行轉碼。
公共布爾用戶return book(String Logbid)封裝了壹個事務還書的所有邏輯操作,即實現了借書記錄核銷的功能,並調用enCode bean對中文進行轉碼。
public Vector showlog between Days(String Day Begin,String Day End)返回兩個日期之間的所有日誌,主要通過使用Calendar類實現。
3.4網絡應用層設計
該層是根據面向對象思想的封裝性、數據模糊性和可重用性原則設計的。
本著在系統中打印系統操作錯誤的錯誤處理原則(System.out.println),用戶輸入和誤操作錯誤會導致友好的錯誤處理頁面並給出友好的提示。
對會話bean的每次調用都被寫入系統運行日誌文件中,默認路徑是c: \ \ booksmanagerlog.dat。
檢查值bean
封裝多個靜態方法。
它可以用於檢測某個值是否已經存在於表中的某個字段中(它可以用於檢測重復用戶和重復書籍),檢測用戶名、密碼、年齡、電子郵件、數字、日期等的合法性。
編碼bean
打包編碼轉碼工作:
Html顯示轉碼,例如,轉換
可以重載的中文轉碼。
密碼的加密和解密編碼。
JDBCBean bean
封裝所有數據庫操作。包括具有結果集返回的SQL執行方法和沒有結果集返回的SQL執行方法。
等級豆
用四種權限(普通讀者、用戶管理員、圖書管理員和系統管理員)封裝頁面訪問相當於頁面鎖定功能。
安裝bean
公共靜態字符串title =“super library“;//系統名稱
公共靜態字符串dbS =“booksManagerDS“;//數據庫的JNDI名稱
公共靜態字符串error page =“deal error . JSP?theError =“;//友好的錯誤處理頁面,用get方法傳遞錯誤原因。
公共靜態字符串home page =“default . JSP“;//默認主頁
//權威-。
公共靜態字符串Reader =“Reader“;//讀者
公共靜態字符串user admin =“user admin“;//用戶管理員
公共靜態字符串book admin =“book admin“;//圖書管理員
公共靜態字符串super admin =“super admin“;//系統管理員
//等級-。
public static String本科=“本科“;//本科生
public static int undergraduate renew = 1;//本科生可以續貸的次數。
public static int undergraduate maxday = 30;//本科生壹次可以借讀的天數。
public靜態字符串Graduate =“Graduate“;//研究生
public static int graduate new = 2;//研究生可以續貸的次數。
public static int graduate max day = 45;//研究生壹次可以借讀的天數。
public static String Teacher=“老師“;//老師
public static int teacher new = 3;//老師可以續借的次數。
public static int teacher max day = 60;//教師壹次可以借閱的天數。
// -
public static int rsPerPage = 5;//顯示每頁的記錄數。
public static int min books = 4;//系統默認的最小借閱數量。
SplitPage bean
數據記錄分頁和頁面顯示的邏輯實現(最簡單的,可以通過外部樣式表進行美化)封裝在壹個bean中。當重用時,您只需要傳遞壹個記錄集的壹些參數,這是可重用的。壹般在頁面中作為會話級java bean調用,在會話中保存用戶對該頁面的訪問狀態,並在會話結束前始終記住用戶訪問該頁面對應的頁碼。
用戶登錄bean
用戶登錄和頁面顯示的邏輯實現(最簡單的,可以通過樣式表對外美化)封裝在壹個bean中,包括用戶各種登錄情況的處理,可以重用。
搜索書豆
利用JDBC實現圖書按特定類別的模糊搜索和精確搜索功能。
SearchDeadline bean
利用JDBC呼叫視圖實現過期圖書的歸還功能。
驗證servlet
動態生成帶有隨機驗證碼的圖片,在生成圖片的同時將驗證碼寫入會話,並與用戶的登錄輸入進行比較。它可以有效地防止機器人登錄。
GetDelete servlet servlet
處理書籍、用戶和日誌的註銷操作,根據返回值跳轉相應頁面。
GetBookSubmit servlet
處理書籍的存儲和書籍信息的修改,並根據返回值跳轉相應的頁面。
GetUserSubmit servlet
處理用戶註冊和用戶信息修改,根據返回值跳轉相應頁面。
GetRenewBook servlet
處理用戶續借圖書的請求(JDBC調用存儲過程),從系統的臨時表中讀取狀態值,並根據狀態值跳轉到相應的頁面。
GetBorrowBook servlet
處理用戶借書請求,將用戶借閱額度已滿、庫存為零等錯誤引導至友好錯誤頁面。如果借書成功,跳轉到圖書信息頁面並給出相應提示。
GetReturnBook servlet
處理用戶的還書請求。如果還書成功,跳轉到用戶的圖書借閱記錄頁面並給出相應提示。
4程序架構
4.1項目組織結構
說明:圖書搜索和用戶登錄作為系統的外部功能,通過JDBC直接調用數據庫,其中用戶登錄模塊封裝在壹個java bean中,可以重用。此外,用戶通過存儲過程續借圖書,從而繞過使用CMP技術管理事務的實體bean。
本系統中其他項目的組織結構嚴格按照下圖執行:
計劃組織結構圖
4.2職能權限劃分
網站頁面地圖
權限名稱系統定義角色訪問頁面的權限。
普通讀者閱讀自己的信息(還書、續借);
修改您自己的信息;
查書(借書);用戶修改
用戶視圖
書單
圖書管理員BookAdmin擁有普通讀者的權限;
添加、刪除和檢查圖書;
到期還款;用戶修改
用戶視圖
書單
簿記員
圖書修改
最後期限
用戶管理員UserAdmin擁有普通讀者的權限;
用戶的添加、刪除和查詢;用戶修改
用戶視圖
書單
用戶寄存器
用戶修改
用戶列表
系統管理員SuperAdmin擁有圖書管理員和用戶管理員的權限;
查看系統日誌;
刪除系統日誌;
系統設置;包括setupSYS.jsp在內的所有頁面(系統設置,使用應用程序級java bean來控制整個應用程序)。
4.3網絡程序/頁面設計
使用
使用onfocus = this。select()onmouseover = this。focus()代碼使文本框自動吸收獲得焦點,方便用戶輸入。
使用WMODE =“transparent”參數可以使flash的背景透明,並更好地集成到網頁中。
在每頁上,使用代碼:
& ltIFRAME frame border = 0 height = 88 margin height = 0 margin width = 0 scrolling = no src =“../iframe/top . htm“width = 755 border color =“# 000000“& gt;& lt/IFRAME & gt;
& ltIFRAME frame border = 0 height = 68 margin height = 0 margin width = 0 scrolling = no src =“../iframe/below . htm“width = 755 border color =“# 000000“& gt;& lt/IFRAME & gt;
上下導航欄是嵌入式的,使網站導航清晰明了,方便用戶瀏覽。
向頁眉添加代碼:
& ltmeta HTTP-EQUIV =“pragma“CONTENT =“no-cache“& gt。
& ltmeta HTTP-EQUIV =“expires“CONTENT =“0“& gt;
客戶端不緩存網頁,這確保了客戶端每次瀏覽網頁時都能從服務器獲得最新版本,從而正確顯示網頁。
提供智能搜索(獲得盡可能多的匹配)和精確搜索(獲得盡可能精確的匹配)書籍,服務器端編程采用模糊搜索方法。
在客戶機上使用javascript第壹次檢查表單提交,然後第二次將其提交給服務器。校驗碼包括:用戶名是否重復、年齡是否是合適的數字、兩個密碼是否壹致、電子郵件是否合法、密碼是否太短、用戶名是否太短、用戶名密碼是否為空等等。
利用隨機生成JPG圖片驗證碼的方法防止機器人登錄。
使用會話級java bean實現頁面中的分頁,在會話中保存用戶對該頁面的訪問狀態,並在會話結束前始終記住用戶對該頁面的訪問所對應的頁碼。
在頁面中使用應用級java bean實現安全的系統設置。當服務器啟動時,可以在應用程序級別設置系統運行參數。只要服務器沒有關閉,此設置始終有效並適用於所有用戶。如果不小心設置導致系統錯誤或您想恢復系統默認設置,您只需重新啟動服務器。
在會話bean的調用包ejbClient中,創建了壹個系統運行日誌,並通過包中的writeF類寫入web服務器的C:\\booksManagerLog.dat中,可用於查詢。
4.4本系統實現的功能
確定圖書的基本信息,包括書名、作者、出版日期、當前借閱狀態等屬性。
系統的用戶包括讀者、圖書館員、用戶管理員和系統管理員。
讀者可以查詢圖書;館員可以完成圖書管理和借閱管理;讀者管理員可以完成讀者管理的功能;系統管理員可以使用系統的所有功能。
圖書管理:新書登記、圖書查詢、圖書註銷;
借閱管理:借書還書,過期讀者查詢。
讀者管理:增加讀者、刪除讀者、查詢讀者和管理讀者類別(為研究生、本科生和教師等設置可以借閱的圖書數量、可以借閱的天數和可以續借的次數。)
系統管理:供系統管理員使用,包括用戶權限管理(添加用戶、刪除用戶、修改密碼等。)、系統借用日誌、系統運行日誌、系統設置等功能。
頁面輸入有驗證碼,密碼訪問是加密的。
預訂到期提醒
體現分層設計思想,使用MVC架構。
實現了多個bean,並實現了bean之間的對應關系。
EJB QL,事務控制等等都被使用。
使用JSP-& gt;會話bean-& gt;entity bean-& gt;數據庫模式
該數據庫使用了壹些高級技術,如觸發器和存儲過程。