本章介绍了基于Java简单实现图书馆借书管理系统的设计和实现
项目概述项目一般分为管理员和读者两个角色,管理员可以登录系统、图书管理、书架、用户管理、读者管理、查看借阅记录管理等,读者角色可以登录系统查询图书信息、借阅和归还图书、查看个人借阅记录、编辑个人信息等。
项目功能简单,数据库只有管理员表、读者表、图书表和借阅记录表四张表,但基本实现了图书馆借书的管理功能,可以在此基础上灵活增加功能。
获取项目结构和内容采用B/S架构实现,整体遵循MVC设计理念,采用前后分离技术。
开发系统:Windows架构模式:MVC分离JDK版本的前后端:Java JDK1.开发工具:idea或eclipse数据库版本: Mysql数据库可视化工具: navicat后端:java,spring,springmvc,springboot,mybatis,tomcat等前端:html,css,javascript,更详细的内容如vue可查看:http://projecthelp.top
项目实现
所有代码文件都有详细的注释,不用担心看不懂代码。
BookController
图书控制器类别:
@RestController@RequestMapping("/book")public class BookController extends BaseController { @Resource private BookService bookService; /** * 对所有数据进行分页查询 * * @param page 分页对象 * @param book 查询实体 * @return 所有数据 */ @GetMapping("/list") public R selectAll(Page<Book> page, Book book) { return result(this.bookService.page(page, book)); } /** * 添加图书 * * @param book 图书 * @return 是否成功添加 */ @PostMapping("/add") public R addBook(@RequestBody Book book) { return result(bookService.save(book)); } /** * 修改图书 * * @param book 图书 * @return 修改成功与否 */ @PostMapping("/update") public R updateBook(@RequestBody Book book) { return result(bookService.updateById(book)); } /** * 根据图书编号批量删除图书 * * @param isbns 图书编号表 * @return 删除成功与否 */ @GetMapping("/delete") public R deleteBook(@RequestParam List<String> isbns) { return result(bookService.removeByIds(isbns)); } //======================= 读者操作界面 ====================== /** * 借阅图书 * * @param isbn 图书编号 * @param readerId 读者编号 * @return 借阅成功吗? */ @GetMapping("/lendBook") public R lendBook(String isbn, Long readerId) { return result(bookService.lendBook(isbn, readerId)); } /** * 归还图书 * * @param isbn 图书编号 * @param readerId 读者编号 * @return 是否成功归还 */ @GetMapping("/returnBook") public R returnBook(String isbn, Long readerId) { return result(bookService.returnBook(isbn, readerId)); }}
- 图书
service
的实现类:
@Service("bookService")public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService { @Resource private LendRecordService lendRecordService; /** * 分页查询图书 * * @param page 分页 * @param book 查询信息 * @return 图书列表,图书总计 */ @Override public Map<String, Object> page(Page<Book> page, Book book) { String author = book.getAuthor(); String bookName = book.getBookName(); QueryWrapper<Book> wrapper = new QueryWrapper<>(); wrapper.lambda().like(!StringUtils.isEmpty(author), Book::getAuthor, author) .like(!StringUtils.isEmpty(bookName), Book::getBookName, bookName); Page<Book> selectPage = this.baseMapper.selectPage(page, wrapper); Map<String, Object> map = new HashMap<>(); map.put("list", selectPage.getRecords()); map.put("total", selectPage.getTotal()); return map; } /** * 借阅图书 * 根据图书的isbn编号借阅图书 * 若当前图书未借阅(status为0),修改status为1,同时,还增加了一个新的借阅记录 * * @param isbn 图书编号 * @param readerId 读者编号 * @return 借阅成功吗? */ @Override public boolean lendBook(String isbn, Long readerId) { Book book = this.baseMapper.selectById(isbn); book.setStatus("1"); int res = this.baseMapper.updateById(book); // 新的借阅记录 LendRecord lendRecord = new LendRecord(); lendRecord.setIsbn(isbn); lendRecord.setReaderId(readerId); lendRecord.setLendDate(new Date()); boolean save = lendRecordService.save(lendRecord); return res == 1 && save; } /** * 归还图书 * * @param isbn 图书编号 * @param readerId 读者编号 * @return 是否成功归还 */ @Override public boolean returnBook(String isbn, Long readerId) { Book book = this.baseMapper.selectById(isbn); book.setStatus("0"); int res = this.baseMapper.updateById(book); // 更新借阅记录状态 QueryWrapper<LendRecord> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(LendRecord::getStatus, "0").eq(LendRecord::getIsbn, isbn).eq(LendRecord::getReaderId, readerId); LendRecord lendRecord = lendRecordService.getOne(wrapper); lendRecord.setReturnDate(new Date()); lendRecord.setStatus("1"); boolean update = lendRecordService.update(lendRecord, wrapper); return res == 1 && update; }}
- 系统登录处理控制器
LoginController
:
@RestControllerpublic class LoginController extends BaseController { @Resource private AdminService adminService; @Resource private ReaderService readerService; /** * 登录 * * @param loginBody 登录信息 * @return 随机字符串uuid */ @PostMapping("/login") public R login(@RequestBody LoginBody loginBody) { String username = loginBody.getUsername(); String password = loginBody.getPassword(); String role = loginBody.getRole(); Object user = null; if (!StringUtils.isEmpty(role)) { if ("reader".equals(role)) { // 读者登录 QueryWrapper<Reader> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(Reader::getUsername, username).eq(Reader::getPassword, password); user = readerService.getOne(wrapper); } else if ("admin".equals(role)) { // 管理员登录 QueryWrapper<Admin> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(Admin::getUsername, username).eq(Admin::getPassword, password); user = adminService.getOne(wrapper); } } if (user != null) { // 登录成功 String uuid = UUIDUtils.getUUID(); Long userId = "admin".equals(role) ? ((Admin) user).getId() : ((Reader) user).getReaderId(); LoginUser.addUser(uuid, role, userId); LoginUser.addVisitCount(); // 访问数量加1 return result(uuid, 成功登录!"); } else { return result(R.ERROR, “登录失败!"); } else { return result(R.ERROR, “登录失败! 帐号或密码错误!"); } } /** * 获取用户信息 * * @param token 令牌 * @return 用户信息 */ @GetMapping("/getInfo") public R getInfo(String token) { if (!StringUtils.isEmpty(token)) { User u = LoginUser.getUserByToken(token); if (u != null) { // token验证成功 String role = u.getRole(); Long userId = u.getUserId(); Object user = null; if ("reader".equals(role)) { // 获取读者信息 QueryWrapper<Reader> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(Reader::getReaderId, userId); user = readerService.getOne(wrapper); } else if ("admin".equals(role)) { // 获取管理员信息 QueryWrapper<Admin> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(Admin::getId, userId); user = adminService.getOne(wrapper); } return result(user); } } return result(R.SUCCESS, "未登录!"); } /** * 访问次数 * * @return 访问数量 */ @GetMapping("/visitCount") public R visitCount() { return result(LoginUser.getVisitCount()); }}
- 获取完整的项目
浏览器输入 projecthelp.top
部分功能显示登录页面
管理员和读者可以通过帐户密码登录系统:
管理员角色管理员主页管理员的主页显示了所有的借阅次数、总访问次数、书籍总数和读者总数。同时,图表显示:
图书管理管理员可以上架新书,修改和删除书籍:
读者管理
管理员可以看到所有系统读者,也可以添加读者,修改密码等。
借阅管理管理员可以查看系统图书的所有借阅记录:
查询读者角色图书读者可以通过图书名称或图书作者查询系统的图书列表。对于未借阅的书籍,读者可以点击借阅借阅书籍,然后返回借阅的书籍:
查看自己的借阅记录对于系统上读者的借阅记录,可以在借阅管理中查看:
个人信息读者可以在个人中心修改信息: