图书管理系统

本项目是一个功能完整的图书管理系统,采用前后端分离架构,使用目前最流行的技术栈开发。系统实现了用户管理、图书管理、分类管理、借阅管理等核心功能,并提供了数据统计和可视化功能。

# 📚 Vue3 + NestJS 图书管理系统

> 🎓 适合毕业设计/课程设计的完整全栈项目
>
> 前后端分离 · 企业级架构 · 开箱即用



📖 项目简介

本项目是一个功能完整的图书管理系统,采用前后端分离架构,使用目前最流行的技术栈开发。系统实现了用户管理、图书管理、分类管理、借阅管理等核心功能,并提供了数据统计和可视化功能。

🎯 适用场景

  • 大学毕业设计 - 完整的前后端代码 + 文档 + PPT
  • 课程设计项目 - 功能完善,技术栈现代化
  • 技术学习参考 - 代码规范,注释详细
  • 二次开发基础 - 模块化设计,易于扩展

⭐ 项目亮点

  • 🏗️ 企业级架构 - NestJS 模块化设计,TypeORM ORM框架
  • 🔐 安全认证 - JWT Token认证,bcryptjs密码加密
  • 📱 响应式设计 - Element Plus组件库,适配移动端
  • 📊 数据可视化 - ECharts图表,直观展示统计数据
  • 🐳 容器化部署 - Docker Compose一键启动
  • 📚 完整文档 - Swagger API文档 + 毕业设计论文模板 + 答辩PPT

🚀 快速开始(3步启动)

📋 环境要求

工具 版本要求 说明
Docker Desktop 最新版 用于运行MySQL和Redis
Node.js >= 18.0 JavaScript运行环境
pnpm / npm 最新版 包管理工具(推荐pnpm)

⚡ 启动步骤

第 1 步:启动数据库

双击运行:

1-启动数据库.bat

自动执行:

  • ✅ 启动 MySQL 8.0(端口 3306)
  • ✅ 启动 Redis 7.0(端口 6379)
  • ✅ 自动导入数据库表结构(schema.sql)
  • ✅ 自动导入测试数据(data.sql)

等待提示: "数据库服务已准备就绪!"


第 2 步:启动应用

双击运行:

2-启动应用.bat

自动执行:

  • ✅ 启动 NestJS 后端(端口 3000)
  • ✅ 启动 Vue3 前端(端口 5173)
  • ✅ 打开两个命令行窗口(后端 + 前端)

等待提示:

  • 后端:🚀 图书管理系统后端启动成功!
  • 前端:VITE ready in xxx ms

第 3 步:访问系统

浏览器打开:

http://localhost:5173

👤 测试账号

角色 用户名 密码 权限
管理员 admin 123456 所有权限(增删改查图书、管理用户等)
普通用户 zhangsan 123456 浏览图书、借阅图书、查看个人记录
普通用户 lisi 123456 浏览图书、借阅图书、查看个人记录
普通用户 wangwu 123456 浏览图书、借阅图书、查看个人记录

📂 项目结构详解

