- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自动售货机程序.doc
自动售货机程序
姓名:许发扬
学号
班级:010711
完成时间:2008年11月21日
指导老师:刘彦明
一·项目背景
1、项目目标:
① 有一种自动售货机VM,可售三种商品:可乐(每听$0.25),咖啡(每听$0.30),餐巾纸(每包$0.05)。每种商品的示意图形下方都有一个按钮。一台VM中最多能够容纳NC听可乐、NF听咖啡、NT包餐巾纸。
② 顾客使用VM购买商品时,先从投币口投入硬币(共有三种硬币:$0.05;$0.10;$0.25),在投入的硬币总值达到或超过其欲购商品之价格后,再按下对应商品的按钮,VM即从出货口自动吐出一件商品,并从找币口找零。
③ 如果顾客在其投入的硬币总值没有达到其欲购商品之价格时就按下了对应商品的按钮,或者最近一次投币30秒后既不继续投币,也不按下商品按钮,VM均从找币口吐出与该顾客已投入的硬币总值等值的硬币,但不吐出商品。
④ 如果顾客欲购之商品已经售完,则在顾客按下该商品的按钮后,VM从找币口吐出与该顾客已投入的硬币总值等值的硬币。
⑤ 当某种商品还剩NL听/包时,VM即自动发出短信,将VM的代号和缺货的商品名称通知管理人员。管理人员将在时间TM后收到短信,再用时间TS到达VM,并使VM的所有商品存货都达到最大容纳量,取走VM中的硬币,并留有找零的硬币:$0.05、$0.10、$0.25分别留C5、C10、C25枚。
2、运行环境:
Miscrosoft Visual C++ 6.0
二·项目实现
1、算法:
根据项目要求,需要解决的基本问题有:
---对于初始货物的定义:
解决方法---定义一个基类-Product。
---定义三个不同的继承类-(Cola,Caffee,Napkin),分别对应三种不同种类的商品。一共定义三类共六种商品。此处思路比较清晰,没有什么大的问题,写代码的时候也没有什么障碍。
---对于向顾客展示商品:
解决方法---在每个继承类中定义了()函数。用来向顾客显示出商品的名称和单价。开始觉得显示售货机的剩余存货量比较繁琐,不太容易实现,所以没有将剩余存货量提示的功能做进程序。
---对于让顾客选择商品:
解决方法---先定义一个选择类-Choosen。在Choosen里面定义6个对象,分别对应售货机里的6种商品。考虑用一个循环控制来完成顾客对商品的选择,所以用了一个while()函数配合switch()函数来实现所需的功能。最后根据顾客选择的商品清单计算出总价并显示出来。
---对于顾客的投币和找零
解决方法---用Choosen类的Showme()函数实现分派商品。
程序将提示顾客投入货币,当投完一个货币后,系统会判断顾客投入的金额是否足以支付他要购买的商品。如果足够,则执行找零计算的步骤,计算出总共需要给顾客分别找0.05、0.1、0.25的硬币各多少,并显示在屏幕上。如果顾客投入的第一个硬币不足以支付当前的交易,系统将提示顾客是否再次投币,如此循环直到投币的总金额足以支付当前的交易。如果顾客不再投币,则本次交易结束,不退还硬币!(本来应该设为退还以前投入的硬币,但没想出好的方法来实现,所以不太人性化是本程序的一个遗憾...)。此为了方便实用了一个不太受欢迎的goto语句跳到最后的结束输出语句来显示金额不足时的界面。整个交易结束后,售货机向顾客显示找零的硬币数和欢迎光临界面。
三·源代码
略......(详见源代码文件!)
四·程序分析
值得注意的是,个人认为已经完成了应有的基本功能。有些功能实在没想到好的解决方法。一开始想尽量避免使用类来实现过程,但是为了锻炼面向对象的思想,以及为了以后扩展修改比较方便,还是使用了类来实现功能。
程序的结构看来还是比较简单的,无非就是类定义,主函数。主函数中分成几个部分,分别解决个具体问题。
一开始想用几个函数来代替所有过程,一个函数实现一个任务,结果在类定义处发生问题,就只好全部写进主函数里,使得主函数太长。在今后应该尽量使程序模块化,方便阅读和修改。
这个程序刚开始写的时候在循环处理上出现了很多问题,有一种无从下手的感觉,原本已经写了200多行,结果又因为结构上的问题删去了80行左右,最后完成时感觉功能基本上已经实现了,只不过有的地方很欠缺人性化,看来还是经验不足。第一是计算找零的时候算法出了问题,计算结果和实际结果不相符。因为硬币是小数货币,所以算的时候没考虑变量类型和相互赋值的问题,而且算法本身也有问题。经过查阅资料解决了这个问题。后面调试的时候又发现了一个很重要的缺陷:只能投一次硬币,不能连续投币。如果第一次投入的硬币金额不足以支付当前的交易,就直接显示金额不够而交易失败。
文档评论(0)