基于SSM框架的图书借阅预定管理系统

代码采用Spring+SpringMVC+Mybatis主流设计模式,实现了如下功能,数据库采用的是mysql数据库。

根据用户的不同,功能可分为如下:

图书管理员:登录:以图书管理员的身份登录

图书查询:根据书名、作者、图书类型等关键字搜索图书

            借书、还书、续借:管理员可以为读者办理借阅图书,归还图书,对图书续借。

查看借阅记录:可以根据读者学号以及图书编号查询借阅记录。

办理逾期交款:如读者有图书超期的情况将会有欠款,可以根据读者学号来为读者办理还款。

图书入库、出库、修改信息:管理员可以将新书录入系统,也可将图书馆下架的书删除,如果图书信息有误或是需要修改,可以修改图书的相关信息。

管理读者信息:管理员可以添加读者,删除读者,修改读者的信息。

 

读者(学生):登录:以学生的身份登录

             个人信息管理:完善和修改相关的个人信息

             图书查询:根据书名、作者、图书类型等关键字搜索图书

             当前借阅:可查看读者当前已借阅的图书信息

             续借图书:对于已借阅并快到归还日期的书,如果想续借,可直接在系统上续借

             借阅历史:可查看以前借过哪些图书

             逾期缴款:显示已欠款但未交款的记录;显示历史交款记录。

            图书挂失和预约:对已借出的图书进行预约;图书如果丢失可在学生端进行挂失。

            

大致的功能模块:

系统登录模块:读者和图书管理员都必须登录才能进入系统,用户登录时在后台判断用户的权限类型,分为读者(即学生)和图书管理员

图书管理模块:可以对图书进行添加,删除、修改图书信息、查询、查看等一系列的操作。

读者管理模块:添加读者,注销读者,修改读者信息

图书借还功能模块:图书管理员可以为读者办理借阅图书,归还图书的功能,并且能够实现逾期缴款的操作。 如果读者想续借,读者可在自己的页面续借,图书管理员也可以帮忙续借。

图书查询模块:读者和管理员都可以根据不同的条件比如书名,作者等关键字搜索查询相关图书

预约和挂失模块:对已借出的图书进行预约;图书如果丢失可W在学生端进行挂失

管理员后台借阅主页

数据库库表说明

数据库表说明:
tb_category    图书分类表
tb_comment     图书评论表
tb_library     图书信息表
tb_manager     管理员表
tb_order       图书预定表
tb_record      图书借阅表
tb_user        学生用户表

 

登录页面截图

注册页面

管理员预约管理

管理员借阅超期管理

管理员-学生信息管理

管理员-借阅用户黑名单管理

图书信息管理

图书分类管理

图书添加页面

学生用户主页

学生借阅记录

学生预约书籍记录

书籍借阅页面

用户个人资料修改

部分代码查看

package controller.user;

import mapper.TbOrderMapper;
import mapper.TbRecordMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import po.*;
import po.CustomPO.BookExt;
import po.CustomPO.CommentExt;
import po.CustomPO.TbLibraryQuery;
import po.CustomPO.TblibraryExt;
import service.CommentService;
import service.LibraryCategoryService;
import service.LibraryService;

import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @description: 前台页面列表显示处理
 */

@Controller
@RequestMapping("/user/ch")
public class UserBookController {
    // 注入
    @Autowired
    private LibraryService libraryService;
    @Autowired
    private LibraryCategoryService libraryCategoryService;
    @Autowired
    private CommentService commentService;

    @Autowired
    private TbOrderMapper orderMapper;
    @Autowired
    private TbRecordMapper recordMapper;

    @Value("${LOGIN_USER}")
    private String LOGIN_USER;  // 当前登录用户的 session 存储 属性名

    @RequestMapping("/user_bookList")
    public String toLibraryListByCid(TbLibraryQuery libraryQuery, PageCount pageCount, Model model, HttpSession session) {
        if (libraryQuery == null || libraryQuery.getCateId() == null) {
            libraryQuery = new TbLibraryQuery();
            libraryQuery.setCateId((Integer) session.getAttribute("currentCategory"));
        }
        // 根据 类目 id
        // 若 当前 类目 为 父类目 则获取 其 下面 的 所有子类目
        // 若 当前 类目 为 子类目 则获取 其 同级 类目
        List<TbCategory> categoryList = libraryCategoryService.getCategoryByCid(libraryQuery.getCateId());

        // 获取当前类目信息
        TbCategory currentCategory = libraryCategoryService.getCategoryById(libraryQuery.getCateId());

        // 按照条件进行查询
        PageCount<TblibraryExt> libraryPageCount = libraryService.findLibraryByAll(libraryQuery, pageCount);
        // model 将数据设置到域中
        model.addAttribute("subCategoryList", categoryList);
        model.addAttribute("libraryPageCount", libraryPageCount);
        // 默认
        if (currentCategory == null) {
            currentCategory = new TbCategory();
            currentCategory.setId(0);
        }
        session.setAttribute("currentCategory", currentCategory.getId());

        return "/user/user_bookList";
    }

