当前位置:   article > 正文

python点菜小程序_用python编写一个点餐程序

用python编写一个点餐程序

一、实现功能

  1. 实现顾客选座落座点(加)菜、退菜、查询菜单
  2. 点(加)菜时,显示菜品及菜品单价,根据菜品和需要的数量下单;
  3. 查询菜单时,显示菜品及数量,并给出点餐总金额,同时显示落座的桌号;
  4. 退菜时,根据退菜菜品和数量退菜;
  5. 整个程序的健壮性强,对用户的任意输入设置了检错功能,当用户输入错误时,弹出提示并要求用户根据提示继续输入,为此专门设置了一个检错函数confirm_order(num),其中参数num可根据错误输入的类型进行不同的函数调用。(程序的健壮性做的时间最久)

 二、功能测试

1、设计了一个Order类供用户点餐,其中num为用户落座的桌号,运行程序时,用户选座后即可进入点菜系统(对用户的错误输入进行检查并要求用户重新落座)

main_menu(self)为用户进入系统的主菜单页面,包含系统的4个服务选项,用户可以通过输入'1','2','3','4'获得相应的服务(对用户的错误输入进行检查并要求用户重新输入获取对应的服务) 

 

 当用户输入错误时

 

2、order(self)为用户点菜功能函数,打印出饭店拥有的菜品名称以及其对应的价格,用户通过输入对应菜品名称和数量点(加)菜,之后弹出相应的提示,用户可以选择继续点菜或退出点菜进入main_menu(self)界面(调用confirm_order(0)函数),对用户的错误输入进行检查并要求用户重新输入(调用confirm_order(1)函数) 

 

当用户选择’y’继续点菜时

当用户输入错误信息(即不是字母’y’和’n’)

 

当用户点菜时输入错误时(即输入的菜品不在所选范围内和需要的菜品数量错误非数字) 

 

当用户选择’n’退出点菜时

 

 3、为用户退菜函数,用户输入菜品名称和数量进行退菜(输入数量为’all’时退掉所有该菜品),检查用户的输入,如果用户输入的菜品不在已点菜品中或者需要退菜数量大于已点数量,弹出错误提示,需要用户选择是否继续退菜(调用confirm_order(2)函数)

当用户输入错误时 

 

4、显示已点菜单,从测试至此,已点2份辣子鸡和1份水煮肉片,退掉all辣子鸡,应该还剩余1份水煮肉片,其金额为¥56

 

重新添加3份米饭后的菜单,其金额为¥62 

 

退掉1份米饭后的菜单,其金额为¥60

5、退出系统

