最後活躍 10 months ago

這是一個使用 Streamlit 構建的訂餐系統,包含訂購人選擇、餐廳菜單顯示、主餐及加點品項的選擇與數量輸入,並計算和顯示訂單詳情與總價。

修訂 9d71764e8c32813b2ae82188337eff70ac340d18

restaurant_ordering_system.py 原始檔案
1from datetime import date
2
3import streamlit as st
4
5# 定義 Customer 類別
6class Customer:
7 def __init__(self, name, email, preferences):
8 self.name = name
9 self.email = email
10 self.preferences = preferences
11
12# 定義 RestaurantMenu 類別
13class RestaurantMenu:
14 def __init__(self, name, main_courses, add_ons):
15 self.name = name
16 self.main_courses = main_courses
17 self.add_ons = add_ons
18
19 def display_menu(self):
20 st.write(f"### {self.name} 菜單")
21 st.write("#### 主餐:")
22 for item, price in self.main_courses.items():
23 st.write(f"{item}: {price}")
24 st.write("#### 加點品項:")
25 for item, price in self.add_ons.items():
26 st.write(f"{item}: {price}")
27
28# 定義幾個餐廳的菜單
29menu1 = RestaurantMenu(
30 "餐廳A",
31 {
32 "雞肉便當": 70,
33 "豬肉便當": 75,
34 "魚排便當": 85,
35 },
36 {
37 "": 10,
38 "沙拉": 20,
39 "可樂": 15,
40 },
41)
42
43menu2 = RestaurantMenu(
44 "餐廳B",
45 {
46 "炸雞便當": 80,
47 "牛肉便當": 85,
48 "豬排便當": 75,
49 },
50 {
51 "白飯(半碗)": 5,
52 "白飯(1碗)": 10,
53 "滷蛋": 15,
54 "豆干": 5,
55 "香腸": 45,
56 "高麗菜": 35,
57 },
58)
59
60menu3 = RestaurantMenu(
61 "餐廳C",
62 {
63 "素食便當": 70,
64 "烤鴨便當": 95,
65 "咖哩雞便當": 85,
66 },
67 {
68 "": 10,
69 "水果": 20,
70 "汽水": 15,
71 },
72)
73
74# 預設的訂購人員
75customers = {
76 "Alice": Customer("Alice", "alice@example.com", "無辣"),
77 "Bob": Customer("Bob", "bob@example.com", "少鹽"),
78 "Charlie": Customer("Charlie", "charlie@example.com", "多辣"),
79}
80
81# 餐廳選單
82restaurants = {
83 "餐廳A": menu1,
84 "餐廳B": menu2,
85 "餐廳C": menu3,
86}
87
88# 使用 Streamlit 構建應用
89def main():
90 st.title("訂餐系統")
91 st.write("選擇餐廳查看菜單並進行訂購:")
92
93 # 選擇訂購人員
94 st.sidebar.title("訂購人資訊")
95 customer_choice = st.sidebar.selectbox("選擇訂購人員", list(customers.keys()))
96 selected_customer = customers[customer_choice]
97
98 # 自動填入訂購人資訊
99 customer_name = st.sidebar.text_input(
100 "姓名", value=selected_customer.name, disabled=True
101 )
102 customer_email = st.sidebar.text_input(
103 "Email", value=selected_customer.email, disabled=True
104 )
105 customer_preferences = st.sidebar.text_input(
106 "喜好", value=selected_customer.preferences
107 )
108 order_date = st.sidebar.date_input("餐點日期", date.today())
109
110 # 選擇餐廳
111 restaurant_choice = st.selectbox("選擇餐廳", list(restaurants.keys()))
112 selected_menu = restaurants[restaurant_choice]
113
114 # 顯示菜單
115 selected_menu.display_menu()
116
117 # 選擇主餐和數量
118 st.write("\n### 選擇主餐和數量:")
119 main_courses_selected = {}
120 for item in selected_menu.main_courses.keys():
121 quantity = st.number_input(
122 f"{item} 數量", min_value=0, max_value=10, step=1, key=f"main_{item}"
123 )
124 if quantity > 0:
125 main_courses_selected[item] = quantity
126
127 # 選擇加點品項和數量
128 st.write("\n### 選擇加點品項和數量:")
129 add_ons_selected = {}
130 for item in selected_menu.add_ons.keys():
131 quantity = st.number_input(
132 f"{item} 數量", min_value=0, max_value=10, step=1, key=f"add_{item}"
133 )
134 if quantity > 0:
135 add_ons_selected[item] = quantity
136
137 # 計算總價
138 total_price = 0
139 for item, quantity in main_courses_selected.items():
140 total_price += selected_menu.main_courses[item] * quantity
141 for item, quantity in add_ons_selected.items():
142 total_price += selected_menu.add_ons[item] * quantity
143
144 # 顯示訂單和總價
145 if st.button("確認訂單"):
146 st.write("### 訂單詳情:")
147 st.write(f"姓名: {customer_name}")
148 st.write(f"Email: {customer_email}")
149 st.write(f"喜好: {customer_preferences}")
150 st.write(f"餐點日期: {order_date}")
151 st.write("#### 主餐:")
152 for item, quantity in main_courses_selected.items():
153 st.write(
154 f"{item} - {selected_menu.main_courses[item]}元 x {quantity} = {selected_menu.main_courses[item] * quantity}"
155 )
156 st.write("#### 加點品項:")
157 for item, quantity in add_ons_selected.items():
158 st.write(
159 f"{item} - {selected_menu.add_ons[item]}元 x {quantity} = {selected_menu.add_ons[item] * quantity}"
160 )
161 st.write(f"### 總價: {total_price}")
162
163if __name__ == "__main__":
164 main()
165