# 新锐台球厅管理系统的设计与实现
## 1. 项目简介
新锐台球厅管理系统是一个基于Web的综合管理平台,旨在实现台球厅的场地预约、会员管理、消费结算、设备维护、经营分析等核心业务流程的信息化。系统通过自动化管理减少人工操作误差,优化资源分配,提高台球厅的运营效率和服务质量。
---
## 2. 系统功能模块
### 2.1 场地管理
- **台球桌信息管理**:添加、修改、删除台球桌信息(编号、类型、状态)。
- **场地预约**:支持会员在线预约台球桌,实时显示可用时间段。
- **场地状态监控**:实时显示台球桌使用状态(空闲/使用中/维护中)。
### 2.2 会员管理
- **会员信息管理**:记录会员姓名、联系方式、会员等级、积分余额。
- **会员充值**:支持现金、微信、支付宝等多种支付方式充值。
- **会员优惠**:根据会员等级享受不同折扣(如黄金会员8折)。
### 2.3 消费结算
- **消费记录**:记录会员的台球桌使用时间、饮料消费、服务费用。
- **结算功能**:自动计算消费金额,支持会员卡余额支付或现金支付。
- **发票打印**:生成消费明细,支持打印纸质发票。
### 2.4 设备维护
- **设备信息管理**:记录台球桌、球杆、灯具等设备信息。
- **维护记录**:记录设备维修时间、维修内容、维修费用。
- **维护提醒**:设备保养到期前自动提醒管理员。
### 2.5 经营分析
- **收入统计**:按日/周/月统计台球厅收入,生成可视化报表。
- **会员活跃度**:分析会员消费频率,识别高价值会员。
- **设备利用率**:统计台球桌使用率,优化资源配置。
### 2.6 系统管理
- **角色权限**:管理员(全权限)、前台(预约/结算)、维护员(设备管理)。
- **操作日志**:记录用户登录、关键操作(如会员充值、设备维修)。
- **数据备份**:定期备份数据库,支持灾难恢复。
---
## 3. 技术栈
| 模块 | 技术选型 |
|------------|--------------------------------------------------------------------------|
| **前端** | Vue3 + Element Plus + ECharts + Axios |
| **后端** | Spring Boot 2.7 + Spring Security + JWT + MyBatis-Plus |
| **数据库** | MySQL 8.0 + Redis(缓存会员会话、热门台球桌数据) |
| **中间件** | RabbitMQ(异步处理预约高峰期的并发请求) |
| **部署** | Docker + Nginx(负载均衡) |
---
## 4. 数据库设计(核心表)
### 4.1 台球桌表(`pool_table`)
| 字段名 | 类型 | 描述 |
|-----------------|--------------|----------------------|
| table_id | INT | 台球桌ID(主键) |
| table_number | VARCHAR(20) | 台球桌编号(唯一约束)|
| type | VARCHAR(50) | 类型(标准/比赛) |
| status | ENUM | 状态(空闲/使用中/维护中)|
### 4.2 会员表(`member`)
| 字段名 | 类型 | 描述 |
|-----------------|--------------|----------------------------|
| member_id | INT | 会员ID(主键) |
| name | VARCHAR(50) | 姓名 |
| phone | VARCHAR(15) | 联系方式 |
| level | ENUM | 会员等级(普通/黄金/钻石) |
| balance | DECIMAL(10,2)| 账户余额 |
| points | INT | 积分 |
### 4.3 预约表(`reservation`)
| 字段名 | 类型 | 描述 |
|-----------------|--------------|----------------------------|
| reservation_id | INT | 预约ID(主键) |
| member_id | INT | 关联会员ID(外键) |
| table_id | INT | 关联台球桌ID(外键) |
| start_time | DATETIME | 预约开始时间 |
| end_time | DATETIME | 预约结束时间 |
| status | ENUM | 状态(已预约/已完成/已取消)|
### 4.4 消费表(`consumption`)
| 字段名 | 类型 | 描述 |
|-----------------|--------------|----------------------------|
| consumption_id | INT | 消费ID(主键) |
| member_id | INT | 关联会员ID(外键) |
| table_id | INT | 关联台球桌ID(外键) |
| amount | DECIMAL(10,2)| 消费金额 |
| payment_method | ENUM | 支付方式(现金/会员卡/微信/支付宝)|
---
## 5. 系统架构
### 5.1 前端架构
- **Vue3**:使用Composition API实现响应式页面,路由配置采用Vue Router。
- **Element Plus**:构建管理后台界面,集成表格、表单、弹窗组件。
- **ECharts**:展示经营数据的折线图、柱状图、饼图。
### 5.2 后端架构
- **Spring Boot**:通过`@RestController`提供RESTful API,全局异常处理`@ControllerAdvice`。
- **JWT鉴权**:用户登录后生成Token,拦截器验证权限(如前台无权修改会员等级)。
- **RabbitMQ应用场景**:
- 高峰期预约请求进入消息队列,避免数据库瞬时压力过大。
- 异步发送预约成功短信通知。
---
## 6. 核心功能实现代码片段
### 6.1 预约冲突检测(Java)
```java
// ReservationService.java
public boolean checkReservationConflict(Reservation newReservation) {
List<Reservation> existingReservations = reservationMapper.selectByTableId(newReservation.getTableId());
for (Reservation r : existingReservations) {
if (newReservation.getStartTime().isBefore(r.getEndTime())) {
throw new BusinessException("该台球桌在此时间段已被预约!");
}
}
return true;
}
```
### 6.2 会员充值(SQL事务)
```sql
START TRANSACTION;
-- 查询会员余额
SELECT balance FROM member WHERE member_id = #{memberId} FOR UPDATE;
-- 更新会员余额
UPDATE member SET balance = balance + #{amount} WHERE member_id = #{memberId};
-- 插入充值记录
INSERT INTO recharge (...) VALUES (...);
COMMIT;
```
---
## 7. 项目部署
### 7.1 Docker Compose配置
```yaml
version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: yourpassword
volumes:
- ./mysql/data:/var/lib/mysql
redis:
image: redis:alpine
backend:
build: ./backend
ports:
- "8080:8080"
frontend:
build: ./frontend
ports:
- "80:80"
```
---
## 8. 项目展示
### 8.1 台球桌预约界面

- **功能**:可视化预约日历,选择台球桌与时间段,实时显示可用状态。
### 8.2 会员消费界面

- **功能**:支持扫码录入饮料消费,自动计算总金额,选择支付方式。
---
## 9. 源码获取
完整代码及数据库脚本已上传至GitHub仓库:
[【源码链接】](#)(注:此处需替换为实际仓库地址)
---
**毕业设计亮点**:
1. **高并发处理**:通过RabbitMQ削峰填谷,支持高峰期100+并发预约请求。
2. **数据可视化**:利用ECharts生成交互式报表,辅助经营决策。
3. **自动化提醒**:会员余额不足时自动发送充值提醒短信。