永发信息网

模拟电梯工作过程的图形演示系统

答案:1  悬赏:50  手机版
解决时间 2021-03-19 14:19
设计一个模拟电梯工作过程的图形演示系统,没有太多要求。就是在c++代码,可实现的不是伪码。为减少难度,可以是任何层楼的,大于等于2层。 谢谢大家,帮忙出个主意,在一月十号左右截止。谢谢各位大哥大姐大嫂,英雄豪杰,黑客·骇客。 最好可在VC60_SP6简体中文迷你版上实现。但也不必!!!
最佳答案
电梯模拟设计·序 在大二时自学了C++编程语言,且在《C++编程经典》这本书上看到了一个实例“电梯模拟”,不过那上面只实现了两层楼,一个电梯的功能,当时我就想:我应该写一个能实现多层楼的,还是多电梯的,不过那时只是尽力去看上面的实例是怎样实现的。当时没有电脑,于是就不了了之。在这个假期,一个人在学校了过春节,自由时间比较多,于是想起写这个程序来,在经过十多天的时间,终于完成了所有功能,但是由于时间和能力有限,现在完成的有些算法不是很合理。·模拟过程说明电梯的运行过程是根据时间和人的需要执行的。而我这里模拟,是了更好的了解及实现电梯运行过程的模拟,因此我采用操作员按键来控制电梯,根据键盘接受来实现不同的需要(如:电梯运行,楼层生成人,菜单帮助,推出)。这个程序是对电梯的模拟,每次的开始电梯都停在最底层楼,也就是0层。之后由操作员(也就是程序运行的人)操作,你可以按回车键由楼层产生人,在楼层有人之后,人会按上下键去选择他们的去向,之后在操作员输入空格键的时候,电梯会一层一层的运动到所需楼层载人; 你可以选择空格键,这使得电梯运行到要求的下一层,当系统检测到这层楼有人要出去,或是要进来,那么电梯停止、开门,等候出去的人出完,进来的人进来(当然,这是不允许超载的)。 你也可以选择H或是h来查看帮助菜单。最后你可以选择esc退出。·概要设计 在开始之前会让用户输入楼层数及电梯数,程序根据数据构造整个建筑。楼层中有等候的地方有两个按钮,是等待人按的上下键。建筑中有电梯,可以不只一个,电梯中有开关门键,还有数字键,供人按键决定去向;这些键当被按下时,键就呈亮色,因此键里有灯。当电梯到达某一楼层,有人要出电梯或是进电梯,电梯的门会开,然后关门,并且电梯里的铃就会响。介此,根据要求设计类如下: Bell ——————————铃(电梯里的铃) Lignt ——————————灯(按钮里的灯) Button ——————————按钮(上下键,数字键,开关门键) Door ——————————门(电梯的门) People ——————————人(楼层里生产人,之后进电梯,出电梯之后消除人) Floor ——————————楼层(建筑有多个楼层) Elevator ——————————电梯(楼层里的电梯) Building ——————————建筑 Time ——————————时间类(当某一楼层既有人上,也有人下,而且电梯在次楼层,此时电梯就会选择该上还是下,于是会根据时间来上下人的最早时间来定·详细设计1、状态变量的设计(1)Elevator::runline的设计 runline的数据定义:这是电梯的引导变量,因此要确定几个参数:①.是否有人出——OUT;②.有人进且上楼——UP;③.有人进且下楼——DOWN。当到某一楼的时候可能既有人出且有人上、有人出且有人下、有人上也有人下、还有没有人等情况。于是设置参数的二进制如下:OUT——001,DOWN——010,UP——100.根据这几个基数可以组合:TT——0(000)(初始时都设置为TT)UP_DOWN——6(110:UP | DOWN)OUT_DOWN——3(011:OUT | DOWN)OUT_UP——5(101:OUT | UP)OUT_UP_DOWN——7(111:OUT | UP | DOWN)这样做的好处是在提供判断时特别方便,考虑满足哪一种条件时直接和其取与(&)就可以判断了,还有就是在判断时是先判断是否有人出于是只需要与OUT做与(&)操作就可以判断是否有人出了。因此这是整个程序设计中很精彩的一部分。电梯的运行全有此数据引导,当生成人的时候,根据人所在的楼层,然后搜索最快能到达此楼层满足人去向的电梯,然后改变runline的值;当人走出电梯之后又再次改变runline,使得正常引导电梯……(2)Elevator::status设计在判断电梯的运动状态时根据此变量判断。由于电梯的状态只有停、上、下三个状态,这里我分别用0、-1、1来表示。其实为了保持一致性,可以用runline中的TT、UP、DOWN来表示,但是在计算中,不需要runline与status的计算,因此可以不和runline一致。而这里定义为0、-1、1有一个特大的好处就是计算电梯所到达的楼层,当电梯为上运动时,电梯所到的楼层只需+1(即是+status),当电梯为下运动时,电梯所到的楼层只需-1(还是+status),当停止时不需要加减,此时+0(即+status)不会影响到原来的值。于是在就是电梯所到楼层时,不管电梯的运行状态,都可以直接+status就可以了, (3)Elevator::pList ( list<People *> pList ) 电梯中人的存储链表,由于电梯中的人数只有上限,但随时可以不一样,因此采用动态存储结构来存储较好,为了方便使用类库的操作,于是定义为list存储结构,存储为People的指针,而不是对象,这样使得人在转移过程中(从楼层进入电梯)只是改变了人的位置,而不是先拷贝进入电梯,之后再删掉楼层中人的对象,这与实际不符合,还浪费时间、空间。按照这样设计,人从楼层中产生起一直存在,直到走出电梯。只是引出他的对象不一样而已。 (3)Elevator::numberButton ( vector<Button *> numberButton ) 电梯中数字按钮:在构造电梯时,就会构造数字按钮,而此时数字按钮的个数是确定的,以后不会再改变其存储大小即值,于是这里采用动态数组来存储。 (4)同理,建筑中的电梯,建筑中的楼层,在构造建筑的过程中都应该构造完成,是确定的数量,因此这里都采用动态数组来存储。(5)Floor::pList 楼层中等待的人为了方便区分楼层中等待的人是上还是下,于是将等待上可下的人分别存储。楼层中的人进入电梯时,只需根据电梯的运行状态来确定是谁应该进电梯。 (6)程序中定义了一个全局变量bfloors,是建筑的楼层数,因为在很多几个类中都需要用的这个变量,因此,将其定义全局变量我认为可以减少内存开销。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么会莫名其妙地收到一个项链,而且是快递
御锦煌川香焖锅神木店这个地址在什么地方,我
接地体的类型有哪些
c久燕麦力片压片糖果怎么样
网上买东西怎么用微信支付
大智若愚是褒义还是贬义
哪里需要大量木渣,我有大量木渣!
哪位能给个仙剑奇侠传1(98版)的下载地址。
成龙书店金海湾店地址有知道的么?有点事想过
求一小说名,伪兄妹,重组家庭,女主的妈妈嫁
从潮汕机场到丰顺县城怎么走 有没有机场大巴
养老保险的身份证年龄比单位档案年龄大该怎么
手机的射频芯片和天线的区别是什么?
陈姓好名字
马犬价格三个月马犬大概多少钱一只
推荐资讯
九寓言两则作为楚国人的朋友你会怎样再一次耐
我和一个女的在交往,然后我自己用钱很快,和
四川外语学院播音主持专业对英语语文成绩有限
新坟冒有一股水是什么征兆
自考本科时违规携带材料被监考老师抓住,被记
怎样把XP系统装U盘?
御佰年是传销
黑暗之魂2原罪学者 奇迹有什么好用伤害高的吗
先抑后扬的近义词
话说,运城哪学街舞好啊! 我有点基础 嘻哈帮
泥鳅塘地址在什么地方,想过去办事
我的奇迹天鹰怎么老升不了级啊?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?