
一、项目介绍这是我的 Web 应用技术课程的课程设计项目一个完整的图书管理系统基于 B/S 架构开发实现了三级角色权限管控普通用户 / 管理员 / 超级管理员涵盖图书管理、用户管理、借阅管理、分类管理四大核心模块。项目采用前后端分离的开发思路后端用SpringBoot MyBatis前端用Vue2 Element UI数据库用MySQL整体代码结构清晰分层明确适合作为课程设计参考和 SpringBoot 入门学习项目。功能模块总览系统分为三类角色不同角色登录后看到的菜单和功能完全不同普通用户登录注册、修改密码按书名 / 作者搜索图书分页浏览在线借书、还书查看个人借阅记录、逾期罚金无任何修改、管理权限普通管理员图书的增删改查、条件搜索、分页查看所有用户的借阅记录办理还书、罚金结算无用户管理、系统配置权限超级管理员最高权限拥有管理员的所有权限用户管理新增用户、编辑信息、分配角色、重置密码、冻结 / 解冻账号分类管理图书分类的增删改查系统全部数据的管理权限数据库设计本系统使用 MySQL 数据库共设计 5 张核心数据表1用户表 user存储系统所有用户的账号信息和权限等级。2图书表 book存储所有图书的基础信息和库存数据。3图书分类表 category存储图书分类信息用于图书归类管理。4借阅记录表 borrow存储所有用户的借书还书记录是核心业务表。5预约记录表 reserve存储用户的图书预约信息。核心功能实现1.三级权限控制拦截器实现所有请求到达 Controller 之前先经过拦截器统一校验登录状态和角色权限前端隐藏按钮 后端接口拦截双重保障。OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{HttpSessionsessionrequest.getSession();UserloginUser(User)session.getAttribute(loginUser);// 未登录直接拦截if(loginUsernull){writeJson(response,{\success\:false,\msg\:\未登录请先登录\});returnfalse;}Stringurirequest.getRequestURI();StringroleloginUser.getRole();// 用户管理只有超级管理员能进if(uri.startsWith(/user/manage)!admin.equals(role)){writeJson(response,{\success\:false,\msg\:\权限不足\});returnfalse;}// 分类管理只有超级管理员能进if(uri.startsWith(/category)!admin.equals(role)){writeJson(response,{\success\:false,\msg\:\权限不足\});returnfalse;}returntrue;}借书业务事务保证数据一致性借书包含「扣库存」和「生成借阅记录」两步数据库操作用Transactional事务注解保证原子性要么全成功要么全失败绝对不会出现库存扣了但没生成记录的脏数据。OverrideTransactional(rollbackForException.class)publicbooleanborrowBook(IntegeruserId,IntegerbookId,intborrowDays){// 1. 校验库存BookbookbookMapper.selectById(bookId);if(booknull||book.getStock()0){returnfalse;}// 2. 扣减库存bookMapper.updateStock(bookId,-1);// 3. 生成借阅记录BorrowborrownewBorrow();borrow.setUserId(userId);borrow.setBookId(bookId);borrow.setBorrowTime(LocalDateTime.now());borrow.setReturnDeadline(LocalDateTime.now().plusDays(borrowDays));borrow.setStatus(1);// 借阅中borrow.setFine(BigDecimal.ZERO);borrowMapper.insert(borrow);returntrue;}还书自动算逾期罚金还书时自动计算到期日和还书日的天数差超过 0 天就按日算罚金。LocalDateTimenowLocalDateTime.now();longoverdueDaysChronoUnit.DAYS.between(borrow.getReturnDeadline(),now);BigDecimalfineBigDecimal.ZERO;if(overdueDays0){finefinePerDay.multiply(BigDecimal.valueOf(overdueDays));}界面展示登录页简洁的卡片式登录界面支持账号密码登录可跳转注册。图书管理页顶部搜索栏 数据表格 分页控件管理员可见新增 / 编辑 / 删除按钮普通用户只显示借书按钮。用户管理页超级管理员专属支持按用户名、角色、状态多条件筛选可新增用户、编辑信息、重置密码、冻结 / 解冻账号。借阅记录页用不同颜色标签区分「借阅中 / 已归还 / 已逾期」状态支持在线还书自动计算罚金。二、项目介绍视频web课程设计讲解