01-library-management-system/          # 项目根目录
│
├─ 📁 backend/                         # ⚙️ 后端项目(NestJS)
│  ├─ src/                             # 源代码目录
│  │  ├─ modules/                      # 功能模块
│  │  │  ├─ auth/                      # 🔐 认证模块(登录、注册、JWT)
│  │  │  ├─ users/                     # 👥 用户管理模块
│  │  │  ├─ books/                     # 📚 图书管理模块
│  │  │  ├─ categories/                # 🏷️ 分类管理模块
│  │  │  ├─ borrow-records/            # 📝 借阅记录模块
│  │  │  └─ upload/                    # 📤 文件上传模块
│  │  ├─ common/                       # 公共模块
│  │  │  ├─ decorators/                # 装饰器
│  │  │  ├─ dto/                       # 数据传输对象
│  │  │  └─ filters/                   # 异常过滤器
│  │  ├─ health/                       # 健康检查
│  │  ├─ main.ts                       # 入口文件
│  │  └─ app.module.ts                 # 根模块
│  ├─ uploads/                         # 📷 上传文件存储目录
│  │  └─ covers/                       # 图书封面
│  ├─ .env                             # 环境变量配置
│  ├─ package.json                     # 依赖配置
│  ├─ tsconfig.json                    # TypeScript配置
│  └─ nest-cli.json                    # NestJS CLI配置
│
├─ 📁 frontend/                        # 🎨 前端项目(Vue3)
│  ├─ src/                             # 源代码目录
│  │  ├─ views/                        # 页面组件
│  │  │  ├─ Login.vue                  # 登录/注册页面
│  │  │  ├─ Home.vue                   # 首页(数据统计)
│  │  │  ├─ Books.vue                  # 图书管理
│  │  │  ├─ BookDetail.vue             # 图书详情
│  │  │  ├─ Categories.vue             # 分类管理
│  │  │  ├─ Users.vue                  # 用户管理
│  │  │  ├─ MyBorrow.vue               # 我的借阅
│  │  │  ├─ BorrowRecords.vue          # 借阅记录(管理员)
│  │  │  └─ Profile.vue                # 个人中心
│  │  ├─ api/                          # API接口封装
│  │  │  ├─ auth.js                    # 认证接口
│  │  │  ├─ users.js                   # 用户接口
│  │  │  ├─ books.js                   # 图书接口
│  │  │  ├─ categories.js              # 分类接口
│  │  │  ├─ borrow.js                  # 借阅接口
│  │  │  └─ upload.js                  # 上传接口
│  │  ├─ stores/                       # 状态管理(Pinia)
│  │  │  └─ user.js                    # 用户状态
│  │  ├─ router/                       # 路由配置
│  │  │  └─ index.js                   # 路由定义
│  │  ├─ utils/                        # 工具函数
│  │  │  └─ request.js                 # Axios封装
│  │  ├─ layouts/                      # 布局组件
│  │  │  └─ MainLayout.vue             # 主布局
│  │  ├─ styles/                       # 样式文件
│  │  └─ main.js                       # 入口文件
│  ├─ package.json                     # 依赖配置
│  └─ vite.config.js                   # Vite配置
│
├─ 📁 database/                        # 💾 数据库文件
│  ├─ schema.sql                       # 📊 数据库表结构(DDL)
│  ├─ data.sql                         # 📦 初始演示数据(DML)
│  └─ ER图设计.md                      # 📐 数据库设计文档
│
├─ 📁 docs/                            # 📚 文档目录
│  ├─ 功能说明文档.md                   # 📖 详细功能说明 + FAQ
│  ├─ 毕业设计论文模板.docx            # 📄 论文模板(12000字)
│  └─ Vue3+NestJS图书管理系统.pptx     # 📊 答辩PPT模板(17页)
│
├─ 🔧 docker-compose.yml               # Docker编排配置
│
├─ 🚀 1-启动数据库.bat                 # 一键启动MySQL+Redis
├─ 🚀 2-启动应用.bat                   # 一键启动前端+后端
├─ ⏹️ 3-停止数据库.bat                 # 停止Docker服务
├─ 🔄 4-重置数据库.bat                 # 重置数据库(删除并重新导入)
├─ 📋 5-查看日志.bat                   # 查看Docker日志
│
└─ 📖 README.md                        # 本文档

💡 功能模块详解

🔐 1. 用户认证模块

功能列表:

  • ✅ 用户注册(邮箱验证、用户名唯一性)
  • ✅ 用户登录(JWT Token生成)
  • ✅ 自动登录(Token持久化)
  • ✅ 退出登录
  • ✅ 路由守卫(未登录自动跳转)

技术实现:

  • JWT Token认证(有效期7天)
  • bcryptjs密码加密(哈希+盐)
  • Passport.js认证策略
  • localStorage持久化存储

👥 2. 用户管理模块(管理员)

功能列表:

  • ✅ 用户列表(分页、搜索)
  • ✅ 添加用户(表单验证)
  • ✅ 编辑用户(角色管理、借阅上限)
  • ✅ 删除用户(二次确认、不能删除自己)
  • ✅ 查看用户详情

字段说明:

  • ID、用户名、邮箱、手机号、真实姓名
  • 角色(管理员/普通用户)
  • 借阅上限(可自定义)
  • 注册时间

📚 3. 图书管理模块

功能列表:

  • ✅ 图书列表(分页、搜索、筛选)
  • ✅ 添加图书(ISBN、书名、作者、出版社等)
  • ✅ 编辑图书(修改信息、调整库存)
  • ✅ 删除图书(检查借阅记录)
  • ✅ 图书详情(完整信息展示)
  • ✅ 封面上传(本地上传 + URL输入)
  • ✅ 库存管理(总库存、可借数量)

搜索功能:

  • 按书名搜索(模糊匹配)
  • 按作者搜索
  • 按ISBN搜索
  • 按分类筛选

管理员权限: 增删改查、上传封面
普通用户权限: 浏览、搜索、借阅


