21.13 图书借还管理功能模块
21.13.1 图书借还功能模块
图书借还管理功能模块包括图书借还、借阅查询两个功能模块,具体功能如下。
图书借还模块包括图书借阅、图书续借、图书归还3个子模块,主要用于完成图书的借阅、归还和续借功能。
借阅查询模块完成图书借阅的全部信息查询。
21.13.2 创建图书借阅的Action实现类
主要技术:继承了DispatchAction类,对图书借还信息实现多业务操作。
图书借阅功能模块的Action实现类BorrowBookAction继承了DispatchAction类,实现了多业务操作。在该类中,首先需要在该类属性中实例化图书借阅模块的BorrowBookDao类、读者信息操作模块的ReaderDao类、图书信息模块的BookDao类及对时间操作的ShowTime类。图书借阅模块Action实现类的关键代码如下。
例程21-35:光盘\mr\21\wyBooks\src\com\action\BorrowBookAction.java
package com.action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import com.actionForm.BorrowBookForm;
import com.dao.BorrowBookDao;
import org.apache.struts.actions.DispatchAction;
import com.actionForm.BookForm;
import com.dao.BookDao;
import com.dao.ReaderDao;
import com.actionForm.ReaderForm;
import com.tool.ShowTime;
import java.util.List;
public class BorrowBookAction extends DispatchAction {
private BorrowBookDao borrowBookDao = new BorrowBookDao();
private ReaderDao readerDao = new ReaderDao();
private BookDao bookDao = new BookDao();
private ShowTime showTime = new ShowTime();
…… //此处省略了该类中其他方法,这些方法将在后面的具体过程中给出
}
21.13.3 图书借阅
管理员登录后,选择“借阅管理”/“图书借阅”菜单项,进入到图书借阅页面,在该页面中的“输入读者借书证号”文本框中输入读者的条形码(如:R-3),运行结果如图21.18所示。

图21.18 图书借阅第一步
1.查询读者借书证号的Action类
如图21.18所示,单击【查询】按钮,系统会自动检索出该读者的基本信息和未归还的借阅图书信息。
单击【查询】按钮触发的是“borrowBookAction.do?method=borrowBookLendTwo”,当method等于borrowBookLendTwo,实现的是BorrowBookAction类中的borrow Book Lend Two()方法,实现该方法的代码如下。
例程21-36:光盘\mr\21\wyBooks\src\com\action\BorrowBookAction.java
public ActionForward borrowBookLendTwo(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
String message = "";
ReaderForm readerForm = new ReaderForm();
readerForm.setBookCardMark(request.getParameter("readerCard"));
ReaderForm reader = readerDao.selectReader(readerForm);
if (reader == null) { // 判断借书证书是否已经存在以及判断是否已经过期
message = "您输入的借书证号不存在!!!";
} else {
java.sql.Date currentTime = java.sql.Date.valueOf(showTime
.showCurrentTime());
java.sql.Date overTime = java.sql.Date
.valueOf(reader.getOverTime());
if (currentTime.after(overTime)) {
message = "您的图书证件已经过期了,不能够再借书了!!!";
}
}
BorrowBookForm borrowBookForm = (BorrowBookForm) form;
borrowBookForm.setReaderCard(request.getParameter("readerCard"));
BorrowBookForm borrowBook=borrowBookDao.selectBorrowBook(borrowBookForm);
if (borrowBook != null
&& message.equals("")) { // 判断该用户是否已经借过书
if(borrowBook.getLend().equals("0")){
message = "您已经借过一本书了,不能再借了!!!";
}
}
if (!message.equals("")) { // 主要的执行结果
request.setAttribute("message", message);
return mapping.findForward("BorrowBookLendOne");
}
return mapping.findForward("BorrowBookLendTwo");
}
2.查询借阅图书信息的Action类
对读者信息查询核对后,进入图21.19所示的页面。

图21.19 图书借阅第二步
如图21.19所示,此时输入图书的条形码名称后,单击【查询】按钮,系统会自动检索出该图书的基本情况。
单击【查询】按钮触发的是“borrowBookAction.do?method= borrowBookLendThree”,当method等于borrowBookLendThree,实现的是BorrowBookAction类的borrowBookLendThree()方法,实现该方法的代码如下。
例程21-37:光盘\mr\21\wyBooks\src\com\action\BorrowBookAction.java
public ActionForward borrowBookLendThree(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
BookForm bookForm = new BookForm();
bookForm.setLineNumber(request.getParameter("bookLink"));
BookForm book = bookDao.selectBook(bookForm);
BorrowBookForm borrowBookForm = (BorrowBookForm) form; borrowBookForm.setBooklink (Integer.parseInt(request.getParameter("bookLink")));
borrowBookForm.setLend("0");
List borrowBookList = borrowBookDao.selectBorrowBookNumber(borrowBookForm);
String message = "";
if (book == null) {
message = "您所要借的图书不存在!!!";
} else {
int mistake = book.getBookSum() - borrowBookList.size();
if (mistake < 3) {
message = "您所要借的图书在库存中不足3本,不能借了!!!";
}
}
if (!message.equals("")) {
request.setAttribute("message", message);
return mapping.findForward("BorrowBookLendTwo");
}
ReaderForm readerForm = new ReaderForm();
readerForm.setBookCardMark(request.getParameter("readerCard"));
ReaderForm reader = readerDao.selectReader(readerForm);
request.setAttribute("bookForm", book);
request.setAttribute("readerForm", reader);
return mapping.findForward("borrowBookLendThree");
}
3.图书借阅Action类
单击【查询】按钮后,系统会自动查询图书信息,并将图书基本信息显示在页面中,运行结果如图21.20所示。
如图21.20所示,显示借阅图书的相关信息,单击【确认借阅】,实现图书借阅的功能。
单击【确认借阅】按钮触发的是“borrowBookAction.do?method= borrowBookLendFour”,当method等于borrowBookLendFour,实现的是BorrowBookAction类的borrow Book Lend Four()方法,实现该方法的代码如下。

图21.20 图书借阅第三步
例程21-38:光盘\mr\21\wyBooks\src\com\action\BorrowBookAction.java
public ActionForward borrowBookLendFour(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
BorrowBookForm borrowBookForm = (BorrowBookForm) form;
borrowBookForm.setBookAuthor(borrowBookForm.getBookAuthor());
borrowBookForm.setBooklink(borrowBookForm.getBooklink());
borrowBookForm.setBookName(borrowBookForm.getBookName());
borrowBookForm.setBookPrice(borrowBookForm.getBookPrice());
borrowBookForm.setBookPunbilc(borrowBookForm.getBookPunbilc());
borrowBookForm.setLend("0");
borrowBookForm.setLendPrice(borrowBookForm.getLendPrice());
borrowBookForm.setOperation(borrowBookForm.getOperation());
borrowBookForm.setReaderCard(borrowBookForm.getReaderCard());
borrowBookForm.setStartTime(borrowBookForm.getStartTime());
borrowBookForm.setOverTime(borrowBookForm.getOverTime());
if (borrowBookDao.insertBorrowBook(borrowBookForm)) {
request.setAttribute("message", "图书借阅成功");
} else {
request.setAttribute("message", "图书借阅成功");
}
return mapping.findForward("BorrowBookLendOne");
}
4.struts-config.xml文件配置
在struts-config.xml文件中配置图书借阅所涉及的<forward>元素,代码如下。
<action name="borrowBookForm" parameter="method" path="/borrowBookAction" scope="request" type= "com.action.BorrowBookAction" validate="true">
<forward name="BorrowBookLendOne" path="/borrowBook/borrowBookLendOne.jsp"/>
<forward name="BorrowBookLendTwo" path="/borrowBook/borrowBookLendTwo.jsp"/>
<forward name="borrowBookLendThree" path="/borrowBook/borrowBookLendThree.jsp"/>
</action>
21.13.4 图书归还
图书归还页面的设计方法同图书借阅类似,所不同的是,在图书归还页面中没有添加借阅图书的功能,而是添加了“图书归还”超链接。单击“借阅管理/图书归还”的超连接后,进入图书归还页面,输入图书证号,单击右侧【查询】按钮实现的是对图书归还信息的相关查询。
单击【查询】按钮触发的是“borrowBookAction.do?method= lendBookTwo”,当method等于lendBookTwo,实现的是BorrowBookAction类的lendBookTwo ()方法,实现该方法的代码如下。
例程21-39:光盘\mr\21\wyBooks\src\com\action\BorrowBookAction.java
public ActionForward lendBookTwo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
BorrowBookForm borrowBookForm = (BorrowBookForm) form;
borrowBookForm.setReaderCard(request.getParameter("readerCard"));
borrowBookForm.setLend("1");
BorrowBookForm borrowBook = borrowBookDao.selectBorrowBookForm(borrowBookForm);
if (borrowBook == null) {
request.setAttribute("message", "您输入的图书证号不存在,请重新输入!!!");
return mapping.findForward("lendBookOne");
}
java.sql.Date nowTime = java.sql.Date.valueOf(showTime
.showCurrentTime());
java.sql.Date overTime = java.sql.Date.valueOf(borrowBook
.getOverTime());
/*以下代码判断图书归还的日期是否超时*/
if (nowTime.after(overTime)) {
int number = nowTime.getDate() - overTime.getDate();
request.setAttribute("number", String.valueOf(number));
}
}
request.setAttribute("form", borrowBook);
return mapping.findForward("lendBookTwo");
}
单击【查询】按钮后,进入图书确认相关信息的页面,如图21.21所示。
如图21.21所示,单击【确认归还】按钮后,实现图书的归还操作。
单击【确认归还】按钮触发的是“borrowBookAction.do?method=lendBookThree”,当method等于lendBookThree,实现的是BorrowBookAction类的lendBookThree()方法,实现该方法的代码如下。

图21.21 图书归还页面
例程21-40:光盘\mr\21\wyBooks\src\com\action\BorrowBookAction.java
public ActionForward lendBookThree(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
BorrowBookForm borrowBookForm = (BorrowBookForm) form;
borrowBookForm.setReaderCard(request.getParameter("readerCard"));
borrowBookForm.setLend("1");
//将字段lend的内容更改为1
if(borrowBookDao.lendBorrowBook(borrowBookForm)){
request.setAttribute("message", "图书归还成功!!!");
}else{
request.setAttribute("message", "图书归还失败!!!");
}
return mapping.findForward("lendBookOne");
}
struts-config.xml文件配置
在struts-config.xml文件中配置图书归还所涉及的<forward>元素,代码如下。
<forward name="lendBookOne" path="/borrowBook/lendBookOne.jsp"/>
<forward name="lendBookTwo" path="/borrowBook/lendBookTwo.jsp"/>
注意:图书借阅查询与图书查询的方法实现基本相同,由于篇幅有限这里就不再介绍了。






