下面是一个基于 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)