import tkinter as tk
class OrderSystem:
def __init__(self, master):
self.master = master
self.master.title("食堂选餐系统")
# 菜单数据
self.menu_items = {
"山东炒鸡": 12,
"糖醋里脊": 5,
"黄焖鸡": 13,
"凉皮": 6,
"过桥米线": 12
}
# 创建菜单列表
self.menu_listbox = tk.Listbox(self.master)
self.menu_listbox.pack(fill=tk.BOTH, expand=True)
# 在菜单列表中显示菜品及价格
for item, price in self.menu_items.items():
self.menu_listbox.insert(tk.END, f"{item} - ¥{price}")
# 创建订购按钮
order_button = tk.Button(self.master, text="订购", command=self.open_order_window)
order_button.pack()
# 初始化当前订购信息
self.current_order = {}
def open_order_window(self):
#获取选中的菜品
selected_indices = self.menu_listbox.curselection()
if len(selected_indices) == 0:
return
selected_item = self.menu_listbox.get(selected_indices[0])
# 提取菜品名称和价格
item, price = selected_item.split(" - ")
price = int(price[1:])
#打开订购子窗口
order_window = tk.Toplevel(self.master)
quantity_label = tk.Label(order_window, text="数量:")
quantity_label.grid(row=0, column=0)
quantity_entry = tk.Entry(order_window)
quantity_entry.grid(row=0, column=1)
confirm_button = tk.Button(order_window, text="确定",
command=lambda: self.calculate_total_price(item, price, int(quantity_entry.get()), order_window))
confirm_button.grid(row=1, column=0, columnspan=2)
#计算价格
def calculate_total_price(self, item, price, quantity, order_window):
total_price = price * quantity
self.current_order[item] = self.current_order.get(item, 0) + quantity
price_label = tk.Label(order_window, text=f"总价:¥{total_price}")
price_label.grid(row=2, column=0, columnspan=2)
tk.messagebox.showinfo("订购成功", f"成功订购:{item},数量:{quantity},总价:¥{total_price}")
root = tk.Tk()
app = OrderSystem(root)
root.mainloop()
如何在该代码中添加录入,浏览,查询,修改,退出的功能?
#!/sur/bin/nve python
# coding: utf-8
from os import system
'''
点餐小程序
'''
# 全局变量
mypath = r'/sdcard/Documents/'
ordered_dict = dict() # 记录已经点过的菜品及数量字典初值——空字典。
cuisine_dict = {i[0]: int(i[1]) for i in (i.split('\\') for i in open(f"{mypath}cuisine_list.txt").read().split('\n')[1:])} # 解析式生成供应菜品字典。(从磁盘文本读取菜品供应列表,格式为生成器——解析式用小括号包裹。)
#input(cuisine_dict) # 调试用语句。
clear = '\033[2J' # 清屏字符串。
error_tip = f"\n{' 输入错误!':^45}\n" # 输入错误提示信息字符串。
def main() -> None:
''' 主菜单 '''
while True:
print(clear)
show_meanu()
a = input(f"{'请输入选项:':>13}")
if not a: # 直接回车,默认点菜。
a = '1'
if a == '1':
order() # 点菜。
elif a == '2':
cancel_order() # 退菜。
elif a == '3':
check(table_num) # 查看已点菜。
elif a == '4':
background() # 转后台管理
else:
input(error_tip)
def background() -> None:
''' 后台菜单 '''
while True:
print(clear)
show_backmeanu()
a = input(f"{'请输入选项:':>13}")
if not a: # 直接回车,默认结账。
a = '1'
if a == '1':
input(f"{clear}\n{' 程序代码正在设计中…… ':~^41}\n") # 结账。
elif a == '2':
order() # 加菜。
elif a == '3':
cancel_order() # 退菜。
exit() # 出菜。
elif a == '4':
showall() # 显示所有餐台点菜。
elif a == '5':
main() # 转前台。
elif a == '6':
print(f"{clear}\n{' 欢迎再次使用“点餐小程序” ':~^39}\n")
exit()
else:
input(error_tip)
def show_meanu() -> None:
''' 主菜单显示 '''
meanu_s = f"{clear}\n\n{'【欢迎光临本店点餐小程序】':^37}\n{'':~^50}\n\n{'请选择您需要的服务:':>14}\n"
print(meanu_s)
meanu_tuple = '点餐', '退菜', '查看已点菜', '后台管理'
for k,i in enumerate(meanu_tuple): # 循环打印菜单选择项。
print(f"{k + 1:>20}. {i}") # 插值字符串格式化打印菜单选择项。
print(f"\n{'':~^50}\n")
def show_backmeanu() -> None:
''' 主菜单显示 '''
meanu_s = f"{clear}\n\n{'【欢迎光临本店点餐小程序后台】':^37}\n{'':~^50}\n\n{'请选择您需要的服务:':>14}\n"
print(meanu_s)
meanu_tuple = '结账', '加菜', '退菜', '出菜', '前台点餐', '退出'
for k,i in enumerate(meanu_tuple): # 循环打印菜单选择项。
print(f"{k + 1:>20}. {i}") # 插值字符串格式化打印菜单选择项。
print(f"\n{'':~^50}\n")
def show_cuisine() -> None:
''' 供应菜品列印 '''
print(f"{clear}\n{' 本店特供菜品 ':~^44}\n")
for k, cuisine in enumerate(cuisine_dict.items()): # 循环打印菜品信息。
print(f"{'¥':>12}{cuisine[1]:.2f} {'-'*6} {k:>2}. {cuisine[0]}")
print(f"\n{'(菜品选择序号,一份直接回车)':^37}\n{'~'*50}")
def order() -> None:
''' 点菜 '''
while True:
print(clear) # 打印清屏字符串清屏。
table_num = input(f"\n{'本店餐台:1、2、3、4、5、6、7、8':^38}\n{'':~^50}\n{'请输入就餐台号:':>17}")
if table_num not in map(str, range(1, 9)): # map(str, range(1, 9)) 相当于 ('1', '2', '3', '4', '5', '6', '7', '8') 。
input(error_tip)
else:
break
ordered_dict[table_num] = {} # 创建餐台点菜初值——空字典。
table_ordered = {} # 点餐列表初值为空。
cuisines = tuple(cuisine_dict.keys()) # 从供应菜品字典获取菜名列表,用元组更安全更省空间。
while True: # 循环点菜,直到输入为空结束点餐。
show_cuisine() # 显示菜品列表。
cuisine_order = input(f"{'菜品:':>20}")
if not cuisine_order:
break # 输入为空,退出点餐循环,结束点餐。
elif cuisine_order not in map(str, range(len(cuisine_dict) + 1)): # 输入超出范围,报错后继续循环。
input(error_tip)
continue # 显示错误提示信息后进入下一次循环。
while True: # 份数输入正解才退出循环。
dish = input(f"{'份数:':>20}")
if not dish: # 一份直接回车,默认一份。
dish = 1
break
elif dish.isdigit():
dish = int(dish)
if dish > 2:
dish2 = input(f"\n{'(“确认”直接回车,修改直接输入份数)':^35}\n{'':~^50}\n{f'确认点 {dish} 份?__':>22}")
if not dish2.isdigit() and dish2 != '':
input(error_tip) # 输入错误,打印报错信息后跳转下一次循环。
continue
else:
dish = dish if not dish2 else int(dish2)
break
else:
input(error_tip) # 输入错误,打印报错信息后继续循环。
cuisine_name = cuisines[int(cuisine_order)] # 从菜品供应列表截取菜名。
table_ordered[cuisine_name] = dish # 将所点菜肴加入已点餐字典。
#input(table_ordered) # 程序调试用语句。
if table_ordered:
ordered_dict[table_num] = table_ordered # 新点或加菜数量累加,get(key) 值为 None 时,令其为 0 ,换句话说就是 key 不在字典中,加入 key 并令其值为 0 。
check(table_num) # 打印餐台已点菜品清单
def cancel_order() -> None:
''' 退菜 '''
while True:
check()
a=int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
if a==1: #进入退菜
key=input('客官您要退的菜品:')
val=int(input('要退几份:'))
if key not in ordered_meanu.keys():
print('客官您还没有点过此菜')
else: #退菜
ordered_meanu[key]-=val
if ordered_meanu[key]==0: #菜全退完从点单中除去
del ordered_meanu[key]
elif a==2: #结束退菜
return
else:
print(error_tip)
#return 0 # 对于 Python 函数无需返回值时,此句可以不写,函数默认返回空值 None 。
def check(table_num):
''' 查看已点菜单 '''
table_ordered = ordered_dict.get(table_num, [])
total_price = 0 # 总计初值。
print(f"{clear}\n{'您的点菜':>9}({table_num}号桌):\n{'':~^50}\n")
for cuisine, num in table_ordered.items():
price = cuisine_dict.get(cuisine)
subtotal = price * num
total_price += subtotal
print(f"{f'{price:.2f}':>15} × {num} = {subtotal:.2f} {'-'*4} {cuisine}") # 转字符型函数是 str 。
total_price = f"共计:¥{total_price:.2f}"
input(f"\n{total_price:^44}\n{'':~^50}\n")
def showall() -> None:
''' 后台查看所有餐台点菜 '''
print(clear) # 清屏。
for num in ordered_dict.keys():
print(f"\n{f' {num} 号台 ':^48}\n{'':~^50}\n")
table_ordered = ordered_dict.get(num)
for cuisine in table_ordered.keys():
print(f"{table_ordered.get(cuisine):>18} {'-'*6} {cuisine}")
if __name__ == '__main__':
main()
show(num) # 后台厨师查看桌餐单。
要有界面
不知道你这个问题是否已经解决, 如果还没有解决的话: def a():
"""此函数目的是打印出一个由‘*’组成的等腰三角形"""
j = 10//2
for i in range(1,10,2):
print(' '*j,end='')
j-=1
print('*'*i)
解决方案:
为了实现一个简单的选餐系统,我们可以按照以下步骤进行操作:
下面是按照以上步骤修改后的代码:
class Menu:
def __init__(self, name, price, description):
self.name = name
self.price = price
self.description = description
class OrderSystem:
menu_list = []
def add_menu(self, name, price, description):
menu = Menu(name, price, description)
OrderSystem.menu_list.append(menu)
def browse_menu(self):
for menu in OrderSystem.menu_list:
print("菜名: %s, 价格: %s, 描述: %s" % (menu.name, menu.price, menu.description))
def query_menu(self, name):
for menu in OrderSystem.menu_list:
if menu.name == name:
print("菜名: %s, 价格: %s, 描述: %s" % (menu.name, menu.price, menu.description))
break
else:
print("找不到该菜品信息")
def modify_menu(self, name, new_price, new_description):
for menu in OrderSystem.menu_list:
if menu.name == name:
menu.price = new_price
menu.description = new_description
print("菜品信息已修改")
break
else:
print("找不到该菜品信息")
def delete_menu(self, name):
for menu in OrderSystem.menu_list:
if menu.name == name:
OrderSystem.menu_list.remove(menu)
print("菜品信息已删除")
break
else:
print("找不到该菜品信息")
def quit_system(self):
global GAMEOVER
GAMEOVER = True
if __name__ == '__main__':
order_system = OrderSystem()
while not GAMEOVER:
print("请选择操作:")
print("1. 录入菜单信息")
print("2. 浏览菜单信息")
print("3. 查询特定菜品信息")
print("4. 修改菜品信息")
print("5. 删除菜品信息")
print("6. 退出选餐系统")
choice = int(input())
if choice == 1:
name = input("请输入菜名: ")
price = input("请输入价格: ")
description = input("请输入描述: ")
order_system.add_menu(name, price, description)
elif choice == 2:
order_system.browse_menu()
elif choice == 3:
name = input("请输入菜名: ")
order_system.query_menu(name)
elif choice == 4:
name = input("请输入菜名: ")
new_price = input("请输入新的价格: ")
new_description = input("请输入新的描述: ")
order_system.modify_menu(name, new_price, new_description)
elif choice == 5:
name = input("请输入菜名: ")
order_system.delete_menu(name)
elif choice == 6:
order_system.quit_system()
以上代码实现了一个简单的选餐系统,用户可以根据提示进行相应操作。录入菜单信息时需要输入菜名、价格和描述;浏览菜单信息时会打印出所有菜品的信息;查询特定菜品信息需要输入菜名,如果找到了该菜品信息,则打印出该菜品的所有属性;修改菜品信息需要输入菜名、新的价格和新的描述,如果成功修改了菜品信息,则打印出成功提示;删除菜品信息需要输入菜名,如果成功删除了菜品信息,则打印出成功提示;退出选餐系统可以选择操作6,结束程序运行。