第一篇:自動(dòng)售貨機(jī)測(cè)試用例
題目:有一個(gè)處理單價(jià)為5角錢的飲料的自動(dòng)售貨機(jī)軟件測(cè)試用例的設(shè)計(jì)。其規(guī)格說明如下:若投入5角錢或1元錢的硬幣,押下〖橙汁〗或〖啤酒〗的按鈕,則相應(yīng)的飲料就送出來。若售貨機(jī)沒有零錢找,則一個(gè)顯示〖零錢找完〗的紅燈亮,這時(shí)在投入1元硬幣并押下按鈕后,飲料不送出來而且1元硬幣也退出來;若有零錢找,則顯示〖零錢找完〗的紅燈滅,在送出飲料的同時(shí)退還5角硬幣。1.分析這一段說明,列出原因和結(jié)果 原因:
1.售貨機(jī)有零錢找 2.投入1元硬幣 3.投入5角硬幣
4.押下橙汁按鈕 5.押下啤酒按鈕
結(jié)果:
21.售貨機(jī)〖零錢找完〗燈亮
22.退還1元硬幣
23.退還5角硬幣
24.送出橙汁飲料 25.送出啤酒飲料 2.畫出因果圖
如圖所示。所有原因結(jié)點(diǎn)列在左邊,所有結(jié)果結(jié)點(diǎn)列在右邊。建立中間結(jié)點(diǎn),表示處理的中間狀態(tài)。中間結(jié)點(diǎn):
11.投入1元硬幣且押下飲料按鈕 12.押下〖橙汁〗或〖啤酒〗的按鈕 13.應(yīng)當(dāng)找5角零錢并且售貨機(jī)有零錢找 14.錢已付清
3.轉(zhuǎn)換成判定表:
4.設(shè)計(jì)測(cè)試用例
1)在售貨機(jī)有零錢找的情況下,投入1元硬幣,押下橙汁按鈕,找回5角硬幣并送出橙汁飲料。
2)在售貨機(jī)有零錢找的情況下,投入1元硬幣,押下啤酒按鈕,找回5角硬幣并送出啤酒飲料。
3)在售貨機(jī)有零錢找的情況下,投入1元硬幣,系統(tǒng)不做任何處理。
4)在售貨機(jī)有零錢找的情況下,投入5角硬幣,押下橙汁按鈕,送出橙汁飲料。5)在售貨機(jī)有零錢找的情況下,投入5角硬幣,押下啤酒按鈕,送出啤酒飲料。6)在售貨機(jī)有零錢找的情況下,投入5角硬幣,系統(tǒng)不做任何處理。7)在售貨機(jī)有零錢找的情況下,押下橙汁按鈕,系統(tǒng)不做任何處理。8)在售貨機(jī)有零錢找的情況下,押下啤酒按鈕,系統(tǒng)不做任何處理。
9)在售貨機(jī)沒有零錢找的情況下,投入1元硬幣,押下橙汁按鈕,售貨機(jī)“零錢找完”燈亮,并退還1元硬幣。
10)在售貨機(jī)沒有零錢找的情況下,投入1元硬幣,押下啤酒按鈕,售貨機(jī)“零錢找完”燈亮,并退還1元硬幣。
11)在售貨機(jī)沒有零錢找的情況下,投入1元硬幣,售貨機(jī)“零錢找完”燈亮。
12)在售貨機(jī)沒有零錢找的情況下,投入5角硬幣,押下橙汁按鈕,售貨機(jī)“零錢找完”燈亮,并送出橙汁飲料。
13)在售貨機(jī)沒有零錢找的情況下,投入5角硬幣,押下啤酒按鈕,售貨機(jī)“零錢找完”燈亮,并送出啤酒飲料。
14)在售貨機(jī)沒有零錢找的情況下,投入5角硬幣,售貨機(jī)“零錢找完”燈亮。15)在售貨機(jī)沒有零錢找的情況下,押下橙汁按鈕,售貨機(jī)“零錢找完”燈亮。16)在售貨機(jī)沒有零錢找的情況下,押下啤酒按鈕,售貨機(jī)“零錢找完”燈亮。
第二篇:軟件工程_自動(dòng)售貨機(jī)
自動(dòng)售貨機(jī)
信息1101 施敏宇 18號(hào)
下面是自動(dòng)售貨機(jī)系統(tǒng)的需求陳述,試建立它的對(duì)象模型、動(dòng)態(tài)模型和功能模型: 自動(dòng)售貨機(jī)系統(tǒng)是一種無人售貨系統(tǒng)。售貨時(shí),顧客把硬幣投入機(jī)器的投幣口中,機(jī)器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、五分幣、二分幣、一分幣。其他貨幣被認(rèn)為是假幣。機(jī)器拒絕接受假幣,并將其從退幣孔退出。當(dāng)機(jī)器接受了有效的硬幣之后,就把硬幣送入硬幣儲(chǔ)藏器中。顧客支付的貨幣根據(jù)硬幣的面值進(jìn)行累加。自動(dòng)售貨機(jī)裝有貨物分配器。每個(gè)貨物分配器中包含零個(gè)或多個(gè)價(jià)格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價(jià)格,貨物將被分配到貨物傳送孔送給顧客,并將適當(dāng)?shù)牧沐X返還到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送回到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中貨物的價(jià)格,機(jī)器將等待顧客投進(jìn)更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進(jìn)的貨幣將從退幣孔中退出。
面向?qū)ο蟮姆治?/p>
面向?qū)ο蠓治龇椒ǖ暮诵乃枷胧抢妹嫦驅(qū)ο蟾拍詈头椒檐浖枨髽?gòu)造一組相關(guān)模型(對(duì)象模型,動(dòng)態(tài)模型和功能模型),來獲得關(guān)于問題域的全面認(rèn)識(shí)。
這三個(gè)模型從不同的角度對(duì)系統(tǒng)進(jìn)行描述,其中:對(duì)象模型描述了系統(tǒng)靜態(tài)的、結(jié)構(gòu)化的數(shù)據(jù)性質(zhì);動(dòng)態(tài)模型描述了系統(tǒng)順勢(shì)的、行為化的控制性質(zhì);功能模型描述了變化的系統(tǒng)的功能性質(zhì)。這三個(gè)模型都涉及到數(shù)據(jù)??刂坪筒僮鞯裙餐母拍睿糠N模型描述的側(cè)重有所不同。它們各自以不同側(cè)面反應(yīng)系統(tǒng)的實(shí)質(zhì)內(nèi)容,綜合起來則全面反映了目標(biāo)系統(tǒng)的需求。
對(duì)象模型是三個(gè)模型中最關(guān)鍵的。它的作用是描述系統(tǒng)的靜態(tài)結(jié)構(gòu),包括構(gòu)成系統(tǒng)的類和對(duì)象、它們的屬性和操作以及它們之間的聯(lián)系。UML中類圖適用于建立對(duì)象模型,狀態(tài)圖適用于建立動(dòng)態(tài)模型。每個(gè)類的動(dòng)態(tài)行為用一張狀態(tài)圖來表示,各個(gè)類的狀態(tài)圖通過事件合并起來,構(gòu)成系統(tǒng)的動(dòng)態(tài)模型。也就是說,動(dòng)態(tài)模型是基于事件共享而相互關(guān)聯(lián)的一組狀態(tài)圖的集合。建立對(duì)象模型大體上按照下列順序進(jìn)行:尋找問題域內(nèi)的對(duì)象,識(shí)別出對(duì)象間的關(guān)系、定義屬性和服務(wù)。事實(shí)上,分析工作不可能嚴(yán)格按照預(yù)定順序進(jìn)行,系統(tǒng)的模型往往需要反復(fù)構(gòu)造多遍才能建成。
注:對(duì)象硬幣計(jì)算器和對(duì)象硬幣檢測(cè)器可以作為對(duì)象自動(dòng)售貨器的一部分,它們的屬性作為自動(dòng)售貨器的屬性。
建立動(dòng)態(tài)模型
對(duì)于僅存數(shù)靜態(tài)數(shù)據(jù)的系統(tǒng)來說,動(dòng)態(tài)模型并沒有什么實(shí)際意義。然而在開發(fā)交互式系統(tǒng)時(shí),動(dòng)態(tài)模型卻起著很重要的作用。如果收集輸入信息是目標(biāo)系統(tǒng)的一項(xiàng)主要工作,則在開發(fā)這類應(yīng)用系統(tǒng)時(shí)建立正確的動(dòng)態(tài)模型是至關(guān)重要的。
建立動(dòng)態(tài)模型的步驟:
(1)編寫典型的對(duì)話腳本;
(2)從腳本中提取出事件,聯(lián)系該事件與其目標(biāo)對(duì)象;
(3)組織事件的順序和狀態(tài)(采用狀態(tài)圖描繪);
(4)比較各個(gè)不同對(duì)象的狀態(tài)圖,檢查對(duì)象之間的一致性,確保事件之間的匹配。
提示投幣投幣購買提示是假幣,退幣假幣檢查硬幣否真幣存儲(chǔ)硬幣,計(jì)算貨幣總值確認(rèn)投完硬幣是請(qǐng)求選擇貨物選擇貨物檢測(cè)貨物存量無貨提示無貨計(jì)算比較貨幣總值和貨物價(jià)格確認(rèn)確認(rèn)顧客購買小于提示貨物不足,確認(rèn)顧客購買不購買送出貨物,請(qǐng)求取貨不購買退幣請(qǐng)求取退幣提示顯示交易完畢
功能模型
功能模型描述了系統(tǒng)的所有計(jì)算。功能模型指出發(fā)生了什么,動(dòng)態(tài)模型確定什么時(shí)候發(fā)生,而對(duì)象模型確定發(fā)生的客體。功能模型表明一個(gè)計(jì)算如何從輸入值得到輸出值,它不考慮計(jì)算的次序。功能模型由多張數(shù)據(jù)流圖組成。數(shù)據(jù)流圖用來表示從源對(duì)象到目標(biāo)對(duì)象的數(shù)據(jù)值的流向,它不包含控制信息,控制信息在動(dòng)態(tài)模型中表示,同時(shí)數(shù)據(jù)流圖也不表示對(duì)象中值的組織,值的組織在對(duì)象模型中表示。
數(shù)據(jù)流圖中包含有處理、數(shù)據(jù)流、動(dòng)作對(duì)象和數(shù)據(jù)存儲(chǔ)對(duì)象。
1.處理
數(shù)據(jù)流圖中的處理用來改變數(shù)據(jù)值。最低層處理是純粹的函數(shù),一張完整的數(shù)據(jù)流圖是一個(gè)高層處理。
2.數(shù)據(jù)流
數(shù)據(jù)流圖中的數(shù)據(jù)流將對(duì)象的輸出與處理、處理與對(duì)象的輸入、處理與處理聯(lián)系起來。在一個(gè)計(jì)算機(jī)中,用數(shù)據(jù)流來表示一中間數(shù)據(jù)值,數(shù)據(jù)流不能改變數(shù)據(jù)值。
3.動(dòng)作對(duì)象
動(dòng)作對(duì)象是一種主動(dòng)對(duì)象,它通過生成或者使用數(shù)據(jù)值來驅(qū)動(dòng)數(shù)據(jù)流圖。
4.數(shù)據(jù)存儲(chǔ)對(duì)象
數(shù)據(jù)流圖中的數(shù)據(jù)存儲(chǔ)是被動(dòng)對(duì)象,它用來存儲(chǔ)數(shù)據(jù)。它與動(dòng)作對(duì)象不一樣,數(shù)據(jù)存儲(chǔ)本身不產(chǎn)生任何操作,它只響應(yīng)存儲(chǔ)和訪問的要求。
有效幣特征假幣退假幣假幣檢查硬幣有效幣硬幣送入硬幣儲(chǔ)藏器計(jì)算面值貨物價(jià)格有貨貨幣總值硬幣顧客投幣顧客不足等待顧客投幣顧客取消購買,退幣顧客判斷貨幣是否足夠足夠選擇貨物判斷分配器貨物存量無貨分配貨物,找零貨物,硬幣硬幣退幣
第三篇:自動(dòng)售貨機(jī)合作合同
自動(dòng)售貨機(jī)合作協(xié)議書
甲 方:南京威汀貿(mào)易有限公司
乙 方:
甲、乙雙方本著平等、互惠的原則,經(jīng)過友好協(xié)商,就合作放置自動(dòng)售貨機(jī)開展的服務(wù)
達(dá)成如下協(xié)議:
第一條 綜合條款
1.甲方向乙方提供自動(dòng)售貨()機(jī)臺(tái),咖啡機(jī)經(jīng)營。
2.乙方向甲方所提供場(chǎng)地指定在(地址)()共()處。
3.甲方所提供自動(dòng)售貨機(jī)編號(hào)為共臺(tái)??Х葯C(jī)編號(hào)為共臺(tái)
4.甲方在年月日前,將自動(dòng)售貨機(jī)調(diào)試后運(yùn)送到位投入使用。
5.合作期間,放置于乙方處自動(dòng)售貨機(jī)的所有權(quán)歸屬于甲方。
第二條 服務(wù)內(nèi)容
1.甲方保證所提供之自動(dòng)售貨機(jī)內(nèi)銷售的商品符合中華人民共和國國家衛(wèi)生標(biāo)準(zhǔn)及企
業(yè)技術(shù)質(zhì)量標(biāo)準(zhǔn)。
2.甲方負(fù)責(zé)自動(dòng)售貨機(jī)的日常運(yùn)營工作,并承擔(dān)運(yùn)營成本(商品補(bǔ)給、設(shè)備保養(yǎng)、清
潔及日常維修)等費(fèi)用。
3.甲方工作人員進(jìn)入乙方區(qū)域,服從乙方負(fù)責(zé)人的管理。
4.乙方如因特殊情況需要移動(dòng)自動(dòng)售貨機(jī)位置,必須事先通知甲方,由甲方工作人員
在3個(gè)工作日內(nèi)遷移設(shè)備。
5.乙方對(duì)自動(dòng)售貨機(jī)協(xié)助保管,發(fā)現(xiàn)設(shè)備故障或消費(fèi)者投訴應(yīng)及時(shí)通知甲方,甲方應(yīng)
及時(shí)處理解決,設(shè)400,000,2991投訴專線,遇卡貨卡幣投訴立即全額理賠并免費(fèi)奉送所購商品。
第三條 協(xié)議條件、期限
1.本協(xié)議自簽定之日起即刻生效,協(xié)議期限以一年為準(zhǔn),協(xié)議期滿,如雙方無異議,本協(xié)議自動(dòng)延續(xù)至下一年同月日。
2.協(xié)議期內(nèi)甲方按裝置自動(dòng)售貨機(jī)前雙方商定的費(fèi)用元,付給乙方,一季度
結(jié)算一次。
第四條 協(xié)議解除
1.如果乙方場(chǎng)地另有用途需提前15日通知甲方撤走.2.如自動(dòng)售貨機(jī)持續(xù)銷售狀況不佳,甲方提前10天告知乙方,在結(jié)算清相關(guān)費(fèi)用后,解除協(xié)議。
其他約定:。
第五條本協(xié)議一式二份,雙方各執(zhí)一份,具有同等法律效力。
甲方蓋章:南京威汀貿(mào)易有限公司
代表簽字:
代表簽字:乙方蓋章:聯(lián)系電話: 025-85552178聯(lián)系電話:
地址: 地址: 南京市棲霞區(qū)金堯路19-5
日期:
第四篇:軟件工程課程設(shè)計(jì)(自動(dòng)售貨機(jī))
《軟件工程》課程設(shè)計(jì)報(bào)告
一、問題描述
(一)關(guān)于自動(dòng)售貨機(jī)
自動(dòng)售貨機(jī)像磁卡電話、銀行柜員機(jī)一樣,以方便、新穎、文明、晝夜服務(wù)等特點(diǎn),成為發(fā)達(dá)國家不可缺少的便民配套設(shè)施。如今的自動(dòng)售貨機(jī)可以為顧客提供多種服務(wù)。顧客可以根據(jù)自己的需要選擇商品并投入錢幣,售貨機(jī)接收錢幣,售出商品。
(二)自動(dòng)售貨機(jī)的設(shè)計(jì)
自動(dòng)售貨機(jī)系統(tǒng)是一種無人售貨系統(tǒng)。售貨時(shí),顧客把硬幣投入機(jī)器的投幣口中,機(jī)器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、一角幣、五分幣和一分幣。其它貨幣都被認(rèn)為是假幣。機(jī)器拒收假幣,并將其從退幣孔退出。當(dāng)機(jī)器接收了有效的硬幣之后,將之送入硬幣儲(chǔ)藏器。顧客支付的貨幣根據(jù)硬幣的面值進(jìn)行累加。
自動(dòng)售貨機(jī)裝有貨物分配器,每個(gè)分配器中包含0 個(gè)或多個(gè)價(jià)格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果有貨,且顧客支付的貨幣值不小于該貨物的價(jià)格,貨物將被分配到貨物傳送孔送給顧客,并將找零返回到退幣孔。如果無貨,則和顧客支付的貨幣值相等的硬幣將被送到退幣孔。如果顧客支付的貨幣值小于所選貨物的價(jià)格,機(jī)器將等待顧客投進(jìn)更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進(jìn)的硬幣將從退幣孔中退出。
二、需求分析
(一)UML自動(dòng)售貨機(jī)系統(tǒng)功能需求:
自動(dòng)售貨機(jī)系統(tǒng)是一種無一元等3個(gè)硬幣投幣口。顧客確認(rèn)購貨后,售貨機(jī)可根據(jù)硬幣的面值進(jìn)行累加。
自動(dòng)售貨機(jī)裝有貨物分配器。每個(gè)貨物分配器中包含零個(gè)或多個(gè)價(jià)格相同的貨物。顧客通過 1 選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價(jià)格,貨物將被分配到貨物傳送孔送給顧客,并將適當(dāng)?shù)牧沐X返回到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送加到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中的貨物的價(jià)格,機(jī)器將等待顧客投進(jìn)更多的貨幣。如果顧客決定不買所選擇的貨物,將所投硬幣從退幣孔退出。
(二)UML自動(dòng)售貨機(jī)系統(tǒng)控制要求:
根據(jù)售貨機(jī)自動(dòng)控制系統(tǒng)的流程可以知道自動(dòng)售貨機(jī)的主要系統(tǒng)包括:計(jì)幣系統(tǒng)、比較系統(tǒng)、選擇系統(tǒng)、飲料供應(yīng)系統(tǒng)、退幣系統(tǒng)和報(bào)警系統(tǒng)。
1.計(jì)幣系統(tǒng):
當(dāng)有顧額色買飲料時(shí),投入的錢幣經(jīng)過感應(yīng)器,感應(yīng)器記憶投幣的個(gè)數(shù)關(guān)且傳送到檢測(cè)系統(tǒng)(即電子天平)和計(jì)幣系統(tǒng)。只有當(dāng)電子天平測(cè)量的重量少于誤差值時(shí),允許計(jì)幣系統(tǒng)進(jìn)行疊加錢幣,疊加的錢幣數(shù)據(jù)存放在數(shù)據(jù)寄存器中。如果不正確時(shí),認(rèn)為是假幣。既定出投幣,既定出系統(tǒng),等待新顧客。
2.比較系統(tǒng):
投入完畢后,系統(tǒng)會(huì)把錢幣數(shù)據(jù)和可以購買飲料的價(jià)格進(jìn)行區(qū)間比較,當(dāng)投入的錢幣小于2元時(shí),指示燈亮,顯示投入的錢幣不足。此時(shí)可以再投幣或選擇退幣。當(dāng)投稿的錢幣在2~3元之間時(shí),汔水選擇指示燈長(zhǎng)亮。當(dāng)大于3元時(shí),汔水和咖啡的指示燈同時(shí)長(zhǎng)亮。此時(shí)可以選擇飲料或選擇退幣。
3.選擇系統(tǒng):
比較電路完成后選擇電路指示燈是長(zhǎng)亮的,當(dāng)按下汽水或咖啡選擇時(shí),相應(yīng)的選擇指示燈由長(zhǎng)亮轉(zhuǎn)為以1秒為周期閃爍。當(dāng)飲料供應(yīng)完畢時(shí),閃爍同時(shí)停止。
4.飲料供應(yīng)系統(tǒng):
當(dāng)按下選擇按鈕時(shí),相應(yīng)的電磁閥(Y4或Y6)和電機(jī)(Y3或Y5)同時(shí)啟動(dòng)。在飲料輸出的同時(shí),減去相應(yīng)的購買錢幣數(shù)。當(dāng)飲料輸出達(dá)到8秒時(shí),電磁閥首先關(guān)斷,小電機(jī)繼續(xù)工作0.5秒后停機(jī)。此小電機(jī)的作用是:在輸出飲料時(shí),加快輸出。在電磁閥關(guān)斷時(shí),給電磁閥加壓作用,加速電磁閥的關(guān)斷。(注:由于該售貨機(jī)是長(zhǎng)期使用,電磁閥使用過多時(shí),返回彈力減少,不能完全關(guān)斷會(huì)出現(xiàn)漏飲料的現(xiàn)象。此時(shí)電機(jī)Y3和Y5延長(zhǎng)工作0.5秒起到電磁閥加壓的作用,使電磁閥可以完好的關(guān)斷。)
5.退幣系統(tǒng):
當(dāng)顧客購?fù)觑嬃虾螅嘤嗟腻X幣只要按下退幣按鈕。系統(tǒng)就會(huì)把數(shù)據(jù)寄存器D2內(nèi)的錢幣數(shù)首先除以10得到整數(shù)部分,是1元錢需要退回的數(shù)量,存放在D10里。余數(shù)存放在D11里。再用D11除以5得到的整數(shù)部分是5角錢需要退回的數(shù)量,存放在D12里。余數(shù)存放在D13里。最后D13里面的數(shù)值,就是1角錢需要退回的數(shù)量。在選擇退幣的同時(shí)啟動(dòng)3個(gè)退幣電機(jī)。3個(gè)感應(yīng)器開始計(jì)數(shù),當(dāng)感應(yīng)器記錄的個(gè)數(shù)等于數(shù)據(jù)寄存器退回的幣數(shù)時(shí),退幣電機(jī)停止運(yùn)轉(zhuǎn)。
6.報(bào)警系統(tǒng):
報(bào)警系統(tǒng)如果是非故障報(bào)警,只要通過網(wǎng)絡(luò)通知送液車或者送幣車即可。但是如果是故障報(bào)警則需要通知維修人員到現(xiàn)聲進(jìn)行維修。同時(shí)停止服務(wù),避免造成顧客的損失。
(三)業(yè)務(wù)流程圖
錢幣記錄儀對(duì)錢幣前端接受顧客投的進(jìn)行識(shí)別幣判斷退出錢幣發(fā)送信息到分配器判斷沒有貨物時(shí)發(fā)送信息到前端發(fā)送貨物4
(四)數(shù)據(jù)流程圖
錢幣錢幣記錄儀對(duì)分配器反錢幣錢幣進(jìn)行計(jì)算與貨物價(jià)格進(jìn)貨物發(fā)放行比較取走零錢與購買的貨物
三、各種UML圖型及其分析
(一)用例圖
1.顧客的用例圖
inputCoinchooseSodaCustomer
2.自動(dòng)售貨機(jī)的用例圖
RegisterDispenserFrontSodaMachine
(二)類圖
(三)序列圖
理想狀態(tài)(不找零錢)的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: releaseSoda()8 1.沒有貨物的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: displayPrompt()12: sendReturnCoin()13: returnCoinToFront()14: returnCoin()9 2.3.需找零錢的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: sendSodaPrice()12: checkForChange()13: releaseChange()14: receiveSoda()15: receiveChange()10
沒有零錢找給顧客
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: sendSodaPrice()12: checkForCharge()13: returnNoCharge()14: returnCoinToFront()15: displayPrompt()16: returnSodaToDispenser()17: returnCoin()11 4.5.完整的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnNoCharge()6: returnCoinToFront()7: displayPrompt()8: returnCoin()9: End()10: returnSodaFree()11: displayPrompt()12: chooseSoda()13: sendChooseToDispenser()14: checkAvailability()15: returnUnavailability()16: displayPrompt()17: sendReturnCoin()18: returnCoinToFront()19: returnCoin()20: End()21: releaseSoda()22: sendSodaFrice()23: checkForCharge()24: returnNoCharge()25: returnCoinToFront()26: displayPrompt()27: returnSodaToDispenser()28: returnCoin()29: End()30: releaseCharge()31: receiveSoda()32: receiveCharge()33: End()34: receiveSoda()35: End()12
(四)協(xié)作圖
1.理想狀態(tài)的協(xié)作圖
3: getCustomerInput()9: checkAvailability()4: checkForSoda():Registe:Dispensrer8: sendChooseToDis()2: accept()5: returnSodaFree()1: inputCoin()10: releaseSoda()7: chooseSoda():Front : Customer6: displayPrompt()11: releaseSoda()2.沒有貨物的協(xié)作圖
1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()11: displayPrompt()14: returnCoin()13: returnCoinToFront()8: sendChooseToDis()2: accept()5: returnSodaFree()12: sendReturnCoin()10: releaseSoda()3: getCustomerInput()9: checkAvailability()4: checkForSoda():Registe:Dispensrer 3.需找零錢的協(xié)作圖
1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()14: receiveSoda()15: receiveChange()13: releaseChange()8: sendChooseToDis()2: accept()5: returnSodaFree()10: releaseSoda()3: getCustomerInput()12: checkForChange()9: checkAvailability()4: checkForSoda():Registe:Dispensrer11: sendSodaPrice()4.沒有零錢找給顧客的協(xié)作圖
1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()15: displayPrompt()17: returnCoin()13: returnNoCharge()14: returnCoinToFront()8: sendChooseToDis()16: returnSodaToDispenser()2: accept()5: returnSodaFree()3: getCustomerInput()10: releaseSoda()12: checkForCharge()9: checkAvailability()4: checkForSoda():Registe:Dispensrer11: sendSodaPrice()
完整的協(xié)作圖
29: End()33: End()35: End()1: inputCoin()12: chooseSoda():Front : Customer7: displayPrompt()8: returnCoin()11: displayPrompt()16: displayPrompt()19: returnCoin()26: displayPrompt()28: returnCoin()31: receiveSoda()13: sendChooseToDispenser()32: receiveCharge()27: returnSodaToDispenser()34: receiveSoda()10: returnSodaFree()5: returnNoCharge()15: returnUnavailability()6: returnCoinToFront()21: releaseSoda()18: returnCoinToFront()24: returnNoCharge()14: checkAvailability()25: returnCoinToFront()30: releaseCharge()2: accept()17: sendReturnCoin():Dispenser4: checkForSoda()3: getCustomerInput()22: sendSodaFrice()23: checkForCharge():Register15 5.(五)狀態(tài)圖
提示投幣do/ 請(qǐng)求投幣do/ 提示是假幣假幣do/ 檢查硬幣真幣否購買do/ 存儲(chǔ)硬幣,計(jì)算貨幣總值do/ 確認(rèn)投完硬幣有do/ 請(qǐng)求選擇商品選擇貨品do/ 提示無貨無貨do/ 檢測(cè)貨品存量有貨計(jì)算小于do/ 比較貨幣總值和貨物價(jià)值do/ 提示貨幣不足不小于確認(rèn)do/ 確認(rèn)顧客購買do/ 送出貨品,請(qǐng)求取貨有零錢退幣無零錢do/ 請(qǐng)求退幣不購買顯示do/ 提示交易完成17
(六)活動(dòng)圖
1.投幣的活動(dòng)圖
投幣確認(rèn)投幣完成2.選擇貨物的活動(dòng)圖
請(qǐng)求選擇輸入貨物確認(rèn)選擇貨物ID 3.前端的活動(dòng)圖
接受貨幣顯示可購顯示面值貨物過小顯示沒有該貨物接受飲料顯示沒有零錢找零錢退貨幣 19
貨幣記錄儀的活動(dòng)圖
接受從前端來的錢幣判斷錢幣發(fā)送信息給分配儀發(fā)送貨物金額給前端返回錢幣計(jì)算零錢20 4.5.分配器的活動(dòng)圖
接受貨幣啟示錄儀的信息發(fā)送貨物提示沒有該貨物 21
(七)組件圖
CustomerSodaMachineFrontRegisterDispenserDB_0
(八)配置圖
Clint數(shù)據(jù)庫
(九)數(shù)據(jù)模型圖
第五篇:自動(dòng)售貨機(jī)系統(tǒng)程序
Coin類:
#include
using namespace std;
class Coin { public: /** Constructs a coin with a given name and value @param n the coin name @param v the coin value */ Coin(string n, double v);/** Gets the coin name.@return the name */ string get_name()const;/** Gets the coin value @return the value */ double get_value()const;private: string name;double value;};
Coin::Coin(string n, double v){ name = n;value = v;}
string Coin::get_name()const { return name;}
double Coin::get_value()const { return value;}
Product類: #include
using namespace std;
class Product { public: /** Constructs a product with a given name, price and quantity @param n the product name @param p the price @param q the quantity */ Product(string n, double p, int q);/** Gets the product name @return the name */ string get_name()const;/** Gets the product price @return the price */ double get_price()const;/** Gets the product quantity @return the quantity */ int get_quantity()const;/** Adds to the product quantity @param amount the amount to add */ void add_quantity(int amount);private: string name;double price;int quantity;};
Product::Product(string n, double p, int q){ name = n;price = p;quantity = q;}
string Product::get_name()const { return name;}
double Product::get_price()const { return price;}
int Product::get_quantity()const { return quantity;}
void Product::add_quantity(int amount){ quantity = quantity + amount;}
VendingMachine類:
class VendingMachine { public: /** Constructs a vending machine with no current product selection.*/ VendingMachine();/** Adds product to the machine.@param p the product to add */ void add_product(Product p);/** Sets the currently selected product @param name the product name @return true if the machine has a product with the given name */ bool select_product(string name);void chaxun_product();//查詢當(dāng)前售貨機(jī)內(nèi)的商品
/** Adds a coin to pay for the currently selected product.@param c the coin to add @return true if sufficient coins have been added to pay for the selected product.*/ bool add_coin(vector
double return_yiyoucoins();//統(tǒng)計(jì)售貨機(jī)中已有的貨款 void setcurrent_product();//把當(dāng)前選擇的商品代號(hào)置為-1 int getcurrent_product();//得到當(dāng)前選擇的商品代號(hào) private: vector
products;int current_product;vector
VendingMachine::VendingMachine(){ current_product =-1;}
void VendingMachine::add_product(Product p)//添加商品 { for(int i = 0;i < products.size();i++){ if(products[i].get_name()== p.get_name()&& products[i].get_price()== p.get_price()){ products[i].add_quantity(p.get_quantity());cout<<“添加成功!”< { cout<<“已存在該商品,與您輸入的價(jià)格不同!”< return; } } products.push_back(p);cout<<“添加成功!”< bool VendingMachine::select_product(string name)//選擇商品 { int i;for(i = 0;i < products.size();i++){ if(products[i].get_name()== name && products[i].get_quantity()> 0){ current_product = i;return true;} else { if(products[i].get_name()== name && products[i].get_quantity()== 0){ cout << “對(duì)不起,該商品已售完!n”;return false;} } } if(i==products.size()){ cout<<“對(duì)不起,不存在該商品!”< double VendingMachine::return_yiyoucoins()//統(tǒng)計(jì)售貨機(jī)當(dāng)前的金錢總額 { double total = 0;for(int i = coins.size()1;i >= 0;i--){ coins.push_back(current_payment[i]);current_payment.pop_back();} products[current_product].add_quantity(-1);current_product =-1;cout<<“交易成功!”< { return false;} } double VendingMachine::add_coinbijiao(vector } double m=products[current_product].get_price()-total;if(m>0)return m;else return-1;} double VendingMachine::return_coins()//統(tǒng)計(jì)當(dāng)前投入的金錢總額 { double total = 0;for(int i = current_payment.size()1;i >= 0;i--){ total = total + coins[i].get_value();coins.pop_back();} return total;} void VendingMachine::chaxun_product(){ if(products.size()==0){ cout<<“暫時(shí)沒有添加商品!”< int VendingMachine::getcurrent_product(){ return current_product;} Main函數(shù): #include void main(){ vector VendingMachine machine;bool more = true;machine.chaxun_product();while(more){ cout << “a)添加商品 x)查詢商品 s)選擇商品 p)投幣 c)取消 e)查詢當(dāng)前金額 r)取款 q)退出: ”;string command;cin>>command;if(command == “a”){ cout << “商品名: ”;string name;cin>>name; cout << “價(jià)格: ”;double price;cin >> price;cout << “數(shù)量: ”;int quantity;cin >> quantity;machine.add_product(Product(name, price, quantity));} else if(command == “s”){ double total1; total1=machine.return_yiyoucoins(); if(total1>=5000)//當(dāng)售貨機(jī)中的貨款大于等于5000時(shí),暫停售貨 { cout<<“對(duì)不起,現(xiàn)在暫停售貨!”< } else { machine.setcurrent_product();cout << “商品名: ”;string name;cin>>name;machine.select_product(name); } } else if(command == “p”){ if(machine.getcurrent_product()!=-1)//如果當(dāng)前已選擇商品,才可以投幣 { bool panduan=false;while(!panduan)//多次投幣的實(shí)現(xiàn) { cout << “所投錢幣名稱(以 # 結(jié)束投幣過程):”;string name;cin>>name;while(name!=“#”){ bool found = false;for(int i = 0;!found && i < coins.size();i++){ if(coins[i].get_name()== name){ current_pay.push_back(coins[i]);found=true;} } if(!found){ cout << “不存在該貨幣,請(qǐng)重新投入:n”;} cin>>name; } double k=machine.add_coinbijiao(current_pay);if(k==-1) { machine.add_coin(current_pay);for(int i = current_pay.size()1;i >= 0;i--){ total = total + current_pay[i].get_value();current_pay.pop_back();} cout << “Returned(退還)” < else cout<<“您還沒有選擇商品!”< { machine.setcurrent_product(); double total=0; for(int i = current_pay.size()1;i >= 0;i--){ total = total + coins[i].get_value();coins.pop_back();} return total;} void VendingMachine::chaxun_product(){ if(products.size()==0){ cout<<“暫時(shí)沒有添加商品!”< int VendingMachine::getcurrent_product(){ return current_product;} } JAVA import Input.touqian;import java.*;class shangpin { } class fenpeiqi { } class xianshichanpin { fenpeiqi fpq[]=new fenpeiqi[3];public xianshichanpin(){ fpq[0]=new fenpeiqi(3.0);fpq[0].sp[0]=new shangpin(“玉米烤腸 ”,10);fpq[0].sp[1]=new shangpin(“可口可樂 ”,15);fpq[0].sp[2]=new shangpin(“百事可樂 ”,10);fpq[1]=new fenpeiqi(5.0);fpq[1].sp[0]=new shangpin(“哈德門香煙”,10);fpq[1].sp[1]=new shangpin(“將軍香煙 ”,15);fpq[1].sp[2]=new shangpin(“紅梅香煙 ”,10);fpq[2]=new fenpeiqi(10.0);fpq[2].sp[0]=new shangpin(“一支筆香煙”,10);fpq[2].sp[1]=new shangpin(“紅塔山香煙”,10);fpq[2].sp[2]=new shangpin(“泰山香煙 ”,15);double price;shangpin sp[]=new shangpin[3];public fenpeiqi(double price){ } this.price=price;String name;int num;public shangpin(String name,int num){ } this.name=name;this.num=num; #“);#”);#“);#”);#“); } } void show(){ System.out.println(”=============== System.out.println(“# System.out.println(”# System.out.println(“# 歡迎使用自動(dòng)售貨機(jī) System.out.println(”# System.out.println(“# =================”);System.out.println(“=============== System.out.println();System.out.println(”編號(hào)tt“+”名稱ttt“+”價(jià)格tt“+”數(shù)量t“);for(int i=0;i } if(fpq[i]!=null){ } for(int j=0;j } } if(fpq[i].sp[j]!=null){ =================”);System.out.println((i+1)*10+j+1+“tt”+fpq[i].sp[j].name+“tt”+fpq[i].price+“tt”+fpq[i].sp[j].num);System.out.println(“=============== } =================”);class panduan { boolean ying() } { } boolean zhi(){ } int z=touqian.in(); if(z==5||z==10){ } else { } return false;return true;double y=touqian.dou();if(y==1||y==0.5){ } else { } return false;return true;class jiabi { switch(touqian.in())void ceshi(){ System.out.println(“請(qǐng)選擇投放錢的類型 ”);System.out.println(“1 表示投放 硬幣”);System.out.println(“2 表示投放 紙幣”);System.out.println(“請(qǐng)輸入您選擇的錢的類型 :”); panduan pd=new panduan(); { case 1: System.out.println(“請(qǐng)您投入有效的面值”); if(pd.ying()) { System.out.println(“您投入的是有效地硬幣”); System.out.println(); // System.out.println(“^_^ 請(qǐng)選擇您所需要的物品^_^”); } else } class chanpin { { System.out.println(“您投入的不是有效地硬幣,請(qǐng)您重新投入”); } break; case 2 : System.out.println(“請(qǐng)您投入有效的面值”); if(pd.zhi()) { // } else { } break; default : System.out.println(“請(qǐng)您重新投入有效地貨幣”); } } System.out.println(“您投入的不是有效的紙幣,請(qǐng)您重新投入”);System.out.println(“您投入的是有效的紙幣”);System.out.println();System.out.println(“^_^ 請(qǐng)選擇您所需要的物品^_^”); } } public static void main(String args[]){ System.out.println(“請(qǐng)輸入您想要產(chǎn)品的編碼:”);int bianma;bianma=touqian.in();System.out.println(“請(qǐng)輸入您想要產(chǎn)品的數(shù)量:”);int shuliang;shuliang=touqian.in();System.out.println(“您一共要付:”);double sumjine;sumjine= xianshichanpin xscp=new xianshichanpin();xscp.show();