    /**
     * 通过 图书 id 查询 图书详细信息
     *
     * @param id
     * @return
     */
    @RequestMapping("/bookId")
    public String toBookInfo(int id, Model model) {
        BookExt bookInfo = libraryService.getBookInfoById(id);
        // 将 时间戳 进行转换
        Long dateSS = bookInfo.getLibrary().getCreatedate();

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        String formatDate = simpleDateFormat.format(new Date(dateSS * 1000));

        bookInfo.setFormatDate(formatDate);

        // 通过 图书id 获取 回复信息
        List<CommentExt> commentExts = commentService.findCommentByBookId(id);

        // 将 查询的 图书信息 设置到 域 中
        model.addAttribute("bookInfo", bookInfo);
        // 将 回复信息 设置到 域 汇总
        model.addAttribute("commentExts", commentExts);

        return "/user/bookDetail";
    }

    /**
     * 用于 借阅 图书  操作
     *
     * @param session 用于 取 用户信息
     * @param order   用户借阅关联信息
     * @return
     */
    @RequestMapping("/jieyue_book")
    public String jieyueBook(HttpSession session, Model model, String oid, String kkid, TbOrder order) {

        if (null != kkid) {
            TbRecord tbRecord = recordMapper.selectByPrimaryKey(Integer.valueOf(kkid));
            tbRecord.setReturnbook(2); //2代表挂失
            recordMapper.updateByPrimaryKey(tbRecord);
            model.addAttribute("successMsg", "图书挂失成功");
            return "errorMsg";
        }


        if (null != oid) {
            TbRecord tbOrder = recordMapper.selectByPrimaryKey(Integer.valueOf(oid));
            // 插入数据
            tbOrder.setBackdate(tbOrder.getBackdate() + 3 * 30 * 24 * 60 * 60);
            recordMapper.updateByPrimaryKey(tbOrder);
            model.addAttribute("successMsg", "续借三个月成功");
            return "errorMsg";
        }
        // 获取 session 中的用户信息
        ActiveUser activeUser = (ActiveUser) session.getAttribute("activeUser");
        TbUser tbUser = new TbUser();
        tbUser.setId(activeUser.getUserid());
        order.setUserId(tbUser.getId());

        // 插入数据
        libraryService.jieyueBookById(order);

        return "redirect:/user/ch/bookId.action?id=" + order.getBookId();
    }


    @RequestMapping("/commitInfo")
    @ResponseBody
    public String commitComment(HttpSession session, TbComment comment) {
        // 获取 session 中的用户信息
        ActiveUser activeUser = (ActiveUser) session.getAttribute("activeUser");
        TbUser tbUser = new TbUser();
        tbUser.setId(activeUser.getUserid());

        comment.setUserId(tbUser.getId());
        libraryService.addCommentInfo(comment);

        return "ok";
    }
}

用户借阅信息显示

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!--借阅记录页面-->
<!DOCTYPE html>
<html lang="en">

<head>
    <%@ page contentType="text/html;charset=utf-8" %>
    <meta charset="UTF-8">
    <title>我的借阅记录</title>
    <jsp:include page="../../../include.jsp"/>
</head>

