用python写一个点餐程序,分为用户和商家两个模块,从txt文件中读取菜单信息,实现查看菜单,点单,查看订单,修改订单,结账,修改菜单等功能
时间: 2024-05-04 07:18:48 浏览: 86
好的,我可以帮你实现这个点餐程序。首先我们需要将菜单信息存储在一个txt文件中,每行包含菜品名称、价格和描述,如下所示:
```
红烧肉, 30, 此菜选用三层肉制作而成,口感鲜美。
鱼香肉丝, 25, 此菜选用猪肉和蔬菜制作而成,口感鲜香。
宫保鸡丁, 28, 此菜选用鸡肉和花生制作而成,口感麻辣可口。
```
然后我们可以编写一个菜单类来读取和存储菜单信息,并提供一些方法来处理订单:
```python
class Menu:
def __init__(self, filename):
self.menu = {}
with open(filename, 'r') as f:
for line in f:
name, price, desc = line.strip().split(', ')
self.menu[name] = (float(price), desc)
def show_menu(self):
print('菜单'.center(30, '-'))
print('{:<10}{:<10}{:<10}'.format('菜品名称', '价格', '描述'))
for name, (price, desc) in self.menu.items():
print('{:<10}{:<10}{:<10}'.format(name, price, desc))
def check_order(self, order):
print('订单明细'.center(30, '-'))
print('{:<10}{:<10}{:<10}{:<10}'.format('菜品名称', '单价', '数量', '小计'))
total = 0
for name, count in order.items():
if count > 0:
price, _ = self.menu[name]
subtotal = price * count
total += subtotal
print('{:<10}{:<10}{:<10}{:<10}'.format(name, price, count, subtotal))
print('总计:{:.2f}元'.format(total))
def modify_order(self, order):
while True:
self.check_order(order)
print('请选择要修改的菜品(输入 q 退出):')
name = input().strip()
if name == 'q':
break
if name not in self.menu:
print('菜品不存在,请重新输入!')
continue
print('请输入数量:')
count = int(input().strip())
if count < 0:
print('数量不能为负数,请重新输入!')
continue
order[name] = count
def checkout(self, order):
self.check_order(order)
print('请选择结账方式(1. 现金,2. 微信,3. 支付宝):')
method = int(input().strip())
print('结账成功!')
```
其中,`__init__`方法初始化菜单信息,`show_menu`方法显示菜单,`check_order`方法查看订单,`modify_order`方法修改订单,`checkout`方法结账。我们还需要一个用户类和一个商家类来使用菜单类提供的方法:
```python
class User:
def __init__(self, menu):
self.order = {}
for name in menu.menu.keys():
self.order[name] = 0
def order_dish(self, menu):
while True:
menu.show_menu()
print('请选择要点的菜品(输入 q 结束点菜):')
name = input().strip()
if name == 'q':
break
if name not in menu.menu:
print('菜品不存在,请重新输入!')
continue
print('请输入数量:')
count = int(input().strip())
if count < 0:
print('数量不能为负数,请重新输入!')
continue
self.order[name] += count
print('点菜完成!')
def modify_order(self, menu):
menu.modify_order(self.order)
def checkout(self, menu):
menu.checkout(self.order)
self.order = {}
for name in menu.menu.keys():
self.order[name] = 0
class Merchant:
def __init__(self, menu):
self.menu = menu
def modify_menu(self):
while True:
self.menu.show_menu()
print('请选择要修改的菜品(输入 q 退出):')
name = input().strip()
if name == 'q':
break
if name not in self.menu.menu:
print('菜品不存在,请重新输入!')
continue
print('请输入新的价格:')
price = float(input().strip())
print('请输入新的描述:')
desc = input().strip()
self.menu.menu[name] = (price, desc)
print('修改菜单完成!')
```
其中,`User`类代表一个用户,`order_dish`方法让用户点菜,`modify_order`方法让用户修改订单,`checkout`方法让用户结账;`Merchant`类代表一个商家,`modify_menu`方法让商家修改菜单。最后,我们可以编写一个主函数来运行程序:
```python
def main():
menu = Menu('menu.txt')
user = User(menu)
merchant = Merchant(menu)
while True:
print('请选择用户类型(1. 用户,2. 商家,3. 退出):')
option = int(input().strip())
if option == 1:
while True:
print('请选择操作(1. 点菜,2. 修改订单,3. 结账,4. 退出):')
user_option = int(input().strip())
if user_option == 1:
user.order_dish(menu)
elif user_option == 2:
user.modify_order(menu)
elif user_option == 3:
user.checkout(menu)
elif user_option == 4:
break
else:
print('无效操作,请重新输入!')
elif option == 2:
while True:
print('请选择操作(1. 修改菜单,2. 退出):')
merchant_option = int(input().strip())
if merchant_option == 1:
merchant.modify_menu()
elif merchant_option == 2:
break
else:
print('无效操作,请重新输入!')
elif option == 3:
break
else:
print('无效操作,请重新输入!')
if __name__ == '__main__':
main()
```
现在我们就可以运行程序,并进行点菜、修改订单、结账等操作了。
阅读全文