🏷️ 4. 分类管理模块

功能列表:

  • ✅ 分类列表(显示图书数量)
  • ✅ 添加分类
  • ✅ 编辑分类
  • ✅ 删除分类(检查是否有图书)

默认分类:

  • 计算机
  • 文学
  • 历史
  • 科学
  • 艺术

📝 5. 借阅管理模块

借阅功能:

  • ✅ 一键借阅(库存检查)
  • ✅ 自动扣减库存
  • ✅ 借阅期限:30天
  • ✅ 借阅上限:5本(可配置)

归还功能:

  • ✅ 一键归还
  • ✅ 自动恢复库存
  • ✅ 记录归还时间

记录查询:

  • 我的借阅(普通用户)

    • 借阅中 / 已归还 / 已逾期
    • 剩余天数提示
  • 借阅记录(管理员)

    • 所有用户的借阅记录
    • 搜索、筛选、导出

逾期管理:

  • 自动检测逾期(超过30天)
  • 状态标记(红色警告)
  • 可扩展:邮件提醒、罚金计算

📊 6. 数据统计模块

统计卡片(首页):

  • 📚 图书总数
  • 👥 用户总数
  • 📖 借阅中数量
  • 📈 总借阅次数

图表展示(ECharts):

  • 📈 借阅趋势图 - 最近7天借阅趋势(折线图)
  • 📊 分类分布图 - 各分类图书数量(柱状图)
  • 🥧 借阅状态图 - 借阅中/已归还/逾期(饼图)
  • 🏆 热门排行榜 - 借阅次数Top 10

👤 7. 个人中心模块

功能列表:

  • ✅ 查看个人信息
  • ✅ 编辑个人信息(邮箱、手机号、真实姓名)
  • ✅ 修改密码(验证原密码)
  • ✅ 查看借阅历史

🛠️ 技术栈详解

前端技术

技术 版本 用途
Vue 3 3.3+ 核心框架(Composition API)
Element Plus 2.4+ UI组件库
Pinia 2.1+ 状态管理
Vue Router 4.2+ 路由管理
Axios 1.6+ HTTP请求
ECharts 5.4+ 数据可视化
Vite 5.0+ 构建工具
dayjs 1.11+ 日期处理

后端技术

技术 版本 用途
NestJS 10.0+ 核心框架
TypeORM 0.3+ ORM框架
MySQL 8.0+ 关系数据库
Redis 7.0+ 缓存数据库
JWT - Token认证
bcryptjs - 密码加密
Swagger - API文档
class-validator - 数据验证
Passport - 认证策略
Multer - 文件上传

开发工具

工具 用途
VS Code 代码编辑器
Docker Desktop 容器化工具
Git 版本控制
Postman API测试

🎮 管理脚本详解

📜 启动脚本

🚀 1-启动数据库.bat

功能:

  1. 检查 Docker Desktop 是否运行
  2. 启动 MySQL 容器(端口 3306)
  3. 启动 Redis 容器(端口 6379)
  4. 等待 MySQL 完全启动(约15秒)
  5. 自动导入 schema.sql(创建表)
  6. 自动导入 data.sql(插入测试数据)

提示信息:

✅ Docker 服务正常
✅ 容器已启动
✅ schema.sql 导入成功
✅ data.sql 导入成功
数据库服务已准备就绪!

🚀 2-启动应用.bat

功能:

  1. 打开后端窗口

    • 切换到 backend 目录
    • 执行 pnpm install(首次运行)
    • 执行 pnpm run start:dev
    • 监听端口 3000
  2. 打开前端窗口

    • 切换到 frontend 目录
    • 执行 pnpm install(首次运行)
    • 执行 pnpm run dev
    • 监听端口 5173

提示信息:

后端:🚀 图书管理系统后端启动成功!
前端:VITE ready in xxx ms

⏹️ 3-停止数据库.bat

功能:

  • 停止 MySQL 容器
  • 停止 Redis 容器
  • 保留数据(数据持久化在 Docker volume 中)

🔄 4-重置数据库.bat