三、功能代码

  1. class Order:
  2. #桌号
  3. def __init__(self,num):
  4. self.num=num
  5. order_menu={} #已点过的菜品及数量
  6. menu={'辣子鸡':39,'红烧肉':49,'麻婆豆腐':19,'酸菜鱼':59,'水煮肉片':56,'米饭':2,'鸡蛋汤':9} #菜品及其价格
  7. Price=0 #总价格
  8. #主菜单
  9. def main_menu(self):
  10. choose=input("1、点(加)菜\n2、退菜\n3、查看菜单\n4、退出\n您需要输入数字{1,2,3,4}中的一个来选择服务类型:")
  11. if choose not in {'1','2','3','4'}:
  12. print("输入有误,重新输入")
  13. self.main_menu()
  14. else:
  15. if choose=='1':
  16. self.order() #点(加)菜
  17. self.main_menu()
  18. elif choose=='2':
  19. self.menu_back() #退菜
  20. self.main_menu()
  21. elif choose=='3':
  22. self.menu_check() #查看已点菜品
  23. self.main_menu()
  24. elif choose=='4':
  25. print("您已退出") #退出系统
  26. #菜单
  27. def menu_check(self):
  28. print("***************")
  29. print("*您的桌号:"+str(self.num)+'号*')
  30. print("***************")
  31. if not self.order_menu:
  32. print("客官您还没点餐哦")
  33. else:
  34. print("您的菜单:\n---------------")
  35. for key,value in self.order_menu.items():
  36. print(key+str(":")+str(value)+str("份"))
  37. print("---------------\n总价:¥"+str(self.Price))
  38. print("---------------")
  39. #确认选项和处理用户错误输入
  40. #f=0表示点菜后是否继续点菜确认,f=1表示用户点菜时错误输入,f=2表示用户退菜时错误输入
  41. def confirm_order(self,f):
  42. if f==0:
  43. confirm=input("您是否还需要继续点菜(是:y 否:n):")
  44. elif f==1:
  45. print("抱歉,客官!!!您点的菜我们没有,请您检查后重新点菜")
  46. confirm=input("您是否还需要继续点菜(是:y 否:n):")
  47. elif f==2:
  48. print("您输入的退菜信息有误,请您检查后重新退菜")
  49. confirm=input("您是否还需要继续退菜(是:y 否:n):")
  50. if confirm not in {'y','n'}:
  51. print("客官输入有误,请在y和n中选择一项输入")
  52. confirm=self.confirm_order(1)
  53. else:
  54. if confirm=='y' and f in {0,1}:
  55. self.order()
  56. elif confirm=='y' and f==2:
  57. self.menu_back()
  58. else:
  59. print("您已退出退菜")
  60. #点菜功能,用户可选择菜品及数量,给出点餐总额
  61. def order(self):
  62. print('我们的菜单:')
  63. for key,value in self.menu.items():
  64. print(key+str(":¥")+str(value))
  65. order_dish=input('请您点餐:')
  66. if order_dish not in self.menu.keys():
  67. self.confirm_order(1)
  68. else:
  69. if order_dish in self.order_menu:
  70. dish_num=input("客官,您需要再加几份"+order_dish+":")
  71. if not dish_num.isdigit():
  72. self.confirm_order(2)
  73. else:
  74. self.Price+=int(dish_num)*self.menu[order_dish]
  75. self.order_menu.update({order_dish:self.order_menu[order_dish]+int(dish_num)})
  76. else:
  77. dish_num=input("客官,您需要几份"+order_dish+":")
  78. if not dish_num.isdigit():
  79. self.confirm_order(2)
  80. else:
  81. self.Price+=int(dish_num)*self.menu[order_dish]
  82. self.order_menu.update({order_dish:int(dish_num)})
  83. self.confirm_order(0)
  84. #退菜
  85. def menu_back(self):
  86. back_dish=input('您要退的菜品:')
  87. if back_dish not in self.menu.keys():
  88. self.confirm_order(2)
  89. elif back_dish not in self.order_menu:
  90. print("您还未点该菜品")
  91. self.menu_check()
  92. else:
  93. dish_num=input('您要退掉几份'+back_dish+'(all表示全部):')
  94. if dish_num=='all':
  95. self.Price-=self.order_menu[back_dish]*self.menu[back_dish]
  96. self.order_menu.pop(back_dish)
  97. elif not dish_num.isdigit() or int(dish_num)>self.order_menu[back_dish]:
  98. print('您输入的退菜数量有误')
  99. self.confirm_order(2)
  100. else:
  101. self.Price-=int(dish_num)*self.menu[back_dish]
  102. self.order_menu.update({back_dish:self.order_menu[back_dish]-int(dish_num)})
  103. print('已为您退掉'+back_dish)
  104. #选座函数
  105. def NO():
  106. print('我们的桌号0-10,请输入0-10之间的数字')
  107. num=input('请您落座:')
  108. if not num.isdigit() or int(num)>10 or int(num)<0:
  109. print('没有该桌号,请检查后落座')
  110. NO()
  111. else:
  112. return num
  113. num=NO()
  114. Order(num).main_menu() #用户进入程序点餐

原创作品,仅做学习交流使用,转载请联系作者,未经同意转载侵权必究

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/80645
推荐阅读
相关标签
  

闽ICP备14008679号