timmy ha revisionato questo gist 10 months ago. Vai alla revisione
Nessuna modifica
timmy ha revisionato questo gist 11 months ago. Vai alla revisione
Nessuna modifica
timmy ha revisionato questo gist 2 years ago. Vai alla revisione
1 file changed, 164 insertions
restaurant_ordering_system.py(file creato)
| @@ -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() | |
Più nuovi
Più vecchi