《C++課件+案例十六+超市收銀系統(tǒng).ppt》由會員分享,可在線閱讀,更多相關(guān)《C++課件+案例十六+超市收銀系統(tǒng).ppt(67頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1 案例十六超市收銀系統(tǒng) 本案例知識要點格式化輸出結(jié)構(gòu)體的使用類的設(shè)計和使用類指針的使用函數(shù)重載向量的使用虛函數(shù) 2 一 案例需求 案例描述模擬 美特好 超市收款過程 根據(jù)貨物清單 選定所購貨物種類和數(shù)量 實現(xiàn)收銀結(jié)賬 案例效果圖案例效果如圖所示 3 超市收銀系統(tǒng)案例效果圖1 4 超市收銀系統(tǒng)案例效果圖2 5 功能說明顯示超市庫存商品信息 顯示購物流程提示信息 實現(xiàn)收款過程 反復(fù)輸入所購各種商品的索引號和購買數(shù)量 直到輸入商品索引號 1 結(jié)束購物流程 實現(xiàn)收銀 根據(jù)顧客所交現(xiàn)金 自動找零 6 二 案例分析 在本案例中 超市收銀系統(tǒng)應(yīng)具備四大基本功能 商品管理 貨架管理 購物籃管理和收銀管理 貨
2、架管理實現(xiàn)庫中某種商品的入庫 出庫 查詢及顯示等功能 需要建立一個貨架類 通過調(diào)用相應(yīng)的函數(shù)來實現(xiàn) 每種商品有單價 條形碼 商品名稱等屬性 商品管理類實現(xiàn)了設(shè)置 獲取商品信息 復(fù)制商品信息等功能 購物籃管理就是一個小型的貨架管理 可以用貨架類來實現(xiàn) 收銀管理實現(xiàn)商品的結(jié)賬 找零等任務(wù) 需要建立一個收銀臺類 通過調(diào)用相應(yīng)的函數(shù)來實現(xiàn) 7 其中 需要注意以下一些問題 從貨架拿貨時 應(yīng)該將商品拿一部分出去 通過將商品 復(fù)制 一份出去來實現(xiàn) 貨架 上有形形色色的商品 因此 這個類需要向量這個容器來容納這些商品 向量中僅存儲商品對象是不夠的 因為商品沒有量的概念 到底容器中包含多少件此類商品還需要用另外
3、一個變量來表示 通過把商品對象和商品數(shù)量集成到一個結(jié)構(gòu)體中來實現(xiàn) 如何構(gòu)建購物籃對象 仔細想一下 購物籃 就是一個小型的貨架 因此可以用 貨架 類模擬一個購物籃 8 三 案例設(shè)計 1 類的設(shè)計根據(jù)上述的設(shè)計思想 設(shè)計了 商品類 貨架類 和 收銀臺類 3個類 這3個類的聲明部分在文件 counter h 中實現(xiàn) 3個類的成員函數(shù)的實現(xiàn)部分在文件 counter cpp 中完成 其中商品類 CGoods類 負責(zé)完成商品信息的存儲 獲取 復(fù)制等任務(wù) 貨架類 CStore類 負責(zé)完成庫中商品的入庫 出庫 查詢及顯示等任務(wù) 收銀臺類 CCounter類 負責(zé)完成商品的結(jié)賬 找零等任務(wù) 另外在counte
4、r h文件中還定義了一個表示貨架商品對象的結(jié)構(gòu)SStoreElement 它有兩個成員 一個是商品對象的指針 一個是此類商品的數(shù)量 貨架中的每個商品都是這個結(jié)構(gòu)類型的 9 10 CGoods類結(jié)構(gòu)圖 11 12 13 結(jié)構(gòu)體tagStoreElement的結(jié)構(gòu) 14 3 CStore類 貨架類 的設(shè)計CStore類的結(jié)構(gòu)如圖所示 CStore類的結(jié)構(gòu) 15 16 17 18 19 4 CCounter類 收銀臺類 的設(shè)計CCounter類的結(jié)構(gòu)如圖所示 CCounter類的結(jié)構(gòu) 20 21 22 23 2 主程序設(shè)計開始顯示超市所有商品的信息輸入欲購買商品的索引號輸入欲購買商品的數(shù)量繼續(xù)購買商
5、品嗎 去收銀臺結(jié)賬結(jié)束NY 1 函數(shù)設(shè)計CStore PrepareStore 該函數(shù)用于最初 進貨 即向貨架中存入一批商品 包括這些商品的商品索引 商品名稱 數(shù)量及單價 即創(chuàng)建一個商店 返回值 CStore pStore為Cstore類的指針 代表一個貨架 voidusage 該函數(shù)用于為用戶顯示操作提示 即告訴 客人 超市購物的購物流程 返回值 無 24 2 主函數(shù)設(shè)計在main 函數(shù)中 首先分別對3個類定義一個超市 一個購物籃和一個收銀臺對象 然后定義了一個顧客交錢的變量 并初始化為0 利用上訴類的其他成員函數(shù)來實現(xiàn)購物過程 具體流程如圖所示 25 主程序調(diào)用流程圖 26 四 案例實現(xiàn)
6、27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 五 案例總結(jié)與提高 案例總結(jié)在本案例中 比較關(guān)鍵的一步是分析出超市貨架這個類 有些讀者可能會將 顧客 抽象為一個類 然后將購物籃放到顧客這個類中 這是不正確的 因為無法在顧客類中處理購買貨物和清理貨物的邏輯 實際上 在整個收銀系統(tǒng)設(shè)計中 顧客并沒有真正地參與進來 收銀臺處理的只是一個又一個的購物籃 顧客真正參與的部分是在main函數(shù)中 通過交互 顧客可以購買
7、商品 可以結(jié)賬等 另外一個難點是CGoods中的Clone 函數(shù) 為了從貨架 超市 中選購一件商品 用戶需要從CStore類中復(fù)制一件商品出來 而CStore類中存儲的是各種商品的向量 因此 需要讓商品類 CGoods 具有自我復(fù)制的功能 而在復(fù)制的過程中 商品的數(shù)量應(yīng)該設(shè)為零 至于選購多少可以讓用戶調(diào)用CGoods類中的成員函數(shù)SetNum intiNum 來確定 67 案例提高這個案例只是簡單地模擬了一個顧客去超市購物的過程 可以提高的地方還有很多 本案例為了簡單起見 只是處理了一個購物籃 也就是說整個超市只有一個顧客 這不是一個對真實場景的模擬 真正的場景應(yīng)該是有多個顧客 可能會同時去收銀臺結(jié)賬 因此收銀臺處理的應(yīng)該是一個購物籃隊列 應(yīng)該單獨創(chuàng)建一個線程來追加這個隊列 然后由收銀臺分別為每個購物籃結(jié)賬 結(jié)完一個刪除一個 對于超市的店主來說 還應(yīng)該有一個交互的界面 可以讓店主來完成更改貨物的單價 追加貨物等操作