第一篇:基于自動售貨機的軟件工程(精)
面向?qū)ο蠓治鰧嵺`大作業(yè)(40% 下面是自動售貨機系統(tǒng)的需求陳述,請 你: 1.編寫分析和設(shè)計報告;2.報告分需求分析、系統(tǒng)設(shè)計和對象設(shè) 計三部分編撰, 各部分應(yīng)按相應(yīng)的格式 編寫,并包含用例圖、順序圖、類圖、業(yè)務(wù)流程圖、系統(tǒng)結(jié)構(gòu)圖等;3.大作業(yè)的結(jié)構(gòu)為: A 項目需求說明 B 需求分析報告 C 系統(tǒng)設(shè)計報告 D 對象設(shè)計報告
E 分析設(shè)計過程說明:這部分介紹分析 和設(shè)計過程中使用了什么技術(shù) 需求陳述: 自動售貨機系統(tǒng)是一種無人售貨系統(tǒng)。售貨時,顧客把硬幣投入機器的投幣口 中,機器檢查硬幣的大小、重量、厚度 及邊緣類型。有效的硬幣是一元幣、五 角幣、五分幣、二分幣、一分幣。其他 貨幣被認為是假幣。機器拒絕接受假幣, 并將其從退幣孔退出。當(dāng)機器接受了有 效的硬幣之后,就把硬幣送入硬幣儲藏 器中。顧客支付的貨幣根據(jù)硬幣的面值 進行累加。
自動售貨機裝有貨物分配器。每個貨物 分配器中包含零個或多個價格相同的貨 物。顧客通過選擇貨物分配器來選擇貨 物。如果貨物分配器中有貨物,而且顧 客
支付的貨幣值不小于該貨物的價格, 貨物將被分配到貨物傳送孔送給顧客, 并將適當(dāng)?shù)牧沐X返還到退幣孔。如果分
配器是空的,則和顧客支付的貨幣值相 等的硬幣將被送回到退幣孔。如果顧客 支付的貨幣值少于所選擇的分配器中貨 物的價格,機器將等待顧客投進更多的 貨幣。如果顧客決定不買所選擇的貨物, 他投放進的貨幣將從退幣孔中退出。
參考資料:《軟件工程》 張海藩 清華大 學(xué)出版社 2009年第一版
下面是自動售貨機系統(tǒng)的需求陳述,試 建立它的對象模型、動態(tài)模型和功能模 型: 自動售貨機系統(tǒng)是一種無人售貨系統(tǒng)。售貨時,顧客把硬幣投入機器的投幣口 中,機器檢查硬幣的大小、重量、厚度 及邊緣類型。有效的硬幣是一元幣、五 角幣、五分幣、二分幣、一分幣。其他 貨幣被認為是假幣。機器拒絕接受假幣, 并將其從退幣孔退出。當(dāng)機器接受了有 效的硬幣之后,就把硬幣送入硬幣儲藏
器中。顧客支付的貨幣根據(jù)硬幣的面值 進行累加。
自動售貨機裝有貨物分配器。每個貨物 分配器中包含零個或多個價格相同的貨 物。顧客通過選擇貨物分配器來選擇貨 物。如果貨物分配器中有貨物,而且顧 客支付的貨幣值不小于該貨物的價格, 貨物將被分配到貨物傳送孔送給顧客, 并將適當(dāng)?shù)牧沐X返還到退幣孔。如果分 配器是空的,則和顧客支付的貨幣值相 等的硬幣將被送回到退幣孔。如果顧客 支付的貨幣值少于所選擇的分配器中貨 物的價格,機器將等待顧客投進更多的 貨幣。如果顧客決定不買所選擇的貨物, 他投放進的貨幣將從退幣孔中退出。
參考資料:《軟件工程》 張海藩 清華大 學(xué)出版社 2009年第一版 面向?qū)ο蟮姆治?/p>
面向?qū)ο蠓治龇椒ǖ暮诵乃枷胧抢妹?向?qū)ο蟾拍詈头椒檐浖枨髽?gòu)造一組 相關(guān)模型(對象模型,動態(tài)模型和功能 模型 ,來獲得關(guān)于問題域的全面認識。
這三個模型從不同的角度對系統(tǒng)進行描 述, 其中:對象模型描述了系統(tǒng)靜態(tài)的、結(jié)構(gòu)化的數(shù)據(jù)性質(zhì);動態(tài)模型描述了系 統(tǒng)順勢的、行為化的控制性質(zhì);功能模 型描述了變化的系統(tǒng)的功能性質(zhì)。這三 個模型都涉及到數(shù)據(jù)??刂坪筒僮鞯裙?同的概念,但每種模型描述的側(cè)重有所 不同。它們各自以不同側(cè)面反應(yīng)系統(tǒng)的 實質(zhì)內(nèi)容,綜合起來則全面反映了目標(biāo) 系統(tǒng)的需求。
對象模型是三個模型中最關(guān)鍵的。它的 作用是描述系統(tǒng)的靜態(tài)結(jié)構(gòu),包括構(gòu)成 系統(tǒng)的類和對象、它們的屬性和操作以 及它們之間的聯(lián)系。UML 中類圖適用于 建立對象模型,狀態(tài)圖適用于建立動態(tài)
模型。每個類的動態(tài)行為用一張狀態(tài)圖 來表示,各個類的狀態(tài)圖通過事件合并 起來,構(gòu)成系統(tǒng)的動態(tài)模型。也就是說, 動態(tài)模型是基于事件共享而相互關(guān)聯(lián)的 一組狀態(tài)圖的集合。建立對象模型大體 上按照下列順序進行 :尋找問題域內(nèi)的 對象,識別出對象間的關(guān)系、定義屬性 和服務(wù)。事實上,分析工作不可能嚴格 按照預(yù)定順序進行,系統(tǒng)的模型往往需 要反復(fù)構(gòu)造多遍才能建成。注:對象硬幣計算器和對象硬幣檢測器 可以作為對象自動售貨器的一部分,它 們的屬性作為自動售貨器的屬性。
建立動態(tài)模型
對于僅存數(shù)靜態(tài)數(shù)據(jù)的系統(tǒng)來說,動態(tài) 模型并沒有什么實際意義。然而在開發(fā) 交互式系統(tǒng)時,動態(tài)模型卻起著很重要 的作用。如果收集輸入信息是目標(biāo)系統(tǒng) 的一項主要工作,則在開發(fā)這類應(yīng)用系 統(tǒng)時建立正確的動態(tài)模型是至關(guān)重要 的。
建立動態(tài)模型的步驟:(1 編寫典型的對話腳本;(2 從腳本中提取出事件, 聯(lián)系該事 件與其目標(biāo)對象;(3 組織事件的順序和狀態(tài)(采用狀 態(tài)圖描繪;(4 比較各個不同對象的狀態(tài)圖, 檢 查對象之間的一致性,確保事件之間的 匹配。
功能模型
功能模型描述了系統(tǒng)的所有計算。8
功能模型指出發(fā)生了什么,動態(tài)模型確 定什么時候發(fā)生,而對象模型確定發(fā)生 的客體。功能模型表明一個計算如何從 輸入值得到輸出值,它不考慮計算的次 序。功能模型由多張數(shù)據(jù)流圖組成。數(shù) 據(jù)流圖用來表示從源對象到目標(biāo)對象的 數(shù)據(jù)值的流向,它不包含控制信息,控 制信息在動態(tài)模型中表示,同時數(shù)據(jù)流 圖也不表示對象中值的組織,值的組織 在對象模型中表示。
數(shù)據(jù)流圖中包含有處理、數(shù)據(jù)流、動作 對象和數(shù)據(jù)存儲對象。1.處理
數(shù)據(jù)流圖中的處理用來改變數(shù)據(jù) 值。最低層處理是純粹的函數(shù),一張完 整的數(shù)據(jù)流圖是一個高層處理。
2.數(shù)據(jù)流
數(shù)據(jù)流圖中的數(shù)據(jù)流將對象的輸出 與處理、處理與對象的輸入、處理與處 9 理聯(lián)系起來。在一個計算機中,用數(shù)據(jù) 流來表示一中間數(shù)據(jù)值,數(shù)據(jù)流不能改 變數(shù)據(jù)值。
3.動作對象
動作對象是一種主動對象,它通過 生成或者使用數(shù)據(jù)值來驅(qū)動數(shù)據(jù)流圖。4.數(shù)據(jù)存儲對象
數(shù)據(jù)流圖中的數(shù)據(jù)存儲是被動對 象,它用來存儲數(shù)據(jù)。它與動作對象不 一樣,數(shù)據(jù)存儲本身不產(chǎn)生任何操作, 它只響應(yīng)存儲和訪問的要求。
C 語言課程設(shè)計 需求分析與系統(tǒng)設(shè)計報告
目 錄 引言.......................................................................................................13 1.1背景...............................................................................................13 1.2定義...............................................................................................13 1.3參考資料......................................................................................13 2 需求分析...............................................................................................14 2.1需求分析......................................................................................14 2.2運行環(huán)境........................................................................................4 3 系統(tǒng)設(shè)計.................................................................................................5 3.1功能需求描述................................................................................5 3.2軟件結(jié)構(gòu)........................................................................................7
3.3 程序模塊劃分...............................................................................8 4 組員分工及時間安排............................................................................9 4.1 組員分工.......................................................................................9 4.2 時間安排.......................................................................................9 1 引言 1.1背景
自動售貨機是能根據(jù)投入的錢幣自動付貨的機器。自動售貨機 是商業(yè)自動化的常用設(shè)備,它不受時間、地點的限制,能節(jié)省人力、方便交易。是一種全新的商業(yè)零售形式,又被稱為 24小時營業(yè)的微 型超市。自動售貨機能夠充分補充人力資源的不足,適應(yīng)消費 環(huán)境和消費模式的變化, 可以更省力, 運營時需要的資本少、面積小, 有吸引人們購買好奇心的自身性能, 可以很好地解決人工費用上升的 問題等各項優(yōu)點。
1.2定義
課程設(shè)計中用到的專門術(shù)語的定義(暫定。
1.3參考資料
1.王士元.C高級實用程序設(shè)計.北京 : 清華大學(xué)出版社.1996 2.潭浩強.C語言程序設(shè)計.北京 : 清華大學(xué)出版社 , 2000 3.百度 需求分析 2.1需求分析
說明:本自動售貨機圖形模擬系統(tǒng)為模擬飲料自動售貨機。(1 包含實體 1,顧客實體
2,物品管理系統(tǒng)實體(飲料 3,記幣管理器實體 4,管理員實體 5,故障系統(tǒng)實體(2 關(guān)系模式
1, 顧客:投幣, 選擇飲料, 購買數(shù)量, 取貨, 取零錢;2,物品管理系統(tǒng):飲料名稱,飲料價格,飲料數(shù)量,出貨;3,記幣管理系統(tǒng):顧客投錢數(shù),總金額 ,飲料單價, 投幣金額不足,找零金額;4, 管理員:補貨,查詢,統(tǒng)計;5, 故障系統(tǒng):故障顯示,報警;2.2運行環(huán)境
本自動售貨機圖形模擬系統(tǒng)是對自動售貨機工作行為及工作環(huán) 境的模擬實現(xiàn),因此,對此系統(tǒng)的運行環(huán)境將是在計算機上面進行, 即在電腦上模擬實現(xiàn)。
根據(jù)自動售貨機圖形模擬系統(tǒng)設(shè)計環(huán)境要求,即在 DOS 環(huán)境 下,用 C 語言編譯實現(xiàn),使用 TC 或 BC 開發(fā)軟件,因此,此模擬系 統(tǒng)可在絕大多數(shù)現(xiàn)形計算機系統(tǒng)上運
行,包括最常見的 windows xp 操作系統(tǒng)以及 windows 7 32位機上運行,但由于兼容性問題,此自 動售貨機圖形模擬系統(tǒng)在含 windows 7 64位操作系統(tǒng)的計算機上運 行可能出現(xiàn)意想不到的問題或根本不能運行,因而,不推薦在包含 64位操作系統(tǒng)的計算機上測試本自動售貨機圖形模擬系統(tǒng)。系統(tǒng)設(shè)計 3.1 功能需求描述
(1 自動售貨機能銷售三種飲料:罐裝可樂(2元、果汁(3.5元、牛奶(4元 ,設(shè)飲料數(shù)量無限。
(2自動售貨機允許投入 5角、1元硬幣, 5元紙幣,只找出 5角、1元硬幣。(3ⅰ.當(dāng)總幣值等于顧客需要的飲品單價時,機器顯示交易金額 并送出需要的商品;ⅱ.當(dāng)總幣值大于顧客需要的飲品單價時,機器顯示交易金額 并除提供所需飲品外,還提供找零: A.若機內(nèi) 5角硬幣不足時,當(dāng)投入 5元紙幣購買 2元、4元或 3.5元飲料時, 2元 4元飲料賣,并正常找零, 3.5元飲料不 賣并退回 5元;B.若機內(nèi) 5角、1元硬幣都不足時,當(dāng)投入 5元紙幣購 買 2元 4元或 3.5元的飲料時,均不賣,并退回 5元;ⅲ.當(dāng)總幣值小于顧客需要的商品單價時,機器會退出顧客投 入的硬幣,并顯示投幣金額不足的提示。
(4 當(dāng)投入的硬幣總值達到或大于飲品的最低單價時, 物品管理系 統(tǒng)自動接入, 并提供能夠選擇的飲品類型, 交易金額將輸出到顯示屏。
(5每次投幣時間有限制,設(shè)定每次投幣時間不超過 30秒,在時 間到時, 總幣值不足顧客購買的飲品單價時, 自動售貨機按不足錢數(shù) 處理,輸出投幣金額不足提示,并自動計時 10秒, 10秒內(nèi)若金額還 不足,系統(tǒng)則自動取消交易并退還全部硬幣。
(6設(shè)置取消鍵,當(dāng)交易過程中顧客輸入錯誤時,按下取消鍵系統(tǒng) 自動終止交易,返回到初始狀態(tài)并退出全部金額。
(7當(dāng)顧客完成一次購買后系統(tǒng)自動恢復(fù)到初始狀態(tài)。
(8顧客一次只能購買一種飲品的一個,若需要更多飲品,需要重 復(fù)操作。3.2軟件結(jié)構(gòu)
系統(tǒng)流程圖 3.3 程序模塊劃分
顯示模塊 外部接口 組員分工及時間安排 組員分工及時間安排 4.1 組員分工 內(nèi)部商定,協(xié)調(diào)安排。4.2 時間安排 第4周 第5周 第6周 第7周 第8周 第9周 第 10 周 系統(tǒng)需求分析與設(shè)計報告 界面設(shè)計,算法設(shè)計 鍵盤、鼠標(biāo)接口設(shè)計,算法設(shè)計 編碼實現(xiàn) 編碼實現(xiàn) 編碼實現(xiàn)、調(diào)試 調(diào)試、驗收、提交報告 20
第二篇:軟件工程_自動售貨機
自動售貨機
信息1101 施敏宇 18號
下面是自動售貨機系統(tǒng)的需求陳述,試建立它的對象模型、動態(tài)模型和功能模型: 自動售貨機系統(tǒng)是一種無人售貨系統(tǒng)。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、五分幣、二分幣、一分幣。其他貨幣被認為是假幣。機器拒絕接受假幣,并將其從退幣孔退出。當(dāng)機器接受了有效的硬幣之后,就把硬幣送入硬幣儲藏器中。顧客支付的貨幣根據(jù)硬幣的面值進行累加。自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當(dāng)?shù)牧沐X返還到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送回到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的貨幣將從退幣孔中退出。
面向?qū)ο蟮姆治?/p>
面向?qū)ο蠓治龇椒ǖ暮诵乃枷胧抢妹嫦驅(qū)ο蟾拍詈头椒檐浖枨髽?gòu)造一組相關(guān)模型(對象模型,動態(tài)模型和功能模型),來獲得關(guān)于問題域的全面認識。
這三個模型從不同的角度對系統(tǒng)進行描述,其中:對象模型描述了系統(tǒng)靜態(tài)的、結(jié)構(gòu)化的數(shù)據(jù)性質(zhì);動態(tài)模型描述了系統(tǒng)順勢的、行為化的控制性質(zhì);功能模型描述了變化的系統(tǒng)的功能性質(zhì)。這三個模型都涉及到數(shù)據(jù)??刂坪筒僮鞯裙餐母拍睿糠N模型描述的側(cè)重有所不同。它們各自以不同側(cè)面反應(yīng)系統(tǒng)的實質(zhì)內(nèi)容,綜合起來則全面反映了目標(biāo)系統(tǒng)的需求。
對象模型是三個模型中最關(guān)鍵的。它的作用是描述系統(tǒng)的靜態(tài)結(jié)構(gòu),包括構(gòu)成系統(tǒng)的類和對象、它們的屬性和操作以及它們之間的聯(lián)系。UML中類圖適用于建立對象模型,狀態(tài)圖適用于建立動態(tài)模型。每個類的動態(tài)行為用一張狀態(tài)圖來表示,各個類的狀態(tài)圖通過事件合并起來,構(gòu)成系統(tǒng)的動態(tài)模型。也就是說,動態(tài)模型是基于事件共享而相互關(guān)聯(lián)的一組狀態(tài)圖的集合。建立對象模型大體上按照下列順序進行:尋找問題域內(nèi)的對象,識別出對象間的關(guān)系、定義屬性和服務(wù)。事實上,分析工作不可能嚴格按照預(yù)定順序進行,系統(tǒng)的模型往往需要反復(fù)構(gòu)造多遍才能建成。
注:對象硬幣計算器和對象硬幣檢測器可以作為對象自動售貨器的一部分,它們的屬性作為自動售貨器的屬性。
建立動態(tài)模型
對于僅存數(shù)靜態(tài)數(shù)據(jù)的系統(tǒng)來說,動態(tài)模型并沒有什么實際意義。然而在開發(fā)交互式系統(tǒng)時,動態(tài)模型卻起著很重要的作用。如果收集輸入信息是目標(biāo)系統(tǒng)的一項主要工作,則在開發(fā)這類應(yīng)用系統(tǒng)時建立正確的動態(tài)模型是至關(guān)重要的。
建立動態(tài)模型的步驟:
(1)編寫典型的對話腳本;
(2)從腳本中提取出事件,聯(lián)系該事件與其目標(biāo)對象;
(3)組織事件的順序和狀態(tài)(采用狀態(tài)圖描繪);
(4)比較各個不同對象的狀態(tài)圖,檢查對象之間的一致性,確保事件之間的匹配。
提示投幣投幣購買提示是假幣,退幣假幣檢查硬幣否真幣存儲硬幣,計算貨幣總值確認投完硬幣是請求選擇貨物選擇貨物檢測貨物存量無貨提示無貨計算比較貨幣總值和貨物價格確認確認顧客購買小于提示貨物不足,確認顧客購買不購買送出貨物,請求取貨不購買退幣請求取退幣提示顯示交易完畢
功能模型
功能模型描述了系統(tǒng)的所有計算。功能模型指出發(fā)生了什么,動態(tài)模型確定什么時候發(fā)生,而對象模型確定發(fā)生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數(shù)據(jù)流圖組成。數(shù)據(jù)流圖用來表示從源對象到目標(biāo)對象的數(shù)據(jù)值的流向,它不包含控制信息,控制信息在動態(tài)模型中表示,同時數(shù)據(jù)流圖也不表示對象中值的組織,值的組織在對象模型中表示。
數(shù)據(jù)流圖中包含有處理、數(shù)據(jù)流、動作對象和數(shù)據(jù)存儲對象。
1.處理
數(shù)據(jù)流圖中的處理用來改變數(shù)據(jù)值。最低層處理是純粹的函數(shù),一張完整的數(shù)據(jù)流圖是一個高層處理。
2.數(shù)據(jù)流
數(shù)據(jù)流圖中的數(shù)據(jù)流將對象的輸出與處理、處理與對象的輸入、處理與處理聯(lián)系起來。在一個計算機中,用數(shù)據(jù)流來表示一中間數(shù)據(jù)值,數(shù)據(jù)流不能改變數(shù)據(jù)值。
3.動作對象
動作對象是一種主動對象,它通過生成或者使用數(shù)據(jù)值來驅(qū)動數(shù)據(jù)流圖。
4.數(shù)據(jù)存儲對象
數(shù)據(jù)流圖中的數(shù)據(jù)存儲是被動對象,它用來存儲數(shù)據(jù)。它與動作對象不一樣,數(shù)據(jù)存儲本身不產(chǎn)生任何操作,它只響應(yīng)存儲和訪問的要求。
有效幣特征假幣退假幣假幣檢查硬幣有效幣硬幣送入硬幣儲藏器計算面值貨物價格有貨貨幣總值硬幣顧客投幣顧客不足等待顧客投幣顧客取消購買,退幣顧客判斷貨幣是否足夠足夠選擇貨物判斷分配器貨物存量無貨分配貨物,找零貨物,硬幣硬幣退幣
第三篇:軟件工程課程設(shè)計(自動售貨機)
《軟件工程》課程設(shè)計報告
一、問題描述
(一)關(guān)于自動售貨機
自動售貨機像磁卡電話、銀行柜員機一樣,以方便、新穎、文明、晝夜服務(wù)等特點,成為發(fā)達國家不可缺少的便民配套設(shè)施。如今的自動售貨機可以為顧客提供多種服務(wù)。顧客可以根據(jù)自己的需要選擇商品并投入錢幣,售貨機接收錢幣,售出商品。
(二)自動售貨機的設(shè)計
自動售貨機系統(tǒng)是一種無人售貨系統(tǒng)。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、一角幣、五分幣和一分幣。其它貨幣都被認為是假幣。機器拒收假幣,并將其從退幣孔退出。當(dāng)機器接收了有效的硬幣之后,將之送入硬幣儲藏器。顧客支付的貨幣根據(jù)硬幣的面值進行累加。
自動售貨機裝有貨物分配器,每個分配器中包含0 個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果有貨,且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將找零返回到退幣孔。如果無貨,則和顧客支付的貨幣值相等的硬幣將被送到退幣孔。如果顧客支付的貨幣值小于所選貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的硬幣將從退幣孔中退出。
二、需求分析
(一)UML自動售貨機系統(tǒng)功能需求:
自動售貨機系統(tǒng)是一種無一元等3個硬幣投幣口。顧客確認購貨后,售貨機可根據(jù)硬幣的面值進行累加。
自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過 1 選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當(dāng)?shù)牧沐X返回到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送加到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中的貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,將所投硬幣從退幣孔退出。
(二)UML自動售貨機系統(tǒng)控制要求:
根據(jù)售貨機自動控制系統(tǒng)的流程可以知道自動售貨機的主要系統(tǒng)包括:計幣系統(tǒng)、比較系統(tǒng)、選擇系統(tǒng)、飲料供應(yīng)系統(tǒng)、退幣系統(tǒng)和報警系統(tǒng)。
1.計幣系統(tǒng):
當(dāng)有顧額色買飲料時,投入的錢幣經(jīng)過感應(yīng)器,感應(yīng)器記憶投幣的個數(shù)關(guān)且傳送到檢測系統(tǒng)(即電子天平)和計幣系統(tǒng)。只有當(dāng)電子天平測量的重量少于誤差值時,允許計幣系統(tǒng)進行疊加錢幣,疊加的錢幣數(shù)據(jù)存放在數(shù)據(jù)寄存器中。如果不正確時,認為是假幣。既定出投幣,既定出系統(tǒng),等待新顧客。
2.比較系統(tǒng):
投入完畢后,系統(tǒng)會把錢幣數(shù)據(jù)和可以購買飲料的價格進行區(qū)間比較,當(dāng)投入的錢幣小于2元時,指示燈亮,顯示投入的錢幣不足。此時可以再投幣或選擇退幣。當(dāng)投稿的錢幣在2~3元之間時,汔水選擇指示燈長亮。當(dāng)大于3元時,汔水和咖啡的指示燈同時長亮。此時可以選擇飲料或選擇退幣。
3.選擇系統(tǒng):
比較電路完成后選擇電路指示燈是長亮的,當(dāng)按下汽水或咖啡選擇時,相應(yīng)的選擇指示燈由長亮轉(zhuǎn)為以1秒為周期閃爍。當(dāng)飲料供應(yīng)完畢時,閃爍同時停止。
4.飲料供應(yīng)系統(tǒng):
當(dāng)按下選擇按鈕時,相應(yīng)的電磁閥(Y4或Y6)和電機(Y3或Y5)同時啟動。在飲料輸出的同時,減去相應(yīng)的購買錢幣數(shù)。當(dāng)飲料輸出達到8秒時,電磁閥首先關(guān)斷,小電機繼續(xù)工作0.5秒后停機。此小電機的作用是:在輸出飲料時,加快輸出。在電磁閥關(guān)斷時,給電磁閥加壓作用,加速電磁閥的關(guān)斷。(注:由于該售貨機是長期使用,電磁閥使用過多時,返回彈力減少,不能完全關(guān)斷會出現(xiàn)漏飲料的現(xiàn)象。此時電機Y3和Y5延長工作0.5秒起到電磁閥加壓的作用,使電磁閥可以完好的關(guān)斷。)
5.退幣系統(tǒng):
當(dāng)顧客購?fù)觑嬃虾?,多余的錢幣只要按下退幣按鈕。系統(tǒng)就會把數(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ù)量。在選擇退幣的同時啟動3個退幣電機。3個感應(yīng)器開始計數(shù),當(dāng)感應(yīng)器記錄的個數(shù)等于數(shù)據(jù)寄存器退回的幣數(shù)時,退幣電機停止運轉(zhuǎn)。
6.報警系統(tǒng):
報警系統(tǒng)如果是非故障報警,只要通過網(wǎng)絡(luò)通知送液車或者送幣車即可。但是如果是故障報警則需要通知維修人員到現(xiàn)聲進行維修。同時停止服務(wù),避免造成顧客的損失。
(三)業(yè)務(wù)流程圖
錢幣記錄儀對錢幣前端接受顧客投的進行識別幣判斷退出錢幣發(fā)送信息到分配器判斷沒有貨物時發(fā)送信息到前端發(fā)送貨物4
(四)數(shù)據(jù)流程圖
錢幣錢幣記錄儀對分配器反錢幣錢幣進行計算與貨物價格進貨物發(fā)放行比較取走零錢與購買的貨物
三、各種UML圖型及其分析
(一)用例圖
1.顧客的用例圖
inputCoinchooseSodaCustomer
2.自動售貨機的用例圖
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/ 請求投幣do/ 提示是假幣假幣do/ 檢查硬幣真幣否購買do/ 存儲硬幣,計算貨幣總值do/ 確認投完硬幣有do/ 請求選擇商品選擇貨品do/ 提示無貨無貨do/ 檢測貨品存量有貨計算小于do/ 比較貨幣總值和貨物價值do/ 提示貨幣不足不小于確認do/ 確認顧客購買do/ 送出貨品,請求取貨有零錢退幣無零錢do/ 請求退幣不購買顯示do/ 提示交易完成17
(六)活動圖
1.投幣的活動圖
投幣確認投幣完成2.選擇貨物的活動圖
請求選擇輸入貨物確認選擇貨物ID 3.前端的活動圖
接受貨幣顯示可購顯示面值貨物過小顯示沒有該貨物接受飲料顯示沒有零錢找零錢退貨幣 19
貨幣記錄儀的活動圖
接受從前端來的錢幣判斷錢幣發(fā)送信息給分配儀發(fā)送貨物金額給前端返回錢幣計算零錢20 4.5.分配器的活動圖
接受貨幣啟示錄儀的信息發(fā)送貨物提示沒有該貨物 21
(七)組件圖
CustomerSodaMachineFrontRegisterDispenserDB_0
(八)配置圖
Clint數(shù)據(jù)庫
(九)數(shù)據(jù)模型圖
第四篇:自動售貨機合作合同
自動售貨機合作協(xié)議書
甲 方:南京威汀貿(mào)易有限公司
乙 方:
甲、乙雙方本著平等、互惠的原則,經(jīng)過友好協(xié)商,就合作放置自動售貨機開展的服務(wù)
達成如下協(xié)議:
第一條 綜合條款
1.甲方向乙方提供自動售貨()機臺,咖啡機經(jīng)營。
2.乙方向甲方所提供場地指定在(地址)()共()處。
3.甲方所提供自動售貨機編號為共臺??Х葯C編號為共臺
4.甲方在年月日前,將自動售貨機調(diào)試后運送到位投入使用。
5.合作期間,放置于乙方處自動售貨機的所有權(quán)歸屬于甲方。
第二條 服務(wù)內(nèi)容
1.甲方保證所提供之自動售貨機內(nèi)銷售的商品符合中華人民共和國國家衛(wèi)生標(biāo)準(zhǔn)及企
業(yè)技術(shù)質(zhì)量標(biāo)準(zhǔn)。
2.甲方負責(zé)自動售貨機的日常運營工作,并承擔(dān)運營成本(商品補給、設(shè)備保養(yǎng)、清
潔及日常維修)等費用。
3.甲方工作人員進入乙方區(qū)域,服從乙方負責(zé)人的管理。
4.乙方如因特殊情況需要移動自動售貨機位置,必須事先通知甲方,由甲方工作人員
在3個工作日內(nèi)遷移設(shè)備。
5.乙方對自動售貨機協(xié)助保管,發(fā)現(xiàn)設(shè)備故障或消費者投訴應(yīng)及時通知甲方,甲方應(yīng)
及時處理解決,設(shè)400,000,2991投訴專線,遇卡貨卡幣投訴立即全額理賠并免費奉送所購商品。
第三條 協(xié)議條件、期限
1.本協(xié)議自簽定之日起即刻生效,協(xié)議期限以一年為準(zhǔn),協(xié)議期滿,如雙方無異議,本協(xié)議自動延續(xù)至下一年同月日。
2.協(xié)議期內(nèi)甲方按裝置自動售貨機前雙方商定的費用元,付給乙方,一季度
結(jié)算一次。
第四條 協(xié)議解除
1.如果乙方場地另有用途需提前15日通知甲方撤走.2.如自動售貨機持續(xù)銷售狀況不佳,甲方提前10天告知乙方,在結(jié)算清相關(guān)費用后,解除協(xié)議。
其他約定:。
第五條本協(xié)議一式二份,雙方各執(zhí)一份,具有同等法律效力。
甲方蓋章:南京威汀貿(mào)易有限公司
代表簽字:
代表簽字:乙方蓋章:聯(lián)系電話: 025-85552178聯(lián)系電話:
地址: 地址: 南京市棲霞區(qū)金堯路19-5
日期:
第五篇:自動售貨機系統(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)前售貨機內(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)計售貨機中已有的貨款 void setcurrent_product();//把當(dāng)前選擇的商品代號置為-1 int getcurrent_product();//得到當(dāng)前選擇的商品代號 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<<“已存在該商品,與您輸入的價格不同!”< 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 << “對不起,該商品已售完!n”;return false;} } } if(i==products.size()){ cout<<“對不起,不存在該商品!”< double VendingMachine::return_yiyoucoins()//統(tǒng)計售貨機當(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)計當(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<<“暫時沒有添加商品!”< 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 << “價格: ”;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)售貨機中的貨款大于等于5000時,暫停售貨 { cout<<“對不起,現(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)//多次投幣的實現(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 << “不存在該貨幣,請重新投入: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<<“暫時沒有添加商品!”< 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(“# 歡迎使用自動售貨機 System.out.println(”# System.out.println(“# =================”);System.out.println(“=============== System.out.println();System.out.println(”編號tt“+”名稱ttt“+”價格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(“請選擇投放錢的類型 ”);System.out.println(“1 表示投放 硬幣”);System.out.println(“2 表示投放 紙幣”);System.out.println(“請輸入您選擇的錢的類型 :”); panduan pd=new panduan(); { case 1: System.out.println(“請您投入有效的面值”); if(pd.ying()) { System.out.println(“您投入的是有效地硬幣”); System.out.println(); // System.out.println(“^_^ 請選擇您所需要的物品^_^”); } else } class chanpin { { System.out.println(“您投入的不是有效地硬幣,請您重新投入”); } break; case 2 : System.out.println(“請您投入有效的面值”); if(pd.zhi()) { // } else { } break; default : System.out.println(“請您重新投入有效地貨幣”); } } System.out.println(“您投入的不是有效的紙幣,請您重新投入”);System.out.println(“您投入的是有效的紙幣”);System.out.println();System.out.println(“^_^ 請選擇您所需要的物品^_^”); } } public static void main(String args[]){ System.out.println(“請輸入您想要產(chǎn)品的編碼:”);int bianma;bianma=touqian.in();System.out.println(“請輸入您想要產(chǎn)品的數(shù)量:”);int shuliang;shuliang=touqian.in();System.out.println(“您一共要付:”);double sumjine;sumjine= xianshichanpin xscp=new xianshichanpin();xscp.show();