Python怎么制作一个简易的点菜系统

发布时间:2021-11-23 14:12:54 作者:iii
来源:亿速云 阅读:453
# Python怎么制作一个简易的点菜系统

## 一、项目概述

在餐饮行业中,一个高效的点菜系统能显著提升运营效率。本文将使用Python开发一个基于控制台的简易点菜系统,包含以下核心功能:

1. 菜品管理(添加/删除/修改)
2. 顾客点餐功能
3. 订单计算与账单生成
4. 简单数据持久化存储

## 二、技术选型

```python
# 主要技术栈
import json  # 数据存储
from tabulate import tabulate  # 表格展示
import os  # 文件操作

三、系统架构设计

3.1 数据结构设计

menu = {
    "001": {"name": "鱼香肉丝", "price": 38, "category": "热菜"},
    "002": {"name": "宫保鸡丁", "price": 42, "category": "热菜"}
}

orders = {
    "table1": [
        {"dish_id": "001", "quantity": 2},
        {"dish_id": "002", "quantity": 1}
    ]
}

3.2 功能模块划分

  1. menu_manager.py - 菜品管理
  2. order_system.py - 点餐逻辑
  3. bill_generator.py - 账单生成
  4. main.py - 主程序入口

四、核心代码实现

4.1 菜品管理模块

def load_menu():
    """从文件加载菜单数据"""
    if os.path.exists("menu.json"):
        with open("menu.json", "r") as f:
            return json.load(f)
    return {}

def save_menu(menu_data):
    """保存菜单到文件"""
    with open("menu.json", "w") as f:
        json.dump(menu_data, f, indent=4)

def add_dish(menu_data):
    """添加新菜品"""
    dish_id = input("输入菜品编号: ").strip()
    if dish_id in menu_data:
        print("该编号已存在!")
        return
    
    name = input("菜品名称: ").strip()
    price = float(input("价格: "))
    category = input("分类: ").strip()
    
    menu_data[dish_id] = {
        "name": name,
        "price": price,
        "category": category
    }
    save_menu(menu_data)
    print("添加成功!")

4.2 点餐系统模块

def take_order(menu_data):
    """处理顾客点餐"""
    table_id = input("请输入桌号: ")
    current_order = []
    
    while True:
        print("\n当前菜单:")
        display_menu(menu_data)
        
        dish_id = input("输入菜品编号(输入q结束): ").strip()
        if dish_id.lower() == 'q':
            break
            
        if dish_id not in menu_data:
            print("无效的菜品编号!")
            continue
            
        quantity = int(input("输入数量: "))
        current_order.append({
            "dish_id": dish_id,
            "quantity": quantity
        })
    
    if current_order:
        save_order(table_id, current_order)
        print(f"桌号{table_id}点餐完成!")

def save_order(table_id, order_items):
    """保存订单数据"""
    orders = load_orders()
    orders[table_id] = order_items
    with open("orders.json", "w") as f:
        json.dump(orders, f, indent=4)

4.3 账单生成模块

def generate_bill(table_id):
    """生成指定桌号的账单"""
    orders = load_orders()
    menu = load_menu()
    
    if table_id not in orders:
        print("该桌号无订单记录!")
        return
    
    print(f"\n==== 桌号 {table_id} 账单 ====")
    total = 0
    bill_data = []
    
    for item in orders[table_id]:
        dish = menu[item["dish_id"]]
        subtotal = dish["price"] * item["quantity"]
        bill_data.append([
            dish["name"], 
            dish["price"],
            item["quantity"],
            subtotal
        ])
        total += subtotal
    
    print(tabulate(bill_data, 
        headers=["菜品", "单价", "数量", "小计"],
        tablefmt="grid"))
    
    print(f"\n总计: ¥{total:.2f}")
    print("="*30)

五、系统集成与测试

5.1 主程序入口

def main():
    menu_data = load_menu()
    
    while True:
        print("\n=== 简易点菜系统 ===")
        print("1. 菜品管理")
        print("2. 顾客点餐")
        print("3. 生成账单")
        print("4. 退出系统")
        
        choice = input("请选择操作: ").strip()
        
        if choice == "1":
            manage_menu(menu_data)
        elif choice == "2":
            take_order(menu_data)
        elif choice == "3":
            table_id = input("输入桌号: ")
            generate_bill(table_id)
        elif choice == "4":
            print("感谢使用!")
            break
        else:
            print("无效输入!")

if __name__ == "__main__":
    main()

5.2 测试用例

# 测试添加菜品
add_dish({
    "003": {
        "name": "麻婆豆腐",
        "price": 28,
        "category": "热菜"
    }
})

# 测试点餐流程
test_order = {
    "table5": [
        {"dish_id": "001", "quantity": 1},
        {"dish_id": "003", "quantity": 2}
    ]
}
save_order("table5", test_order["table5"])

# 验证账单生成
generate_bill("table5")

六、功能扩展建议

  1. 图形界面:使用Tkinter/PyQt实现GUI
# Tkinter示例
from tkinter import *
root = Tk()
Label(root, text="菜品管理").pack()
root.mainloop()
  1. 数据库集成:改用SQLite/MySQL存储
# SQLite示例
import sqlite3
conn = sqlite3.connect('restaurant.db')
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS menu (id TEXT PRIMARY KEY, name TEXT, price REAL)")
  1. Web服务化:使用Flask/Django开发Web版
# Flask示例
from flask import Flask
app = Flask(__name__)

@app.route('/menu')
def show_menu():
    return jsonify(load_menu())

七、项目总结

通过本项目的开发,我们实现了:

  1. 使用Python标准库完成核心功能
  2. JSON实现简易数据持久化
  3. 模块化的代码结构设计
  4. 控制台交互界面优化

完整代码已托管至GitHub(示例仓库地址),包含详细的注释和README使用说明。


附录:完整代码结构

restaurant_system/
├── data/
│   ├── menu.json
│   └── orders.json
├── modules/
│   ├── __init__.py
│   ├── menu_manager.py
│   ├── order_system.py
│   └── bill_generator.py
├── main.py
└── requirements.txt

安装依赖:pip install tabulate “`

推荐阅读:
  1. JQ制作简易弹窗效果
  2. 使用Python怎么制作简易计算器

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:如何理解TreeATE自动化测试平台

下一篇:c语言怎么实现含递归清场版扫雷游戏

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》