功能:

  1. 停止所有容器
  2. 删除所有容器
  3. 删除所有数据卷(清空数据
  4. 重新启动容器
  5. 重新导入 schema.sql 和 data.sql

⚠️ 警告: 此操作会清空所有数据,请谨慎使用!


📋 5-查看日志.bat

功能:

  • 实时查看 Docker 容器日志
  • 用于排查数据库启动问题

快捷键:

  • Ctrl + C - 停止查看日志

📊 数据库设计

数据表结构

1. users(用户表)

字段 类型 说明
id INT 主键,自增
username VARCHAR(50) 用户名,唯一
password VARCHAR(255) 密码(加密)
email VARCHAR(100) 邮箱,唯一
phone VARCHAR(20) 手机号
real_name VARCHAR(50) 真实姓名
role ENUM 角色(admin/user)
max_borrow_count INT 最大借阅数量
created_at TIMESTAMP 创建时间

2. books(图书表)

字段 类型 说明
id INT 主键,自增
isbn VARCHAR(20) ISBN编号,唯一
title VARCHAR(200) 书名
author VARCHAR(100) 作者
publisher VARCHAR(100) 出版社
publish_date DATE 出版日期
category_id INT 分类ID(外键)
cover_image VARCHAR(500) 封面图片URL
description TEXT 简介
price DECIMAL(10,2) 价格
total_stock INT 总库存
available_stock INT 可借数量
borrowed_count INT 借阅次数
location VARCHAR(50) 存放位置
created_at TIMESTAMP 创建时间

3. categories(分类表)

字段 类型 说明
id INT 主键,自增
name VARCHAR(50) 分类名称,唯一
description VARCHAR(200) 分类描述
created_at TIMESTAMP 创建时间

4. borrow_records(借阅记录表)

字段 类型 说明
id INT 主键,自增
user_id INT 用户ID(外键)
book_id INT 图书ID(外键)
borrow_date TIMESTAMP 借阅时间
due_date TIMESTAMP 应还时间
return_date TIMESTAMP 实际归还时间
status ENUM 状态(borrowing/returned/overdue)

数据库连接信息

MySQL 8.0
  地址: localhost
  端口: 3306
  用户: root
  密码: root123
  数据库: library_db
  字符集: utf8mb4

Redis 7.0
  地址: localhost
  端口: 6379
  密码: redis123

🌐 API 接口文档

启动后端后,访问 Swagger 文档:

http://localhost:3000/api/docs

主要接口

认证接口

  • POST /auth/register - 用户注册
  • POST /auth/login - 用户登录
  • GET /auth/profile - 获取当前用户信息

用户管理

  • GET /users - 获取用户列表
  • POST /users - 创建用户
  • GET /users/:id - 获取用户详情
  • PUT /users/:id - 更新用户信息
  • DELETE /users/:id - 删除用户

图书管理

  • GET /books - 获取图书列表(分页、搜索)
  • POST /books - 创建图书
  • GET /books/:id - 获取图书详情
  • PUT /books/:id - 更新图书信息
  • DELETE /books/:id - 删除图书

借阅管理

  • POST /borrow-records - 借阅图书
  • PUT /borrow-records/:id/return - 归还图书
  • GET /borrow-records/my - 我的借阅记录
  • GET /borrow-records - 所有借阅记录(管理员)

文件上传

  • POST /upload/cover - 上传图书封面

❓ 常见问题解决

Q1: Docker Desktop 未启动

错误提示:

❌ Docker Desktop 未运行或未安装

解决方案:

  1. 打开 Docker Desktop 应用
  2. 等待 Docker 引擎启动完成
  3. 系统托盘会显示 Docker 图标(白色=运行中)
  4. 重新运行 1-启动数据库.bat

Q2: 端口被占用

错误提示:

Error: bind: address already in use

解决方案:

方法一:查找并关闭占用端口的程序

# 查看端口占用
netstat -ano | findstr "3306"   # MySQL
netstat -ano | findstr "3000"   # 后端
netstat -ano | findstr "5173"   # 前端

# 杀死进程
taskkill /PID 进程号 /F

方法二:修改端口(不推荐,需改多处配置)


Q3: 数据库连接失败

错误提示:

[Nest] ERROR [TypeOrmModule] Unable to connect to the database

解决方案:

  1. 确认数据库已启动:docker ps
  2. 检查 backend/.env 文件配置:
    DATABASE_HOST=localhost
    DATABASE_PORT=3306
    DATABASE_USER=root
    DATABASE_PASSWORD=root123
    DATABASE_NAME=library_db
    
  3. 重置数据库:运行 4-重置数据库.bat

Q4: 前端页面空白/接口404

原因分析:

  • 后端未启动
  • 后端端口不是 3000
  • 跨域问题

解决方案:

  1. 确认后端已启动:访问 http://localhost:3000/api/health
    • 正常返回:{"status":"ok"}
  2. 查看浏览器控制台(F12)错误信息
  3. 检查 frontend/vite.config.js 代理配置

Q5: 无法上传图片

错误提示:

文件上传失败

解决方案:

  1. 检查 backend/uploads/covers 目录是否存在
  2. 检查文件类型:只支持 jpg、png、gif、webp
  3. 检查文件大小:不能超过 5MB

Q6: TypeScript 编译错误

错误示例:

error TS2322: Type 'string' is not assignable to type 'UserRole'

解决方案:

  1. 确保使用枚举类型而非字符串字面量
  2. 检查 UserRole 的导入和使用
  3. 重启 VS Code TypeScript 服务

Q7: 密码忘记/无法登录

解决方案:
重置数据库并使用默认账号:

  1. 运行 4-重置数据库.bat
  2. 使用默认账号登录:admin / 123456

Q8: Docker 镜像拉取失败

错误提示:

failed to do request: dial tcp: connect timeout

解决方案:
配置 Docker 镜像加速器:

  1. 打开 Docker Desktop
  2. Settings → Docker Engine
  3. 添加镜像源:
    {
      "registry-mirrors": [
        "https://mirror.ccs.tencentyun.com"
      ]
    }
    
  4. Apply & Restart

🎓 适合毕业设计的理由

✅ 功能完整

  • 前后端分离架构
  • 8大功能模块
  • RESTful API 设计
  • 数据库设计规范

✅ 技术先进

  • Vue3 Composition API(最新)
  • NestJS 企业级框架
  • TypeScript 类型安全
  • Docker 容器化部署

✅ 文档齐全

  • 📖 功能说明文档(1000+行)
  • 📄 毕业设计论文模板(12000字)
  • 📊 答辩PPT模板(17页)
  • 📚 Swagger API 文档(自动生成)

✅ 易于答辩

  • 系统架构清晰
  • 技术亮点突出
  • 演示效果直观
  • PPT 内容完整

📚 配套文档

1. 功能说明文档.md

内容:

  • 详细功能说明(每个模块)
  • 技术实现细节
  • 代码示例
  • 常见问题 FAQ(Q1-Q15)
  • 二次开发指南

位置: docs/功能说明文档.md


2. 毕业设计论文模板.docx

内容:

  • 论文完整结构(6章)
  • 摘要(中英文)
  • 需求分析
  • 系统设计
  • 系统实现
  • 系统测试
  • 总结与展望
  • 参考文献

字数: 约 12,000 字
位置: docs/毕业设计论文模板.docx


3. Vue3+NestJS图书管理系统.pptx

内容:

  • 封面 + 目录
  • 研究背景与意义
  • 系统设计(架构图、数据库设计)
  • 核心功能展示(截图 + 演示流程)
  • 关键技术实现(JWT、文件上传)
  • 系统测试(功能测试、性能测试)
  • 项目总结 + 致谢

页数: 17 页
位置: docs/Vue3+NestJS图书管理系统.pptx


4. Swagger API 文档

访问地址: http://localhost:3000/api/docs

内容:

  • 所有 API 接口
  • 请求参数
  • 响应示例
  • 在线测试

🎯 学习建议

前端学习路径

  1. Vue3 基础

    • Composition API
    • 响应式原理
    • 生命周期钩子
  2. 组件开发

    • Element Plus 组件库
    • 自定义组件
    • 组件通信
  3. 状态管理

    • Pinia 使用
    • 状态持久化
  4. 路由管理

    • Vue Router 4
    • 路由守卫
    • 动态路由

后端学习路径

  1. NestJS 基础

    • 模块化设计
    • 依赖注入
    • 装饰器
  2. 数据库操作

    • TypeORM
    • 实体定义
    • 关系映射
  3. 认证授权

    • JWT Token
    • Passport 策略
    • 权限守卫
  4. API 设计

    • RESTful 规范
    • DTO 验证
    • Swagger 文档

🤝 技术支持

如遇到问题,可以:

  1. 查看 docs/功能说明文档.md 中的 FAQ
  2. 检查 Swagger API 文档
  3. 查看后端/前端控制台错误信息
  4. 查看 Docker 日志:运行 5-查看日志.bat

📄 许可协议

本项目仅供学习和毕业设计使用,未经许可不得用于商业用途。



( 评价)
会员专享资源
开通会员即可免费下载
已有 4 人下载

购买源码保证可本地运行,如需协助运行或定制开发,请 联系作者

分类:毕业设计
更新时间:2026-01-15 10:46:40
标签:
前端后端Vue3nestjs

相关推荐