电梯模拟 数据结构课设

代码:

https://download.youkuaiyun.com/download/TYtrack/19384997

报告:

https://download.youkuaiyun.com/download/TYtrack/19384997

 

目录

 

 

一、课程设计题目与要求

1、题目内容

2、题目要求

二、需求分析

1、总体功能需求

2、功能需求

3、软件开发平台需求

4、输入输出要求

三、设计

1、设计思想

1、数据结构设计

2、算法设计

2、设计表示:

1、函数调用关系图

2、函数接口规格说明

3、详细设计

四、调试分析

1、遇到主要的问题:

2、程序的时空复杂度分析:

3、经验体会:

五、用户手册

六、测试数据及测试结果


 

一、课程设计题目与要求

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。

 

  • 目的楼层计算与到达模块

该模块首先会根据当前电梯运转方向、电梯外乘客所在楼层、电梯内乘客的目的楼层来判断是否继续该方向的运转,如果满足,选择最靠近当前楼层的楼层为目的楼层,若不满足,比如,之前电梯方向为上,但是电梯没有想去更高楼层的乘客,电梯外也没有更高楼层的乘客在等侯,这时候,电梯应该考虑向下运转,之后,我们再根据计算结果到达目的楼层。

下图为主程序的流程图:

图1 主程序的流程图

 

2、设计表示:

1、函数调用关系图

2、函数接口规格说明

 

Elevator()

说    明:重写电梯类的构造函数,初始化电梯的所有参数。

参    数:无

返 回 值:无

 

void Random_Man();

说    明:平均每100t随机产生一名乘客,并在该函数中实现乘客的信息随机产生,除此外,还有判断电梯外乘客是否离开,以及通过乘客决定目的楼层。

参    数:无

返 回 值:无

 

       void Time_();

说    明:电梯的模拟时钟函数,作为主函数中循环调用的函数,并在其内部一次调用其它模块。

参    数:无

返 回 值:无

 

       void entryElevator();

说    明:乘客进入电梯函数 : 在电梯开门后,将满足进入电梯的乘客信息从等待链表中删除,并添加到电梯内部乘客链表中。

参&

设计一个电梯模拟系统。这是一个离散的模拟程序,由随机事件驱动,以模拟时钟决定乘客或电梯的动作发生的时刻顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一时刻。 要求: (1)模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。 电梯一共有八个状态,即正在开门(Opening)、已开门(Opened)、正在关门(Closing)、已关门(Closed)、等待(Waiting)、移动(Moving)、加速(Accelerate)、减速(Decelerate)。 (2)乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。最后一个人放弃能不能取消按键? (3)模拟时钟从0开始,时间单位为0.1秒。人电梯的各种动作均要消耗一定的时间单位(简记为t),比如: 有人进出时,电梯每隔40t测试一次,若无人进出,则关门; 关门开门各需要20t; 每个人进出电梯均需要25t; 电梯加速需要15t; 下行时要不要加速? 上升时,每一层需要51t,减速需要14t;每一层减速? 下降时,每一层需要61t,减速需要23t; 如果电梯在某层静止时间超过300t,则驶回1层候命。驶回本垒层间接到消息? (4)电梯调度规则如下: ①就近原则:电梯的主要调度策略是首先响应沿当前行进方向上最近端的请求直到满足最远端请求。若该方向上无请求时,就改变移动方向; ②在就近原则无法满足的情况下,首先满足更高层的请求; ③电梯的最大承载人数为13人,电梯人数达到13人后,在有人出电梯之前,不接受进入电梯的请求; ④乘客上下电梯时先出后进。进电梯时乘客是按发出乘坐请求的顺序依次进入,每次只能进入一人且每个人花费的时间都为25t; ⑤电梯在关门期间(电梯离开之前)所在层提出请求的乘客同样允许进入。 (5)按时序显示系统状态的变化过程,即发生的全部人电梯的动作序列。 扩展要求: 实现电梯模拟的可视化界面。用动画显示电梯的升降,人进出电梯设计有下列对象:电梯、人、电梯控制板及其上各种按钮、模拟时钟等。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值