原创

基于SpringBoot2+vue2的图书管理系统

温馨提示:
本文最后更新于 2026年05月28日,已超过 13 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

1. 资源

浏览全文可获取

2. 项目简介

图书管理系统,系统实现了图书信息管理、借阅信息管理、用户管理、论坛交流、公告信息发布等核心功能。系统包含前台用户端和后台管理端,前台用户可浏览图书、发起借阅、参与论坛讨论等,后台管理员可对图书、用户、借阅记录、公告、论坛等进行全面管理。

项目提供数据库脚本(MySQL)、后端Spring Boot工程、前端后台管理界面(基于Vue.js)以及前台用户界面(基于layui/html)。系统整体采用B/S架构,支持多角色登录(管理员、普通用户)。

3. 技术栈

技术分类 框架/工具 说明
后端框架 Spring Boot 2.2.2.RELEASE 提供RESTful API、依赖管理等
ORM框架 Mybatis-Plus 2.3 简化数据库操作,提供分页、条件构造器
安全框架 Apache Shiro 1.3.2 权限控制(基于Token的登录验证)
数据库 MySQL 5.7 存储业务数据
前端管理端 Vue.js + Element UI 构建后台管理界面,支持动态路由与权限
前台用户端 layui、jQuery、Vue.js、HTML/CSS 构建用户端页面,响应式设计
工具库 Hutool、Fastjson、POI、commons-lang3等 简化开发、处理Excel、JSON等

4. 详细介绍

4.1 功能模块

4.1.1 图书信息管理

  • 图书信息包括:图书编号(唯一)、图书标题、图书类型、图书封面、图书作者、图书出版社、所在书架、图书数量、图书详情。
  • 管理员可进行图书的增删改查,前台用户可查看图书列表和详情。
  • 图书数量在借阅时自动减少,归还时自动增加。

4.1.2 借阅信息管理

  • 用户登录后可借阅图书,需选择借阅天数(正整数)。系统自动记录借阅时间,并更新对应图书库存(图书数量-1)。
  • 借阅状态分为“未还”和“已还”。管理员可管理借阅记录,用户可查看自己的借阅历史。
  • 归还图书时,系统将借阅状态改为“已还”,并增加对应图书数量。

4.1.3 用户管理

  • 普通用户需注册登录,注册时需填写账户、密码、姓名、性别、联系方式、身份证号、邮箱等。系统校验唯一性(账户、手机、身份证号)。
  • 用户可登录前台,修改个人信息、头像、密码。
  • 管理员可查看、编辑、删除用户(软删除,yonghu_delete字段标记)。

4.1.4 论坛管理

  • 用户和管理员均可发布帖子(主题帖)和回帖。帖子状态分为“发帖”和“回帖”。
  • 前台显示帖子列表,支持查看详情及评论(回帖)。
  • 管理员可管理论坛内容(删除等)。

4.1.5 公告信息管理

  • 管理员可发布公告,包括标题、类型、图片、内容等。
  • 前台用户可查看公告列表和详情。

4.1.6 基础数据管理

  • 系统使用字典表(dictionary)统一管理图书类型、出版社、书架、性别、借阅状态、公告类型等枚举值。管理员可动态增删改这些选项。

4.1.7 系统管理

  • 轮播图管理(config表):管理员可配置前台首页轮播图片。
  • 管理员管理(users表):系统内置管理员账号(admin/admin),可增删管理员。

4.2 数据库设计核心表

表名 说明
yonghu 用户表(账户、密码、姓名、联系方式等)
tushu 图书信息表(编号、名称、作者、出版社、数量等)
tushujieyue 借阅信息表(图书ID、用户ID、借阅天数、状态)
forum 论坛表(帖子标题、内容、父ID、发帖人类型等)
news 公告信息表(标题、类型、图片、内容)
dictionary 字典表(存储所有下拉选项)
config 配置表(轮播图等)
users 管理员表
token 登录token记录表

5. 部分代码

5.1 借阅信息Controller(核心业务)

文件位置:com.controller.TushujieyueController

/**
 * 前端保存(用户借阅图书)
 */
