【33】基于Java简单实现图书馆借书管理系统

308 篇文章 10 订阅
9 篇文章 0 订阅
本文介绍了使用Java语言设计并实现的一个简单的图书馆借书管理系统。系统包含管理员和读者两种角色,支持图书管理、用户管理、借阅记录等功能。基于B/S架构,遵循MVC设计模式,实现了前后端分离。管理员可进行图书上下架、用户管理,读者可查询图书、借阅归还及查看借阅记录。
摘要由CSDN通过智能技术生成

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

项目概述

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

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

项目架构和内容获取

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

开发系统:Windows
架构模式:MVC/前后端分离
JDK版本:Java JDK1.8
开发工具:idea或者eclipse
数据库版本: mysql
数据库可视化工具: navicat
后端:java,spring,springmvc,springboot,mybatis,tomcat等
前端:html,css,javascript,vue等

更多详细内容可点击查看

项目实现

所有的代码文件都有详细的注释,不用担心看不懂代码的。

  • 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:
@RestController
public 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, "登录失败! 账号或密码错误!");
        }
    }

    /**
     * 获取用户信息
     *
     * @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 

部分功能展示

登录页面

管理员和读者可以通过账号密码登录系统中:
在这里插入图片描述

管理员角色

管理员首页

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

图书管理

管理员可以上架新的图书,可以修改,删除图书:
在这里插入图片描述

读者管理

管理员可以看到所有的系统读者,还可以增加读者,修改密码等等:
在这里插入图片描述

借阅管理

管理员可以查看所有的系统图书的借阅记录:
在这里插入图片描述

读者角色

图书查询

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

查看自己的借阅记录

对于读者在系统上面的借阅记录,可以在借阅管理进行查看:
在这里插入图片描述

个人信息

读者可以在个人中心进行信息修改:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2.1 可行性分析 采用现代化统一的计算机信息网站系统,能够有效优化图书馆管理系统,使其高效的发挥最大作用,能够迅捷的为读者提供相应的服务。开发本系统的可行性研究如下: 2.1.1 技术可行性 技术上的可行性分析主要分析技术条件能否顺利完成开发工作,软、硬件能否满足需要。本系统采用JSP开发出友好美观的人机界面,便于用户理解、操作。数据库管理系统采用MySQL,它能够处理大量数据,同时保持数据的完整性、安全性。因此本系统的开发平台已成熟可行。硬件方面,在科技飞速发展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越便宜,因此硬件平台也能够满足本系统所需。 2.1.2 经济可行性 鉴于计算机技术发展异常迅猛,在硬件软件配置以及开发技术均以可行的情况下开发这样一个管理系统成本不会很高,但其可以大大提高图书馆的工作效率,也是图书馆管理发展的必然趋势,其必将有比较宽阔的市场,因此改性统在经济可行性上时可行的。 2.2 图书借阅管理系统需求概述 2.2.1 系统目标 该系统主要建立一个基于B/S模式图书馆借阅管理系统,面对当起很多小型图书管理仍是人工管理带来的检索速度慢,效率低,借阅归还图书量大,图书统计工作量大,藏书不能完成及时更新的问题,该系统可以对跟系统的三个用户类型的使用实现: (1)对于读者在本系统的应用下可实现按照各种方式(如:书名,编号,作者)查询图书馆的藏书请客,方便的借阅图书,续借图书,归还图书,能够查询自己的借阅图书情况。 (2)对于图书馆工作人员能够实现方便的对图书进行查询,方便的进行读者借阅情况查询,方便的进行借书还书处理等,便捷的对图书信息进行添加、修改、删除,分类管理等操作,对读者信息进行相关添加,修改,分类管理等操作。 (3)对于系统管理员可以对图书馆信息进行修改更新操作,对系统用户进行添加、修改、删除、权限设置等操作,对图书馆的办证参数进行修改维护等操作功能。 2.2.2 用户类和用户特性 图书借阅管理系统一个基于B/S模式的对图书馆进行高效率管理的应用系统,它的用户主要是读者和图书管理员,图书管理员通过本系统实现图书及读者的高效管理,除此之外,还需要一个系统管理员对不同的用户进行权限的设置等操作。 三类用户的具体描述如表2.1所示。 表2.1用户具体描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值