借閱管理
1. 借書卡
1.1 查詢借書卡
??借書卡在正常的CRUD
操作的基礎(chǔ)上,我們還需要注意一些特殊的情況。查詢信息的時候。如果是管理員則可以查詢所有的信息,如果是普通用戶則只能查看自己的信息。這塊的控制在登錄的用戶信息
然后就是在Dao中處理的時候需要考慮根據(jù)當(dāng)前登錄用戶查詢的操作
@Override
public List<BorrowCard> listPage(PageUtils pageUtils,SysUser user) {
QueryRunner queryRunner = MyDbUtils.getQueryRunner();
String sql = "select * from t_borrow_card where 1 = 1";
if(StringUtils.isNotEmpty(pageUtils.getKey())){
sql += " and stuname like '%"+pageUtils.getKey()+"%' ";
}
if(user != null && user.getIsAdmin() == false){
// 不是管理員
sql += " and stuid = " + user.getId();
}
sql += " limit ?,? ";
// 計算 分頁開始的位置
int startNo = pageUtils.getStart();
try {
return queryRunner.query(sql
,new BeanListHandler<BorrowCard>(BorrowCard.class),startNo,pageUtils.getPageSize());
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
@Override
public int count(PageUtils pageUtils, SysUser user) {
QueryRunner queryRunner = MyDbUtils.getQueryRunner();
String sql = "select count(1) from t_borrow_card where 1 = 1 ";
if(StringUtils.isNotEmpty(pageUtils.getKey())){
sql += " and stuname like '%"+pageUtils.getKey()+"%' ";
}
if(user != null && user.getIsAdmin() == false){
// 不是管理員
sql += " and stuid = " + user.getId();
}
try {
return queryRunner.query(sql, new ResultSetHandler<Integer>() {
@Override
public Integer handle(ResultSet resultSet) throws SQLException {
resultSet.next();
return resultSet.getInt(1);
}
});
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return 0;
}
效果:
1.2 分配借書卡
??分配借書卡就是對借書卡的添加和更新的操作。在這塊我們需要注意的地方一個是需要查詢所有的學(xué)生信息
然后使用到layerDate
這個日期時間的插件
然后在Servlet
中獲取到的是特定格式的字符串
,我們需要自定義轉(zhuǎn)換的方法來處理。
public class DateUtils {
public static final String DATE_PARTTERN1 = "YYYY-MM-DD hh:mm:ss";
/**
* 字符串轉(zhuǎn)換為Date類型
* @param msg
* @param parttern
* @return
*/
public static Date stringToDate(String msg,String parttern){
SimpleDateFormat format = new SimpleDateFormat(parttern);
try {
return format.parse(msg);
} catch (ParseException e) {
e.printStackTrace();
}
return new Date();
}
}
就可以完成添加和更新的處理
1.3 下架處理
??當(dāng)借書卡還沒過期的情況下。管理員想要終止這個借書卡的使用。那么可以做下架
的處理,下架
的本質(zhì)是修改state
的狀態(tài)為3
.
2. 圖書展示
??圖書展示是給學(xué)員查看的,方便學(xué)生根據(jù)不同的類型快速查找到對應(yīng)的書籍信息,并且完成相關(guān)的借閱
操作。
2.1 標簽頁
??需要根據(jù)不同的類別展示不同的圖書信息。那么這塊我們通過bootstrap
中提供的標簽來實現(xiàn)。
在這塊我們需要注意相關(guān)CSS
屬性的處理
動態(tài)管理ID信息,ID和類別的ID綁定。
然后就給對應(yīng)的標簽頁綁定對應(yīng)的點擊
事件,同時隨著我們的點擊會給tab-pane
添加對應(yīng)的active
的class屬性
$(".tabs-container .nav-tabs li").click(function(){
var href = $(this).children()[0].href
// 做字符串的截取操作
var aId = href.substring(href.lastIndexOf('tab-'),href.length);
// 先給所有的 class= tab-pane 的都移除掉 active 屬性
$(".tab-pane").removeClass('active')
// 然后單獨給當(dāng)前點擊的添加 active 屬性
$("#"+aId).addClass("active")
})
然后就是在頁面第一次加載的時候我們需要給第一個標簽也做選中和加載active
屬性的行為
function initTab(){
var li = $(".tabs-container .nav-tabs").children()[0];
$(li).addClass('active')
var href = $($(".tabs-container .nav-tabs").children()[0]).children()[0].href
// 做字符串的截取操作
var aId = href.substring(href.lastIndexOf('tab-'),href.length);
// 先給所有的 class= tab-pane 的都移除掉 active 屬性
$(".tab-pane").removeClass('active')
// 然后單獨給當(dāng)前點擊的添加 active 屬性
$("#"+aId).addClass("active")
}
具體的效果如下:
2.2 圖書信息
??我們添加標簽頁的目的是更好的展示圖書信息。所以在查詢數(shù)據(jù)類型的時候我們需要同步的查詢類型對應(yīng)的書籍信息。首先在圖書類型的bean
中關(guān)聯(lián)設(shè)置了對應(yīng)的屬性
@Data
public class BookType {
private Integer id;
private String name;
private String notes;
private Date createtime;
private List<Book> books; // 當(dāng)前類型對應(yīng)的圖書信息
}
然后在Servlet中添加了對應(yīng)的處理
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 查詢所有的類別信息
List<BookType> list = typeService.list();
if(list != null && list.size() > 0){
// 遍歷 每個類型 查詢對應(yīng)的 圖書信息
for (BookType type : list) {
Book book = new Book();
book.setTypeid(type.getId());
List<Book> books = bookService.list(book);
type.setBooks(books);
}
}
req.setAttribute("list",list);
req.getRequestDispatcher("/book/book/showBook.jsp").forward(req,resp);
}
最后在頁面中循序處理展示圖書信息
<div class="tab-content">
<c:forEach items="${list}" var="entity">
<div id="tab-${entity.id}" class="tab-pane">
<div class="panel-body">
<div class="row">
<c:forEach items="${entity.books}" var="book">
<div class="col-sm-4">
<div class="contact-box">
<div class="col-sm-4">
<div class="text-center">
<img alt="image" class="m-t-xs img-responsive"
src="/sys/downloadServlet?fileName=${book.img}">
<div class="m-t-xs font-bold">CTO</div>
</div>
</div>
<div class="col-sm-8">
<h3><strong>${book.name}</strong></h3>
<p><i class="fa fa-map-marker"></i> ${book.author}</p>
<address>
<strong>${book.price}</strong><br>
${book.publish}<br>
Weibo:<a href="">${book.notes}</a><br>
<abbr title="Phone">Tel:</abbr> (123) 456-7890
</address>
</div>
<div class="clearfix"></div>
</div>
</div>
</c:forEach>
</div>
</div>
</div>
</c:forEach>
具體效果為:
然后可以對展示的圖書的信息做出相關(guān)的調(diào)整和優(yōu)化
3.借書功能
??借閱數(shù)據(jù)的數(shù)據(jù)會存儲在t_borrow_recoder
這張表中,那么與之對應(yīng)就需要完成對應(yīng)的后端CRUD
的基礎(chǔ)功能
然后在借閱圖書的時候我們需要先判斷當(dāng)前登錄的用戶是否有可以使用的借書卡,如果才能借閱,否則提示不能借閱
// 借閱書籍的方法
function goBorrowing(bookId){
// 判斷是否有 可用的借書卡
$.get("/book/borrowCardServlet?action=checkHaveCard",function(data){
console.log("data",data);
})
}
/**
* 檢查當(dāng)前登錄的用戶是否有可用的借書卡
* @param req
* @param resp
* @throws Exception
*/
public void checkHaveCard(HttpServletRequest req, HttpServletResponse resp) throws Exception {
List<BorrowCard> list = service.listCanUseCard(getCurrentLoginUser(req,resp).getId());
String msg = "error";
if(list != null && list.size() > 0){
msg = "ok";
}
PrintWriter writer = resp.getWriter();
writer.write(msg);
writer.flush();
}
操作的效果如下:
4.借閱管理
??學(xué)生借閱了相關(guān)的圖書后。可以查看所有借閱信息。同時可以做出歸還的操作。這塊管理員可以看到所有的數(shù)據(jù)。但是不能歸還,普通的學(xué)員只能看到自己的借閱記錄。沒有歸還的圖書可以做出歸還的操作。
在后臺代碼中的處理核心
展示數(shù)據(jù)的時候。注意按鈕的操作文章來源:http://www.zghlxwxcb.cn/news/detail-677166.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-677166.html
到了這里,關(guān)于第七章:借閱管理【基于Servlet+JSP的圖書管理系統(tǒng)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!