基于javaweb+mysql的图书借还管理系统(前台、后台)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
分为前台读者和后台管理
前台读者可以登录、图书查询、图书借阅、图书归还、修改自己的个人信息等
后台管理可以登陆、图书查询、图书管理、图书编辑、读者管理、读者编辑、图书的借阅与归还日志查看等
前台读者
后台管理员
技术框架
JavaBean MVC JSP SSM(Spring SpringMVC MyBatis) MySQL jQuery Bootstrap JavaScript CSS
</div>
<div class="panel-body">
<div class="form-group">
<label for="id">账号</label>
<input type="text" class="form-control" id="id" placeholder="请输入账号">
</div>
<div class="form-group">
<label for="passwd">密码</label>
<input type="password" class="form-control" id="passwd" placeholder="请输入密码">
</div>
<div class="checkbox text-left">
<label>
<%--<input type="checkbox" id="remember">记住密码--%>
</label>
</div>
<p style="text-align: right;color: red;position: absolute" id="info"></p><br/>
<button id="loginButton" class="btn btn-primary btn-block">登陆
</button>
</div>
</div>
<script>
String format = new SimpleDateFormat("yyyy-MM-dd").format(readerInfo.getBirth());
readerInfoDate.setBirthday(format);
modelAndView.addObject("readerinfo", readerInfoDate);
return modelAndView;
}
@RequestMapping("reader_edit.html")
public ModelAndView readerInfoEdit(HttpServletRequest request) {
long readerId = Long.parseLong(request.getParameter("readerId"));
ReaderInfo readerInfo = readerInfoService.getReaderInfo(readerId);
ModelAndView modelAndView = new ModelAndView("admin_reader_edit");
ReaderInfoDate readerInfoDate = new ReaderInfoDate();
String format = new SimpleDateFormat("yyyy-MM-dd").format(readerInfo.getBirth());
readerInfoDate.setBirthday(format);
BeanUtils.copyProperties(readerInfo,readerInfoDate);
modelAndView.addObject("readerInfo", readerInfoDate);
}
@RequestMapping("/book_add_do.html")
public String addBookDo(@RequestParam(value = "pubstr") String pubstr, Book book, RedirectAttributes redirectAttributes) {
book.setPubdate(getDate(pubstr));
if (bookService.addBook(book)) {
redirectAttributes.addFlashAttribute("succ", "图书添加成功!");
} else {
redirectAttributes.addFlashAttribute("succ", "图书添加失败!");
}
return "redirect:/admin_books.html";
}
@RequestMapping("/updatebook.html")
public ModelAndView bookEdit(HttpServletRequest request) {
long bookId = Long.parseLong(request.getParameter("bookId"));
Book book = bookService.getBook(bookId);
ModelAndView modelAndView = new ModelAndView("admin_book_edit");
modelAndView.addObject("detail", book);
return modelAndView;
}
@RequestMapping("/book_edit_do.html")
public String bookEditDo(@RequestParam(value = "pubstr") String pubstr, Book book, RedirectAttributes redirectAttributes) {
book.setPubdate(getDate(pubstr));
if (bookService.editBook(book)) {
or author like #{search} or introduction like #{search}
</select>
<select id="getBook" resultType="com.library.bean.Book" parameterType="long">
select * from book_info where book_id = #{book_id}
</select>
<delete id="deleteBook" parameterType="long">
delete from book_info where book_id = #{book_id}
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.library.dao.ReaderInfoDao">
<select id="getAllReaderInfo" resultType="com.library.bean.ReaderInfo">
select * from reader_info
</select>
<select id="findReaderInfoByReaderId" resultType="com.library.bean.ReaderInfo" parameterType="long">
select * from reader_info where reader_id = #{reader_id}
</select>
<delete id="deleteReaderInfo" parameterType="long">
delete from reader_info where reader_id = #{reader_id}
</delete>
<update id="editReaderInfo" parameterType="com.library.bean.ReaderInfo">
aria-hidden="true">
×
</button>
${error}
</div>
</c:if>
</div>
<div class="panel panel-default" style="width: 90%;margin-left: 5%">
<div class="panel-heading" style="background-color: #fff">
<h3 class="panel-title">
全部图书
</h3>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>书名</th>
setLoginStatus();
$("#loginButton").click(function () {
var id =$("#id").val();
var passwd=$("#passwd").val();
var remember=$("#remember").prop('checked');
if (id == '') {
$("#info").text("提示:账号不能为空");
}
else if( passwd ==''){
$("#info").text("提示:密码不能为空");
}
else if(isNaN( id )){
$("#info").text("提示:账号必须为数字");
}
else {
$.ajax({
type: "POST",
url: "/api/loginCheck",
data: {
id:id ,
passwd: passwd
},
dataType: "json",
success: function(data) {
} catch (ParseException e) {
e.printStackTrace();
return new Date();
}
}
@RequestMapping("/querybook.html")
public ModelAndView queryBookDo(String searchWord) {
if (bookService.matchBook(searchWord)) {
ArrayList<Book> books = bookService.queryBook(searchWord);
ModelAndView modelAndView = new ModelAndView("admin_books");
modelAndView.addObject("books", books);
return modelAndView;
private final static String NAMESPACE = "com.library.dao.ReaderCardDao.";
public int getIdMatchCount(final long reader_id, final String password) {
Map<String, Object> map = new HashMap<>();
map.put("reader_id", reader_id);
map.put("password", password);
return sqlSessionTemplate.selectOne(NAMESPACE + "getIdMatchCount", map);
}
public ReaderCard findReaderByReaderId(final long reader_id) {
return sqlSessionTemplate.selectOne(NAMESPACE + "findReaderByReaderId", reader_id);
}
public int resetPassword(final long reader_id, final String newPassword) {
Map<String, Object> map = new HashMap<>();
map.put("reader_id", reader_id);
map.put("password", newPassword);
redirectAttributes.addFlashAttribute("succ", "添加读者信息成功!");
} else {
redirectAttributes.addFlashAttribute("succ", "添加读者信息失败!");
}
return "redirect:/allreaders.html";
}
@RequestMapping("reader_info_edit.html")
public ModelAndView readerInfoEditReader(HttpServletRequest request) {
ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard");
ReaderInfo readerInfo = readerInfoService.getReaderInfo(readerCard.getReaderId());
ModelAndView modelAndView = new ModelAndView("reader_info_edit");
ReaderInfoDate readerInfoDate = new ReaderInfoDate();
String format = new SimpleDateFormat("yyyy-MM-dd").format(readerInfo.getBirth());
readerInfoDate.setBirthday(format);
@RequestMapping("/reader_books.html")
public ModelAndView readerBooks(HttpServletRequest request) {
ArrayList<Book> books = bookService.getAllBooks();
ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard");
ArrayList<Lend> myAllLendList = lendService.myLendList(readerCard.getReaderId());
ArrayList<Long> myLendList = new ArrayList<>();
for (Lend lend : myAllLendList) {
// 是否已归还
if (lend.getBackDate() == null) {
myLendList.add(lend.getBookId());
}
}
ModelAndView modelAndView = new ModelAndView("reader_books");
modelAndView.addObject("books", books);
modelAndView.addObject("myLendList", myLendList);
return modelAndView;
import com.library.service.LendService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@Controller
public class LendController {
@Autowired
private LendService lendService;
@Autowired
private BookService bookService;
@RequestMapping("/deletebook.html")
public String deleteBook(HttpServletRequest request, RedirectAttributes redirectAttributes) {
var val=$("#search").val();
if(val==''){
alert("请输入关键字");
return false;
}
})
</script>
</div>
<div style="position: relative;top: 10%">
<c:if test="${!empty succ}">
<div class="alert alert-success alert-dismissable">
<button type="button" class="close" data-dismiss="alert"
aria-hidden="true">
×
</button>
${succ}
</div>
</c:if>
<c:if test="${!empty error}">
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert"
aria-hidden="true">
×
</button>
ReaderInfoDate infoDate = new ReaderInfoDate();
BeanUtils.copyProperties(reader,infoDate);
infoDate.setBirthday(format);
readersDateFormat.add(infoDate);
}
ModelAndView modelAndView = new ModelAndView("admin_readers");
modelAndView.addObject("readers", readersDateFormat);
return modelAndView;
}
@RequestMapping("reader_delete.html")
public String readerDelete(HttpServletRequest request, RedirectAttributes redirectAttributes) {
long readerId = Long.parseLong(request.getParameter("readerId"));
if (readerInfoService.deleteReaderInfo(readerId) && readerCardService.deleteReaderCard(readerId)) {
redirectAttributes.addFlashAttribute("succ", "删除成功!");
} else {
redirectAttributes.addFlashAttribute("error", "删除失败!");
}
});
}
})
</script>
</div>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<head>
<title>全部图书信息</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<script src="js/jquery-3.2.1.js"></script>
}
}
});
}
})
</script>
</div>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
class_id=#{class_id}, number=#{number} where book_id=#{book_id}
</update>
<select id="getAllBooks" resultType="com.library.bean.Book">
select * from book_info
</select>
<select id="queryBook" resultType="com.library.bean.Book" parameterType="String">
select * from book_info where name like #{search}
or author like #{search} or introduction like #{search}
</select>
<select id="matchBook" resultType="int" parameterType="String">
select count(*) from book_info where name like #{search}
or author like #{search} or introduction like #{search}
</select>
<select id="getBook" resultType="com.library.bean.Book" parameterType="long">
select * from book_info where book_id = #{book_id}
</select>
<delete id="deleteBook" parameterType="long">
delete from book_info where book_id = #{book_id}
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>