A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔玉吉 中级黑马   /  2012-3-12 16:54  /  8550 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天坐电梯时候突然想到,如何设计一个模拟电梯系统程序呢?

假如让你来设计,你会想到哪些,根据个人对面向对象思想的掌握程度自由发挥啊.不要让此贴沉了.

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 很有想象力,赞一个!

查看全部评分

7 个回复

正序浏览
自己顶一个,有没有高手给写个方案阿,静等学习
回复 使用道具 举报
本帖最后由 李晓旭 于 2012-3-13 01:19 编辑

第一次做实例分析,说的不好,别砸我哈
把实例具体化一下:
1栋写字楼 10楼层 3部电梯 很多人(乘坐电梯的)
10层楼,每层楼都有3个电梯口

电梯的基本功能:
电梯开关门状态(成员变量)
电梯当前楼层号(成员变量)
电梯中1-10个楼层按钮(成员变量)
电梯有上楼,下楼两个运行方向(成员变量)

N楼层3部电梯外的运行方向(ArrayList为空:无人,N1:等待上楼,N2:等待下楼)(静态变量)

电梯的初始状态,楼层为-1,电梯门关闭(构造方法)

电梯开关门(方法)
电梯上下楼运行,停止(方法)
电梯关门后运行(方法)
电梯停止后开门(方法)
开门状态15秒后,关门(方法)
开门状态电梯中按钮被操作或者静态List有数据,3秒后关门,电梯运行(方法)
电梯中按钮为空,List为空,关门,回到-1层(方法)

系统运行时,创建3个电梯对象,楼层的类我不知道需要不需要设计,感觉要是综合楼宇系统,肯定也要封装成类的吧
光是想想觉得不难,但是一写才发现,各种问题,所以代码我就不写了把,哈哈,写出来也运行不了!

回复 使用道具 举报
本帖最后由 OMG 于 2012-3-13 01:12 编辑

1,以楼层为变量F,该变量随着电梯移动的变化而变化(也就是我们在电梯中看到的滚动数字);
2,按键:每个按键都是一个线程,按下是启动线程,线程启动后会,会判断变量F的值。
3,开关门:开关门就是执行语句,当变量F等于楼层的数值时,电梯停止并开门;
4,自动关门:开门之后,关门之前,这个时间间隔用Sleep(long time)实现;
5,门关闭后x秒后如果开门键被按下,那么门会重新打开,sleep后再关;
6,上、下和停由1,0和-1三个值来控制;
7,当超载时,电梯会强行固定0值,并启动一个方法,执行超载提示响声。
8,当上升后,电梯会在达到停靠楼层前x层开始减速;
9,如果电梯停靠待命,这是楼上楼下都有人按建,那么电梯该上还是下呢?这时又要判断了。如果大家按的都是下楼,那么应该先去接楼上的,下来再顺接楼下的人。这需要判断方向变量,还有楼层变量,综合判断,再决定往上还是往下。

回复 使用道具 举报
声明一个电梯,封装其所隐藏的方法。然后留出接口提供上下和开门关门的功能,当一个人进来,开始初始化电梯,然后调用其对应的功能。实现人的上下。然后关闭停止在哪里,等待下一个人的调用
回复 使用道具 举报
马胜平 发表于 2012-3-12 23:49
分析了这个程序,首先分析下现实中电梯的上下楼情况,电梯相应命令的方式很简单是谁先按下就先响应谁的命令 ...

操作系统----电梯调度!可以解释这个不  还有应该在里面加入一个报警功能!当他响应但未执行时应该报警!执行但未有这个命令时也应该报警
回复 使用道具 举报
本帖最后由 马胜平 于 2012-3-13 00:01 编辑

分析了这个程序,首先分析下现实中电梯的上下楼情况,电梯相应命令的方式很简单是谁先按下就先响应谁的命令,如果仅仅这么考虑就简单了,我们可定义一个队列,在定一个任务(附着在线程上)模拟人随机按不通楼层的按钮并把每个人按的按钮命令(这里可把按的数字放到队列)放到队列中,然后然电梯去从这个队列中去命令,取到就执行,执行完后就再取一直到队列为空为止。但是这里还要考虑一个情况实际中的电梯有个这样的情况比如电梯在一楼,8楼要下楼先按,这时候电梯准备去响应这个命令;此时6楼有人要下楼按了。这时候电梯会干嘛?会到6楼停一下开门再到8楼,不要被这个动作迷惑了他还是先去响应8楼在来到响应6楼命令(只是中间看到6楼灯开的开了下门并未执行命令如果6楼是下楼进去按了下1电梯不会马上下它还是先到8楼然后下楼,没破坏队列规则)如果考虑开门的动作就复杂了点。现实的电梯是这样的吧我感觉是的!你没注意没,我平时没注意。但我是按照我这个逻辑写了一个模拟程序。如果实际中不是这样的就的另考虑了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
我觉首先要分析下,我们能用到的对象有哪些;

电梯应该算一个吧,他应该有开门和关门的方法。或者门也算一个对象,电梯去调用门的开和关的方法?

还得有个随机产生数字的对像,模拟人在按电梯。

暂时想到这些
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马