陳新龍
這是我為我校編程競賽出的一道Python題:某餐廳共有大桌6張(接待8人以上),中桌10張(5-7人),小桌20張(1-4人),餐廳每天只能接待客人100桌。請制作一個簡單的餐廳叫號管理系統。
程序需要實現以下功能:
取號:進行信息錄入,錄入客人的手機號、姓名、用餐人數、是否為VIP。如果是VIP用戶可以排在普通用戶的前面。
叫號:根據桌型大小進行叫號,叫號的時候顯示用餐人的姓名、電話、用餐人數。
退號:退號根據客人的手機號操作。如果手機號匹配成功,執行退號不再記錄該客人,并顯示“退號成功”,若沒有找到對應手機號,顯示“查無此號”退號失敗。
排號情況:根據當前排隊的情況顯示排隊次序,姓名,用餐人數,桌型。
題目主要知識點在于綜合考查列表、字典的使用,以及定義功能(def函數)的運用。
首先我們設定一下客人信息保存的狀態并預存兩個客人的數據作為演示,通過列表和字典方式,每位客人的信息都保存到對應的字典中(姓名name,電話phone,人數people,是否VIP),再將整體保存入列表中(圖1)。

輸出程序交互界面,編號1代表取號,編號2代表叫號,編號3代表退號,編號4代表顯示,如果輸入的編號超過數值,顯示輸入的數字不符合要求,請重新輸入(圖2)。

為了維持程序處于待命狀態,我們需要編寫定義循環:等待輸入編號,當輸入的編號在符合的區間內,跳轉入對應的函數,如果輸入的編號是字符或者其他內容則會提示輸入正確的編號(圖3)。

當輸入的編號在1-4之間符合題目的要求時分別跳轉不同功能(圖4)。

當按下1跳轉取號界面,接下來我們需要判斷訂餐的總桌數是否超過了100張,如果訂餐的桌數達到上限,請改日再來,如果訂餐桌數沒有達到上限,客人可以訂餐并輸入姓名、電話、用餐人數、是否VIP,這里需要注意一個細節問題,如果客人是本餐廳的VIP會員的話優先排隊。這也是Python代碼的優勢之處,直接通過Insert(0,dict1)插入到列表中的第一項(圖5)。

當按下2跳轉叫號的界面中,叫號程序會根據當前排號的順序來叫客人(會顯示姓名、電話、用餐人數),唯一特殊的情況就是VIP客人有優先特權,按照實際情況下,叫號之后,排序的列表的第一項會刪除(代表進入餐廳就餐),只需要刪除即可(圖6)。

當中途有客人需要退號時,便可以按下3跳轉退號程序,輸入客人的手機號,通過遍歷查詢列表中是否存在客人的手機進行查看,如果列表中存在客人的手機號,顯示“退號成功”;否則的話顯示“查無此號碼,退號失敗”(圖7)。

排隊信息可以隨時查看,當按下4時便可以查看到當前的等候情況,通過遍歷循環的方式提取出對應的順序、姓名、就餐人數,系統也會根據就餐的人數進行桌型的分類。比如超過8人是大桌型,在5-7人之間是中桌型,在1-4人之間是小桌型(圖8)。
這個簡單餐廳叫號管理系統在綜合應用中屬于較為簡單的題目,主要目的是希望在學習編程過程中更加貼近生活中實際需要做出實際的練習作品。這樣才可以在學習基礎知識的同時真正提高實際操作能力(圖9)。
