第一篇:自动售货机测试用例
题目:有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。1.分析这一段说明,列出原因和结果 原因:
1.售货机有零钱找 2.投入1元硬币 3.投入5角硬币
4.押下橙汁按钮 5.押下啤酒按钮
结果:
21.售货机〖零钱找完〗灯亮
22.退还1元硬币
23.退还5角硬币
24.送出橙汁饮料 25.送出啤酒饮料 2.画出因果图
如图所示。所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。中间结点:
11.投入1元硬币且押下饮料按钮 12.押下〖橙汁〗或〖啤酒〗的按钮 13.应当找5角零钱并且售货机有零钱找 14.钱已付清
3.转换成判定表:
4.设计测试用例
1)在售货机有零钱找的情况下,投入1元硬币,押下橙汁按钮,找回5角硬币并送出橙汁饮料。
2)在售货机有零钱找的情况下,投入1元硬币,押下啤酒按钮,找回5角硬币并送出啤酒饮料。
3)在售货机有零钱找的情况下,投入1元硬币,系统不做任何处理。
4)在售货机有零钱找的情况下,投入5角硬币,押下橙汁按钮,送出橙汁饮料。5)在售货机有零钱找的情况下,投入5角硬币,押下啤酒按钮,送出啤酒饮料。6)在售货机有零钱找的情况下,投入5角硬币,系统不做任何处理。7)在售货机有零钱找的情况下,押下橙汁按钮,系统不做任何处理。8)在售货机有零钱找的情况下,押下啤酒按钮,系统不做任何处理。
9)在售货机没有零钱找的情况下,投入1元硬币,押下橙汁按钮,售货机“零钱找完”灯亮,并退还1元硬币。
10)在售货机没有零钱找的情况下,投入1元硬币,押下啤酒按钮,售货机“零钱找完”灯亮,并退还1元硬币。
11)在售货机没有零钱找的情况下,投入1元硬币,售货机“零钱找完”灯亮。
12)在售货机没有零钱找的情况下,投入5角硬币,押下橙汁按钮,售货机“零钱找完”灯亮,并送出橙汁饮料。
13)在售货机没有零钱找的情况下,投入5角硬币,押下啤酒按钮,售货机“零钱找完”灯亮,并送出啤酒饮料。
14)在售货机没有零钱找的情况下,投入5角硬币,售货机“零钱找完”灯亮。15)在售货机没有零钱找的情况下,押下橙汁按钮,售货机“零钱找完”灯亮。16)在售货机没有零钱找的情况下,押下啤酒按钮,售货机“零钱找完”灯亮。
第二篇:软件工程_自动售货机
自动售货机
信息1101 施敏宇 18号
下面是自动售货机系统的需求陈述,试建立它的对象模型、动态模型和功能模型: 自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。有效的硬币是一元币、五角币、五分币、二分币、一分币。其他货币被认为是假币。机器拒绝接受假币,并将其从退币孔退出。当机器接受了有效的硬币之后,就把硬币送入硬币储藏器中。顾客支付的货币根据硬币的面值进行累加。自动售货机装有货物分配器。每个货物分配器中包含零个或多个价格相同的货物。顾客通过选择货物分配器来选择货物。如果货物分配器中有货物,而且顾客支付的货币值不小于该货物的价格,货物将被分配到货物传送孔送给顾客,并将适当的零钱返还到退币孔。如果分配器是空的,则和顾客支付的货币值相等的硬币将被送回到退币孔。如果顾客支付的货币值少于所选择的分配器中货物的价格,机器将等待顾客投进更多的货币。如果顾客决定不买所选择的货物,他投放进的货币将从退币孔中退出。
面向对象的分析
面向对象分析方法的核心思想是利用面向对象概念和方法为软件需求构造一组相关模型(对象模型,动态模型和功能模型),来获得关于问题域的全面认识。
这三个模型从不同的角度对系统进行描述,其中:对象模型描述了系统静态的、结构化的数据性质;动态模型描述了系统顺势的、行为化的控制性质;功能模型描述了变化的系统的功能性质。这三个模型都涉及到数据。控制和操作等共同的概念,但每种模型描述的侧重有所不同。它们各自以不同侧面反应系统的实质内容,综合起来则全面反映了目标系统的需求。
对象模型是三个模型中最关键的。它的作用是描述系统的静态结构,包括构成系统的类和对象、它们的属性和操作以及它们之间的联系。UML中类图适用于建立对象模型,状态图适用于建立动态模型。每个类的动态行为用一张状态图来表示,各个类的状态图通过事件合并起来,构成系统的动态模型。也就是说,动态模型是基于事件共享而相互关联的一组状态图的集合。建立对象模型大体上按照下列顺序进行:寻找问题域内的对象,识别出对象间的关系、定义属性和服务。事实上,分析工作不可能严格按照预定顺序进行,系统的模型往往需要反复构造多遍才能建成。
注:对象硬币计算器和对象硬币检测器可以作为对象自动售货器的一部分,它们的属性作为自动售货器的属性。
建立动态模型
对于仅存数静态数据的系统来说,动态模型并没有什么实际意义。然而在开发交互式系统时,动态模型却起着很重要的作用。如果收集输入信息是目标系统的一项主要工作,则在开发这类应用系统时建立正确的动态模型是至关重要的。
建立动态模型的步骤:
(1)编写典型的对话脚本;
(2)从脚本中提取出事件,联系该事件与其目标对象;
(3)组织事件的顺序和状态(采用状态图描绘);
(4)比较各个不同对象的状态图,检查对象之间的一致性,确保事件之间的匹配。
提示投币投币购买提示是假币,退币假币检查硬币否真币存储硬币,计算货币总值确认投完硬币是请求选择货物选择货物检测货物存量无货提示无货计算比较货币总值和货物价格确认确认顾客购买小于提示货物不足,确认顾客购买不购买送出货物,请求取货不购买退币请求取退币提示显示交易完毕
功能模型
功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑计算的次序。功能模型由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。
数据流图中包含有处理、数据流、动作对象和数据存储对象。
1.处理
数据流图中的处理用来改变数据值。最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。
2.数据流
数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,用数据流来表示一中间数据值,数据流不能改变数据值。
3.动作对象
动作对象是一种主动对象,它通过生成或者使用数据值来驱动数据流图。
4.数据存储对象
数据流图中的数据存储是被动对象,它用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。
有效币特征假币退假币假币检查硬币有效币硬币送入硬币储藏器计算面值货物价格有货货币总值硬币顾客投币顾客不足等待顾客投币顾客取消购买,退币顾客判断货币是否足够足够选择货物判断分配器货物存量无货分配货物,找零货物,硬币硬币退币
第三篇:自动售货机合作合同
自动售货机合作协议书
甲 方:南京威汀贸易有限公司
乙 方:
甲、乙双方本着平等、互惠的原则,经过友好协商,就合作放置自动售货机开展的服务
达成如下协议:
第一条 综合条款
1.甲方向乙方提供自动售货()机台,咖啡机经营。
2.乙方向甲方所提供场地指定在(地址)()共()处。
3.甲方所提供自动售货机编号为共台。咖啡机编号为共台
4.甲方在年月日前,将自动售货机调试后运送到位投入使用。
5.合作期间,放置于乙方处自动售货机的所有权归属于甲方。
第二条 服务内容
1.甲方保证所提供之自动售货机内销售的商品符合中华人民共和国国家卫生标准及企
业技术质量标准。
2.甲方负责自动售货机的日常运营工作,并承担运营成本(商品补给、设备保养、清
洁及日常维修)等费用。
3.甲方工作人员进入乙方区域,服从乙方负责人的管理。
4.乙方如因特殊情况需要移动自动售货机位置,必须事先通知甲方,由甲方工作人员
在3个工作日内迁移设备。
5.乙方对自动售货机协助保管,发现设备故障或消费者投诉应及时通知甲方,甲方应
及时处理解决,设400,000,2991投诉专线,遇卡货卡币投诉立即全额理赔并免费奉送所购商品。
第三条 协议条件、期限
1.本协议自签定之日起即刻生效,协议期限以一年为准,协议期满,如双方无异议,本协议自动延续至下一年同月日。
2.协议期内甲方按装置自动售货机前双方商定的费用元,付给乙方,一季度
结算一次。
第四条 协议解除
1.如果乙方场地另有用途需提前15日通知甲方撤走.2.如自动售货机持续销售状况不佳,甲方提前10天告知乙方,在结算清相关费用后,解除协议。
其他约定:。
第五条本协议一式二份,双方各执一份,具有同等法律效力。
甲方盖章:南京威汀贸易有限公司
代表签字:
代表签字:乙方盖章:联系电话: 025-85552178联系电话:
地址: 地址: 南京市栖霞区金尧路19-5
日期:
第四篇:软件工程课程设计(自动售货机)
《软件工程》课程设计报告
一、问题描述
(一)关于自动售货机
自动售货机像磁卡电话、银行柜员机一样,以方便、新颖、文明、昼夜服务等特点,成为发达国家不可缺少的便民配套设施。如今的自动售货机可以为顾客提供多种服务。顾客可以根据自己的需要选择商品并投入钱币,售货机接收钱币,售出商品。
(二)自动售货机的设计
自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。有效的硬币是一元币、五角币、一角币、五分币和一分币。其它货币都被认为是假币。机器拒收假币,并将其从退币孔退出。当机器接收了有效的硬币之后,将之送入硬币储藏器。顾客支付的货币根据硬币的面值进行累加。
自动售货机装有货物分配器,每个分配器中包含0 个或多个价格相同的货物。顾客通过选择货物分配器来选择货物。如果有货,且顾客支付的货币值不小于该货物的价格,货物将被分配到货物传送孔送给顾客,并将找零返回到退币孔。如果无货,则和顾客支付的货币值相等的硬币将被送到退币孔。如果顾客支付的货币值小于所选货物的价格,机器将等待顾客投进更多的货币。如果顾客决定不买所选择的货物,他投放进的硬币将从退币孔中退出。
二、需求分析
(一)UML自动售货机系统功能需求:
自动售货机系统是一种无一元等3个硬币投币口。顾客确认购货后,售货机可根据硬币的面值进行累加。
自动售货机装有货物分配器。每个货物分配器中包含零个或多个价格相同的货物。顾客通过 1 选择货物分配器来选择货物。如果货物分配器中有货物,而且顾客支付的货币值不小于该货物的价格,货物将被分配到货物传送孔送给顾客,并将适当的零钱返回到退币孔。如果分配器是空的,则和顾客支付的货币值相等的硬币将被送加到退币孔。如果顾客支付的货币值少于所选择的分配器中的货物的价格,机器将等待顾客投进更多的货币。如果顾客决定不买所选择的货物,将所投硬币从退币孔退出。
(二)UML自动售货机系统控制要求:
根据售货机自动控制系统的流程可以知道自动售货机的主要系统包括:计币系统、比较系统、选择系统、饮料供应系统、退币系统和报警系统。
1.计币系统:
当有顾额色买饮料时,投入的钱币经过感应器,感应器记忆投币的个数关且传送到检测系统(即电子天平)和计币系统。只有当电子天平测量的重量少于误差值时,允许计币系统进行叠加钱币,叠加的钱币数据存放在数据寄存器中。如果不正确时,认为是假币。既定出投币,既定出系统,等待新顾客。
2.比较系统:
投入完毕后,系统会把钱币数据和可以购买饮料的价格进行区间比较,当投入的钱币小于2元时,指示灯亮,显示投入的钱币不足。此时可以再投币或选择退币。当投稿的钱币在2~3元之间时,汔水选择指示灯长亮。当大于3元时,汔水和咖啡的指示灯同时长亮。此时可以选择饮料或选择退币。
3.选择系统:
比较电路完成后选择电路指示灯是长亮的,当按下汽水或咖啡选择时,相应的选择指示灯由长亮转为以1秒为周期闪烁。当饮料供应完毕时,闪烁同时停止。
4.饮料供应系统:
当按下选择按钮时,相应的电磁阀(Y4或Y6)和电机(Y3或Y5)同时启动。在饮料输出的同时,减去相应的购买钱币数。当饮料输出达到8秒时,电磁阀首先关断,小电机继续工作0.5秒后停机。此小电机的作用是:在输出饮料时,加快输出。在电磁阀关断时,给电磁阀加压作用,加速电磁阀的关断。(注:由于该售货机是长期使用,电磁阀使用过多时,返回弹力减少,不能完全关断会出现漏饮料的现象。此时电机Y3和Y5延长工作0.5秒起到电磁阀加压的作用,使电磁阀可以完好的关断。)
5.退币系统:
当顾客购完饮料后,多余的钱币只要按下退币按钮。系统就会把数据寄存器D2内的钱币数首先除以10得到整数部分,是1元钱需要退回的数量,存放在D10里。余数存放在D11里。再用D11除以5得到的整数部分是5角钱需要退回的数量,存放在D12里。余数存放在D13里。最后D13里面的数值,就是1角钱需要退回的数量。在选择退币的同时启动3个退币电机。3个感应器开始计数,当感应器记录的个数等于数据寄存器退回的币数时,退币电机停止运转。
6.报警系统:
报警系统如果是非故障报警,只要通过网络通知送液车或者送币车即可。但是如果是故障报警则需要通知维修人员到现声进行维修。同时停止服务,避免造成顾客的损失。
(三)业务流程图
钱币记录仪对钱币前端接受顾客投的进行识别币判断退出钱币发送信息到分配器判断没有货物时发送信息到前端发送货物4
(四)数据流程图
钱币钱币记录仪对分配器反钱币钱币进行计算与货物价格进货物发放行比较取走零钱与购买的货物
三、各种UML图型及其分析
(一)用例图
1.顾客的用例图
inputCoinchooseSodaCustomer
2.自动售货机的用例图
RegisterDispenserFrontSodaMachine
(二)类图
(三)序列图
理想状态(不找零钱)的序列图
: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
(四)协作图
1.理想状态的协作图
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.没有货物的协作图
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.需找零钱的协作图
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.没有零钱找给顾客的协作图
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()
完整的协作图
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.(五)状态图
提示投币do/ 请求投币do/ 提示是假币假币do/ 检查硬币真币否购买do/ 存储硬币,计算货币总值do/ 确认投完硬币有do/ 请求选择商品选择货品do/ 提示无货无货do/ 检测货品存量有货计算小于do/ 比较货币总值和货物价值do/ 提示货币不足不小于确认do/ 确认顾客购买do/ 送出货品,请求取货有零钱退币无零钱do/ 请求退币不购买显示do/ 提示交易完成17
(六)活动图
1.投币的活动图
投币确认投币完成2.选择货物的活动图
请求选择输入货物确认选择货物ID 3.前端的活动图
接受货币显示可购显示面值货物过小显示没有该货物接受饮料显示没有零钱找零钱退货币 19
货币记录仪的活动图
接受从前端来的钱币判断钱币发送信息给分配仪发送货物金额给前端返回钱币计算零钱20 4.5.分配器的活动图
接受货币启示录仪的信息发送货物提示没有该货物 21
(七)组件图
CustomerSodaMachineFrontRegisterDispenserDB_0
(八)配置图
Clint数据库
(九)数据模型图
第五篇:自动售货机系统程序
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();//查询当前售货机内的商品
/** 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();//统计售货机中已有的货款 void setcurrent_product();//把当前选择的商品代号置为-1 int getcurrent_product();//得到当前选择的商品代号 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()//统计售货机当前的金钱总额 { 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()//统计当前投入的金钱总额 { 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函数: #include void main(){ vector VendingMachine machine;bool more = true;machine.chaxun_product();while(more){ cout << “a)添加商品 x)查询商品 s)选择商品 p)投币 c)取消 e)查询当前金额 r)取款 q)退出: ”;string command;cin>>command;if(command == “a”){ cout << “商品名: ”;string name;cin>>name; cout << “价格: ”;double price;cin >> price;cout << “数量: ”;int quantity;cin >> quantity;machine.add_product(Product(name, price, quantity));} else if(command == “s”){ double total1; total1=machine.return_yiyoucoins(); if(total1>=5000)//当售货机中的货款大于等于5000时,暂停售货 { cout<<“对不起,现在暂停售货!”< } else { machine.setcurrent_product();cout << “商品名: ”;string name;cin>>name;machine.select_product(name); } } else if(command == “p”){ if(machine.getcurrent_product()!=-1)//如果当前已选择商品,才可以投币 { bool panduan=false;while(!panduan)//多次投币的实现 { cout << “所投钱币名称(以 # 结束投币过程):”;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“+”数量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(“请输入您想要产品的编码:”);int bianma;bianma=touqian.in();System.out.println(“请输入您想要产品的数量:”);int shuliang;shuliang=touqian.in();System.out.println(“您一共要付:”);double sumjine;sumjine= xianshichanpin xscp=new xianshichanpin();xscp.show();