下面是一个基于 Python 的“自助棋牌室管理系统”的设计思路和简易示例,适合用于学习管理系统开发的入门项目。这个系统可以用于管理棋牌室的房间、用户、计费等信息,适合用于命令行/桌面应用,甚至可后续扩展为 Web 项目。
🧩 系统功能设计概览
1. 用户管理模块
- 添加用户(记录姓名、手机号、会员类型等)
- 查询用户信息
- 删除用户
2. 房间管理模块
- 添加房间(编号、类型、每小时单价)
- 查看房间状态(空闲/占用)
- 删除房间
3. 计费管理模块
- 房间开始使用计时
- 房间停止计时并结算
- 生成订单(记录使用者、时间段、费用)
4. 报表统计模块
- 每日营业统计
- 用户使用统计
- 房间使用频率分析
🖥️ 技术选型
模块 | 技术 |
---|---|
语言 | Python 3 |
数据存储 | SQLite(或用 CSV 也可) |
界面(可选) | Tkinter(图形界面)或 CLI |
时间处理 | datetime 模块 |
💻 示例代码(命令行版本)
1. 数据结构定义
import sqlite3
from datetime import datetime
# 初始化数据库
conn = sqlite3.connect("chess_room.db")
cursor = conn.cursor()
# 用户表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
phone TEXT,
member_type TEXT
)
''')
# 房间表
cursor.execute('''
CREATE TABLE IF NOT EXISTS rooms (
id INTEGER PRIMARY KEY AUTOINCREMENT,
room_number TEXT,
type TEXT,
price_per_hour REAL,
is_occupied INTEGER DEFAULT 0
)
''')
# 使用记录表
cursor.execute('''
CREATE TABLE IF NOT EXISTS usage (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
room_id INTEGER,
start_time TEXT,
end_time TEXT,
total_cost REAL
)
''')
conn.commit()
2. 房间使用与计费
def start_room_use(user_id, room_id):
cursor.execute("SELECT is_occupied FROM rooms WHERE id=?", (room_id,))
room = cursor.fetchone()
if not room or room[0]:
print("房间正在使用或不存在。")
return
start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
cursor.execute("UPDATE rooms SET is_occupied=1 WHERE id=?", (room_id,))
cursor.execute("INSERT INTO usage (user_id, room_id, start_time) VALUES (?, ?, ?)",
(user_id, room_id, start_time))
conn.commit()
print("房间使用开始记录成功。")
def end_room_use(room_id):
cursor.execute("SELECT id, start_time, user_id FROM usage WHERE room_id=? AND end_time IS NULL", (room_id,))
row = cursor.fetchone()
if not row:
print("未找到正在使用的记录。")
return
usage_id, start_time_str, user_id = row
end_time = datetime.now()
start_time = datetime.strptime(start_time_str, '%Y-%m-%d %H:%M:%S')
duration_hours = (end_time - start_time).total_seconds() / 3600
cursor.execute("SELECT price_per_hour FROM rooms WHERE id=?", (room_id,))
price = cursor.fetchone()[0]
total_cost = round(duration_hours * price, 2)
cursor.execute("UPDATE usage SET end_time=?, total_cost=? WHERE id=?",
(end_time.strftime('%Y-%m-%d %H:%M:%S'), total_cost, usage_id))
cursor.execute("UPDATE rooms SET is_occupied=0 WHERE id=?", (room_id,))
conn.commit()
print(f"使用结束,总费用:¥{total_cost}")
3. 添加和查看房间
def add_room(room_number, room_type, price_per_hour):
cursor.execute("INSERT INTO rooms (room_number, type, price_per_hour) VALUES (?, ?, ?)",
(room_number, room_type, price_per_hour))
conn.commit()
print("房间添加成功。")
def view_rooms():
cursor.execute("SELECT id, room_number, type, price_per_hour, is_occupied FROM rooms")
rooms = cursor.fetchall()
for r in rooms:
print(f"ID: {r[0]} | 房号: {r[1]} | 类型: {r[2]} | 价格: ¥{r[3]}/小时 | 状态: {'占用' if r[4] else '空闲'}")
📊 扩展功能建议
功能 | 描述 |
---|---|
会员折扣 | 根据会员类型给予折扣(如VIP 8折) |
多人共享房间 | 支持一房多用户记录 |
Web后台 | 使用 Flask + Bootstrap 搭建简单后台管理 |
图表分析 | 利用 matplotlib、pandas 实现营业额折线图等 |
📂 项目结构建议
chess_room_system/
├── main.py # 主程序入口
├── db/
│ └── chess_room.db # SQLite 数据库
├── modules/
│ ├── user.py # 用户管理模块
│ ├── room.py # 房间管理模块
│ └── billing.py # 计费模块
├── ui/
│ └── cli.py # 命令行交互界面(或 GUI)
└── README.md # 使用说明
如你需要:
- 增加 Tkinter 图形界面版本
- 打包成可执行程序(PyInstaller)
- 或部署成 Web 后台(Flask/Django)
发表回复