<body>
<div class="panel panel-default">
    <div class="panel-heading"><span class="glyphicon glyphicon-picture"> </span> 我的借阅记录</div>
    <div class="panel-body">
        <div class="row">

            <div class="col-md-3"></div>
            <table class="table Cont_center" style="margin-top: 50px;">
                <tr><b>
                    <td>图书名称</td>
                    <td>借阅日期</td>
                    <td>预计归还时间</td>
                    <td>借阅状态</td>
                </b></tr>
                <%--已归还--%>
                <c:forEach items="${recordReturnList}" var="recordReturn">
                    <tr>
                        <td>${recordReturn.bookname}</td>
                        <c:if test="${recordReturn.recorddate!=null}">
                            <td class="recorddate">
                                    ${recordReturn.recorddate}
                            </td>
                        </c:if>
                        <c:if test="${recordReturn.backdate!=null}">
                            <td class="backdate">
                                    ${recordReturn.backdate}
                            </td>
                        </c:if>
                        <td>
                            <button class="btn btn-default"><span class="glyphicon glyphicon-ok-circle"> </span> 已归还
                            </button>
                        </td>
                    </tr>
                </c:forEach>
                <%--借阅中--%>
                <c:forEach items="${recordRunList}" var="recordRun">
                    <tr>
                        <td>《${recordRun.bookname}》</td>
                        <c:if test="${recordRun.recorddate!=null}">
                            <td class="recorddate">
                                    ${recordRun.recorddate}
                            </td>
                        </c:if>
                        <c:if test="${recordRun.backdate!=null}">
                            <td class="backdate">
                                    ${recordRun.backdate}
                            </td>
                        </c:if>
                        <td>
                            <button class="btn btn-info"><span class="glyphicon glyphicon-time"> </span> 借阅中</button>
                            <a class="btn btn-info" href="/user/ch/jieyue_book.action?oid=${recordRun.id}"
                               target="iframe_cont"><span class="glyphicon glyphicon-time"> </span> 续借</a>
                            <button class="btn btn-success" onclick="guashi('${recordRun.id}')"><span
                                    class="glyphicon glyphicon-check"> </span> 挂失
                            </button>
                        </td>
                    </tr>
                </c:forEach>
                <%--逾期,未归还--%>
                <c:forEach items="${recordOverdueList}" var="recordOverdue">
                    <tr>
                        <td>《${recordOverdue.bookname}》</td>
                        <c:if test="${recordOverdue.recorddate!=null}">
                            <td class="recorddate">
                                    ${recordOverdue.recorddate}
                            </td>
                        </c:if>
                        <c:if test="${recordOverdue.backdate!=null}">
                            <td class="backdate">
                                    ${recordOverdue.backdate}
                            </td>
                        </c:if>
                        <td>
                            <button class="btn btn-danger"><span class="glyphicon glyphicon-minus"> </span>
                                逾期,欠费:${recordOverdue.ticketffee}
                            </button>
                            <button class="btn btn-success" onclick="guashi('${recordOverdue.id}')"><span
                                    class="glyphicon glyphicon-check"> </span> 挂失
                            </button>
                        </td>
                    </tr>
                </c:forEach>
                <%--挂失--%>
                <c:forEach items="${recordGuashi}" var="recordOverdue">
                    <tr>
                        <td>《${recordOverdue.bookname}》</td>
                        <c:if test="${recordOverdue.recorddate!=null}">
                            <td class="recorddate">
                                    ${recordOverdue.recorddate}
                            </td>
                        </c:if>
                        <c:if test="${recordOverdue.backdate!=null}">
                            <td class="backdate">
                                    ${recordOverdue.backdate}
                            </td>
                        </c:if>
                        <td>
                            <button class="btn btn-info"><span class="glyphicon glyphicon-book"> </span>
                                已挂失
                            </button>
                        </td>
                    </tr>
                </c:forEach>
            </table>
        </div>
    </div>
</div>
<script>
    //挂失
    function guashi(id) {
        location.href = "/user/ch/jieyue_book.action?kkid=" + id;
    }
</script>
<div class="panel panel-default">
    <div class="panel-heading"><span class="glyphicon glyphicon-picture"> </span> 我的预约记录</div>
    <div class="panel-body">
        <div class="row">
            <table class="table Cont_center" style="margin-top: 50px;">
                <%--预约成功--%>
                <tr><b>
                    <td>图书名称</td>
                    <td>预约日期</td>
                    <td>剩余领取时间</td>
                    <td>预约状态</td>
                </b></tr>
                <c:forEach items="${tbOrderItems}" var="OrderItems">
                    <tr>
                        <td>${OrderItems.bookName}</td>
                        <c:if test="${OrderItems.orderdate!=null}">
                            <td class="recorddate">
                                    ${OrderItems.orderdate}
                            </td>
                        </c:if>
                        <td class="ctime">
                            <c:if test="${OrderItems.orderdate+604800<l}">
                                已过期
                            </c:if>
                            <c:if test="${OrderItems.orderdate+604800>l}">
                                ${OrderItems.orderdate+604800-l}
                            </c:if>
                        </td>
                        <td>
                            <button class="btn btn-success"><span class="glyphicon glyphicon-ok"> </span> 预约成功</button>
                            <a href="/user/deleteOrder.action?id=${OrderItems.id}">
                                <button class="btn btn-danger"><span class="glyphicon glyphicon-minus"> </span> 取消预约
                                </button>
                            </a>
                        </td>
                    </tr>
                </c:forEach>
            </table>
        </div>
    </div>
</div>

<script>
    window.onload = function () {
//获取到时间戳数组
        var recorddate = $(".recorddate");
        recorddate.each(function () {
            $(this).html(getLocalTime($(this).text()))
        })

        var backdate = $(".backdate");
        backdate.each(function () {
            $(this).html(getLocalTime($(this).text()))
        })
        var ctime = $(".ctime");
        ctime.each(function () {
            $(this).html(getDateTime($(this).text()))
        })
    };
</script>
</body>

</html>

需要源码或者相互交流需要帮助的加我扣扣 2551449109

可以远程教你运行程序和答疑解惑

猜你喜欢

转载自blog.csdn.net/laonayonghaifeisi/article/details/90477389
今日推荐