爱猫的狗

拥抱变化

导航

一份研究生《面向对象技术》课程的作业,有兴趣的朋友可以试试

这是西安电子科技大学研究生专业课《面向对象技术》2005年的大作业,老师是 陈平。

贴出来有兴趣的朋友可以做做,我已经用C#完成了(自动售货机也是State模式的一个比较典型的例子,而且用了Observer模式也不需要用串行方式来模拟并发的活动),不过我的程序要到这学期结束后才能贴出来,因为作业规定“若发现雷同的结果,按成绩平分的规则处理。

 

2005春上机作业

用面向对象方法和面向对象程序设计语言,实现满足下述要求的一个自动售货机仿真程序。

问题域概述

有一种自动售货机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分别留C5C10C25枚。

须仿真的活动及开发结果的行为特征

(1)  开始仿真时,应随机产生VM中三种商品的存货量(不能超过其最大容纳量)和VM中三种硬币的数量(分别不小于C5C10C25枚)。

(2)  仿真中,应随机产生前来购物的顾客,随机产生其欲购买的商品种类,随机产生顾客的投币行为(包括③描述的行为),按问题域概述给出的要求进行VM自动售货活动的仿真。

(3)  NCNFNTNLC5C10C25的值应在运行仿真程序时用命令行给出,或者在开始仿真时从界面输入。

(4)  实时显示各种商品的当前存货量。

(5)  出现情况⑤时,应显示所发的短信内容,并随机决定TMTS的值。在管理人员到达VM之前,应照常进行顾客购物的仿真。管理人员加货和取款的持续时间可忽略不计。

(6)  仿真开始后,应自动记销售流水帐。该流水帐的每一行对应着一次售货,记录着所售出的商品名称和售出时间。

(7)  仿真结束时,应自动产生销售报表。该报表应给出本次模拟过程中:每种商品的销售总量与价值合计;所有售出商品的价值总计;每种商品的库存量;模拟开始、结束时各自的库存金额;管理人员每次加货的时间、各商品加货量、取走的硬币总额。

 

注意:界面能说明问题即可,切忌把主要精力放在界面上而忽视了实质问题。

提示

可能有些同学面临的问题是如何既要计时、又要改变相关对象的状态、还要展示出当前所有对象的相关状态。实际上,完全可以用串行方式来模拟并发的活动。建议大家想象一下动画片的原理:将多个固定和静止的画面定时、按顺序地放映出来,就变成了活动的画面。所以,可以在程序中定义一个主循环,在该循环外进行必要的初始化,进入后每秒钟执行一次,以遍历方式一一激励当前已经产生的对象,由它们根据自己的当前状态和相关的状态变化规则,决定是否需要改变、改变成什么样的下状态,以及按照上述行为特征的设计展示必要的对象状态。

另外,顾客到达的概率本应服从泊松分布,但目前语言直接提供的伪随机数产生函数是服从均匀分布的,因此可以简化成均匀分布。

选作

学有余力的同学可在完成本作业的基础上,扩大自己的想象力,选作更接近实际要求的内容。例如,VM销售的商品种类与价格是在运行时设定的,而不是预先规定死的。

 

posted on 2005-05-15 09:30  anf  阅读(948)  评论(1编辑  收藏  举报