图书管理模块功能设计
圖書管理功能模塊的具體功能如下:
1 查看圖書信息列表:用于顯示圖書的基本信息。
2 圖書詳細信息:用于顯示指定圖書的詳細信息。
3 添加圖書信息:用于添加圖書信息。
4 修改圖書信息:用于修改圖書信息。
5 刪除圖書信息:用于刪除圖書信息。
6 查詢圖書信息:用于根據不同條件查詢圖書信息。
圖書檔案管理功能模塊文件架構如圖1所示。
圖書檔案管理功能模塊文件架構如圖1所示。
?
在圖書檔案管理模塊中涉及的數據表是圖書信息表(tb_bookinfo)、書架設置表(tb_bookcase)、圖書類型表(tb_booktype)和出版社信息表(tb_publishing),這4個數據表間通過相應的字段進行關聯,如圖2所示。
?
圖書檔案功能模塊的Action實現類Book繼承了Action類。在該類中,首先需要在該類的構造方法中實例化圖書檔案模塊的BookDAO類(該類用于實現與數據庫的交互)。Action
實現類的主要方法是perform(),該方法會被自動執行,它本身沒有具體的事務,它是根據通過HttpServletRequest的getParameter()方法獲取的action參數值執行相應方法的。
圖書檔案管理模塊Action實現類的關鍵代碼如下:
import org.apache.struts.action.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.actionForm.BookForm;
import org.apache.struts.action.Action;
import com.dao.BookDAO;
import java.util.Date;
public class Book extends Action {
private BookDAO bookDAO = null;
public Book() {
this.bookDAO = new BookDAO();
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
String action =request.getParameter("action");
if(action==null||"".equals(action)){
request.setAttribute("error","您的操作有誤!");
return mapping.findForward("error");
}else if("bookAdd".equals(action)){
return bookAdd(mapping,form,request,response); //添加圖書信息
}else if("bookQuery".equals(action)){
return bookQuery(mapping,form,request,response); //查詢全部圖書信息
}else if("bookModifyQuery".equals(action)){
return bookModifyQuery(mapping,form,request,response); //修改圖書信息時應用的查詢
}else if("bookModify".equals(action)){
return bookModify(mapping,form,request,response); //修改圖書信息
}else if("bookDel".equals(action)){
return bookDel(mapping,form,request,response); //刪除圖書信息
}else if("bookDetail".equals(action)){
return bookDetail(mapping,form,request,response); //查詢圖書詳細信息
}else if("bookifQuery".equals(action)){
return bookifQuery(mapping,form,request,response); //按不同條件查詢圖書信息
}
request.setAttribute("error","操作失敗!");
return mapping.findForward("error");
}
… //此處省略了該類中其他方法
}
管理員登錄后,選擇“圖書管理”/“圖書檔案管理”菜單項,進入到查看圖書列表頁面,在該頁面中將顯示全部圖書信息列表,同時提供添加圖書信息、刪除圖書信息、修改圖書信息的超級鏈接。
查看圖書信息列表頁面的運行結果如圖3所示。
打開保存實現半透明背景菜單的全部JavaScript代碼的“JS\menu.JS”文件,可以找到如下所示的“圖書檔案管理”菜單項的超級鏈接代碼:
<a href=book.do?action=bookQuery>圖書檔案管理</a>
從上面的URL地址中可以知道,查看圖書信息列表模塊涉及的action的參數值為“bookQuery”,當action=bookQuery時,會調用查看圖書信息列表的方法bookQuery(),具體代碼如下:
if("bookQuery".equals(action)){
return bookQuery(mapping,form,request,response);
}
在查看圖書信息列表的方法bookQuery()中,首先調用BookDAO類中的query()方法查詢全部圖書信息,再將返回的查詢結果保存到HttpServletRequest的對象book中。查看圖書信息列表的方法bookQuery()的具體代碼如下:
private ActionForward bookQuery(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
String str=null;
request.setAttribute("book",bookDAO.query(str));
return mapping.findForward("bookQuery");
}
從上述代碼中可以知道,查看圖書信息列表使用的BookDAO類的方法是query()。在query()方法中首先根據參數strif的值查詢出符合條件的圖書信息(此時的strif的值為null,所以查詢全部圖書信息),然后將查詢結果保存到Collection容器類中并返回該容器類。query()方法的具體代碼如下:
public Collection query(String strif){
BookForm bookForm=null;
Collection bookColl=new ArrayList();
String sql="";
if(strif!="all" && strif!=null && strif!=""){
sql="select * from (select b.*,c.name as bookcaseName,p.pubname as publishing,t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid=t.id where b.del=0) as book where book."+strif+"'";
}else{
sql="select b.*,c.name as bookcaseName,p.pubname as publishing,t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid= t.id where b.del=0";
}
ResultSet rs=conn.executeQuery(sql);
try {
while (rs.next()) {
bookForm=new BookForm();
bookForm.setBarcode(rs.getString(1));
bookForm.setBookName(rs.getString(2));
bookForm.setTypeId(rs.getInt(3));
bookForm.setAuthor(rs.getString(4));
bookForm.setTranslator(rs.getString(5));
bookForm.setIsbn(rs.getString(6));
bookForm.setPrice(Float.valueOf(rs.getString(7))); //此處必須進行類型轉換
bookForm.setPage(rs.getInt(8));
bookForm.setBookcaseid(rs.getInt(9));
bookForm.setStorage(rs.getInt(10));
bookForm.setInTime(rs.getString(11));
bookForm.setOperator(rs.getString(12));
bookForm.setDel(rs.getInt(13));
bookForm.setId(Integer.valueOf(rs.getString(14)));
bookForm.setBookcaseName(rs.getString(15));
bookForm.setPublishing(rs.getString(16));
bookForm.setTypeName(rs.getString(17));
bookColl.add(bookForm);
}
} catch (SQLException ex) {
}
conn.close();
return bookColl;
}
在struts-config.xml文件中配置查看圖書信息列表所涉及的<forward>元素,代碼如下:
<forward name="bookQuery" path="/book.jsp" />
接下來的工作是將Action實現類中bookQuery()方法返回的查詢結果顯示在查看圖書信息列表頁book.jsp中。在book.jsp中,首先通過request.getAttribute()方法獲取查詢結果并將其保存在Connection容器類中,再通過循環將圖書信息以列表形式顯示在頁面中。
管理員登錄系統后,選擇“圖書管理”/“圖書檔案管理”菜單項,進入到查看圖書列表頁面,在該頁面中單擊“添加圖書信息”超級鏈接,進入到添加圖書信息頁面。添加圖書信息頁面的運行結果如圖4所示。
添加圖書信息頁面主要用于收集輸入的圖書信息,及通過自定義的JavaScript函數驗證輸入信息是否合法,該頁面中所涉及的表單元素如表1所示。
在添加圖書信息頁面中輸入合法的圖書信息后,單擊“保存”按鈕,網頁會訪問一個URL,該URL是“book.do?action=bookAdd”。從該URL地址中可以知道添加圖書信息模塊涉及到的action的參數值為“bookAdd”,也就是當action= bookAdd時,會調用添加圖書信息的方法bookAdd(),具體代碼如下:
if("bookAdd".equals(action)){
return bookAdd(mapping,form,request,response);
}
在添加圖書信息的方法bookAdd()中,首先需要將接收到的表單信息強制轉換成ActionForm類型,并用獲得指定屬性的getXXX方法,重新設置該屬性的setXXX方法,然后調用BookDAO類中的insert()方法,將添加的圖書信息保存到數據表,并將返回值保存到變量ret中:如果返回值為1,表示信息添加成功,將頁面重定向到添加信息成功頁面;如果返回值為2,表示該圖書信息已經添加,將錯誤提示信息“該圖書信息已經添加!”保存到HttpServletRequest的對象error中,然后將頁面重定向到錯誤提示信息頁面;否則將錯誤提示信息“圖書信息添加失敗!”保存到HttpServletRequest的對象error中,并將頁面重定向到錯誤提示頁。添加圖書信息的方法bookAdd()的具體代碼如下:
private ActionForward bookAdd(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
BookForm bookForm = (BookForm) form;
…… //此處省略了用相關屬性的getXXX方法重新設置該屬性的setXXX方法的代碼
Date date1=new Date();
java.sql.Date date=new java.sql.Date(date1.getTime());
bookForm.setInTime(date.toString());
bookForm.setOperator(bookForm.getOperator());
int a=bookDAO.insert(bookForm);
if(a==1){
return mapping.findForward("bookAdd");
}else if(a==2){
request.setAttribute("error","該圖書信息已經添加!");
return mapping.findForward("error");
}else{
request.setAttribute("error","圖書信息添加失敗!");
return mapping.findForward("error");
}
}
從上述代碼中可以知道,添加圖書信息頁使用的BookDAO類的方法是insert()。在insert()方法中,首先從數據表tb_bookinfo中查詢輸入的圖書名稱或條形碼是否存在:如果存在,將標志變量設置為2;否則將輸入的信息保存到圖書信息表中,并將返回值賦給標志變量,最后返回標志變量。由于添加圖書信息的insert()方法同添加管理員信息的insert()方法類似,所以此處只給出查詢輸入的圖書名稱或條形碼是否存在和向圖書信息表中插入數據的SQL語句。
查詢輸入的圖書名稱或條形碼是否存在的SQL語句如下:
String sql1="SELECT * FROM tb_bookinfo WHERE barcode='"+bookForm.getBarcode()+"' or bookname='"+bookForm.getBookName()+"'";
向圖書信息表中插入數據的SQL語句如下:
sql ="Insert into tb_bookinfo (barcode,bookname,typeid,author,translator,isbn,price,page,bookcase,storage,inTime,operator) values('"+bookForm.getBarcode()+"','"+bookForm.getBookName()+"',"+bookForm.getTypeId()+",'"+bookForm.getAuthor()+"','"+bookForm.getTranslator()+"','"+bookForm.getIsbn()+"',"+bookForm.getPrice()+","+bookForm.getPage()+","+bookForm.getBookcaseid()+","+bookForm.getStorage()+",'"+bookForm.getInTime()+"','"+bookForm.getOperator()+"')";
在struts-config.xml文件中配置添加圖書信息所涉及的<forward>元素,代碼如下:
<forward name="bookAdd" path="/book_ok.jsp?para=1" />
管理員登錄系統后,選擇“圖書管理”/“圖書檔案管理”菜單項,進入到查看圖書列表頁面,在該頁面中,單擊想要修改的圖書信息后面的“修改”超級鏈接,進入到“修改圖書信息”頁面。修改圖書信息頁面的運行結果如圖5所示。
在修改圖書信息頁面中修改圖書信息后,單擊“保存”按鈕,網頁會訪問一個URL,該URL是“book.do?action=bookModify”。從該URL地址中可以知道保存修改圖書信息涉及的action的參數值為“bookModify”,也就是當action=bookModify時,會調用保存修改圖書信息的方法bookModify(),具體代碼如下:
if("bookModify".equals(action)){
return bookModify(mapping,form,request,response);
}
在保存修改圖書信息的方法bookModify()中,首先需要將接收到的表單信息強制轉換成ActionForm類型,并用獲得指定屬性的getXXX方法重新設置該屬性的setXXX方法,然后調用BookDAO類中的update()方法,將修改的圖書信息保存到數據表tb_bookinfo中,并將返回值保存到變量ret中,如果返回值為0,表示信息修改失敗,將錯誤提示信息“修改圖書信息失敗!”保存到HttpServletRequest的對象error中,然后將頁面重定向到錯誤提示信息頁面,否則將頁面重定向到設置信息成功頁面。保存修改圖書信息的方法bookModify()的具體代碼如下:
private ActionForward bookModify(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
BookForm bookForm=(BookForm)form;
bookForm.setBarcode(bookForm.getBarcode());
…… //此處省略了用相關屬性的getXXX方法重新設置該屬性的setXXX方法的代碼
int ret=bookDAO.update(bookForm);
if(ret==0){
request.setAttribute("error","修改圖書信息失敗!");
return mapping.findForward("error");
}else{
return mapping.findForward("bookModify");
}
}
從上述代碼中可以知道,保存修改圖書信息時使用的BookDAO類的方法是update()。在update()方法中將修改的圖書信息保存到圖書信息表tb_bookinfo中,并將返回值賦給標志變量,最后返回該標志變量。update()方法的具體代碼如下:
public int update(BookForm bookForm){
String sql="Update tb_bookinfo set typeid="+bookForm.getTypeId()+",author='"+bookForm.getAuthor()+"',translator='"+bookForm.getTranslator()+"',isbn='"+bookForm.getIsbn()+"',price="+bookForm.getPrice()+",page="+bookForm.getPage()+",bookcase="+bookForm.getBookcaseid()+",storage="+bookForm.getStorage()+" where id="+bookForm.getId()+"";
int falg=conn.executeUpdate(sql);
conn.close();
return falg;
}
在struts-config.xml文件中配置修改圖書信息頁所涉及的<forward>元素,代碼如下:
<forward name="bookModify" path="/book_ok.jsp?para=2" />
管理員登錄系統后,選擇“圖書管理”/“圖書檔案管理”菜單項,進入到查看圖書列表頁面,在該頁面中單擊想要刪除的圖書信息后面的“刪除”超級鏈接,進入到“刪除圖書信息”頁面。
在“查看圖書信息列表”頁面中可以找到刪除圖書信息的超級鏈接代碼,代碼如下所示:
<a href="book.do?action=bookDel&ID=<%=ID%>">刪除</a>
從上面的URL地址中可以知道,刪除圖書信息頁所涉及的action的參數值為“bookDel”,當action=bookDel時,會調用刪除圖書信息的方法bookDel(),具體代碼如下:
if("bookDel".equals(action)){
return bookDel(mapping,form,request,response);
}
在刪除圖書信息的方法bookDel()中,首先需要將接收到的表單信息強制轉換成ActionForm類型,并用獲得的id參數的值重新設置該ActionForm的setId方法,再調用BookDAO類中的delete()方法刪除指定的圖書信息,并根據執行結果將頁面轉到相應頁面。刪除圖書信息的方法bookDel()的具體代碼如下:
private ActionForward bookDel(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
BookForm bookForm=(BookForm)form;
bookForm.setId(Integer.valueOf(request.getParameter("ID")));
int ret=bookDAO.delete(bookForm);
if(ret==0){
request.setAttribute("error","刪除圖書信息失敗!");
return mapping.findForward("error");
}else{
return mapping.findForward("bookDel");
}
}
從上述代碼中可以知道,刪除圖書信息使用的BookDAO類的方法是delete()。由于在設計數據庫時采用了數據規范化原則,將圖書信息表、圖書借閱信息表和圖書歸還信息表緊密地關聯在一起,即圖書借閱信息表和圖書歸還信息中只保存了圖書的ID號,并沒有保存更多的圖書信息,為了保證數據的完整性,在刪除圖書信息時,并不是將其真正刪除,而是設置了一個標記字段,該標記字段del只有兩個值即0(表示沒有刪除)或1(表示已經刪除)。在刪除時,只要將該字段的值設置為1即可。刪除圖書信息的delete()方法的具體代碼如下:
public int delete(BookForm bookForm){
String sql="UPDATE tb_bookinfo SET del=1 where id="+bookForm.getId()+"";
int falg=conn.executeUpdate(sql);
return falg;
}
在struts-config.xml文件中配置刪除圖書信息所涉及的<forward>元素,代碼如下:
<forward name="bookDel" path="/book_ok.jsp?para=3" />
轉載于:https://www.cnblogs.com/zkn11199/p/5550866.html
總結
以上是生活随笔為你收集整理的图书管理模块功能设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类的加载次序与继承
- 下一篇: Java 判断字符串的存储长度