📜  使用Python 的GUI 计费系统和菜单卡(1)

📅  最后修改于: 2023-12-03 15:36:36.141000             🧑  作者: Mango

使用Python 的GUI 计费系统和菜单卡

在餐厅或咖啡馆等地方,常常需要一款能够快速计算顾客订单价格的计费系统和菜单卡。使用Python编写这样的系统,能够提高结算速度和减少误差。本文将介绍如何使用Python和GUI库来实现这个计费系统和菜单卡。

GUI库选择

Python中有很多GUI库可供选择,常用的有Tkinter、PyQt和wxPython等。本文将选择Tkinter库来实现GUI界面。

项目需求

我们需要实现一个计费系统和菜单卡,包含以下功能:

  1. 管理员可以添加/删除菜单项,包括菜品名称、价格和描述等信息。
  2. 顾客可以看到菜单和价格等信息,选择自己喜欢的菜品,生成订单并结算。
  3. 计费系统能够自动计算顾客订单总价和税金。
  4. 生成收据和订单信息,可保存到文件中。
项目实现
1. 创建GUI界面

首先需要创建一个GUI界面用于显示菜单、订单和收据等信息。这里我们使用Tkinter库来实现。以下是一个简单的代码示例:

import tkinter as tk

class PaymentSystem(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Payment System")

        # 创建控件
        self.menu_listbox = tk.Listbox(self, width=50, height=20)
        self.menu_listbox.pack(side=tk.LEFT)
        self.order_listbox = tk.Listbox(self, width=50, height=20)
        self.order_listbox.pack(side=tk.LEFT)
        self.total_label = tk.Label(self, text="Total:")
        self.total_label.pack(side=tk.TOP, anchor=tk.E)
        self.tax_label = tk.Label(self, text="Tax:")
        self.tax_label.pack(side=tk.TOP, anchor=tk.E)
        self.pay_button = tk.Button(self, text="Pay")
        self.pay_button.pack(side=tk.BOTTOM)

    def run(self):
        self.mainloop()

if __name__ == "__main__":
    payment_system = PaymentSystem()
    payment_system.run()
2. 创建菜单卡

菜单卡是一个包含多个菜品的界面,我们需要实现管理员添加/删除菜单项、显示菜单项功能。这里我们可以使用字典来存储菜单信息。

class MenuList:
    def __init__(self):
        self.menu_dict = {}

    def add_item(self, name, price, description):
        self.menu_dict[name] = {"price": price, "description": description}

    def remove_item(self, name):
        if name in self.menu_dict:
            del self.menu_dict[name]

    def get_item(self, name):
        return self.menu_dict.get(name)

    def get_menu(self):
        return self.menu_dict

    def __str__(self):
        return str(self.menu_dict)

在界面中显示菜单项:

class PaymentSystem(tk.Tk):
    def __init__(self):
        super().__init__()

        # 创建控件
        self.menu_listbox = tk.Listbox(self, width=50, height=20)
        self.menu_listbox.pack(side=tk.LEFT, fill=tk.BOTH)

        # 显示菜单
        self.menu_list = MenuList()
        self.menu_list.add_item("Coffee", 3.5, "Fresh brewed coffee")
        self.menu_list.add_item("Latte", 4.5, "Espresso and steamed milk")
        self.menu_list.add_item("Cappuccino", 4.5, "Espresso and frothed milk")
        self.show_menu()

    def show_menu(self):
        self.menu_listbox.delete(0, tk.END)
        for name in self.menu_list.get_menu():
            self.menu_listbox.insert(tk.END, f"{name} - ${self.menu_list.get_item(name)['price']}: {self.menu_list.get_item(name)['description']}")
3. 创建订单

顾客可以选择自己喜欢的菜品,并生成订单。我们需要实现在界面中选择菜品、添加到订单、计算总价和税金、支付等功能。

class PaymentSystem(tk.Tk):
    def __init__(self):
        super().__init__()

        # 创建控件
        self.menu_listbox = tk.Listbox(self, width=50, height=20)
        self.menu_listbox.pack(side=tk.LEFT, fill=tk.BOTH)
        self.order_listbox = tk.Listbox(self, width=50, height=20)
        self.order_listbox.pack(side=tk.LEFT, fill=tk.BOTH)
        self.total_label = tk.Label(self, text="Total:")
        self.total_label.pack(side=tk.TOP, anchor=tk.E)
        self.tax_label = tk.Label(self, text="Tax:")
        self.tax_label.pack(side=tk.TOP, anchor=tk.E)
        self.pay_button = tk.Button(self, text="Pay", command=self.pay_order)
        self.pay_button.pack(side=tk.BOTTOM)

        # 初始化订单信息
        self.order_list = OrderList()

        # 初始化菜单列表
        self.menu_list = MenuList()
        self.menu_list.add_item("Coffee", 3.5, "Fresh brewed coffee")
        self.menu_list.add_item("Latte", 4.5, "Espresso and steamed milk")
        self.menu_list.add_item("Cappuccino", 4.5, "Espresso and frothed milk")
        self.show_menu()

    def show_menu(self):
        self.menu_listbox.delete(0, tk.END)
        for name in self.menu_list.get_menu():
            self.menu_listbox.insert(tk.END, f"{name} - ${self.menu_list.get_item(name)['price']}: {self.menu_list.get_item(name)['description']}")

    def add_to_order(self):
        name = self.menu_listbox.get(tk.ACTIVE).split(" - ")[0]
        price = self.menu_list.get_item(name)["price"]
        self.order_list.add_item(name, price)

        # 显示订单
        self.order_listbox.delete(0, tk.END)
        for name in self.order_list.get_order():
            self.order_listbox.insert(tk.END, f"{name} - ${self.order_list.get_item(name)['price']}")

        # 显示总价和税金
        total = self.order_list.get_total()
        tax = self.order_list.get_tax()
        self.total_label.config(text=f"Total: ${total}")
        self.tax_label.config(text=f"Tax: ${tax}")

    def pay_order(self):
        # 生成收据和订单信息
        receipt = f"Total: ${self.order_list.get_total()}\nTax: ${self.order_list.get_tax()}\n\n"
        for name in self.order_list.get_order():
            receipt += f"{name} - ${self.order_list.get_item(name)['price']}\n"
        self.order_list.clear()
        self.show_menu()

        # 支付
        print(receipt)

        # 保存订单信息
        with open("orders.txt", "a") as f:
            f.write(receipt)

if __name__ == "__main__":
    payment_system = PaymentSystem()
    payment_system.run()
结论

本文介绍了如何使用Python和Tkinter库实现一款简单的计费系统和菜单卡,包括管理员添加/删除菜单项和顾客选择菜品、生成订单、结算等功能。在实际应用中,我们可以结合数据库和网络通讯等技术,实现更加强大的计费系统和菜单卡。