目錄2
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
用戶手冊實體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
搜索書bean 17
SearchDeadline 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本系統中的定義
以下是本手冊中使用的專業術語的定義和外文首字母單詞的原始短語:
術語或縮寫的定義和描述
該系統的名稱。
讀者系統權限:普通讀者
BookAdmin系統權限:圖書管理員
用戶管理員系統權限:用戶管理員
SuperAdmin系統權限:超級管理員(系統管理員)
本科生系統的用戶角色:本科生
研究生系統用戶角色:研究生
教師系統用戶角色:教師
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數據的搜索功能,將聚合對象或遠程接口對象拋給下壹層。
數據邏輯層實現數據的邏輯處理,如將遠程接口對象轉換為值對象,將聚集對象轉換為值對象向量,使用日期類完成相對復雜的計算,如查找兩個特定日期之間的記錄。
網絡應用層完成頁面跳轉、頁面顯示等應用功能,還有壹些附加功能如:圖片驗證、登錄驗證、等級控制、代碼過濾、分頁控制、輸入值檢測、圖書借閱日誌打印、系統運行日誌記錄、系統設置等。(JDBC用於實現存儲過程和模糊圖書搜索功能)
3.1數據層設計
數據庫表
表名函數描述
User_consumer記錄用戶的所有信息。
User_book記錄了書的所有信息。
User_logBook記錄用戶使用本系統的信息,保留所有的圖書借閱記錄,可以作為系統日誌和舉報材料。
user_book表的觸發器
如果要取消的圖書被借出並且沒有歸還,用於回滾刪除操作的觸發器之壹。
在dbo.user_book上創建觸發器bookhavelog
用於刪除
如同
declare @bookISBN varchar(50)
select @ book ISBN = book _ ISBN from deleted
如果存在(select * from user_logBook其中logb_book_ISBN=@bookISBN和
logb_backdate為空)
開始
反轉
返回
結束
用戶續借圖書的存儲過程
存儲過程用於實現用戶續借圖書的邏輯操作。根據用戶的當前信息,判斷其是否有續借圖書的權限,並將處理結果輸出到臨時表中。
創建過程user_renew_book @xxxparm int AS
創建表##temp(語句varchar(50))
DECLARE @username varchar(50)
SET @username=(從user_logBook中選擇logb_cons_username,其中ID=@xxxparm)
如果@用戶名為空
開始
插入到# #臨時值(' ID不存在')
返回
結束
聲明@timelimit int
SET @ time limit =(select log b _ time limit from user _ logBook,其中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;=@timelimit
開始
update user _ logBook set logb _ time limit = logb _ time limit+@ renew day其中ID=@xxxparm
-update user _ consumer set cons _ maxrenews = cons _ maxrenews-1其中cons_username=@username
插入# #個臨時值('續訂成功')
返回
結束
其他
開始
插入到# #臨時值('不允許您續借該書')
返回
結束
去
到期提醒表的視圖
使用DATEDIFF、DATEADD、CAST、GETDATE等函數從圖書借閱記錄表中計算出到期記錄,然後根據這個記錄找出對應的讀者信息,在網頁上通過郵件的方式返回。
創建視圖dbo.deadline
如同
SELECT TOP 100 PERCENT dbo . user _ logbook . logb _ cons _ username,
dbo.user_logBook.logb_outdate,DATEADD([日],dbo . user _ logbook . logb _ time limit,
CAST(dbo . user _ logbook . logb _ outdate AS datetime))AS deadline _ date,GETDATE()
如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 . logb _ cons _ username = dbo . user _ cons . cons _ username INNER
加入
dbo.user_book ON
dbo . user _ logbook . logb _ book _ ISBN = dbo . user _ book . book _ ISBN
其中(DATEDIFF([日],DATEADD([日],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 . logb _ cons _ username desc
3.2數據鏈路層設計
實體bean
用戶手冊實體Bean設計
用戶手冊遠程主頁界面
方法描述
FindAllBook獲取所有的圖書信息。
FindByISBN通過圖書的書號獲取圖書的信息。
FindSearcher利用關鍵字的模糊性來查找圖書信息。
selectUserByBookISBN
(userbook remote)利用select方法實現多表關聯搜索。
實現模糊搜索的代碼:
從用戶手冊中選擇對象(p)作為p,其中p.bookName類似concat(concat('% ',?1),' % ')或者p.bookAuthor喜歡?1或p.bookKind like?1或p . book發布喜歡?1或者p . book抽象喜歡?1或p.bookISBN like concat(concat('% ',?1),' % ')或p.bookRemark like?1
用戶消費者實體Bean設計
用戶消費者遠程主頁界面
方法描述
查找所有用戶信息。
FindByUsername通過用戶名查找用戶信息。
FindSearcher使用關鍵字歧義來查找用戶信息。
選擇book by用戶名
(userconsumer remote)使用select方法實現多表關聯搜索。
實現模糊搜索的代碼:
select object(p from user consumer as p where p . consusername like concat(concat(' % ',?1),' % ')或者p.consSerial like?1或p.consName like concat(concat('% ',?1)、' % ')或p.consRemark like?1或者p.consEmail之類的?1
用戶日誌實體Bean設計
用戶日誌遠程主頁界面
方法描述
FindallbybookISBN搜索這本書的所有借閱記錄。
FindbybookISBN查找這本書的當前借閱記錄。
Findallbyusername查找該用戶的所有借閱記錄。
Findbyusername查找該用戶的當前借閱記錄。
Findbacklog獲取所有還書的借閱記錄。
Findoutlog獲取所有未歸還圖書的借閱記錄。
FindbyID通過記錄序號來查找圖書借閱記錄。
Findlogbyday查找某壹日期的圖書借閱記錄。
(模糊匹配,如提交“2004年5月”得到最終記錄時間——借閱或歸還2004年5月的所有借閱記錄)
Findallog得到所有的借書記錄。
FindLogByDay通過模糊匹配得到壹組最終記錄時間的代碼:
從用戶日誌中選擇對象(p)作為p,其中(p.logbBackdate為null,p.logbOutdate為concat(concat('% ',?1),' % '))或(p.logbBackdate不為null且p.logbBackdate類似concat(concat('% ',?1),'%') )
3.3數據邏輯層設計
會話bean
圖書會話Bean設計
書豆
實現圖書的增刪改查,模糊查找,通過圖書查找讀者等功能。
方法在內部實現所有的邏輯處理和轉換,並返回到遠程接口值對象或值對象向量。
用戶會話Bean設計
用戶豆
用戶(閱讀器)可以通過閱讀器添加、刪除、更改、搜索、搜索圖書等功能。
方法在內部實現所有的邏輯處理和轉換,並返回到遠程接口值對象或值對象向量。
日誌會話Bean設計
長豆角
主要實現對日誌(圖書借閱記錄)的各種操作,提供多種方式獲取日誌(按讀者、按圖書、按日期、按借閱和歸還狀態等)。).所有的邏輯處理和轉換都在方法內部實現,它返回給遠程接口值對象或值對象向量。此外,還有以下方法:
方法函數
public Boolean Userborrowbook(String Username,String Book ISBN)用壹個事務封裝了讀者借書的所有邏輯操作。借書成功返回真值時,不能返回假值,所以調用enCode bean對中文進行轉碼。
Public Boolean用戶Returnbook (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
public static String title = " super library ";//系統名稱
公共靜態字符串dbS = " booksManagerDS//數據庫的JNDI名稱
公共靜態字符串errorPage="dealError.jsp?theError = ";//友好的錯誤處理頁面,用get方法傳遞錯誤原因。
public static String home page = " default . JSP ";//默認主頁
//權威-。
公共靜態字符串Reader = " Reader//讀者
公共靜態字符串UserAdmin = " UserAdmin//用戶管理員
公共靜態字符串BookAdmin = " BookAdmin//圖書管理員
公共靜態字符串SuperAdmin = " SuperAdmin//系統管理員
//年級-。
公共靜態字符串本科= "本科";//本科生
public static int undergater enew = 1;//本科生可以續貸的次數。
public static int undebudatemaxday = 30;//本科生壹次可以借的天數。
公共靜態字符串Graduate = " Graduate//研究生
public static int graduate new = 2;//研究生可以續貸的次數。
public static int graduate max day = 45;//研究生壹次可以借閱的天數。
公共靜態字符串Teacher = " 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 " >& 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 " >& lt/IFRAME & gt;
內嵌上下導航條,使網站導航清晰,方便用戶瀏覽。
向頁眉添加代碼:
& ltmeta HTTP-EQUIV = " pragma " CONTENT = " no-cache " & gt;
& ltmeta HTTP-EQUIV = " expires " CONTENT = " 0 " >
客戶端不緩存網頁,保證了客戶端每次瀏覽頁面都從服務器獲取最新版本,從而正確顯示。
提供智能搜索(獲取盡可能多的匹配)和精確搜索(獲取盡可能精確的匹配)書籍,服務器端編程采用模糊搜索方式。
在客戶端使用javascript第壹次檢查表單提交,然後第二次提交到服務器。校驗碼包括:用戶名是否重復,年齡是否為合適的數字,兩個密碼是否壹致,郵箱是否合法,密碼是否過短,用戶名是否過短,用戶名密碼是否為空等等。
利用隨機生成JPG圖片驗證碼的方法防止機器人登錄。
使用會話級java bean實現頁面中的分頁,在會話中保存用戶對該頁面的訪問狀態,在會話結束前始終記住用戶訪問該頁面對應的頁碼。
在頁面中使用應用級java bean實現安全的系統設置。當服務器啟動時,可以在應用程序級別設置系統運行參數。只要服務器沒有關閉,此設置就始終有效,並適用於所有用戶。如果不小心設置導致系統錯誤或者妳想恢復系統默認設置,妳只需要重啟服務器。
在會話bean的調用包ejbClient中,創建壹個系統運行日誌,通過包中的writeF類寫入web服務器的C:\\booksManagerLog.dat中,可用於查詢。
4.4本系統實現的功能
確定圖書的基本信息,包括書名、作者、出版日期、當前借閱狀態等屬性。
系統的用戶包括讀者、圖書管理員、用戶管理員和系統管理員。
讀者可以查詢書籍;館員可以完成圖書管理和借閱管理;讀者管理員可以完成讀者管理的功能;系統管理員可以使用系統的所有功能。
圖書管理:新書登記、圖書查詢、圖書註銷;
借閱管理:借書還書,過期讀者查詢。
讀者管理:增加讀者、刪除讀者、查詢讀者、管理讀者類別(設置研究生、本科生、教師等可以借閱的圖書數量、可以借閱的天數、可以續借的次數等。)
系統管理:供系統管理員使用,包括用戶權限管理(添加用戶、刪除用戶、修改密碼等。)、系統借用日誌、系統運行日誌、系統設置等功能。
頁面輸入有驗證碼,密碼訪問加密。
預定到期提醒
體現分層設計思想,使用MVC架構。
實現了多個bean,實現了bean之間的對應關系。
EJB QL,交易控制等等都用上了。
使用JSP-& gt;session bean-& gt;entity bean-& gt;數據庫模式
數據庫使用壹些高級技術,如觸發器和存儲過程。