@RequestMapping("/add")
public R add(@RequestBody TushujieyueEntity tushujieyue, HttpServletRequest request){
    // 校验是否已存在相同借阅记录
    Wrapper<TushujieyueEntity> queryWrapper = new EntityWrapper<TushujieyueEntity>()
        .eq("tushu_id", tushujieyue.getTushuId())
        .eq("yonghu_id", tushujieyue.getYonghuId())
        .eq("tushujieyue_shijian", tushujieyue.getTushujieyueShijian())
        .eq("tushujieyue_types", tushujieyue.getTushujieyueTypes());

    TushujieyueEntity tushujieyueEntity = tushujieyueService.selectOne(queryWrapper);
    if(tushujieyueEntity==null){
        tushujieyue.setInsertTime(new Date());
        tushujieyue.setCreateTime(new Date());
        tushujieyueService.insert(tushujieyue);
        // 减少图书库存
        TushuEntity tushuEntity = tushuService.selectById(tushujieyue.getTushuId());
        tushuEntity.setTushuNumber(tushuEntity.getTushuNumber() - 1);
        tushuService.updateById(tushuEntity);
        return R.ok();
    }else {
        return R.error(511,"表中有相同数据");
    }
}

/**
 * 后端修改(管理员还书操作)
 */
@RequestMapping("/update")
public R update(@RequestBody TushujieyueEntity tushujieyue, HttpServletRequest request){
    // ... 校验逻辑省略
    tushujieyueService.updateById(tushujieyue);
    // 归还图书:增加库存
    TushuEntity tushuEntity = tushuService.selectById(tushujieyueService.selectById(tushujieyue.getId()).getTushuId());
    tushuEntity.setTushuNumber(tushuEntity.getTushuNumber() + 1);
    tushuService.updateById(tushuEntity);
    return R.ok();
}

5.2 用户登录Controller

文件位置:com.controller.YonghuController

@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
    YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));
    if(yonghu==null || !yonghu.getPassword().equals(password))
        return R.error("账号或密码不正确");
    else if(yonghu.getYonghuDelete() != 1)
        return R.error("账户已被删除");
    String token = tokenService.generateToken(yonghu.getId(),username, "yonghu", "用户");
    R r = R.ok();
    r.put("token", token);
    r.put("role","用户");
    r.put("username",yonghu.getYonghuName());
    r.put("tableName","yonghu");
    r.put("userId",yonghu.getId());
    return r;
}

5.3 图书信息实体类(片段)

文件位置:com.entity.TushuEntity

@TableName("tushu")
public class TushuEntity<T> implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String tushuUuidNumber;   // 图书编号
    private String tushuName;         // 图书标题
    private Integer tushuTypes;       // 图书类型(字典)
    private String tushuPhoto;        // 图书封面
    private String tushuZuozhe;       // 图书作者
    private Integer chubansheTypes;   // 图书出版社
    private Integer shujiaTypes;      // 所在书架
    private Integer tushuNumber;      // 图书数量
    private String tushuContent;      // 图书详情
    private Date insertTime;          // 发布时间
    private Date createTime;          // 创建时间
    // getter/setter 省略
}

5.4 数据库配置(application.yml)

server:
  port: 8080
  servlet:
    context-path: /tushuguanli
spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/tushuguanli?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: 123456
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  typeAliasesPackage: com.entity
  configuration:
    map-underscore-to-camel-case: true

6. 部分截图

img1
img2
img3
img4
img5
img6
img7
img8
img9
img10
img11
img12
img13
img14
img15
img16
img17
img18
img19
img20
img21
img22
img23

7. 项目总结

本项目实现了一个功能完整的图书管理系统,涵盖图书管理、借阅管理、用户管理、论坛交流及公告发布等核心业务。系统采用前后端分离架构:后端基于Spring Boot + Mybatis-Plus,提供RESTful API;前端后台使用Vue.js + Element UI,前台用户端使用layui/html。通过Token实现用户认证,字典表动态管理枚举值,提高了系统的灵活性和可维护性。

项目的主要亮点包括:

  • 借阅与库存联动:用户借书时自动扣减图书数量,还书时自动增加,保证数据一致性。
  • 多角色权限:管理员和普通用户具有不同的功能菜单和操作权限。
  • 论坛交流功能:支持主题帖和回帖,增强用户互动。
  • 基础数据可配置:图书类型、出版社、书架、公告类型等均通过字典表管理,管理员可在后台动态添加修改。

该项目可作为中小型图书馆信息化管理的参考实现,也可以作为毕业设计或课程设计的完整案例。后续可扩展更多功能,如图书预约、逾期罚款、邮件通知、数据统计分析等。

https://fifteen.xiaobias.com/source/205

正文到此结束
本文目录