代码:
https://download.youkuaiyun.com/download/TYtrack/19384997
报告:
https://download.youkuaiyun.com/download/TYtrack/19384997
目录
一、课程设计题目与要求
1、题目内容
模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
电梯一共有七个状态,即正在开门(Opening)、已开门(Opened)、正在关门(Closing)、
已关门(Closed)、等待(Waiting)、移动(Moving)、减速(Decelerate)。
乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
模拟时钟从 0 开始,时间单位为 0.1 秒。人和电梯的各种动作均要消耗一定的时间单位(简记为 t),比如:
有人进出时,电梯每隔 40t 测试一次,若无人进出,则关门;
关门和开门各需要 20t;
每个人进出电梯均需要 25t;
电梯加速需要 15t;
上升时,每一层需要 51t,减速需要 14t;
下降时,每一层需要 61t,减速需要 23t;
如果电梯在某层静止时间超过 300t,则驶回 1 层候命。
2、题目要求
基本:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。
扩展:实现电梯模拟的可视化界面。
二、需求分析
1、总体功能需求
该作品将实现一个模拟电梯,在界面上显示出电梯系统状态的变化过程,即发生的全部人和电梯的动作序列,对于乘客而言,动作包括等待电梯到来、进出电梯以及由于等待时间过长而离开电梯,对于电梯而言,动作包括电梯的加减速、上升与下降、开门与关门以及由于在某一层停留时间过长而驶回1层。其中要求乘客的产生是随机的,电梯有一定的载荷量,当超过载荷量的时候,电梯外乘客无法进入。
2、功能需求
能够模拟出正常电梯的行为以及状态,能够计算并打印出当前时间电梯的行为是必要的
3、软件开发平台需求
开发者开发的软件要求能够正常运行在Windows平台,且具有一定的平台兼容性.。为保证软件的上下兼容性,开发者应选择通用的开发工具的来进行开发,目前的开发软件平台为Visual Studio 2016。
4、输入输出要求
该系统无需对其进行输入,用户只需运行,乘客的产生以及各信息由程序随机产生;
系统的输出为电梯系统状态的变化时间过程以及各乘客的动作序列过程,并打印出当前时间,如:
乘客1想做电梯,来自第9楼,去第2楼 现在时间:483
电梯准备去9楼 电梯经过3楼 现在时间:287
三、设计
1、设计思想
1、数据结构设计
主要存储结构为类和链表;
电梯内的乘客和电梯外等待的乘客分别由两个链表存储,使用链表存储能够更容易地对乘客进行出入操作,并且可以帮助,当电梯在未超载的前提下,到达某楼层,满足可进电梯条件之后,将该乘客从等待链表中删去,又加入到电梯内乘客的链表中。
乘客和电梯封装成类,其中乘客类的属性包括了乘客的基本信息,包括等待时间、所来和所去楼层以及唯一编号;
电梯类的属性包括电梯从开始运行的时间、存储电梯内外的乘客的两个列表、电梯当前状态以及处于当前状态的时间、上次和当前以及目的楼层、现在电梯运行方向等。其方法包括自定义构造函数、随机产生乘客、主时间函数、乘客进出电梯函数、乘客离开电梯函数、用户因为等待时间过长离开、电梯判断可关门函数、电梯返回一楼函数等;
值得注意的是这里无论是电梯的状态还是乘客的状态都是枚举类型,好处是方便直观。
2、算法设计
该系统可分为产生乘客、乘客进出电梯模块、电梯关门及运动、回到一楼、目的楼层计算五个模块,模拟时钟的运行依次照着这五个模块的次序而运转,接下来会详细介绍这五个模块:
- 产生乘客模块:
本模块使用随机函数产生乘客,经过测试可得到,平均每100t产生一名乘客较合理,因此,我们对于每1t产生一个随机数,并对结果模上100,若为0则产生乘客,反之不成立。当确定产生乘客时,随机产生乘客的其他信息,譬如乘客当前所在楼层和目的楼层,对其状态设为等待电梯状态并开始计时。
- 乘客进出电梯模块:
调用此模块之前,需要对当前是否能够开门进行判断,判断可行之后,延时20t来表示开门的20t,此后,再对人进入电梯以及离开电梯进行操作,并将当前楼层修改为之前的目的楼层。
- 电梯的关门模块:
调用此模块之前,需要对当前是否能够关门进行判断,与上一模块不同的是确定关门之后,每40t判断一次,而不是每时每刻都在判断,关门之后,将当前状态设为waiting或上行、下行,而当前状态时间设为0。
- 回到一楼模块
该模块相对而言较简单,如果电梯在某层静止时间超过 300t,则驶回 1 层候命,判断可行时,将目的楼层设为1。
- 目的楼层计算与到达模块
该模块首先会根据当前电梯运转方向、电梯外乘客所在楼层、电梯内乘客的目的楼层来判断是否继续该方向的运转,如果满足,选择最靠近当前楼层的楼层为目的楼层,若不满足,比如,之前电梯方向为上,但是电梯没有想去更高楼层的乘客,电梯外也没有更高楼层的乘客在等侯,这时候,电梯应该考虑向下运转,之后,我们再根据计算结果到达目的楼层。
下图为主程序的流程图:

2、设计表示:
1、函数调用关系图

2、函数接口规格说明
Elevator()
说 明:重写电梯类的构造函数,初始化电梯的所有参数。
参 数:无
返 回 值:无
void Random_Man();
说 明:平均每100t随机产生一名乘客,并在该函数中实现乘客的信息随机产生,除此外,还有判断电梯外乘客是否离开,以及通过乘客决定目的楼层。
参 数:无
返 回 值:无
void Time_();
说 明:电梯的模拟时钟函数,作为主函数中循环调用的函数,并在其内部一次调用其它模块。
参 数:无
返 回 值:无
void entryElevator();
说 明:乘客进入电梯函数 : 在电梯开门后,将满足进入电梯的乘客信息从等待链表中删除,并添加到电梯内部乘客链表中。
参&

最低0.47元/天 解锁文章
1775

被折叠的 条评论
为什么被折叠?



