Skip to content

zyy125/library-system

Repository files navigation

图书馆管理系统

一个前后端分离的图书馆管理系统,后端基于 Go + Gin + GORM,前端基于 Vue 3 + Vite。

项目覆盖了图书管理、借阅管理、预约排队、用户管理和统计分析等核心场景,适合用作课程设计、毕业设计、练手项目或二次开发基础工程。

功能特性

普通用户

  • 用户注册、登录、刷新 Token、退出登录
  • 浏览图书列表、查看图书详情、按条件搜索筛选
  • 借阅图书、归还图书、续借图书
  • 查看当前借阅和历史借阅记录
  • 在图书无库存时发起预约排队
  • 查看和取消我的预约
  • 查看热门图书排行
  • 查看个人资料和个人借阅统计

管理员

  • 用户管理:列表、创建、编辑、删除、禁用
  • 图书管理:新增、编辑、删除、批量新增
  • 分类管理:增删改查
  • 借阅记录管理与查询
  • 数据统计总览
  • 借阅趋势统计
  • 分类统计

技术栈

后端

  • Go
  • Gin
  • GORM
  • MySQL
  • Redis
  • JWT
  • robfig/cron

前端

  • Vue 3
  • Vue Router 4
  • Axios
  • Vite

项目结构

library-system/
├── app/                  # 应用初始化
├── common/               # 通用响应、业务错误、校验错误
├── config/               # 配置读取
├── controller/           # HTTP 控制器
├── database/             # MySQL / Redis 初始化
├── dto/                  # 请求与响应 DTO
├── middleware/           # 鉴权、错误处理中间件
├── model/                # GORM 数据模型
├── repository/           # 数据访问层
├── router/               # 路由注册
├── scheduler/            # 定时任务
├── service/              # 业务服务层
├── static/               # 静态资源
├── utils/                # JWT、密码工具
├── library-web/          # Vue 前端
├── main.go               # 后端启动入口
└── README.md

核心业务规则

  • 普通用户默认最多可借 5 本书
  • 默认借阅期限为 30
  • 每条借阅记录最多续借 2
  • 图书有库存时不能预约,只能直接借阅
  • 图书归还后会自动通知下一位预约用户
  • 预约变为“可借阅”后,用户需在 48 小时内完成借阅
  • 逾期罚金当前规则为 1 元 / 天

定时任务

  • 每天 02:00 执行逾期检查,同步所有用户的逾期数量
  • 每小时执行一次预约过期处理,释放超时未借阅的预约名额

环境要求

  • Go 1.25+
  • Node.js 20+
  • MySQL 8.x
  • Redis 6+

环境变量

项目没有内置 .env 加载逻辑,启动前请先在 shell 中导出环境变量。

变量名 是否必填 默认值 说明
MYSQL_DSN root:@tcp(127.0.0.1:3306)/librarySystem?charset=utf8mb4&parseTime=True&loc=Local MySQL 连接串
REDIS_ADDR localhost:6379 Redis 地址
REDIS_PASSWORD Redis 密码
JWT_ACCESS_SECRET Access Token 密钥
JWT_REFRESH_SECRET Refresh Token 密钥

示例

export MYSQL_DSN='root:123456@tcp(127.0.0.1:3306)/librarySystem?charset=utf8mb4&parseTime=True&loc=Local'
export REDIS_ADDR='127.0.0.1:6379'
export REDIS_PASSWORD=''
export JWT_ACCESS_SECRET='your-access-secret'
export JWT_REFRESH_SECRET='your-refresh-secret'

快速开始

1. 准备数据库

先在 MySQL 中创建数据库:

CREATE DATABASE librarySystem DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

项目启动时会自动执行 GORM AutoMigrate,创建或更新以下表:

  • users
  • categories
  • books
  • borrow_records
  • reservations

2. 启动后端

在项目根目录执行:

go mod tidy
go run main.go

默认监听地址:

http://localhost:8080

3. 启动前端

cd library-web
npm install
npm run dev

默认访问地址:

http://localhost:5173

前端开发环境已在 library-web/vite.config.js 中将 /api 代理到 http://localhost:8080

前后端联调说明

  • 后端接口统一前缀为 /api
  • 前端通过 Authorization: Bearer <token> 携带访问令牌
  • 静态资源通过 /static 暴露,示例封面位于 static/covers/

接口概览

用户与认证

  • POST /api/users/register 注册
  • POST /api/users/login 登录
  • POST /api/users/refresh-token 刷新 Token
  • POST /api/users/logout 退出登录
  • GET /api/users/me 获取当前用户信息
  • PUT /api/users/me 修改当前用户信息
  • POST /api/users/change-password 修改密码

用户管理(管理员)

  • GET /api/users 用户列表
  • POST /api/users 创建用户
  • PUT /api/users/:id 更新用户
  • DELETE /api/users/:id 删除用户

图书

  • GET /api/books 图书列表
  • GET /api/books/:id 图书详情
  • POST /api/books 新增图书
  • POST /api/books/batch 批量新增图书
  • PUT /api/books/:id 编辑图书
  • DELETE /api/books/:id 删除图书

借阅

  • POST /api/borrow 借书
  • POST /api/borrow/:borrow_id/return 还书
  • POST /api/borrow/:borrow_id/renew 续借
  • GET /api/borrow 借阅记录列表
  • GET /api/borrow/current 当前借阅

预约

  • POST /api/reservations 创建预约
  • DELETE /api/reservations/:id 取消预约
  • GET /api/reservations/my 我的预约

分类

  • GET /api/categories 分类列表
  • GET /api/categories/:id 分类详情
  • POST /api/categories 创建分类
  • PUT /api/categories/:id 更新分类
  • DELETE /api/categories/:id 删除分类

统计

  • GET /api/stats/popular-books 热门图书
  • GET /api/stats/user/:user_id 用户借阅统计
  • GET /api/stats/overview 系统总览
  • GET /api/stats/borrow 借阅统计
  • GET /api/stats/categories 分类统计

常用请求参数

注册

{
  "username": "reader01",
  "password": "12345678",
  "email": "reader01@example.com",
  "phone": "13800138000"
}

登录

{
  "username": "reader01",
  "password": "12345678"
}

借书

{
  "book_id": 1,
  "borrow_days": 30
}

创建预约

{
  "book_id": 1
}

响应格式

接口统一返回 JSON,整体结构类似:

{
  "code": 200,
  "message": "success",
  "data": {},
  "errors": [],
  "details": {},
  "timestamp": "2026-06-05T12:00:00Z"
}

其中:

  • code:业务码或 HTTP 风格状态码
  • message:结果说明
  • data:成功返回的数据
  • errors:参数校验错误列表
  • details:业务错误附加信息

前端页面

普通用户页面:

  • 图书列表
  • 图书详情
  • 当前借阅
  • 借阅历史
  • 我的预约
  • 热门图书
  • 个人资料

管理员页面:

  • 数据看板
  • 用户管理
  • 图书管理
  • 借阅管理
  • 分类管理

开发建议

  • 建议先启动 MySQL 和 Redis,再启动后端
  • 首次运行后可手动在数据库中插入一个 admin 角色用户,便于进入后台页面
  • 如果前端端口或后端地址变化,请同步修改 library-web/vite.config.js

相关文件

License

当前仓库未声明 License,如需开源发布,建议补充 LICENSE 文件。

About

基于golang+gin的图书管理系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors