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