Last active 10 months ago

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

timmy revised this gist 10 months ago. Go to revision

No changes

timmy revised this gist 11 months ago. Go to revision

No changes

timmy revised this gist 2 years ago. Go to revision

1 file changed, 164 insertions

restaurant_ordering_system.py(file created)

@@ -0,0 +1,164 @@
1 + from datetime import date
2 +
3 + import streamlit as st
4 +
5 + # 定義 Customer 類別
6 + class Customer:
7 + def __init__(self, name, email, preferences):
8 + self.name = name
9 + self.email = email
10 + self.preferences = preferences
11 +
12 + # 定義 RestaurantMenu 類別
13 + class 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 + # 定義幾個餐廳的菜單
29 + menu1 = RestaurantMenu(
30 + "餐廳A",
31 + {
32 + "雞肉便當": 70,
33 + "豬肉便當": 75,
34 + "魚排便當": 85,
35 + },
36 + {
37 + "湯": 10,
38 + "沙拉": 20,
39 + "可樂": 15,
40 + },
41 + )
42 +
43 + menu2 = 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 +
60 + menu3 = RestaurantMenu(
61 + "餐廳C",
62 + {
63 + "素食便當": 70,
64 + "烤鴨便當": 95,
65 + "咖哩雞便當": 85,
66 + },
67 + {
68 + "湯": 10,
69 + "水果": 20,
70 + "汽水": 15,
71 + },
72 + )
73 +
74 + # 預設的訂購人員
75 + customers = {
76 + "Alice": Customer("Alice", "alice@example.com", "無辣"),
77 + "Bob": Customer("Bob", "bob@example.com", "少鹽"),
78 + "Charlie": Customer("Charlie", "charlie@example.com", "多辣"),
79 + }
80 +
81 + # 餐廳選單
82 + restaurants = {
83 + "餐廳A": menu1,
84 + "餐廳B": menu2,
85 + "餐廳C": menu3,
86 + }
87 +
88 + # 使用 Streamlit 構建應用
89 + def 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 +
163 + if __name__ == "__main__":
164 + main()
Newer Older