陳新龍
這是我為我校編程競賽出的一道Python題:某餐廳共有大桌6張(接待8人以上),中桌10張(5-7人),小桌20張(1-4人),餐廳每天只能接待客人100桌。請制作一個簡單的餐廳叫號管理系統(tǒng)。
程序需要實(shí)現(xiàn)以下功能:
取號:進(jìn)行信息錄入,錄入客人的手機(jī)號、姓名、用餐人數(shù)、是否為VIP。如果是VIP用戶可以排在普通用戶的前面。
叫號:根據(jù)桌型大小進(jìn)行叫號,叫號的時候顯示用餐人的姓名、電話、用餐人數(shù)。
退號:退號根據(jù)客人的手機(jī)號操作。如果手機(jī)號匹配成功,執(zhí)行退號不再記錄該客人,并顯示“退號成功”,若沒有找到對應(yīng)手機(jī)號,顯示“查無此號”退號失敗。
排號情況:根據(jù)當(dāng)前排隊(duì)的情況顯示排隊(duì)次序,姓名,用餐人數(shù),桌型。
題目主要知識點(diǎn)在于綜合考查列表、字典的使用,以及定義功能(def函數(shù))的運(yùn)用。
首先我們設(shè)定一下客人信息保存的狀態(tài)并預(yù)存兩個客人的數(shù)據(jù)作為演示,通過列表和字典方式,每位客人的信息都保存到對應(yīng)的字典中(姓名name,電話phone,人數(shù)people,是否VIP),再將整體保存入列表中(圖1)。
輸出程序交互界面,編號1代表取號,編號2代表叫號,編號3代表退號,編號4代表顯示,如果輸入的編號超過數(shù)值,顯示輸入的數(shù)字不符合要求,請重新輸入(圖2)。
為了維持程序處于待命狀態(tài),我們需要編寫定義循環(huán):等待輸入編號,當(dāng)輸入的編號在符合的區(qū)間內(nèi),跳轉(zhuǎn)入對應(yīng)的函數(shù),如果輸入的編號是字符或者其他內(nèi)容則會提示輸入正確的編號(圖3)。
當(dāng)輸入的編號在1-4之間符合題目的要求時分別跳轉(zhuǎn)不同功能(圖4)。
當(dāng)按下1跳轉(zhuǎn)取號界面,接下來我們需要判斷訂餐的總桌數(shù)是否超過了100張,如果訂餐的桌數(shù)達(dá)到上限,請改日再來,如果訂餐桌數(shù)沒有達(dá)到上限,客人可以訂餐并輸入姓名、電話、用餐人數(shù)、是否VIP,這里需要注意一個細(xì)節(jié)問題,如果客人是本餐廳的VIP會員的話優(yōu)先排隊(duì)。這也是Python代碼的優(yōu)勢之處,直接通過Insert(0,dict1)插入到列表中的第一項(xiàng)(圖5)。
當(dāng)按下2跳轉(zhuǎn)叫號的界面中,叫號程序會根據(jù)當(dāng)前排號的順序來叫客人(會顯示姓名、電話、用餐人數(shù)),唯一特殊的情況就是VIP客人有優(yōu)先特權(quán),按照實(shí)際情況下,叫號之后,排序的列表的第一項(xiàng)會刪除(代表進(jìn)入餐廳就餐),只需要刪除即可(圖6)。
當(dāng)中途有客人需要退號時,便可以按下3跳轉(zhuǎn)退號程序,輸入客人的手機(jī)號,通過遍歷查詢列表中是否存在客人的手機(jī)進(jìn)行查看,如果列表中存在客人的手機(jī)號,顯示“退號成功”;否則的話顯示“查無此號碼,退號失敗”(圖7)。
排隊(duì)信息可以隨時查看,當(dāng)按下4時便可以查看到當(dāng)前的等候情況,通過遍歷循環(huán)的方式提取出對應(yīng)的順序、姓名、就餐人數(shù),系統(tǒng)也會根據(jù)就餐的人數(shù)進(jìn)行桌型的分類。比如超過8人是大桌型,在5-7人之間是中桌型,在1-4人之間是小桌型(圖8)。
這個簡單餐廳叫號管理系統(tǒng)在綜合應(yīng)用中屬于較為簡單的題目,主要目的是希望在學(xué)習(xí)編程過程中更加貼近生活中實(shí)際需要做出實(shí)際的練習(xí)作品。這樣才可以在學(xué)習(xí)基礎(chǔ)知識的同時真正提高實(shí)際操作能力(圖9)。