本章节给大家介绍一个基于Java简单实现图书馆借书管理系统的设计与实现

项目概述

项目总体分为俩种角色,分别是管理员和阅读者,管理员可以登录系统中,进行图书管理,上架下架图书,对用户进行管理、对读者进行管理、查看借阅记录管理等,读者角色可以登录系统查询图书信息、借阅和归还图书、查看个人借阅记录、编辑个人信息等。

项目功能简单,数据库也只有4张表,分别为管理员表,读者表,图书表和借阅记录表,但基本实现了图书馆对图书借书的管理功能,大家可以在这个基础上面灵活增加功能。

项目架构和内容获取

采用B/S的架构实现,整体遵循MVC的设计思想,采用的是前后端分离的技术。

> 开发系统:Windows> 架构模式:MVC/前后端分离J> >DK版本:Java JDK1.8> 开发工具: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 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 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 implements BookService {    @Resource    private LendRecordService lendRecordService;    /**     * 分页查询图书     *     * @param page 分页     * @param book 查询信息     * @return 图书列表,图书总计     */    @Override    public Map page(Page page, Book book) {        String author = book.getAuthor();        String bookName = book.getBookName();        QueryWrapper wrapper = new QueryWrapper();        wrapper.lambda().like(!StringUtils.isEmpty(author), Book::getAuthor, author)                .like(!StringUtils.isEmpty(bookName), Book::getBookName, bookName);        Page selectPage = this.baseMapper.selectPage(page, wrapper);        Map 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 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 wrapper = new QueryWrapper();                wrapper.lambda().eq(Reader::getUsername, username).eq(Reader::getPassword, password);                user = readerService.getOne(wrapper);            } else if ("admin".equals(role)) {                // 管理员登录                QueryWrapper 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, "登录失败! 账号或密码错误!");        }    }    /**     * 获取用户信息     *     * @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 wrapper = new QueryWrapper();                    wrapper.lambda().eq(Reader::getReaderId, userId);                    user = readerService.getOne(wrapper);                } else if ("admin".equals(role)) {                    // 获取管理员信息                    QueryWrapper 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 

部分功能展示登录页面

管理员和读者可以通过账号密码登录系统中:

管理员角色管理员首页

管理员首页展示了所有的借阅次数,总共访问数,总共的图书数量以及总共的读者数量,同时还了图表显示:

图书管理

管理员可以上架新的图书,可以修改,删除图书:

读者管理

管理员可以看到所有的系统读者,还可以增加读者,修改密码等等:

借阅管理

管理员可以查看所有的系统图书的借阅记录:

读者角色图书查询

读者可以通过图书名称或者图书的作者查询系统的图书列表,对于未借阅的图书,读者可以点击借阅即可借阅图书,然后对于自己已借阅的图书可以进行归还:

查看自己的借阅记录

对于读者在系统上面的借阅记录,可以在借阅管理进行查看:

个人信息

读者可以在个人中心进行信息修改: