题目设计一自动售货机.docx
- 文档编号:11016293
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:12
- 大小:120.66KB
题目设计一自动售货机.docx
《题目设计一自动售货机.docx》由会员分享,可在线阅读,更多相关《题目设计一自动售货机.docx(12页珍藏版)》请在冰点文库上搜索。
题目设计一自动售货机
题目设计一自动售货机
题目设计-自动售货机
姓名***
学号***
班级***
完成时间2013年5月5日
目录
1.1自动售货机设计思路3
1.2类图4
1.3设计模式5
1.4程序的实现6
1.5程序运行截图12
1.6参考文献14
自动售货机设计思路
自动售货机系统是一种无人售货系统。
售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。
有效的硬币是一元币、五角币、五分币、二分币、一分币。
其他货币被认为是假币。
机器拒绝接受假币,
并将其从退币孔退出。
当机器接受了有效的硬币之后,就把硬币送入硬币储藏器中。
顾客支付的货币根据硬币的面值进行累加。
自动售货机装有货物分配器。
每个货物分配器中包含零个或多个价格相同的货物。
顾客通过选择货物分配器来选择货物。
如果货物分配器中有货物,而且顾客支付的货币值不小于该货物的价格,货物将被分配到货物传送孔送给顾客,并将适当的零钱返还到退币孔。
如果分配器是空的,则和顾客支付的货币值相等的硬币将被送回到退币孔。
如果顾客支付的货币值少于所选择的分配器中货物的价格,机器将等待顾客投进更多的货币。
如果顾客决定不买所选择的货物,他投放进的货币将从退币孔中退出。
类图
设计模式
应用工厂方法设计:
定义一个用于创建对象的接口,让子类决定实例化哪一个类.
应用建造模式:
将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
功能模型
功能模型描述了系统的所有计算。
功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。
功能模型表明一个计算如何从输入值得到输出值,它不考虑计算的次序。
功能模型由多张数据流图组成。
数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。
数据流图中包含有处理、数据流、动作对象和数据存储对象。
1.处理
数据流图中的处理用来改变数据值。
最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。
2.数据流
数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。
在一个计算机中,用数据流来表示一中间数据值,数据流不能改变数据值。
3.动作对象
动作对象是一种主动对象,它通过生成或者使用数据值来驱动数据流图。
4.数据存储对象
数据流图中的数据存储是被动对象,它用来存储数据。
它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。
程序的实现
Calculate.Java类
packageLevelSecond;
importjava.util.Scanner;
publicclassCalculate{
intbackPay;//定义找零
inttotalPay;//定义总金额
publicvoidCal(intPrice)
{
Scannerin=newScanner(System.in);
System.out.println("请投币...");//投入硬币
totalPay=in.nextInt();
BaseCalculatebc=newBaseCalculate();//调用BaseCalculate的计算方法
if(totalPay==Price)
{
bc.Equal();//调用BaseCalculate中的Equal方法
}
elseif(totalPay>Price)
{
bc.More(Price,backPay,totalPay);//调用BaseCalculate中的More方法
}
else
{
for(inti=0;totalPay { Scannerinput=newScanner(System.in); System.out.println("请继续投币..."); inteveryPay=input.nextInt(); totalPay+=everyPay; } if(totalPay==Price)//当再次投币出现投币金额=价格时,调用BaseCalculate中的Equal方法 { bc.Equal(); } else { bc.More(Price,backPay,totalPay);//当再次投币出现投币金额>价格时,调用BaseCalculate中的More方法 } } } } Construct.java类 packageLevelSecond; publicclassConstruct{ publicvoiddrinksType()//添加说明为了使用方便单独定义 { System.out.println("1.可乐(3元)"); System.out.println("2.橙汁(8元)"); System.out.println("3.绿茶(4元)"); } publicvoidmoneyType()//添加说明为了使用方便单独定义 { System.out.println("1: 10元"); System.out.println("2: 50元"); System.out.println("3: 100元"); System.out.println("4: 500元"); System.out.println("5: 100元"); } } BaseCalculate.java类 packageLevelSecond; publicclassBaseCalculate{ publicvoidEqual()//当投入硬币和价格相同时 { System.out.println("找零为0元"); System.out.println("5元: "+0+"枚"); System.out.println("10元: "+0+"枚"); System.out.println("50元: "+0+"枚"); System.out.println("10元: "+0+"枚"); } publicvoidMore(intPrice,intbackPay,inttotalPay)//当投入硬币总数大于价格总数时 { backPay=totalPay-Price;//找零金额=总金额-饮品价格 intfiveHp=backPay/500;//求出找零中的500元有几张 intfiveHRemain=backPay-fiveHp*500; intoneHp=fiveHRemain/100;//求出找零中的100有几张 intoneHRemain=fiveHRemain-oneHp*100; intfiftyp=oneHRemain/50;//求出找零中的50有几张 intfiftyRemain=oneHRemain-fiftyp*50; inttenp=fiftyRemain/10;//求出找零中的10有几张 System.out.println("找零为: "+backPay+"分别为: "); System.out.println("5元: "+fiveHp+"枚"); System.out.println("10元: "+oneHp+"枚"); System.out.println("50元: "+fiftyp+"枚"); System.out.println("10元: "+tenp+"枚"); } } Product.java类 packageLevelSecond; publicclassProduct{ publicvoidPro(intId) { Constructcons=newConstruct(); Calculatecal=newCalculate(); switch(Id) { case1: System.out.println("您选择的是可乐,请按一下规定现金付款。 ");//投入金额的面值的提示 cons.moneyType();//告知用户选用的饮品 cal.Cal(120);//调用Calculate的计算方法Cal break; case2: System.out.println("您选择的是橙汁,请按一下规定现金付款。 "); cons.moneyType(); cal.Cal(80); break; case3: System.out.println("您选择的是绿茶,请按一下规定现金付款。 "); cons.moneyType(); cal.Cal(80); break; default: System.out.println("错误"); break; } } } AutoSaleMachine.java类 packageLevelSecond; importjava.util.Scanner; publicclassAutoSaleMachine{ publicstaticvoidmain(String[]args){ try{ Constructcons=newConstruct();//调用Construct对象 cons.drinksType(); System.out.println("请选择饮品: "); Scannerin=newScanner(System.in);//系统输入所选择的饮品号码 intId=in.nextInt(); Productp=newProduct();//调用Product中的Pro方法得出用户所选的饮品 p.Pro(Id); }catch(Exceptione){ System.out.println("输入无效");//控制用户选择饮品 e.printStackTrace(); } } } 程序运行截图 参考文献 [1]北京大学在线评测系统, [2]乌拉尔大学在线评测系统,http: //acm.timus.ru/archive.aspx [3]MicrosoftDevelopersNetwork(MSDN)Library, [4]SunDevelopersNetwork(SDN), [5]张亚飞.JSP开发王[M].电子工业出版社,2008年 [6]朱战力,沈伟.Java程序设计实用教程[M].电子工业出版社,2004年 [7]吴建,张旭东.JSP网络开发入门与实践[M].人民邮电出版社,2006年 [8]李树清.Java通用范例开发金典[M].电子工业出版社,2009年 [9]林上杰,林康司.JSP2.0技术手册[M].电子工业出版社,2004年 [10]刘长炯.MyEclipse6Java开发中文教程,2007年 [11]JeffreyRichter,WINDOWS核心编程[M].MicrosoftPress出版社,1999年 致谢 感谢老师,严谨细致、一丝不苟的作风一直是我学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计一自动售货机 设计 自动 售货