class Order:
# 桌号
def __init__(self, num):
self.num = num
order_menu = {} # 已点过的菜品及数量
menu = {'辣子鸡': 39, '红烧肉': 49, '麻婆豆腐': 19, '酸菜鱼': 59, '水煮肉片': 56, '米饭': 2, '鸡蛋汤': 9} # 菜品及其价格
Price = 0 # 总价格
# 主菜单
def main_menu(self) -> object:
choose = input("1、点(加)菜\n2、退菜\n3、查看菜单\n4、退出\n您需要输入数字{1,2,3,4}中的一个来选择服务类型:")
if choose not in {'1', '2', '3', '4'}:
print("输入有误,重新输入")
self.main_menu()
else:
if choose == '1':
self.order() # 点(加)菜
self.main_menu()
elif choose == '2':
self.menu_back() # 退菜
self.main_menu()
elif choose == '3':
self.menu_check() # 查看已点菜品
self.main_menu()
elif choose == '4':
print("您已退出") # 退出系统
# 菜单
def menu_check(self):
print("***************")
print("*您的桌号:" + str(self.num) + '号*')
print("***************")
if not self.order_menu:
print("客官您还没点餐哦")
else:
print("您的菜单:\n---------------")
for key, value in self.order_menu.items():
print(key + str(":") + str(value) + str("份"))
print("---------------\n总价:¥" + str(self.Price))
print("---------------")
# 确认选项和处理用户错误输入
# f=0表示点菜后是否继续点菜确认,f=1表示用户点菜时错误输入,f=2表示用户退菜时错误输入
def confirm_order(self, f):
if f == 0:
confirm = input("您是否还需要继续点菜(是:y 否:n):")
elif f == 1:
print("抱歉,客官!!!您点的菜我们没有,请您检查后重新点菜")
confirm = input("您是否还需要继续点菜(是:y 否:n):")
elif f == 2:
print("您输入的退菜信息有误,请您检查后重新退菜")
confirm = input("您是否还需要继续退菜(是:y 否:n):")
if confirm not in {'y', 'n'}:
print("客官输入有误,请在y和n中选择一项输入")
confirm = self.confirm_order(1)
else:
if confirm == 'y' and f in {0, 1}:
self.order()
elif confirm == 'y' and f == 2:
self.menu_back()
else:
print("您已退出退菜")
# 点菜功能,用户可选择菜品及数量,给出点餐总额
def order(self):
print('我们的菜单:')
for key, value in self.menu.items():
print(key + str(":¥") + str(value))
order_dish = input('请您点餐:')
if order_dish not in self.menu.keys():
self.confirm_order(1)
else:
if order_dish in self.order_menu:
dish_num = input("客官,您需要再加几份" + order_dish + ":")
if not dish_num.isdigit():
self.confirm_order(2)
else:
self.Price += int(dish_num) * self.menu[order_dish]
self.order_menu.update({order_dish: self.order_menu[order_dish] + int(dish_num)})
else:
dish_num = input("客官,您需要几份" + order_dish + ":")
if not dish_num.isdigit():
self.confirm_order(2)
else:
self.Price += int(dish_num) * self.menu[order_dish]
self.order_menu.update({order_dish: int(dish_num)})
self.confirm_order(0)
# 退菜
def menu_back(self):
back_dish = input('您要退的菜品:')
if back_dish not in self.menu.keys():
self.confirm_order(2)
elif back_dish not in self.order_menu:
print("您还未点该菜品")
self.menu_check()
else:
dish_num = input('您要退掉几份' + back_dish + '(all表示全部):')
if dish_num == 'all':
self.Price -= self.order_menu[back_dish] * self.menu[back_dish]
self.order_menu.pop(back_dish)
elif not dish_num.isdigit() or int(dish_num) > self.order_menu[back_dish]:
print('您输入的退菜数量有误')
self.confirm_order(2)
else:
self.Price -= int(dish_num) * self.menu[back_dish]
self.order_menu.update({back_dish: self.order_menu[back_dish] - int(dish_num)})
print('已为您退掉' + back_dish)
# 选座函数
def NO():
print('我们的桌号0-10,请输入0-10之间的数字')
num = input('请您落座:')
if not num.isdigit() or int(num) > 10 or int(num) < 0:
print('没有该桌号,请检查后落座')
NO()
else:
return num
num = NO()
Order(num).main_menu() # 用户进入程序点餐
基于Python的项目——餐厅点餐系统+项目说明书
最新推荐文章于 2025-01-14 10:15:29 发布

1131

被折叠的 条评论
为什么被折叠?



