柚子快報邀請碼778899分享:前端 基于web的圖書管理系統(tǒng)
柚子快報邀請碼778899分享:前端 基于web的圖書管理系統(tǒng)
因為是本人本科階段某課程的課程設計,所以并不適合全部人,僅供參考。
由于本人水平,可能會有地方有誤,望以指正。
一、系統(tǒng)概要設計
序號 功能 功能說明 1 登錄 借閱人、管理員均可用自己的賬戶信息可以登錄系統(tǒng) 2 圖書查詢 借閱人、管理員登錄系統(tǒng)可以查詢圖書情況 3 圖書錄入 管理員登錄系統(tǒng)后可以錄入圖書 4 圖書修改 管理員登錄系統(tǒng)后可以修改圖書的信息 5 刪除圖書 管理員登錄系統(tǒng)后可以刪除圖書的信息 6 修改密碼 借閱人、管理員登錄系統(tǒng)后可以修改自己賬號的密碼 7 讀者管理 管理員登錄系統(tǒng)后對讀者信息悉心進行管理,包括添加借閱人信息、圖書信息和刪除 8 分類管理(附加) 對圖書進行分類,進行分類管理 9 自動識別(附加) 登錄系統(tǒng)時會識別是管理人員或者是借閱人 10 退出功能(附加) 將自己的賬號退出 11 判斷輸入的信息是否合法(附加) 在注冊,登錄時判斷輸入的信息是否合法
二、數(shù)據(jù)庫設計
2.1 數(shù)據(jù)庫邏輯結構設計
管理員管理關系:admin(aid,username,name,password,emali,phone,status,lend_num,max_num)
圖書管理關系:book(bid,name,card,author,num,press,type)
圖書分類管理:book type(tid,name)
圖書歸還管理:history(hid,aid,bid,card,bookname,adminname,username,begintime,endtime,status)
2.2 數(shù)據(jù)庫表
(1)管理員表(admin)
屬性:aid,username,name,password,emali,phone,status,lend_num,max_num
(2)圖書管理關系 (book)
屬性:bid,name,card,author,num,press,type
(3)圖書分類管理
屬性:book type(tid,name)
(4)圖書歸還(history)
屬性:hid,aid,bid,card,bookname,adminname,username,begintime,endtime,status
三、系統(tǒng)實現(xiàn)
3.1?功能1登錄注冊
3.1.1流程設計
進入圖書管理系統(tǒng)的注冊頁面進入圖書管理系統(tǒng)的登錄頁面填寫登錄者的登錄信息,點擊按鈕將信息提交給數(shù)據(jù)庫檢索圖書管理系統(tǒng)數(shù)據(jù)庫信息,對比信息是否和數(shù)據(jù)庫一致登錄者輸入的登錄信息通過系統(tǒng)數(shù)據(jù)庫驗證,系統(tǒng)會自動識別是管理員或者是借閱人,進入相應的頁面頁面
3.1.2技術應用
在實現(xiàn)登錄功能中,主要由項目中的login.jsp,來實現(xiàn)。在login.jsp中我們主要來實現(xiàn)登陸界面的設計和判斷賬號密碼不能為空。在判斷賬號密碼不能為空上,我使用了javascript來實現(xiàn),首先獲取賬號和密碼的內(nèi)容,然后判斷賬號和密碼是否為空,如果為空的話彈出一個警告窗口信息為“這是必填字段”,然后輸入焦點或者光標定位到這個為空的文本框里。我們用HTML的相關技術來實現(xiàn)登錄頁面的設計,先利用
創(chuàng)建一個HTML 表單,第一行是標題“歡迎使用圖書管理系統(tǒng)”,然后利用3.1.3技術選擇分析
頁面跳轉,我用的是在button標簽中加上onclick屬性,賦值為Javascript,
3.1.4關鍵代碼
????(1)查詢信息是否正確
??①有關讀者賬號的連接數(shù)據(jù)庫操作,登錄驗證,注冊,修改賬號,修改密碼
public class AdminDao {
/**
* 登錄驗證功能,傳入用戶名和密碼,在數(shù)據(jù)庫中查找,如果找到了,返回true,沒找到則返回false
* @param username
* @param password
* @return
*/
public boolean Login_verify(String username,String password){
Connection conn = DBUtil.getConnectDb();
String sql = "select * from admin where username="+username+" and password="+password;
PreparedStatement stm = null;
ResultSet rs = null;
try {
stm = conn.prepareStatement(sql);
rs = stm.executeQuery();
if(rs.next()){
return true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.CloseDB(rs, stm, conn);
}
return false;
}
②注冊的代碼
/**
* 注冊賬號的函數(shù),傳入賬號,密碼,姓名,郵箱,手機號,借閱天數(shù),可借閱數(shù)
* @param username
* @param password
* @param name
* @param email
* @param phone
* @param lend_num
* @param max_num
*/
public void Register(String username, String password, String name, String email, String phone,int lend_num,int max_num) {
// TODO Auto-generated method stub
Connection conn = DBUtil.getConnectDb();
String sql = "insert into admin(status,username,password,name,email,phone,lend_num,max_num) values(?,?,?,?,?,?,?,?)";
int rs = 0;
PreparedStatement stm = null;
try {
stm = conn.prepareStatement(sql);
stm.setInt(1, 1);
stm.setString(2, username);
stm.setString(3, password);
stm.setString(4, name);
stm.setString(5, email);
stm.setString(6, phone);
stm.setInt(7, lend_num);
stm.setInt(8, max_num);
rs = stm.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
5.實現(xiàn)
圖3.1.1注冊界面
圖3.1.2登錄界面
3.2?功能2查看圖書信息
3.2.1流程設計(借閱人模塊)
借閱人登陸系統(tǒng)后點擊圖書查詢可以查詢圖書信息點擊借閱信息后后,可以查看借閱的信息點擊借閱歷史,可以對書籍的借閱歷史進行了解在整體的右上方可以查看個人資料、修改自己的密碼、還可以退出系統(tǒng)
3.2.2技術應用
①圖書查詢
學生成績查詢功能主要是由/books/select.jsp來實現(xiàn)的。在這里,利用row進行頁面布局,使用panel進行控件,使它們在一個界面。
②借閱信息與借閱歷史
學生留言功能主要是由borrow.jsp完成、借閱歷史由history.jsp完成
③修改密碼
修改圖書系統(tǒng)賬號密碼功能主要是由項目中的updatepwd完成來實現(xiàn)。。
讓它存儲通過調(diào)用數(shù)據(jù)庫中的getstudent()方法查詢出來的相關信息。接下來我們要設置密碼不能為空,在設置密碼不能為空,我使用了javascript來實現(xiàn),首先利用getElementById ()方法獲取密碼的內(nèi)容,然后判斷密碼是否為空,如果為空的話利用alert?()彈出一個警告窗口信息為“這是必填字段”,然后輸入焦點或者光標定位到這個為空的文本框里,用username.focus();最后返回一個失敗。然后,我們可以在文本框中輸入新的密碼點擊保存,之后新密碼會被同步到數(shù)據(jù)庫中。我是使用的文本框并設置οnclick="savestudent()" value="保存"屬性來實現(xiàn)將新密碼保存到數(shù)據(jù)庫中的。
3.2.3技術選擇分析
采用了javascript中focus()的語句,文本輸入框要鼠標點擊下輸入框,等光標在里面之后再敲鍵盤輸入。 ???focus()的作用就是將光標放在輸入框中,省掉了你點擊的那一下,直接輸入你要輸入的內(nèi)容。可以留意下百度的首頁,你打開頁面之后光標就直接在輸入框里了,直接敲鍵盤輸入你要搜索的內(nèi)容就行了,省掉了還要用鼠標點擊下輸入框才能輸入的步驟,非常人性化的考慮。
3.2.4關鍵代碼
①圖書查詢
(1)查詢語句
①查看全部圖書信息
返回的是ArrayList數(shù)組形式
try {
stm = conn.prepareStatement(sql);
rs = stm.executeQuery();
while(rs.next()){
BookBean tag = new BookBean();
tag.setBid(rs.getInt("bid"));
tag.setName(rs.getString("name"));
tag.setCard(rs.getString("card"));
tag.setType(rs.getString("type"));
tag.setAutho(rs.getString("autho"));
tag.setPress(rs.getString("press"));
tag.setNum(rs.getInt("num"));
tag_Array.add(tag);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.CloseDB(rs, stm, conn);
}
②獲取用戶想要的單個圖書/**
?* 用戶查找圖書,根據(jù)輸入的名稱,使用like進行模糊查詢,然后返回一個ArrayList數(shù)組類型
?*/
public ArrayList
// TODO Auto-generated method stub
ArrayList
Connection conn = DBUtil.getConnectDb();
String sql = "select * from book where name like '%"+name+"%'";
PreparedStatement stm = null;
ResultSet rs = null;
try {
stm = conn.prepareStatement(sql);
rs = stm.executeQuery();
while(rs.next()){
BookBean tag = new BookBean();
tag.setBid(rs.getInt("bid"));
tag.setName(rs.getString("name"));
tag.setCard(rs.getString("card"));
tag.setType(rs.getString("type"));
tag.setAutho(rs.getString("autho"));
tag.setPress(rs.getString("press"));
tag.setNum(rs.getInt("num"));
tag_Array.add(tag);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.CloseDB(rs, stm, conn);
}
return tag_Array;
}
②圖書借閱信息
?* 獲取借閱記錄的全部信息,傳入的條件有status,aid,表示搜索正在借閱的,或者已經(jīng)還書的信息,aid代表當前登錄用戶
try {
stm = conn.prepareStatement(sql);
rs = stm.executeQuery();
while(rs.next()){
HistoryBean tag = new HistoryBean();
tag.setHid(rs.getInt("hid"));
tag.setAid(rs.getInt("aid"));
tag.setBid(rs.getInt("bid"));
tag.setBookname(rs.getString("bookname"));
tag.setCard(rs.getString("card"));
tag.setAdminname(rs.getString("adminname"));
tag.setUsername(rs.getString("username"));
tag.setBegintime(rs.getString("begintime"));
tag.setEndtime(rs.getString("endtime"));
tag.setStatus(rs.getInt("status"));
tag_Array.add(tag);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.CloseDB(rs, stm, conn);
}
③查看借閱歷史
public void setHid(int hid) {
this.hid = hid;
}
public int getAid() {
return aid;
}
public void setAid(int aid) {
this.aid = aid;
}
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public String getAdminname() {
return adminname;
}
public void setAdminname(String adminname) {
this.adminname = adminname;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getBegintime() {
return begintime;
}
public void setBegintime(String begintime) {
this.begintime = begintime;
}
public String getEndtime() {
return endtime;
}
public void setEndtime(String endtime) {
this.endtime = endtime;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
④修改密碼
public boolean Login_verify(String username,String password){
Connection conn = DBUtil.getConnectDb();
String sql = "select * from admin where username="+username+" and password="+password;
PreparedStatement stm = null;
ResultSet rs = null;
try {
stm = conn.prepareStatement(sql);
rs = stm.executeQuery();
if(rs.next()){
return true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.CloseDB(rs, stm, conn);
}
return false;
3.2.5實現(xiàn)
圖3.2.1 讀者登陸系統(tǒng)的主頁面
圖3.2.2 借閱信息查詢頁面
圖3.2.3 借閱歷史頁面
圖3.2.4 個人資料頁面
圖3.2.5 修改密碼
3.3?功能3對圖書和借閱者增加、刪除、修改
3.3.1流程設計
管理員進入系統(tǒng)后可以對圖書進行管理可以查看讀者信息,對讀者信息進行修改和刪除管理員可以對圖書進行分類管理員可以查看借閱信息同時,管理員可以查看圖書歸還信息管理員同樣可以對密碼和個人資料進行修改
3.3.2技術應用
①管理員管理圖書
在管理員管理圖書功能中主要由AdminDao.jsp來實現(xiàn)。
在AdminDao.jsp中,首先要判斷登陸賬號的角色是否為管理員。定義了一個role,并且令它等于從session中保存的數(shù)據(jù)的role。接下來判斷,如果role不為空,接著判斷如果角色為借閱者則成功進入借閱者主頁面。反之則返回登陸頁面。接下來是構思頁面的布局。在這個頁面中有表頭、主體、分割線、內(nèi)容、表單和表尾這幾個部分。我重點介紹主體中的內(nèi)容部分。在內(nèi)容中我創(chuàng)建了一個表單,又利用css相關知識設計樣式。
②管理員刪除相關信息
在管理員刪除相關信息功能中主要是由admin_user.jsp、admin_book.jsp來實現(xiàn)的。
try {
stm = conn.prepareStatement(sql);
rs = stm.executeQuery();
while(rs.next()){
TypeBean tag = new TypeBean();
tag.setTid(rs.getInt("tid"));
tag.setName(rs.getString("name"));
tag_Array.add(tag);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.CloseDB(rs, stm, conn);
}
在admin_booktype.jsp中,首先定義一個JDBCUtil.java的名稱db。定義一個teachername并讓它等于獲取保存在 session 對象中名稱為 name的屬性信息。再定義一個sql,來存儲查詢對應的msg表和student表的sql語句。定義一個map集合data,讓它存儲通過調(diào)用數(shù)據(jù)庫中的comminlist()方法查詢出來的相關信息。接下來利用HTML技術來創(chuàng)建一個表格,表頭為“圖書分類、操作、增加分類”然后通過循環(huán)來獲取data中存儲的對應信息并填到列表中。
在huifu.jsp中,我們要使回復內(nèi)容不能為空并把回復內(nèi)容保存進grademanage數(shù)據(jù)庫的msg表中。在實現(xiàn)這些功能前我們要先定義一個JDBCUtil.java的名稱db。定義一個msgid并讓它等于使用request.getParameter()方法獲取的id。再定義一個sql,來存儲查詢對應的msg表和student表的sql語句。定義一個map集合data,讓它存儲通過調(diào)用數(shù)據(jù)庫中的comminlist()方法查詢出來的相關信息。
接下來是構思頁面的布局。在這個頁面中有表頭、主體、分割線、內(nèi)容、表單和表尾這幾個部分。我重點介紹主體中的內(nèi)容部分。在內(nèi)容中我創(chuàng)建了一個表單,又利用css相關知識設計樣式。
3.3.3技術選擇分析
在頁面?zhèn)髦禃r采用了session頁面取值傳值,這種傳值方式優(yōu)點在于使用簡單,不僅能傳遞簡單數(shù)據(jù)類型,還能傳遞對象。同時,數(shù)據(jù)量大小是不限制的。缺點在于在Session變量存儲大量的數(shù)據(jù)會消耗較多的服務器資源。容易丟失。 ????在使用時要注意,session不用時可以銷毀它,銷毀的方法是:清除一個:Session.Remove("session名");
3.3.4實現(xiàn)
圖3.3.1 管理員登錄進入的主頁面
圖3.3.2 管理員修改圖書信息
圖3.3.3 管理員刪除圖書信息
圖3.3.4 管理員添加圖書
圖3.3.5 管理員添加讀者
圖3.3.6 管理員刪除讀者
圖3.3.7 管理員添加、修改、刪除圖書分類信息
圖3.3.8管理員查看圖書歸還信息
3.4?功能4連接數(shù)據(jù)庫(附加)
3.4.1流程設計
(1)用數(shù)據(jù)庫建立管理員信息的管理
(2)用數(shù)據(jù)庫建立圖書信息的管理
3.4.2技術應用
該功能主要由BookDao.java和AdminDao.java文件實現(xiàn)。
Book.java中首先通過獲取數(shù)據(jù)庫連接對象,調(diào)用PreparedStatement的executeQuery方法和相應的SQL語句,執(zhí)行查詢操作。然后通過while循環(huán)遍歷查詢結果集ResultSet,將結果封裝到UserBean對象中,并返回該對象。如果沒有符合條件的結果,直接返回null。
AdminDao.java實現(xiàn)了用戶注冊時的數(shù)據(jù)庫操作,包括添加用戶、查詢用戶是否存在等功能.加載MySQL的JDBC驅動,DriverManager的getConnection方法獲得連接對象,通過PreparedStatement執(zhí)行insert語句,將用戶輸入的信息插入到數(shù)據(jù)庫中。調(diào)用方法實現(xiàn)用戶名的查詢操作,判斷輸入的用戶名或用戶名和密碼是否存在。然后調(diào)用方法實現(xiàn)用戶信息的插入操作,將用戶輸入的用戶名、密碼、郵箱和手機號碼插入到用戶表中
3.4.3技術選擇分析
(1)加載MySQL的JDBC驅動:通過Class.forName(“com.mysql.jdbc.Driver”)方法加載MySQL的JDBC驅動。
(2)通過PreparedStatement的executeUpdate方法和相應的SQL語句,向數(shù)據(jù)庫中添加用戶信息并更新數(shù)據(jù)。
第四章 項目測試與評價
測試是開發(fā)一個系統(tǒng)的重要環(huán)節(jié),是對軟件最后的完成起至關重要的作用。隨著新技術的出現(xiàn),軟件測試的方法也變得越來越多,對系統(tǒng)整體的功能和性能需求也逐步提高。測試的目的保證系統(tǒng)的完整性,避免某些功能影響其他功能的運行,保證了系統(tǒng)的獨立性。
4.1功能測試
用戶登錄注冊模塊測試
登錄測試主要測試用戶名和密碼是否正確。登錄功能測試用例如表2-1所示。
表4-1?用戶登錄注冊功能測試用例
表格編號:001 項目名稱:基于Javaweb的圖書管理系統(tǒng)的設計與實現(xiàn) 模塊 編號 序號 測試用例描述 操作過程及數(shù)據(jù) 預期結果 驗證結果 1.1 功能描述:登錄功能 1 密碼輸錯 用戶名:202002 密碼:1234 登錄失敗,請檢查用戶名或密碼 √ 2 賬號輸錯 用戶名:527573 密碼:123456 登錄失敗,請檢查用戶名或密碼 √ 3 正常登錄 用戶名:123 密碼:123 進入系統(tǒng) √
用戶信息管理模塊測試
用戶信息管理模塊測試主要是測試管理員對用戶的信息能否正常的進行管理。表2-2為用戶信息管理功能測試的用例。
表4-2?用戶信息管理功能測試用例
表格編號:002 項目名稱:基于Javaweb的圖書管理系統(tǒng)的設計與實現(xiàn) 模塊 編號 序號 測試用例描述 操作過程及數(shù)據(jù) 預期結果 驗證結果 2.1 功能描述:添加用戶 1 用戶名為空 用戶名:null 添加失敗 √ 2 密碼為空 密碼:null 添加失敗? √
3 正常添加 用戶名:張三 賬號:123 密碼:123 添加用戶成功 √ 2.2 功能描述:修改用戶密碼 1 修改用戶密碼 修改前:123456 修改后:123456 修改失敗 √ 2 修改用戶密碼 修改前:123 修改后:123456 修改成功 √ 2.3 功能描述:刪除用戶 1 刪除用戶 點擊刪除按鈕,點擊確定 刪除用戶成功 √
4.2?項目評價
通過環(huán)境測試、功能測試、性能測試等測試環(huán)節(jié),證明本系統(tǒng)能夠滿足用戶的需求。能夠保障管理數(shù)據(jù)的安全、準確;能夠實現(xiàn)方便的擴展,滿足圖書館發(fā)展的需要。
易安裝、部署;系統(tǒng)維護方便;對操作人員的技能要求比較低,操作方便。在高系統(tǒng)配置、高網(wǎng)絡帶寬和容易得到保證的情況下,我們最需要考慮的性能需求就是系統(tǒng)安全性問題。在開發(fā)系統(tǒng)的每個階段,均需要考慮彼此間的認證與授權。尤其要注意認證,簡單地說就是確定誰是特定用戶,并針對安全源驗證該用戶的身份。在處理完識別用戶的方法之后,必須利用一種方法以向用戶授權,從而能夠使用系統(tǒng)的特定功能。
使用了css技術,設置頁面的樣式和布局??梢允沟卿涰撁娴母鱾€元素的布局和樣式達到美觀和易用的要求,同時也可以提高用戶的交互體驗和操作便利性。 ????在安全問題上,前端和后端相分離,提高了代碼的安全性和維護性,便于后期進行代碼功能的完善和管理。
第五章?結語
5.1、出現(xiàn)的問題
在我寫添加圖書的功能的時候我遇到了添加失敗的情況,一直添加不成功。我在寫錄入圖書信息的時候,遇到了錄入失敗的情況。配置環(huán)境比較麻煩,尤其是之前的MySQL有些問題想添加一些新功能,但是總是出錯
5.2、解決方法
重新配置了MySQL,然后成功使用了數(shù)據(jù)庫經(jīng)過檢查發(fā)現(xiàn)錄入失敗是因為數(shù)據(jù)庫中表的內(nèi)容有誤添加新功能出錯,后來從網(wǎng)上查找資料,看視頻,成功解決
??5.3、項目總結
經(jīng)過這幾周的努力,圖書管理系統(tǒng)基本開發(fā)完畢。其功能基本達到預期目的,對于數(shù)據(jù)的一致性的問題也通過程序進行了有效的解決。但是由于系統(tǒng)設計時間較短,所以該系統(tǒng)還有許多不盡如人意的地方,有待進一步改善。
我對系統(tǒng)中的列表分頁功能比較滿意,分頁技術是把數(shù)據(jù)全部查詢出來,然后再進行分頁。本系統(tǒng)中含有不少的列表,對列表進行分頁可以,降低帶寬使用,提高訪問速度。
在這個圖書管理系統(tǒng)中,登錄功能、圖書查詢功能、圖書增加、修改圖書、修改密碼功能、借閱者錄入、查看已錄入圖書、查看已錄入借閱者、修改密碼功能、退出系統(tǒng)、自動識別功能均已實現(xiàn)
但是,該程序也有不足的地方,由于我的水平不高,做出來的程序還是有許多問題存在。經(jīng)過這次課程設計,通過對程序的編制,調(diào)試和運行,使我更好的掌握了文件的輸入輸出流基本性質和有關它們之間關系使用問題的解決方法,熟悉了各種調(diào)用的數(shù)據(jù)類型,在調(diào)試和運行過程中使我更加的了解和熟悉程序運行的環(huán)境,提高了我對程序調(diào)試分析的能力和對錯誤的糾正能力。通過這次JavaWeb課程設計實驗,使我能夠綜合運用所學知識,發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力,此次課程設計是對我實際工作能力的具體訓練和考察過程。
柚子快報邀請碼778899分享:前端 基于web的圖書管理系統(tǒng)
相關鏈接
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。