第一篇:基于自动售货机的软件工程(精)
面向对象分析实践大作业(40% 下面是自动售货机系统的需求陈述,请 你: 1.编写分析和设计报告;2.报告分需求分析、系统设计和对象设 计三部分编撰, 各部分应按相应的格式 编写,并包含用例图、顺序图、类图、业务流程图、系统结构图等;3.大作业的结构为: A 项目需求说明 B 需求分析报告 C 系统设计报告 D 对象设计报告
E 分析设计过程说明:这部分介绍分析 和设计过程中使用了什么技术 需求陈述: 自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口 中,机器检查硬币的大小、重量、厚度 及边缘类型。有效的硬币是一元币、五 角币、五分币、二分币、一分币。其他 货币被认为是假币。机器拒绝接受假币, 并将其从退币孔退出。当机器接受了有 效的硬币之后,就把硬币送入硬币储藏 器中。顾客支付的货币根据硬币的面值 进行累加。
自动售货机装有货物分配器。每个货物 分配器中包含零个或多个价格相同的货 物。顾客通过选择货物分配器来选择货 物。如果货物分配器中有货物,而且顾 客
支付的货币值不小于该货物的价格, 货物将被分配到货物传送孔送给顾客, 并将适当的零钱返还到退币孔。如果分
配器是空的,则和顾客支付的货币值相 等的硬币将被送回到退币孔。如果顾客 支付的货币值少于所选择的分配器中货 物的价格,机器将等待顾客投进更多的 货币。如果顾客决定不买所选择的货物, 他投放进的货币将从退币孔中退出。
参考资料:《软件工程》 张海藩 清华大 学出版社 2009年第一版
下面是自动售货机系统的需求陈述,试 建立它的对象模型、动态模型和功能模 型: 自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口 中,机器检查硬币的大小、重量、厚度 及边缘类型。有效的硬币是一元币、五 角币、五分币、二分币、一分币。其他 货币被认为是假币。机器拒绝接受假币, 并将其从退币孔退出。当机器接受了有 效的硬币之后,就把硬币送入硬币储藏
器中。顾客支付的货币根据硬币的面值 进行累加。
自动售货机装有货物分配器。每个货物 分配器中包含零个或多个价格相同的货 物。顾客通过选择货物分配器来选择货 物。如果货物分配器中有货物,而且顾 客支付的货币值不小于该货物的价格, 货物将被分配到货物传送孔送给顾客, 并将适当的零钱返还到退币孔。如果分 配器是空的,则和顾客支付的货币值相 等的硬币将被送回到退币孔。如果顾客 支付的货币值少于所选择的分配器中货 物的价格,机器将等待顾客投进更多的 货币。如果顾客决定不买所选择的货物, 他投放进的货币将从退币孔中退出。
参考资料:《软件工程》 张海藩 清华大 学出版社 2009年第一版 面向对象的分析
面向对象分析方法的核心思想是利用面 向对象概念和方法为软件需求构造一组 相关模型(对象模型,动态模型和功能 模型 ,来获得关于问题域的全面认识。
这三个模型从不同的角度对系统进行描 述, 其中:对象模型描述了系统静态的、结构化的数据性质;动态模型描述了系 统顺势的、行为化的控制性质;功能模 型描述了变化的系统的功能性质。这三 个模型都涉及到数据。控制和操作等共 同的概念,但每种模型描述的侧重有所 不同。它们各自以不同侧面反应系统的 实质内容,综合起来则全面反映了目标 系统的需求。
对象模型是三个模型中最关键的。它的 作用是描述系统的静态结构,包括构成 系统的类和对象、它们的属性和操作以 及它们之间的联系。UML 中类图适用于 建立对象模型,状态图适用于建立动态
模型。每个类的动态行为用一张状态图 来表示,各个类的状态图通过事件合并 起来,构成系统的动态模型。也就是说, 动态模型是基于事件共享而相互关联的 一组状态图的集合。建立对象模型大体 上按照下列顺序进行 :寻找问题域内的 对象,识别出对象间的关系、定义属性 和服务。事实上,分析工作不可能严格 按照预定顺序进行,系统的模型往往需 要反复构造多遍才能建成。注:对象硬币计算器和对象硬币检测器 可以作为对象自动售货器的一部分,它 们的属性作为自动售货器的属性。
建立动态模型
对于仅存数静态数据的系统来说,动态 模型并没有什么实际意义。然而在开发 交互式系统时,动态模型却起着很重要 的作用。如果收集输入信息是目标系统 的一项主要工作,则在开发这类应用系 统时建立正确的动态模型是至关重要 的。
建立动态模型的步骤:(1 编写典型的对话脚本;(2 从脚本中提取出事件, 联系该事 件与其目标对象;(3 组织事件的顺序和状态(采用状 态图描绘;(4 比较各个不同对象的状态图, 检 查对象之间的一致性,确保事件之间的 匹配。
功能模型
功能模型描述了系统的所有计算。8
功能模型指出发生了什么,动态模型确 定什么时候发生,而对象模型确定发生 的客体。功能模型表明一个计算如何从 输入值得到输出值,它不考虑计算的次 序。功能模型由多张数据流图组成。数 据流图用来表示从源对象到目标对象的 数据值的流向,它不包含控制信息,控 制信息在动态模型中表示,同时数据流 图也不表示对象中值的组织,值的组织 在对象模型中表示。
数据流图中包含有处理、数据流、动作 对象和数据存储对象。1.处理
数据流图中的处理用来改变数据 值。最低层处理是纯粹的函数,一张完 整的数据流图是一个高层处理。
2.数据流
数据流图中的数据流将对象的输出 与处理、处理与对象的输入、处理与处 9 理联系起来。在一个计算机中,用数据 流来表示一中间数据值,数据流不能改 变数据值。
3.动作对象
动作对象是一种主动对象,它通过 生成或者使用数据值来驱动数据流图。4.数据存储对象
数据流图中的数据存储是被动对 象,它用来存储数据。它与动作对象不 一样,数据存储本身不产生任何操作, 它只响应存储和访问的要求。
C 语言课程设计 需求分析与系统设计报告
目 录 引言.......................................................................................................13 1.1背景...............................................................................................13 1.2定义...............................................................................................13 1.3参考资料......................................................................................13 2 需求分析...............................................................................................14 2.1需求分析......................................................................................14 2.2运行环境........................................................................................4 3 系统设计.................................................................................................5 3.1功能需求描述................................................................................5 3.2软件结构........................................................................................7
3.3 程序模块划分...............................................................................8 4 组员分工及时间安排............................................................................9 4.1 组员分工.......................................................................................9 4.2 时间安排.......................................................................................9 1 引言 1.1背景
自动售货机是能根据投入的钱币自动付货的机器。自动售货机 是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。是一种全新的商业零售形式,又被称为 24小时营业的微 型超市。自动售货机能够充分补充人力资源的不足,适应消费 环境和消费模式的变化, 可以更省力, 运营时需要的资本少、面积小, 有吸引人们购买好奇心的自身性能, 可以很好地解决人工费用上升的 问题等各项优点。
1.2定义
课程设计中用到的专门术语的定义(暂定。
1.3参考资料
1.王士元.C高级实用程序设计.北京 : 清华大学出版社.1996 2.潭浩强.C语言程序设计.北京 : 清华大学出版社 , 2000 3.百度 需求分析 2.1需求分析
说明:本自动售货机图形模拟系统为模拟饮料自动售货机。(1 包含实体 1,顾客实体
2,物品管理系统实体(饮料 3,记币管理器实体 4,管理员实体 5,故障系统实体(2 关系模式
1, 顾客:投币, 选择饮料, 购买数量, 取货, 取零钱;2,物品管理系统:饮料名称,饮料价格,饮料数量,出货;3,记币管理系统:顾客投钱数,总金额 ,饮料单价, 投币金额不足,找零金额;4, 管理员:补货,查询,统计;5, 故障系统:故障显示,报警;2.2运行环境
本自动售货机图形模拟系统是对自动售货机工作行为及工作环 境的模拟实现,因此,对此系统的运行环境将是在计算机上面进行, 即在电脑上模拟实现。
根据自动售货机图形模拟系统设计环境要求,即在 DOS 环境 下,用 C 语言编译实现,使用 TC 或 BC 开发软件,因此,此模拟系 统可在绝大多数现形计算机系统上运
行,包括最常见的 windows xp 操作系统以及 windows 7 32位机上运行,但由于兼容性问题,此自 动售货机图形模拟系统在含 windows 7 64位操作系统的计算机上运 行可能出现意想不到的问题或根本不能运行,因而,不推荐在包含 64位操作系统的计算机上测试本自动售货机图形模拟系统。系统设计 3.1 功能需求描述
(1 自动售货机能销售三种饮料:罐装可乐(2元、果汁(3.5元、牛奶(4元 ,设饮料数量无限。
(2自动售货机允许投入 5角、1元硬币, 5元纸币,只找出 5角、1元硬币。(3ⅰ.当总币值等于顾客需要的饮品单价时,机器显示交易金额 并送出需要的商品;ⅱ.当总币值大于顾客需要的饮品单价时,机器显示交易金额 并除提供所需饮品外,还提供找零: A.若机内 5角硬币不足时,当投入 5元纸币购买 2元、4元或 3.5元饮料时, 2元 4元饮料卖,并正常找零, 3.5元饮料不 卖并退回 5元;B.若机内 5角、1元硬币都不足时,当投入 5元纸币购 买 2元 4元或 3.5元的饮料时,均不卖,并退回 5元;ⅲ.当总币值小于顾客需要的商品单价时,机器会退出顾客投 入的硬币,并显示投币金额不足的提示。
(4 当投入的硬币总值达到或大于饮品的最低单价时, 物品管理系 统自动接入, 并提供能够选择的饮品类型, 交易金额将输出到显示屏。
(5每次投币时间有限制,设定每次投币时间不超过 30秒,在时 间到时, 总币值不足顾客购买的饮品单价时, 自动售货机按不足钱数 处理,输出投币金额不足提示,并自动计时 10秒, 10秒内若金额还 不足,系统则自动取消交易并退还全部硬币。
(6设置取消键,当交易过程中顾客输入错误时,按下取消键系统 自动终止交易,返回到初始状态并退出全部金额。
(7当顾客完成一次购买后系统自动恢复到初始状态。
(8顾客一次只能购买一种饮品的一个,若需要更多饮品,需要重 复操作。3.2软件结构
系统流程图 3.3 程序模块划分
显示模块 外部接口 组员分工及时间安排 组员分工及时间安排 4.1 组员分工 内部商定,协调安排。4.2 时间安排 第4周 第5周 第6周 第7周 第8周 第9周 第 10 周 系统需求分析与设计报告 界面设计,算法设计 键盘、鼠标接口设计,算法设计 编码实现 编码实现 编码实现、调试 调试、验收、提交报告 20
第二篇:软件工程_自动售货机
自动售货机
信息1101 施敏宇 18号
下面是自动售货机系统的需求陈述,试建立它的对象模型、动态模型和功能模型: 自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。有效的硬币是一元币、五角币、五分币、二分币、一分币。其他货币被认为是假币。机器拒绝接受假币,并将其从退币孔退出。当机器接受了有效的硬币之后,就把硬币送入硬币储藏器中。顾客支付的货币根据硬币的面值进行累加。自动售货机装有货物分配器。每个货物分配器中包含零个或多个价格相同的货物。顾客通过选择货物分配器来选择货物。如果货物分配器中有货物,而且顾客支付的货币值不小于该货物的价格,货物将被分配到货物传送孔送给顾客,并将适当的零钱返还到退币孔。如果分配器是空的,则和顾客支付的货币值相等的硬币将被送回到退币孔。如果顾客支付的货币值少于所选择的分配器中货物的价格,机器将等待顾客投进更多的货币。如果顾客决定不买所选择的货物,他投放进的货币将从退币孔中退出。
面向对象的分析
面向对象分析方法的核心思想是利用面向对象概念和方法为软件需求构造一组相关模型(对象模型,动态模型和功能模型),来获得关于问题域的全面认识。
这三个模型从不同的角度对系统进行描述,其中:对象模型描述了系统静态的、结构化的数据性质;动态模型描述了系统顺势的、行为化的控制性质;功能模型描述了变化的系统的功能性质。这三个模型都涉及到数据。控制和操作等共同的概念,但每种模型描述的侧重有所不同。它们各自以不同侧面反应系统的实质内容,综合起来则全面反映了目标系统的需求。
对象模型是三个模型中最关键的。它的作用是描述系统的静态结构,包括构成系统的类和对象、它们的属性和操作以及它们之间的联系。UML中类图适用于建立对象模型,状态图适用于建立动态模型。每个类的动态行为用一张状态图来表示,各个类的状态图通过事件合并起来,构成系统的动态模型。也就是说,动态模型是基于事件共享而相互关联的一组状态图的集合。建立对象模型大体上按照下列顺序进行:寻找问题域内的对象,识别出对象间的关系、定义属性和服务。事实上,分析工作不可能严格按照预定顺序进行,系统的模型往往需要反复构造多遍才能建成。
注:对象硬币计算器和对象硬币检测器可以作为对象自动售货器的一部分,它们的属性作为自动售货器的属性。
建立动态模型
对于仅存数静态数据的系统来说,动态模型并没有什么实际意义。然而在开发交互式系统时,动态模型却起着很重要的作用。如果收集输入信息是目标系统的一项主要工作,则在开发这类应用系统时建立正确的动态模型是至关重要的。
建立动态模型的步骤:
(1)编写典型的对话脚本;
(2)从脚本中提取出事件,联系该事件与其目标对象;
(3)组织事件的顺序和状态(采用状态图描绘);
(4)比较各个不同对象的状态图,检查对象之间的一致性,确保事件之间的匹配。
提示投币投币购买提示是假币,退币假币检查硬币否真币存储硬币,计算货币总值确认投完硬币是请求选择货物选择货物检测货物存量无货提示无货计算比较货币总值和货物价格确认确认顾客购买小于提示货物不足,确认顾客购买不购买送出货物,请求取货不购买退币请求取退币提示显示交易完毕
功能模型
功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑计算的次序。功能模型由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。
数据流图中包含有处理、数据流、动作对象和数据存储对象。
1.处理
数据流图中的处理用来改变数据值。最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。
2.数据流
数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,用数据流来表示一中间数据值,数据流不能改变数据值。
3.动作对象
动作对象是一种主动对象,它通过生成或者使用数据值来驱动数据流图。
4.数据存储对象
数据流图中的数据存储是被动对象,它用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。
有效币特征假币退假币假币检查硬币有效币硬币送入硬币储藏器计算面值货物价格有货货币总值硬币顾客投币顾客不足等待顾客投币顾客取消购买,退币顾客判断货币是否足够足够选择货物判断分配器货物存量无货分配货物,找零货物,硬币硬币退币
第三篇:软件工程课程设计(自动售货机)
《软件工程》课程设计报告
一、问题描述
(一)关于自动售货机
自动售货机像磁卡电话、银行柜员机一样,以方便、新颖、文明、昼夜服务等特点,成为发达国家不可缺少的便民配套设施。如今的自动售货机可以为顾客提供多种服务。顾客可以根据自己的需要选择商品并投入钱币,售货机接收钱币,售出商品。
(二)自动售货机的设计
自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。有效的硬币是一元币、五角币、一角币、五分币和一分币。其它货币都被认为是假币。机器拒收假币,并将其从退币孔退出。当机器接收了有效的硬币之后,将之送入硬币储藏器。顾客支付的货币根据硬币的面值进行累加。
自动售货机装有货物分配器,每个分配器中包含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数据库
(九)数据模型图
第四篇:自动售货机合作合同
自动售货机合作协议书
甲 方:南京威汀贸易有限公司
乙 方:
甲、乙双方本着平等、互惠的原则,经过友好协商,就合作放置自动售货机开展的服务
达成如下协议:
第一条 综合条款
1.甲方向乙方提供自动售货()机台,咖啡机经营。
2.乙方向甲方所提供场地指定在(地址)()共()处。
3.甲方所提供自动售货机编号为共台。咖啡机编号为共台
4.甲方在年月日前,将自动售货机调试后运送到位投入使用。
5.合作期间,放置于乙方处自动售货机的所有权归属于甲方。
第二条 服务内容
1.甲方保证所提供之自动售货机内销售的商品符合中华人民共和国国家卫生标准及企
业技术质量标准。
2.甲方负责自动售货机的日常运营工作,并承担运营成本(商品补给、设备保养、清
洁及日常维修)等费用。
3.甲方工作人员进入乙方区域,服从乙方负责人的管理。
4.乙方如因特殊情况需要移动自动售货机位置,必须事先通知甲方,由甲方工作人员
在3个工作日内迁移设备。
5.乙方对自动售货机协助保管,发现设备故障或消费者投诉应及时通知甲方,甲方应
及时处理解决,设400,000,2991投诉专线,遇卡货卡币投诉立即全额理赔并免费奉送所购商品。
第三条 协议条件、期限
1.本协议自签定之日起即刻生效,协议期限以一年为准,协议期满,如双方无异议,本协议自动延续至下一年同月日。
2.协议期内甲方按装置自动售货机前双方商定的费用元,付给乙方,一季度
结算一次。
第四条 协议解除
1.如果乙方场地另有用途需提前15日通知甲方撤走.2.如自动售货机持续销售状况不佳,甲方提前10天告知乙方,在结算清相关费用后,解除协议。
其他约定:。
第五条本协议一式二份,双方各执一份,具有同等法律效力。
甲方盖章:南京威汀贸易有限公司
代表签字:
代表签字:乙方盖章:联系电话: 025-85552178联系电话:
地址: 地址: 南京市栖霞区金尧路19-5
日期:
第五篇:自动售货机系统程序
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();