数据库课程设计项目 | Database Course Design Project
本项目是一个功能完备的现代化酒店管理系统,旨在解决传统酒店管理中存在的效率低下、数据易错和统计滞后等问题。系统采用 B/S (Browser/Server) 架构,前端基于 Vue 3 + Element Plus 构建响应式用户界面,后端采用高性能的 Python FastAPI 框架,数据库选用 MySQL 8.0。
系统实现了酒店业务的全流程闭环管理,包括用户权限控制、房型与客房管理、客户信息录入、订单预订/入住/退房以及经营数据的可视化统计。
- 🔒 权限管理 (RBAC): 基于角色的访问控制,区分 管理员 (Admin) 和 员工 (Staff)。
- 管理员:拥有用户管理、删除订单、系统设置等最高权限。
- 员工:仅限日常业务操作(入住、退房、查询),无法访问敏感设置。
- 💾 数据完整性保障:
- 外键保护: 防止误删除有订单关联的客户或房间。
- 事务控制: 保证“入住办理”和“退房结算”等复合操作的原子性。
- 业务逻辑校验: 严防“双重预订”和“无效时间段”。
- 📊 数据可视化: 集成 ECharts 图表库,直观展示:
- 最近 7 天的订单趋势与营收曲线。
- 当前房型分布与入住率统计。
- 🏘️ 全面的业务模块:
- 房型管理: 灵活配置房型名称、价格、最大入住人数。
- 客房管理: 实时查看和修改房间状态(空闲、入住、维修等)。
- 客户管理: 建立客户电子档案,支持身份证快速检索。
- 订单中心: 支持预订、入住、换房、退房的全生命周期管理。
- Framework: Vue.js 3 (Composition API)
- Build Tool: Vite
- UI Library: Element Plus
- State Management: Pinia
- HTTP Client: Axios
- Visualization: ECharts 5 / Vue-ECharts
- Router: Vue Router 4
- Framework: FastAPI (Python)
- ORM: SQLAlchemy
- Data Validation: Pydantic
- Authentication: JWT (JSON Web Tokens)
- Password Hashing: Passlib (Bcrypt)
- Database: MySQL 8.0+
- Engine: InnoDB (支持事务与外键)
Hotel System/
├── Backend/ # 后端项目根目录
│ ├── app/
│ │ ├── crud/ # 数据库增删改查逻辑
│ │ ├── routers/ # API 路由定义 (Controllers)
│ │ ├── models.py # SQLAlchemy ORM 模型
│ │ ├── schemas.py # Pydantic 数据校验模式
│ │ ├── database.py # 数据库连接配置
│ │ └── main.py # 应用入口
│ ├── run.py # 启动脚本
│ └── requirements.txt # Python 依赖清单
│
├── Frontend/ # 前端项目根目录
│ ├── src/
│ │ ├── api/ # Axios API 封装
│ │ ├── components/ # 公共组件
│ │ ├── keys/ # 组合式函数 (Composables)
│ │ ├── layout/ # 页面布局组件
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # Pinia 状态仓库
│ │ ├── views/ # 页面视图 (Login, Dashboard, etc.)
│ │ └── App.vue # 根组件
│ ├── package.json # Node.js 依赖清单
│ └── vite.config.js # Vite 配置
│
└── MySQL/ # 数据库脚本
└── sql_instruction.sql # 初始化 SQL 脚本
确保您的本地环境已安装:
- Python 3.8+
- Node.js 16+
- MySQL 8.0+
- Git
- 登录 MySQL 创建数据库:
CREATE DATABASE hotel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 找到
Backend/app/database.py,修改数据库连接配置(用户名/密码):(注:系统启动时会自动建表,无需手动执行 SQL,除非需要导入初始数据)SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:your_password@localhost:3306/hotel_db"
cd Backend
# 1. (可选) 创建虚拟环境
conda create -n DataBase python=3.10 -y
conda activate DataBase
# 2. 安装依赖
pip install -r requirements.txt
# 3. 启动服务
python run.py若启动成功,控制台将显示:Uvicorn running on http://127.0.0.1:8000
cd Frontend
# 1. 安装依赖
npm install
# 2. 启动开发服务器
npm run dev访问浏览器控制台显示的地址(通常为 http://localhost3000)即可进入系统。
- 管理员:
admin/password123 - 员工:
staff001/password123