基于Python的项目——餐厅点餐系统+项目说明书

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()  # 用户进入程序点餐
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值