数据结构电梯运行

合集下载

电梯工作原理及结构图

电梯工作原理及结构图

电梯工作原理及结构图一、引言电梯作为现代城市交通的重要组成部份,为人们提供了便捷、快速的垂直交通方式。

本文将详细介绍电梯的工作原理和结构图,旨在匡助读者更好地理解电梯的运行原理和构造。

二、电梯工作原理1. 电梯驱动系统电梯的驱动系统主要由电动机、传动装置和控制系统组成。

电动机通过传动装置将电能转化为机械能,驱动电梯的升降运动。

控制系统负责监测电梯的运行状态和乘客需求,控制电梯的启停、速度和楼层选择等功能。

2. 电梯安全系统电梯的安全系统包括限速器、安全钳和缓冲装置等。

限速器通过感应电梯运行速度,一旦超过设定的安全速度,将自动切断电梯的电源,确保电梯的安全。

安全钳则用于固定电梯在井道上,防止意外事故发生。

缓冲装置则用于减缓电梯在到达楼层时的冲击力,保护乘客的安全。

3. 电梯控制系统电梯的控制系统主要包括楼层选梯控制、电梯调度控制和紧急救援控制等。

楼层选梯控制负责根据乘客的楼层选择,将乘客送至目标楼层。

电梯调度控制则根据乘客的需求和实时交通情况,合理分配电梯资源,提高运行效率。

紧急救援控制则用于应对电梯故障或者紧急情况,确保乘客的安全。

三、电梯结构图电梯的结构图主要包括电梯轿厢、井道、导轨、平衡重物和控制盘等组成。

1. 电梯轿厢电梯轿厢是乘客乘坐的空间,通常由钢板制成,具有一定的承载能力和防护性能。

轿厢内部设有按钮面板,乘客可以通过按钮选择所需楼层。

2. 井道井道是电梯轿厢的运行通道,用于限制电梯的运动范围。

井道通常由混凝土或者钢结构构成,具有一定的承载能力和防护性能。

井道内设有导轨,用于引导电梯轿厢的运行。

3. 导轨导轨是电梯轿厢运行的轨道,通常由钢材制成。

导轨分为导向导轨和导向导轨,分别用于控制电梯轿厢的垂直和水平运动。

4. 平衡重物平衡重物用于平衡电梯轿厢和配重之间的重力差,确保电梯的平稳运行。

平衡重物通常由铁块或者混凝土制成,通过绳索与电梯轿厢相连。

5. 控制盘控制盘是电梯的控制中心,用于监测和控制电梯的运行状态。

数据结构(Python课程)课程项目2-1(电梯系统模拟)

数据结构(Python课程)课程项目2-1(电梯系统模拟)

数据结构(Python课程)课程项目2-1(电梯系统模拟)(北京大学数学学院,2014年11月20日)本项目要求以项目组为单位独立完成下面工作。

一个项目组由两位同学组成,12月5日前将完成的程序和所写报告(打包)提交辅导老师。

评分要求包括:1. 所提交的程序应该完整,包括一个demo程序(演示程序)展示所开发系统的情况;程序的模块划分和采用的数据结构合理,代码清晰,格式合适,易读易理解;2. 所提交报告对项目工作描述应清晰准确,说明为什么采用有关的结构设计,其中的想法和解决的问题等;报告应包含对所完成的项目的分析,考虑其优点和缺点;3. 在用Python完成这一项目过程中的体会和遇到的困难(本条不作为强制性要求);4. 其他要求见下面项目说明。

项目描述:请开发一个简单的电梯模拟系统,具体要求如下:假设电梯所在的建筑共计4层(例如,就是目前数学学院所在的一号楼),从地面层(按习惯称1楼)直至最上层(4楼)。

这里的4应该是一个参数,可以修改。

例如可以方便地转去模拟7层楼的电梯(如信息科学技术学院那边)。

每层电梯门边有一个上行按钮和一个下行按钮,最下层和最上层只有一个按钮。

电梯里有一组按钮,供乘电梯人选择目标楼层。

电梯从一层到其相邻层需要k秒时间。

乘客按一定时间间隔到达某楼层,按电梯门边按钮表示要求上行或下行。

乘客到达的时间间隔是区间 [a, b] 里的某个随机值,到达楼层是 [1, 4] 中的随机值。

乘客进电梯后选择搭乘的目标楼层(随机值)。

乘客在电梯到达其目标楼层后离开电梯。

我们希望模拟N秒的电梯运行情况,并在模拟中做一些统计。

考虑下面的数据统计:模拟期间完成服务的共计人数;平均等电梯时间;电梯的平均负荷人数(请提出一种适当的统计方法);其他有意义的统计结果(自己考虑)。

项目要求:根据题目要求设计并实现所需的功能,1,设计所需的数据结构,根据需要定义有用的类(class)。

例如,用什么数据结构表示乘客、电梯、按钮等,模拟中的各种事件,怎样把它们组织起来形成完整的系统;2,可以参考课堂上给的实例,采用类似的实现技术。

电梯运行数据监测和分析管理制度

电梯运行数据监测和分析管理制度

电梯运行数据监测和分析管理制度1. 引言2. 监测和分析内容2.1 监测内容1. 电梯运行时间和次数2. 电梯所在楼层和运行状态3. 电梯故障信息4. 电梯定期维护记录2.2 分析内容1. 电梯运行时间和次数的趋势分析2. 电梯所在楼层和运行状态的统计分析3. 电梯故障信息的分类分析4. 电梯维护记录的评估分析3. 数据采集与存储3.1 数据采集为了采集电梯的运行数据,需要安装相应的监测设备,并确保其正常运行。

监测设备应能够实时获取电梯的运行状态、故障信息等数据,并能够在数据异常时及时发出警报。

3.2 数据存储采集到的电梯运行数据应存储在可靠、安全且易于访问的数据库中。

数据库应具备良好的数据管理和备份机制,以确保数据的完整性和可靠性。

4. 数据处理与分析1. 数据清洗对采集到的数据进行筛选、去除重复项和异常值处理,以确保数据质量。

2. 数据可视化将清洗后的数据以图表形式展示,利用直观的图表帮助快速识别趋势和异常。

3. 统计分析对电梯运行数据进行统计分析,如平均运行时间、故障频率等,以评估电梯的运行状态。

4. 故障分类对电梯故障信息进行分类分析,找出常见故障类型,并制定相应的维护措施。

5. 数据监测与报警1. 实时监测系统利用监测设备实时获取电梯的运行数据,并通过网络传输到监测中心。

2. 数据异常判断监测中心对采集到的数据进行实时分析,判断是否存在异常情况。

3. 报警通知系统当检测到电梯运行数据异常时,监测中心及时发出警报通知相关人员,以便及时处理。

6. 数据管理与维护1. 数据备份定期对电梯运行数据进行备份,以防止数据丢失或损坏。

2. 数据权限管理对电梯运行数据的访问权限进行管理,确保只有授权人员可以访问相关数据。

3. 数据更新与维护及时更新电梯运行数据,保持数据的实时性和准确性。

4. 数据安全与保密采取必要的安全措施,对电梯运行数据进行保密和防护。

7. 结论电梯运行数据监测和分析管理制度是确保电梯安全运行的重要保障。

数据结构——电梯模拟的报告

数据结构——电梯模拟的报告

数据结构——电梯模拟的报告数据结构——电梯模拟的报告1. 简介本文档将介绍电梯模拟的实现过程和基本原理。

通过模拟电梯的行为,我们可以更好地理解数据结构在实际应用中的作用和效果。

2. 问题描述在楼房中,电梯通常被用来运送乘客。

电梯内部有多个按钮,表示不同楼层的乘客需求。

乘客可以按下按钮来请求乘坐电梯到达特定楼层。

电梯的运行顺序应该是合理的,比如不会从高楼层下降到低楼层。

本模拟的电梯系统需要满足以下要求:- 电梯能接收来自乘客的请求。

- 电梯能根据请求的楼层,按照合理的顺序运行,将乘客送到目标楼层。

- 当电梯到达目标楼层,乘客可以进入或离开电梯。

- 电梯需要实时更新运行状态,如目标楼层、当前楼层等。

3. 数据结构设计为了实现电梯模拟,我们需要设计合适的数据结构来存储电梯的状态和乘客请求。

以下是我们设计的关键数据结构:3.1 电梯状态电梯的状态包括当前楼层、目标楼层和运行方向等信息。

我们可以使用一个结构体来表示电梯的状态:```c++struct ElevatorState {int currentFloor;int targetFloor;Direction direction;};```其中,`currentFloor`表示当前所在楼层,`targetFloor`表示目标楼层,`direction`表示电梯的运行方向。

3.2 乘客请求乘客请求包括乘客所在楼层和目标楼层。

我们可以使用一个结构体来表示乘客请求:```c++struct Request {int fromFloor;int toFloor;};```其中,`fromFloor`表示乘客所在楼层,`toFloor`表示目标楼层。

3.3 电梯控制器电梯控制器用于管理电梯的状态和乘客请求。

我们可以使用一个队列来存储乘客请求,使用一个变量来保存电梯的当前状态。

以下是电梯控制器的设计:```c++class ElevatorController {private:std::queue<Request> requests;ElevatorState state;public:void addRequest(Request request);void processRequests();};```其中,`addRequest`方法用于添加乘客请求到队列中,`processRequests`用于处理乘客请求并控制电梯的运行。

数据结构设计--电梯模拟系统

数据结构设计--电梯模拟系统

[目录1.引言 ...................................................... 错误!未定义书签。

2.需求分析................................................... 错误!未定义书签。

3. 概要设计.................................................. 错误!未定义书签。

数据结构描述............................................. 错误!未定义书签。

模块设计................................................. 错误!未定义书签。

电梯的模拟流程图......................................... 错误!未定义书签。

4详细设计及实现............................................. 错误!未定义书签。

%全局变量的定义........................................... 错误!未定义书签。

人具体情况的定义......................................... 错误!未定义书签。

队、栈的类型............................................. 错误!未定义书签。

.电梯类型................................................ 错误!未定义书签。

系统类的定义............................................. 错误!未定义书签。

5.调试分析................................................... 错误!未定义书签。

电梯工作原理及结构图

电梯工作原理及结构图

电梯工作原理及结构图引言概述:电梯作为现代城市交通的重要组成部份,已经成为人们生活中不可或者缺的一部份。

本文将详细介绍电梯的工作原理及结构图,以匡助读者更好地理解电梯的运行机制。

正文内容:一、电梯的工作原理1.1 电梯驱动系统- 电梯的驱动系统主要由电动机、减速器和传动机构组成。

- 电动机通过电力驱动,将动力传递给减速器。

- 减速器通过减速作用,将电动机的高速旋转转换为电梯所需的低速运动。

1.2 电梯控制系统- 电梯控制系统主要由控制器、按钮和传感器组成。

- 乘客通过按钮选择所需楼层,控制器根据按钮信号控制电梯的运行。

- 传感器用于检测电梯的位置和乘客的进出情况,以确保电梯的安全运行。

1.3 电梯安全系统- 电梯安全系统包括紧急制动装置、过载保护装置和安全门等。

- 紧急制动装置在发生紧急情况时,能够迅速住手电梯的运动。

- 过载保护装置能够检测电梯的载荷情况,当超过额定载荷时,会触发保护装置住手电梯的运行。

- 安全门能够保护乘客的安全,防止意外事故的发生。

二、电梯的结构图2.1 电梯井道- 电梯井道是电梯运行的垂直通道,通常由钢结构构成。

- 井道内部设有导轨,电梯通过导轨垂直运行。

2.2 电梯轿厢- 电梯轿厢是乘客乘坐的部份,通常由钢板制成。

- 轿厢内部设有按钮、指示灯和报警器等设备,以方便乘客操作和提供安全保障。

2.3 电梯门- 电梯门分为轿厢门和层门两部份。

- 轿厢门用于乘客进出轿厢,层门用于隔离电梯井道和楼层空间。

2.4 电梯驱动装置- 电梯驱动装置主要由电动机和减速器组成。

- 电动机提供动力,减速器将电动机的高速旋转转换为电梯所需的低速运动。

2.5 电梯控制装置- 电梯控制装置包括控制器、按钮和传感器等设备。

- 控制器根据按钮信号控制电梯的运行,传感器用于检测电梯的位置和乘客的进出情况。

总结:综上所述,电梯的工作原理是通过驱动系统、控制系统和安全系统的协调配合,实现电梯的运行和乘客的安全。

电梯的结构和运行

电梯的结构和运行

电梯的结构和运行绪言:电梯的发明为人类的日常生活、社会活动和工业生产带来了极大的便利。

电梯既是一种垂直交通运输设备,又是一种比较复杂的机电结合的大型工业产品,它既有完善的机械专用构造,又有复杂的电气控制部分。

在使用过程中,要想让电梯运行可靠、乘坐舒适、不出或少出故障,并确保安全运行,避免人身事故,电梯维修与维保从业人员必须对电梯的结构、运行原理、性能特点、控制方式等有着深刻的认识。

第一章:电梯的基本构造1基本结构电梯是机与电紧密结合的复杂产品,其基本组成包括机械和电气两大部分。

从空间上来看,电梯设备并非是独立的整体设备,而是由机电合的相关部件和组合件安装设置在机房、井道、轿厢及层站内,构成垂直运行的交通工具。

电梯的基本结构有减速箱、曳引机、曳引机底座、导向轮、限速器、导轨支架、曳引钢丝绳、开关碰铁、紧急终端开关、轿架、轿门、导轨、对重、补偿链、补偿链导轮、张紧装置、缓冲器、厅门、呼梯盒、随行电缆、轿壁、轿内操纵箱、开门机、井道传感器、电源开关、控制柜,曳引电动机和抱闸。

⑵2八大系统电梯还可以按功能系统划分其结构,包括曳引系统、导向系统、门系统、轿厢、重量平衡系统、电力拖动系统、电气控制系统和安全保护系统。

(1)曳引系统主要由曳引机、曳引钢丝绳、导向轮及返绳轮组成。

其主要功能是输出与传递动力,驱动电梯运行。

(2)导向系统主要由轿厢导轨、对重导轨、导靴及导轨支架组成。

其主要功能是限制轿厢和对重的活动自由度,使轿厢和对重只能沿着导轨上、下运动,不会发生横向的波动和振动,保证轿厢和对重运行不偏摆。

(3)轿厢系统主要由轿厢框架和轿厢组成。

其主要功能是用以运送乘客和货物的组件。

(4)门系统主要由轿厢门、厅门、厅门装置、门机及关门防夹装置。

其主要功能是乘客或货物的进出口,是保证电梯安全运行必不可缺少的部分。

(5)重量平衡系统主要由对重和补偿链组成。

其主要功能是平衡轿厢重量以及补偿高层电梯中曳引绳重量的影响。

(6)电力拖动系统主要由曳引电动机、供电系统、速度反馈装置及电动机调速装置组成。

电梯运行故障的运行数据分析与故障诊断

电梯运行故障的运行数据分析与故障诊断

电梯运行故障的运行数据分析与故障诊断电梯是现代社会不可或缺的交通工具之一,为了保证电梯的安全运行,对于电梯故障的运行数据进行分析和故障诊断显得尤为重要。

通过对电梯运行数据的准确分析和诊断,可以及时发现故障,采取相应的措施进行修复,保障电梯的正常运行。

本文将探讨电梯运行故障的运行数据分析方法和故障诊断的相关技术。

一、电梯运行数据分析方法1. 数据采集和处理要进行电梯运行数据的分析,首先需要对电梯运行过程中的相关数据进行采集和处理。

通常,电梯控制系统会记录下电梯每次运行的起始时间、终止时间、运行时间、运行速度、载重等信息。

通过收集这些数据,可以建立起一份完整的电梯运行数据记录。

2. 数据可视化分析获得电梯运行数据之后,其可视化分析是了解电梯运行情况和故障诊断的重要手段。

可以借助数据可视化工具,将采集到的数据以图表形式展示出来,形成直观的视觉效果。

例如,可以通过绘制柱状图来显示不同时间段内电梯的运行次数,或者使用线性图来展示电梯的运行速度随时间的变化情况。

3. 数据模式识别在电梯运行数据分析中,数据模式识别是一项重要的技术。

通过对电梯运行数据进行模式识别,可以发现一些与电梯故障相关的异常模式。

例如,电梯在故障前往往会出现运行速度突然加快或减慢、载重波动较大等异常模式,这些都可以作为故障诊断的线索。

二、电梯故障诊断技术1. 数据挖掘和机器学习数据挖掘和机器学习是如今电梯故障诊断的主流技术之一。

通过对电梯运行数据进行挖掘和分析,可以提取出一些电梯故障的特征指标和模式。

然后,利用机器学习算法对这些特征指标和模式进行训练,建立起故障诊断模型。

当出现新的电梯运行数据时,使用训练好的模型进行预测和诊断,快速准确地找出故障原因。

2. 专家系统专家系统是一种基于专家经验和规则的故障诊断方法。

通过向专家系统输入电梯运行数据,系统会根据一系列预设的规则和知识库进行推理和判断,最终给出电梯故障的可能原因。

专家系统可以模拟专家的思维方式,发挥出人工无法达到的高效和准确性。

六部十层电梯程序设计思路

六部十层电梯程序设计思路

六部十层电梯程序设计思路一、引言电梯是现代建筑中必不可少的设备,充分利用电梯的空间以提高运输效率是一个重要的问题。

本文将围绕六部十层电梯的程序设计思路展开探讨,旨在提供一个高效可行的解决方案。

二、需求分析要实现六部十层电梯的程序设计,首先需要对需求进行分析。

下面列出了主要的需求:1.六部电梯共有十层楼,每部电梯都可以按下上下楼按钮。

2.每层楼都有一个等待区域,乘客可以在等待区域按下上下楼按钮。

3.乘客按下楼层按钮后,电梯应能迅速响应并运送乘客到目标楼层。

4.电梯内部应有按钮用于指定目标楼层,乘客可以在电梯内部按下楼层按钮。

三、系统设计在满足上述需求的基础上,我们可以设计一个多线程的电梯调度程序来实现六部十层电梯的功能。

1. 状态设计首先,我们需要定义电梯的状态。

电梯的状态可以分为以下几种:•停止状态:电梯不接受乘客请求,等待状态改变。

•上行状态:电梯正在向上运行。

•下行状态:电梯正在向下运行。

•开门状态:电梯停下来并打开门。

2. 数据结构设计为了实现电梯的调度,我们需要设计适当的数据结构来存储电梯和乘客的信息。

以下数据结构可以用来表示电梯:class Elevator:floor: int # 当前楼层direction: str # 运行方向status: str # 状态passengers: list # 乘客列表...3. 调度算法设计电梯的调度算法是电梯程序的核心部分。

基于乘客请求的优先级,我们可以采用以下调度算法:1.根据乘客请求的楼层和运行方向,确定合适的电梯。

这可以根据电梯的当前状态、乘客请求的楼层和运行方向来判断。

2.对选定的电梯,根据当前电梯状态和乘客请求的楼层进行判断。

如果电梯当前状态是停止状态,则直接前往乘客请求的楼层。

否则,根据电梯运行方向和乘客请求的楼层进行比较,决定是否改变电梯的运行方向。

4. 用户界面设计为了让用户能够方便地使用电梯,我们需要设计一个用户界面。

用户界面可以采用图形界面或命令行界面,提供以下功能:•输入乘客请求的楼层和运行方向。

电梯工作原理及结构图

电梯工作原理及结构图

电梯工作原理及结构图电梯是现代社会中广泛应用的垂直交通工具,它通过电动机驱动,利用钢丝绳和导轨系统来实现人员和物品的垂直运输。

本文将详细介绍电梯的工作原理和结构图,以帮助读者更好地理解电梯的运行机制。

一、电梯的工作原理1.1 电动机驱动原理电梯的运行离不开电动机的驱动。

电梯通常采用交流异步电动机,其工作原理是利用电磁感应产生转矩,驱动电梯的升降运动。

当电梯启动时,电动机通过控制系统接收到信号,启动电梯的运行。

1.2 钢丝绳和导轨系统电梯的运行过程中,钢丝绳和导轨系统起到了关键的支撑和导向作用。

钢丝绳通过电动机的驱动,将电梯的载重舱与对重连接起来,使其能够安全、平稳地上下运动。

导轨系统则负责引导电梯的运行方向,确保其在垂直方向上的稳定运行。

1.3 电梯控制系统电梯控制系统是电梯工作的核心,它通过接收乘客的指令,判断电梯的运行状态,并控制电梯的运行和停靠。

电梯控制系统通常包括主控制器、按钮、传感器等组成。

当乘客按下电梯按钮时,主控制器会接收到信号,并根据当前的运行状态来决定电梯的行驶方向和停靠楼层。

二、电梯的结构图为了更好地理解电梯的结构,下面将介绍电梯的主要组成部分,并提供一份简化的电梯结构图。

2.1 电梯轿厢电梯轿厢是电梯运输乘客和物品的载体,通常由钢板制成。

轿厢内部设有按钮、指示灯、显示屏等设备,方便乘客操作和了解当前运行状态。

轿厢的尺寸和载重能力根据不同的需求而有所差异。

2.2 钢丝绳和对重钢丝绳是电梯运行过程中起到承重作用的重要部件。

一般情况下,电梯采用多股钢丝绳并行布置,以增加其承重能力和安全性。

对重则与轿厢通过钢丝绳相连,用于平衡轿厢的重量,确保电梯的平稳运行。

2.3 电动机和减速机电动机是电梯的动力源,通过控制电动机的转速和转向,实现电梯的升降运动。

减速机则起到减速和传递转矩的作用,将电动机的高速转动转换为轿厢的垂直运动。

2.4 导轨系统导轨系统是电梯运行过程中起到导向作用的重要组成部分。

【数据结构】A类—电梯运行模拟

【数据结构】A类—电梯运行模拟

#include <stdio.h>#include <time.h>#include<iostream>#include<stdlib.h>#include <windows.h>using namespace std;//初始定义const int maxfloor=14;//最高楼层clock_t tick;//获取系统当前运行时间//基本数据结构及其功能函数与类的声明模块struct Condition{//状态类float time;//该状态下持续的时间;int sympol;//状态的开关标志符};struct LiftCondition{//电梯状态类Condition rest;Condition up;Condition down;};struct Lift{//电梯类int paNum;//乘客数int presentFloor;//当前楼层LiftCondition liftCon;//电梯状态int light[maxfloor+1];//目标层数数组int goalNum[maxfloor+1];//要去每层的人数float workTime;float workTimePre;};struct Passenger{//乘客类int presentFloor;//乘客当前楼层int goalFloor;//目标层int tolerateTime;//容忍时间float initTime;//建立时间Passenger *next;Passenger *pre;};struct Que{Passenger *front;//队列头指针Passenger *rear;//队列尾指针;Passenger *mid;int length;};void initQue(Que &q){//队列的建立函数q.front=(Passenger *)malloc(100*sizeof(Passenger));q.rear =q.front;q.length =0;}void addQue(Que &q,Passenger &p){//队列成员增加函数q.rear ->next =&p;p.pre =q.rear ;q.rear =q.rear ->next ;q.length ++;}int queLength(Que &q){//队列的长度函数return q.length ;}void outQue(Que &q){//队首出队函数if(queLength(q)>1){q.mid=q.front ->next ;q.front ->next =q.mid->next ;q.mid->next ->pre =q.front;q.mid->next =NULL;q.mid->pre =NULL;q.length --;}else{q.rear ->pre =NULL;q.rear=q.front ;q.rear ->next =NULL;q.length =0;}}struct Floor{//楼层类Que goUp;Que goDown;int callUp;int callDown;int totalNum;};//全局变量int passNum=0;Floor fl[15];Passenger pa[100];int i=0;//循环计数器;//函数模块extern void addPassenger(Passenger &p);extern void getInUp(Lift &l);extern void getInDown(Lift &l);extern void liftUp(Lift &l);extern void getOut(Lift &l);extern int ergodicFloorUp(Lift &l);extern int ergodicFloorDown(Lift &l);extern void UserFace(Lift &l);void initFloor(){//初始化每个楼层的函数for(i=1;i<15;i++){initQue(fl[i].goDown );initQue(fl[i].goUp );fl[i].totalNum =0;fl[i].callDown =0;fl[i].callUp =0;}}void initLift(Lift &l){//初始化电梯l.liftCon.rest.sympol =1;l.liftCon .up.sympol =0;l.liftCon .down .sympol =0;l.liftCon.rest.time =0;l.liftCon .up.time =0;l.liftCon .down .time =0;for(i=1;i<15;i++){l.light[i]=0;l.goalNum [i]=0;}l.paNum=0;l.presentFloor=1;tick=clock();l.workTime=l.workTimePre=(float)tick/CLK_TCK; }void addPassenger(Passenger &p){//创建一名乘客cout<<"该乘客所在楼层"<<endl;cin>>p.presentFloor;if(p.presentFloor <1||p.presentFloor >14){cout<<"楼层越界"<<endl;cout<<"重新输入"<<endl;cin>>p.presentFloor;}cout<<"该乘客要去的楼层"<<endl;cin>>p.goalFloor ;if(p.goalFloor <1||p.goalFloor >14) {cout<<"楼层越界"<<endl;cout<<"重新输入"<<endl;cin>>p.goalFloor ;}cout<<"该乘客的容忍时间"<<endl;cin>>p.tolerateTime ;if(p.goalFloor >p.presentFloor ){fl[p.presentFloor ].callUp =1;addQue(fl[p.presentFloor ].goUp ,p);}else{fl[p.presentFloor ].callDown =1;addQue(fl[p.presentFloor ].goDown ,p);}fl[p.presentFloor ].totalNum ++;tick=clock();p.initTime =(float)tick/CLK_TCK;passNum++;}void getInUp(Lift &l){//进入电梯往上行驶函数l.liftCon .rest.sympol =1;l.liftCon .down .sympol =0;l.liftCon .up .sympol =0;fl[l.presentFloor ].callUp =0;Sleep(500);cout<<"电梯门打开………………"<<endl;Sleep(500);cout<<"乘客正在进入电梯…"<<endl;Sleep(500);Sleep(500);cout<<"乘客正在进入电梯………"<<endl;Sleep(500);cout<<"乘客正在进入电梯…………"<<endl;Sleep(500);cout<<"乘客正在进入电梯……………"<<endl;Sleep(500);cout<<"乘客正在进入电梯………………"<<endl;tick=clock();l.workTime =(float)tick/CLK_TCK;while(l.paNum<2){if((l.workTime -fl[l.presentFloor ].goUp.front ->next ->initTime)<=fl[l.presentFloor ].goUp.front ->next ->tolerateTime ){l.light[fl[l.presentFloor].goUp .front->next ->goalFloor]=1;l.goalNum[fl[l.presentFloor].goUp .front->next ->goalFloor]++;outQue(fl[l.presentFloor ].goUp );l.paNum ++;}else{cout<<"有一名乘客因等待时间过长已经离开"<<endl;outQue(fl[l.presentFloor ].goUp );}if(queLength(fl[l.presentFloor ].goUp )==0){cout<<"乘客进入电梯完毕,电梯关门"<<endl;break;}}if(l.paNum ==2){cout<<"电梯已满员,电梯关门"<<endl;}}void getInDown(Lift &l){//进入电梯往下行驶函数l.liftCon .rest.sympol =1;l.liftCon .down .sympol =0;l.liftCon .up .sympol =0;fl[l.presentFloor ].callDown=0;Sleep(500);cout<<"电梯门打开………………"<<endl;Sleep(500);cout<<"乘客正在进入电梯…"<<endl;Sleep(500);Sleep(500);cout<<"乘客正在进入电梯………"<<endl;Sleep(500);cout<<"乘客正在进入电梯…………"<<endl;Sleep(500);cout<<"乘客正在进入电梯……………"<<endl;Sleep(500);cout<<"乘客正在进入电梯………………"<<endl;tick=clock();l.workTime =(float)tick/CLK_TCK;while(l.paNum<12){if((l.workTime -fl[l.presentFloor ].goDown.front ->next ->initTime)<=fl[l.presentFloor ].goDown.front ->next ->tolerateTime ){l.light[fl[l.presentFloor].goDown .front->next ->goalFloor]=1;l.goalNum[fl[l.presentFloor].goDown .front->next ->goalFloor]++;outQue(fl[l.presentFloor ].goDown );l.paNum ++;}else{cout<<"有一名乘客因等待时间过长已经离开"<<endl;outQue(fl[l.presentFloor ].goDown );}if(queLength(fl[l.presentFloor ].goDown )==0){cout<<"乘客进入电梯完毕,电梯关门"<<endl;break;}}if(l.paNum ==12){cout<<"电梯已满员,电梯关门"<<endl;}}void getOut(Lift &l){l.liftCon .rest.sympol =1;l.liftCon .down .sympol =0;l.liftCon .up .sympol =0;Sleep(500);cout<<"该楼层电梯内正有乘客出电梯…"<<endl;Sleep(500);cout<<"该楼层电梯内正有乘客出电梯……"<<endl;Sleep(500);cout<<"该楼层电梯内正有乘客出电梯………"<<endl;Sleep(500);cout<<"该楼层电梯内正有乘客出电梯…………"<<endl;Sleep(500);cout<<"该楼层电梯内正有乘客出电梯……………"<<endl;Sleep(500);cout<<"该楼层电梯内正有乘客出电梯………………"<<endl;l.light [l.presentFloor ]=0;l.paNum -=l.goalNum [l.presentFloor ];l.goalNum [l.presentFloor ]=0;cout<<"电梯内现在有"<<l.paNum <<" 人"<<endl;}int ergodicFloorUp(Lift &l){//电梯内人数为0时遍历函数if((l.liftCon .rest.sympol ) ==1){for(i=l.presentFloor;i<15;i++){if(fl[i].callDown ==1||fl[i].callUp ==1){return(1);}}return(0);}}int ergodicFloorDown(Lift &l){//电梯内人数为0时遍历函数if((l.liftCon .rest.sympol ) ==1){for(i=l.presentFloor;i>=1;i--){if(fl[i].callDown ==1||fl[i].callUp ==1){return(1);}}return(0);}}void liftDown(Lift &l){l.liftCon .rest.sympol =0;l.liftCon .down .sympol =1;l.liftCon .up .sympol =0;Sleep(500);cout<<"电梯正在下降…"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在下降……"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在下降………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在下降…………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在下降………………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);l.presentFloor --;cout<<"电梯正在下降…………………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;l.liftCon .down.time +=3;cout<<"是否有新的乘客出现?是1否0"<<endl;int j;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);}if(l.light[l.presentFloor ]!=1&&fl[l.presentFloor ].callDown !=1&&fl[l.presentFloor].callUp !=1){ cout<<"电梯内无乘客到该层,且该层没有呼叫电梯向下,电梯继续下降"<<endl;liftDown(l);}if(l.light [l.presentFloor ]==1&&fl[l.presentFloor ].callDown !=1){getOut(l);if(l.paNum >0){cout<<"电梯门已经关闭,电梯继续下降"<<endl;liftDown(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}break;}elsecontinue;}}}}}if(l.light [l.presentFloor ]!=1&&fl[l.presentFloor ].callDown ==1&&l.paNum <12){ cout<<"该层有人呼叫向下"<<endl;getInDown(l);//以防电梯里没人时,排队的人已经走了if(l.paNum >0){cout<<"电梯门已经关闭,电梯继续下降"<<endl;liftDown(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}break;}elsecontinue;}}}}}if(l.light [l.presentFloor ]==1&&fl[l.presentFloor ].callDown ==1){cout<<"该层有人呼叫向下且有电梯出电梯"<<endl;getOut(l);getInDown(l);if(l.paNum >0){cout<<"电梯门已经关闭,电梯继续下降"<<endl;liftDown(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}break;}elsecontinue;}}}}}if(fl[l.presentFloor ].callUp ==1){if(l.paNum ==0){cout<<"该层有人呼叫向上"<<endl;getInUp(l);if(l.paNum >0){cout<<"电梯门已经关闭,电梯上升"<<endl;liftUp(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}break;}elsecontinue;}}}}}}}void liftUp(Lift &l){if(fl[1].callUp==1){getInUp(l);}l.liftCon .rest.sympol =0;l.liftCon .down .sympol =0;l.liftCon .up .sympol =1;Sleep(500);cout<<"电梯正在上升…"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在上升……"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在上升………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在上升…………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);cout<<"电梯正在上升………………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;Sleep(500);l.presentFloor ++;cout<<"电梯正在上升…………………"<<endl;cout<<"电梯在"<<l.presentFloor <<" 层"<<endl;l.liftCon .up.time +=3;cout<<"是否有新的乘客出现?是1否0"<<endl;int j;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);}if(l.light[l.presentFloor ]!=1&&fl[l.presentFloor ].callUp !=1&&fl[l.presentFloor].callDown !=1 ){ cout<<"电梯内无乘客到该层,且该层没有呼叫电梯向上,电梯继续上升"<<endl;liftUp(l);}if(l.light [l.presentFloor ]==1&&fl[l.presentFloor ].callUp !=1){getOut(l);if(l.paNum !=0){l.liftCon .rest.sympol =0;l.liftCon .down .sympol =1;l.liftCon .up .sympol =0;cout<<"电梯门已经关闭,电梯继续上升"<<endl;liftUp(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}}elsecontinue;}}}}}if(l.light [l.presentFloor ]!=1&&fl[l.presentFloor ].callUp ==1&&l.paNum <12){cout<<"该层有人呼叫向上"<<endl;getInUp(l);if(l.paNum !=0){l.liftCon .rest.sympol =0;l.liftCon .down .sympol =1;l.liftCon .up .sympol =0;cout<<"电梯门已经关闭,电梯继续上升"<<endl;liftUp(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}}elsecontinue;}}}}}if(l.light [l.presentFloor ]==1&&fl[l.presentFloor ].callUp ==1){cout<<"该层有人呼叫向上且有乘客出电梯"<<cout;getOut(l);getInUp(l);if(l.paNum !=0){cout<<"电梯门已经关闭,电梯继续上升"<<endl;liftUp(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}}elsecontinue;}}}}}if(fl[l.presentFloor ].callDown ==1){if(l.paNum ==0){cout<<"该层有人呼叫向下"<<endl;getInDown(l);if(l.paNum !=0){cout<<"电梯门已经关闭,电梯下降"<<endl;liftDown(l);}else{if(ergodicFloorUp(l)==1){liftUp(l);}else{if(ergodicFloorDown(l)==1){liftDown(l);}else{while(1){cout<<"现在无人使用电梯,电梯静止在"<<l.presentFloor <<" 层"<<endl;cout<<"是否返回主菜单?是1否0"<<endl;int k;cin>>k;if(k!=0){UserFace(l);}cout<<"是否有新的乘客出现?是1否0"<<endl;cin>>j;if(j!=0){system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}}elsecontinue;}}}}}}}void UserFace(Lift &l){system("cls");int choose;cout<<">>>>>>>>>>>>>>>>>>>>>>>欢迎进入电梯模拟运行系统<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl;cout<<"**"<<""<<"**"<<endl;cout<<"**"<<" ①模拟电梯运行状态"<<"**"<<endl;cout<<"**"<<""<<"**"<<endl;cout<<"**"<<""<<"**"<<endl;cout<<"**"<<" ②统计电梯每层使用人数"<<"**"<<endl;cout<<"**"<<""<<"**"<<endl;cout<<"**"<<""<<"**"<<endl;cout<<"**"<<" ③退出系统"<<"**"<<endl;cout<<"**"<<""<<"**"<<endl;cout<<"**"<<"********************************************************************"<<"**"<<endl;cin>>choose;switch(choose){case 1:system("cls");addPassenger(pa[passNum]);if(pa[passNum-1].presentFloor >l.presentFloor ){liftUp(l);}else if(pa[passNum-1].presentFloor <l.presentFloor){liftDown(l);}else if(pa[passNum-1].goalFloor >l.presentFloor ){getInUp(l);liftUp(l);}else{getInDown(l);liftDown(l);}break;case 2:system("cls");for(int n=1;n<15;n++){cout<<n<<"层使用人数为"<<fl[n].totalNum<<endl;}cout<<"输入1返回主界面"<<endl;cin>>n;if(n==1){UserFace(l);}break;}}int main(){Lift f;initFloor();initLift(f);UserFace(f); return 0;}。

电梯模拟C语言数据结构中国地质大学改进版

电梯模拟C语言数据结构中国地质大学改进版

数据结构课程设计学生姓名:庞晓健学号:***********院(系):计算机学院专业:信息安全2014年 3月21日题目:电梯模拟1、问题描述:模拟某校九层教学楼的电梯系统。

该楼有一个自动电梯,能在每层停留,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

电梯一共有七个状态,即正在开门(Opening)、已开门(Opened)、正在关门(Closing)、已关门(Closed)、等待(Waiting)、移动(Moving)、减速(Decelerate)。

乘客可随机地进出于任何层。

对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

模拟时钟从0开始,时间单位为0.1秒。

人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;电梯加速需要15t;上升时,每一层需要51t,减速需要14t;下降时,每一层需要61t,减速需要23t;如果电梯在某层静止时间超过300t,则驶回1层候命。

#include<stdio.h>#include<time.h>#include<stdlib.h>#include<malloc.h>#define MaxSize 5 //电梯所能承载的最大人数#define N 5typedef enum{Up,Down,Free} StateofElevator; //电梯的状态typedef struct //************************** 乘客结构体{int FloorofPerson; //乘客所在楼层int GoFloor; //乘客要去楼层int WaitingTime; //乘客的最大容忍等待时间int Direction; //方向int InorOut; //乘客是否已出电梯int Leave; //乘客是否离去int WaitedTime; //乘客已经等待的时间}Person;typedef struct //******************************电梯结构体{int Floor; //所在楼层StateofElevator State; //运行方向状态int NumberofPerson; //装载乘客人数}Elevator;Person Passenger[9][N]; //全局结构体二维数组保存整栋楼的乘客的相关信息Person PassengerInElevator[MaxSize]; //在电梯中的乘客的相关信息存储在结构体一维数组中int b[9]; //每层楼的人数int InCount[9]; //每层楼进入电梯的实际人数int OutCount[9]; //每层楼走出电梯的实际人数int tclock=0; //电梯运行时的全局软时钟int InTime[9]; //每层楼乘客进入电梯的时间int OutTime[9]; //每层楼乘客出电梯的时间int In(int y,int x,StateofElevator State1) //乘客进入电梯,每次乘客进入电梯后将该层的乘客重新排序( y表示电梯当前人数;x表示楼层){int m=y; //保存电梯当前人数int p,q,l,v=0,et;int d =1;if(State1==Up) // 电梯当前运行方向d =1;if(State1==Down)d =0;for(p=0;p<b[x];p++){if(Passenger[x][p].Direction==d &&Passenger[x][p].Leave==0)//该x层乘客p的方向与电梯方向一致且未离开,若电梯未满,则进电梯{if(m ==MaxSize){printf("电梯现在已经超载,请您等待片刻!\n");break; //该楼层的其他乘客等待一段时间}m ++; //电梯内人数增加for(q=0;q<MaxSize;q++){if(PassengerInElevator[q].InorOut==0)//如果电梯内乘客q已出电梯,则乘客p入电梯{PassengerInElevator[q]=Passenger[x][p];//乘客正式进入电梯PassengerInElevator[q].InorOut=1;//乘客已经进入电梯PassengerInElevator[q].Leave=1;PassengerInElevator[q].WaitedTime=0;PassengerInElevator[q].WaitingTime=0;Passenger[x][p].Direction=-2;Passenger[x][p].FloorofPerson=-2;Passenger[x][p].InorOut=-2;Passenger[x][p].Leave=-2;//printf("目标楼层:", Passenger[x][p].GoFloor);Passenger[x][p].WaitedTime=0;Passenger[x][p].WaitingTime=0;//进了电梯表明乘客即可到达目的地从而离开系统break;}}}}InCount[x]=m-y; //每层楼进入电梯的实际人数/*将本楼层的乘客信息重新排列,将该层剩余乘客信息放入全局结构体二维数组*/ Person *temp=(Person *)malloc((b[x]-InCount[x])*sizeof(Person)); //临时数组for(et=0;et<(b[x]-InCount[x]);et++)//电梯外剩余乘客{Passenger[x][et]=temp[et];}b[x]=b[x]-InCount[x];InTime[x]=InCount[x]*25;tclock+=InTime[x];printf("在%dt时刻第%d楼层有%d个人进入电梯!\n",tclock,x,(m-y));//printf("目标楼层\n", )return m;}int Out(int floor,int number) //乘客出电梯,每次乘客出电梯将全局数组中的乘客信息重新修改,floor表示楼层,number表示电梯内人数{int i;int k=number;//电梯内剩余的人for(i=0;i<MaxSize;i++){if(PassengerInElevator[i].GoFloor==floor&&PassengerInElevator[i].InorOut==1&&Passeng erInElevator[i].Leave==1){k--;PassengerInElevator[i].InorOut=0; //到站的乘客出电梯}}OutCount[floor]=number-k;OutTime[floor]=OutCount[floor]*25;tclock+=OutTime[floor];printf("在%dt时刻第%d楼层有%d个人已经到达地!\n",tclock,floor,OutCount[floor]);return k;}void Open() //电梯开门{tclock+=20;printf("电梯的门正在打开,请您稍候\n");printf("在%dt时刻电梯的门已经打开!\n",tclock);}void Close() //电梯关门{tclock+=20;printf("电梯的门正在关闭,请您稍候\n");printf("在%dt时刻电梯的门已经关闭!\n",tclock);}int Go(Elevator *ele) //电梯正在运行{Elevator *e=ele;if(e->State==Up){printf("电梯正在向上运行\n");printf("\n");e->Floor++;}if(e->State==Down){e->Floor--;printf("电梯正在向下运行\n");printf("\n");}tclock+=10;return (e->Floor);}int Initialize() //系统最开始的初始化{int i,j,k,m,n,s,c,u,v=0;srand(time(0)); //获取时间种子for(i=0;i<=8;i++) //每层楼的人数随机初始化b[i]=rand()%N;for(m=0;m<b[0];m++) //最底层楼的乘客信息初始化Passenger[0][m].Direction=1;Passenger[8][m].GoFloor=1+rand()%7;for(c=0;c<b[8];c++) //最高层的乘客信息初始化Passenger[8][c].Direction=0;Passenger[8][c].GoFloor=-1+rand()%8;for(n=1;n<=7;n++) //每层楼每个乘客方向初始化for(s=0;s<b[n];s++)Passenger[n][s].Direction=rand()%2;for(j=0;j<=8;j++) //每层楼的乘客的相关信息随机初始化for(k=0;k<b[j];k++){Passenger[j][k].FloorofPerson=j;Passenger[j][k].WaitingTime=100+rand()%100;Passenger[j][k].InorOut=0; //电梯外Passenger[j][k].Leave=0; //未离开Passenger[j][k].WaitedTime=0;if(Passenger[j][k].Direction==1)Passenger[j][k].GoFloor=(j+1)+rand()%(8-j);if(Passenger[j][k].Direction==0&&j!=1)Passenger[j][k].GoFloor=rand()%(j-1);if(Passenger[j][k].Direction==0&&j==1)Passenger[j][k].GoFloor=0;}for(u=0;u<=8;u++) // 遍历整栋楼,有人则返回1,没人返回0;if(b[u]==0)v++;if(v==9)return 0;elsereturn 1;}int Test() // 考查整栋楼有无请求,无返回0,有返回1;{int cs,cf=0;for(cs=0;cs<9;cs++)if(b[cs]==0)cf++;if(cf==9)return 0;elsereturn 1;}void OnFree(){printf("电梯现在在第一楼!电梯正处于空闲状态!!\n");}void Run(Elevator *left){Elevator *ts=left;int floor=ts->Floor; //保存电梯当前的所在楼层数int number=ts->NumberofPerson; //保存电梯当前的人数int ps,ms,ns,bs=0,ls=0,pt,yt;int loop=0;//循环次数while(loop!=15 ){if(Test()==0) //考查整栋楼有无请求,无返回0,有返回1;{OnFree(); //输出电梯现在在第一楼!电梯正处于空闲状态!}else{bs=0;printf("在%dt时刻电梯正在第%d层!\n",tclock,floor);for(ns=0;ns<number;ns++)if(PassengerInElevator[ns].GoFloor!=floor)bs++;if(b[floor]==0&&bs==number) //电梯外没人,没人下{//电梯不开门,继续上升或下降if(number!=0) //电梯里有人{if(PassengerInElevator[0].Direction==1&&floor<8)//往上{ts->State=Up;floor=Go(ts); //电梯移动if(floor==9){printf("在%dt时刻电梯正在%d楼层!\n",tclock,floor);Open();number=Out(floor,number); //乘客出电梯OutTime[floor]=OutCount[floor]*25; //乘客出电梯的耗时ts->State=Down;number=In(number,floor,ts->State);InTime[floor]=InCount[floor]*25; //乘客进入电梯的耗时Close();/*重新计算每层楼的正在等待的乘客的需等待时间*/for(ps=0;ps<=9;ps++)for(ms=0;ms<b[ps];ms++){if(Passenger[ps][ms].InorOut==0&&Passenger[ps][ms].Leave==0)Passenger[ps][ms].WaitedTime+=(50+OutTime[floor]+InTime[floor]);}if(number==0)floor=Go(ts);}}if(PassengerInElevator[0].Direction==0&&floor>0) //往下{ts->State=Down;floor=Go(ts);if(floor==0){printf("在%dt时刻电梯正在%d楼层!\n",tclock,floor);Open();number=Out(floor,number); //乘客出电梯OutTime[floor]=OutCount[floor]*25; //乘客出电梯的耗时ts->State=Up;number=In(number,floor,ts->State);InTime[floor]=InCount[floor]*25; //乘客进入电梯的耗时Close();/*重新计算每层楼的正在等待的乘客的需等待时间*/for(ps=0;ps<=9;ps++)for(ms=0;ms<b[ps];ms++){if(Passenger[ps][ms].InorOut==0&&Passenger[ps][ms].Leave==0)Passenger[ps][ms].WaitedTime+=(50+OutTime[floor]+InTime[floor]);}floor=Go(ts);}}}else //电梯里没有人{if(ts->State==Up){if(floor==8)ts->State=Down;elsefloor=Go(ts);}if(ts->State==Down){if(floor==0)ts->State=Up;elsefloor=Go(ts);}}for(pt=0;pt<=9;pt++)for(yt=0;yt<b[pt];yt++){if(Passenger[pt][yt].InorOut==0&&Passenger[pt][yt].Leave==0)Passenger[pt][yt].WaitedTime+=10;}}else{Open();number=Out(floor,number); //乘客出电梯OutTime[floor]=OutCount[floor]*25; //乘客出电梯的耗时number=In(number,floor,ts->State);InTime[floor]=InCount[floor]*25; //乘客进入电梯的耗时Close();/*重新计算每层楼的正在等待的乘客的需等待时间*/for(ps=0;ps<=9;ps++)for(ms=0;ms<b[ps];ms++){if(Passenger[ps][ms].InorOut==0&&Passenger[ps][ms].Leave==0)Passenger[ps][ms].WaitedTime+=(50+OutTime[floor]+InTime[floor]);}/*服务完本层,电梯正式运行*/ if(PassengerInElevator[0].Direction==1&&floor<9){ts->State=Up;floor=Go(ts);if(floor==9){printf("在%dt时刻电梯正在%d楼层!\n",tclock,floor);Open();number=Out(floor,number); //乘客出电梯OutTime[floor]=OutCount[floor]*25; //乘客出电梯的耗时ts->State=Down;number=In(number,floor,ts->State);InTime[floor]=InCount[floor]*25; //乘客进入电梯的耗时Close();/*重新计算每层楼的正在等待的乘客的需等待时间*/for(ps=0;ps<=9;ps++)for(ms=0;ms<b[ps];ms++){if(Passenger[ps][ms].InorOut==0&&Passenger[ps][ms].Leave==0)Passenger[ps][ms].WaitedTime+=(50+OutTime[floor]+InTime[floor]);}if(number==0)floor=Go(ts);}}if(PassengerInElevator[0].Direction==0&&floor>0){ts->State=Down;floor=Go(ts);if(floor==0){printf("在%dt时刻电梯正在%d楼层!\n",tclock,floor);Open();number=Out(floor,number); //乘客出电梯OutTime[floor]=OutCount[floor]*25; //乘客出电梯的耗时ts->State=Up;number=In(number,floor,ts->State);InTime[floor]=InCount[floor]*25; //乘客进入电梯的耗时Close();/*重新计算每层楼的正在等待的乘客的需等待时间*/for(ps=0;ps<=9;ps++)for(ms=0;ms<b[ps];ms++){if(Passenger[ps][ms].InorOut==0&&Passenger[ps][ms].Leave==0)Passenger[ps][ms].WaitedTime+=(50+OutTime[floor]+InTime[floor]);}floor=Go(ts);}}}}//乘客向电梯请求loop++;}}//主函数int main(){int number,floor,state;Elevator left;left.State=Free; //电梯初始化left.Floor=1;left.NumberofPerson=0;for(number=0;number<MaxSize;number++) //电梯内乘客信息初始化{PassengerInElevator[number].InorOut=0;PassengerInElevator[number].Direction=-1;PassengerInElevator[number].FloorofPerson=-1;PassengerInElevator[number].Leave=0;PassengerInElevator[number].GoFloor=rand;PassengerInElevator[number].WaitedTime=0;PassengerInElevator[number].WaitingTime=0;}for(floor=0;floor<=8;floor++){InCount[floor]=0;OutCount[floor]=0;InTime[floor]=0;OutTime[floor]=0;}state=Initialize();if(state==0)OnFree();else // 判断电梯最初运行方向{if(b[1]==0) // 1楼没人,而整栋楼有人{left.State=Up;Run(&left);}else{if(Passenger[1][0].Direction==1){left.State=Up;Run(&left);}if(Passenger[1][0].Direction==0){left.State=Down;Run(&left);}}}}。

电梯运行数据采集与安全分析模型

电梯运行数据采集与安全分析模型
无线传输
采用无线通信技术,如Wi-Fi、蓝牙等,实现数据 的无线传输,具有灵活性和便捷性。
云存储技术
利用云计算技术,将电梯运行数据存储在云端服 务器中,实现数据的长期保存和随时访问。
03
电梯安全分析模型
建立
故障模式与影响分析
故障模式识别
通过对电梯历史故障数据的挖掘和分 析,识别出常见的故障模式,如门系 统故障、控制系统故障等。
在电梯各关键部位部署传 感器,实现数据的实时采 集和传输。
数据集中处理
通过数据采集器将各传感 器数据传输至中央处理单 元,进行统一处理和分析 。
远程监控中心
建立远程监控中心,实现 对电梯运行数据的远程实 时监测和故障预警。
数据传输与存储技术
有线传输
通过电缆等有线方式将数据传输至中央处理单元 ,具有传输稳定、抗干扰能力强的优点。
跨领域合作
加强与其他领域的合作,如物联网、 大数据等,共同推动电梯安全运行技 术的发展和创新。
深度学习应用
探索深度学习在电梯安全分析中的应用,利 用神经网络等技术对电梯运行数据进行深入 挖掘和分析,提高故障预警的准确性和及时 性。
标准化与规范化
推动电梯运行数据采集与安全分析模型的 标准化和规范化工作,为行业提供统一的 标准和规范,促进技术的普及和应用。
和故障情况。
数据处理
将采集到的数据进行预处理,包 括数据清洗、去噪、滤波等操作
,以提取有效的特征信息。
结果分析
对处理后的数据进行统计分析、 时域分析、频域分析等,以评估 电梯的安全性能。根据实验结果 ,制定相应的维护保养和故障预
防措施。
05
安全分析模型在电
梯中的应用
故障预警与诊断

数据结构课程设计报告--电梯模拟

数据结构课程设计报告--电梯模拟

课程设计课程名称数据结构题目名称 2.8电梯模拟(难度5) 学生学院计算机学院专业班级 XXXXXXXXXX 学号XXXXXXXX学生姓名 XXX 指导教师 XX2013年7月4日电梯模拟系统一、简单介绍1、问题描述设计一个电梯模拟系统,这是一个离散的模拟程序,因为电梯系统是乘客和电梯等“活动体”构成的集合,虽然他们彼此交互作用,但他们的行为是基本独立的,在离散的模拟中,以模拟时钟决定每个活动体的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一个时刻。

2、基本要求(1)、模拟某校五层教学楼的电梯系统。

该楼有一个自动电梯,能在每层停留。

五个楼层由下至上依次称为地下层、第一层、第二层、第三层,第四层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

(2)、乘客可随机地进出于任何层。

对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

(3)、模拟时钟从0开始,时间单位为0.1秒。

人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。

(4)、按时序显示系统状态的变化过程:发生的全部人和电梯的动作序列。

二、设计目的当初之所以选择做电梯模拟这个课题,主要是因为觉得当今时代需要,所以觉得想尝试一下,因为为了方便,我们都会选择乘坐电梯,既省时间又省力,粗略看了书本里面的描述,觉得应该不难,只是按照要求输出动作序列即可,后来经过老师的辅导,才发现,原来自己选了个最难的课程设计,也问了同学,很多都是因为太难了才没有选这个题目,因为它远比想象中的复杂的多很多,它实际上是模拟现实中的电梯的运行状况,因此要考虑很多现实中遇到的实际情况,坐过电梯的人都会应该有点印象,现实中的电梯是按照每个人按下按钮的时间顺序进行服务的,但是,并不是将一个人接进来后就直接开往其目的楼层就完事,其实,当电梯将某个人送往其目的楼层的过程中,经过某层时,如果此层的人也要用电梯,虽然其按按钮的时间有可能比先前那个人晚,但是电梯依旧会开门将其接入,然后继续送前一个人去目的地,之后再送这个人去他的目的楼层,如果有多人在电梯中时,也是按照申请时间的先后决定先去哪层的,同理,若在某层,电梯中的某个人,或者某几个人要在该层下,电梯也不能忽略这些,而是要先开门使要下的人出去,之后继续开往先前的楼层,所以设计时,每当电梯上升或下降一层后,都应该检测现在电梯所处的这层有没有人有用电梯的请求,或者电梯中的人有没有要在该层下的情况,若有则电梯要在该层停一下,否则继续上升或下降….此外,当电梯停在某一层时不外乎三种情况:1.此层有个人{或有几个人}等候要用电梯 2.电梯中的某个人或者某几个人要在该楼层下 3.则是前面两种情况的结合,此时情况相当复杂,因为,题目要求电梯开门和关门都要消耗一定的时间(题目中没有提电梯上升或者下降一层需要多少时间,所以不妨就假定为30t),而且人进电梯和人出电梯时也要消耗一定的时间,这说明了当同一时刻有至少两个以上的人要进行同一种动作的时候(比方说都是要出电梯,或都是在某一层等电梯,电梯来了后都要进去),但是因为每个人进出电梯都要消耗时间,所以不能单纯的同时让这些人同进或同出电梯,而是要有先后顺序的进出,此为其一………其二,题目中还提到每个人等候电梯到来时,都有一个容忍时间(每个人不一定相同),所以,万一,在他按下按钮到电梯开到他所在的那层楼的间隔时间大于他的最大容忍时间,他会先行离开,但这一切电梯并不知道啊,所以电梯依旧会按照每个申请使用电梯的时间进行服务,正是因为这样,极有可能发生这样的情况:电梯开到某层后打开电梯门,但是既没有人出去,也没有人进来………其三,根据题目中的要求,当电梯停在某层时候,有人进出,电梯每隔40t测试一次,若无人进出,则关门,关门完后,若300t时间内没有人使用,则自动开到第1层等候下次的使用(第1层楼是电梯的‘本垒层’,电梯“空闲”时,将来到该层候命)等等等等…………以上各种情况(还有一些情况这里没列举)都是要在做这道题时需要考虑的,否则这题的‘电梯’根本模拟不起来三、设计概要本程序中所有的抽象数据类型的定义及其相应的操作函数的定义如下:电梯的结构体dianti/*此电梯结构体中分别定义了电梯所在楼层,电梯的现有人数(现实中的电梯有个最大栽客量,在此题中不妨规定为最大12人),以及电梯门的状态(0为关,1为开),至于为什么定义电梯门的状态,并不是多此一举,而是我在调试的过程中发现必须加上的,否则,在一些情况下会出现电梯动作的局部重复,从而导致整个程序的失败*/人的结构体man/*在人的结构体中,分别定义了人的名字(这个有利于区别各个人),最大容忍时间(题目中的要求),所在的楼层,要去的目的楼层,两个标志位,其中一个标志记录该人是否还在电梯里面,另一个标志记录的是该人是否已经使用过电梯*/事件结构体结点SLNode/*在事件的结构体中分别定义了,事件信息,事件发生的时刻,以及指向下一个事件结构结点的指针*/void ListInitiate(SLNode**head)/*初始化链表*/void LinListSort(SLNode *head)/*用按发生时间的顺序给事件链表中的事件排序*/void Destroy(SLNode * *head)/*撤消链表*/void OPEN(SLNode *head,dianti dt,int now)/*电梯开门函数,将电梯开门的事件信息插入到事件链表中去*/void CLOSE(SLNode *head,dianti dt,int now)/*电梯关门函数,将电梯关门的事件信息插入到事件链表中去*/void GET_IN(SLNode *head,dianti dt,int now)/*人进电梯的函数,将人进电梯时候的各种信息插入到事件链表中去*/void GET_OUT(SLNode *head,dianti dt,int now)/*人出电梯的函数,将人出电梯时候的各种信息插入到事件链表中去*/注释:以上四个函数基本是用来完成人和电梯的动作序列int gettime(SLNode *head)/*返回最新事件(即事件涟表最后一个结点)的发生时间,此为该程序中最重要的一个函数之一,并且为调用最频率最高的一个函数*/void print(SLNode *head)/*将事件链表中的事件一一显示出来,即为最后显示电梯和人动作序列的函数*/void Go(SLNode *head,int n,dianti dt,clock_t s[1000],man r[1000])/*电梯运行函数,本程序中最最重要的函数,可以说这是这道程序中的灵魂函数,根据申请使用电梯的所有人的信息,以及所有事件发生时的时刻,将所有情况的处理都放在在其中,所以此函数的代码相当占了程序代码的百分之七十多了(程序总代码长度超过1200行)*/ 注释:以上各个函数以及抽象数据结构的定义都放在头文件”elevator.h”中void main()/*该程序的主函数*/程序流程图如下:四、详细设计本程序的所有抽象数据类型的具体实现一机相应的操作函数的伪算法如下:typedef struct{int lc;//电梯所在楼层int rs;//电梯中的人数,规定最大乘坐人数为12int door;//门的状态0关1开}dianti;typedef struct{char name[50]; //这个人的名字或序号(以示区别)int rrsj;//一个人的容忍时间int lc;//所在楼层int md;//目的楼层int biaozhi; //此标志位记录人使用电梯是否完成或者是否离去,为1表明使用过(离去),否则为0int in; //标志位,为1时表明人在电梯中,否则为0}man;typedef struct Node{char a[1000];//事件信息int mytime;//事件所发生的时间struct Node *next;}SLNode;//初始化链表void ListInitiate(SLNode* *head){if((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);(*head)->next = NULL;}//将事件结点插入到事件链表中的第i个位置中去int ListInsert(SLNode *head,int i,char a[1000],int t){SLNode *p,*q;int j;p=head;j=-1;while(p->next!=NULL && j<i-1){p=p->next;j++;}if(j!=i-1){printf("\n 插入位置参数错!\n");return 0;}if((q=(SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1);q->mytime = t;strcpy(q->a,a);q->next =p->next;p->next =q;return 1;}//用按发生时间的顺序给事件排序void LinListSort(SLNode *head){SLNode *curr,*pre,*p,*q;p=head->next;head->next=NULL;while(p!=NULL){curr=head->next;pre=head;while(curr!=NULL && curr->mytime<=p->mytime){pre=curr;curr=curr->next;}q=p;p=p->next;q->next=pre->next;pre->next=q;}}//销毁链表void Destroy(SLNode * *head){SLNode *p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head = NULL;/*电梯动作:1.开始开门,20t,开门结束;2.开始关门,20t,关门结束;3.从n-1层开始移动,30t,到达第n层;4.开始等待,有人来或者300t,等待结束;人的动作:1.开始等待,x<=最大容忍时间,等待结束;2.开始进门,25t,进门结束;3.开始出门,25t,出门结束;*///电梯开门void OPEN(SLNode *head,dianti dt,int now){char a[1000]={"电梯开始开门......"},b[1000]={"开门完毕!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+20);g++;dt.door=1; //门的状态为开}//电梯关门void CLOSE(SLNode *head,dianti dt,int now){char a[1000]={"电梯开始关门......"},b[1000]={"关门完毕!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+20);g++;dt.door=0; //门的状态为关}//人进电梯void GET_IN(SLNode *head,dianti dt,int now){char a[1000]={"人开始进门......"},b[1000]={"已经进入!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+25);g++;dt.rs++; //电梯人数加一个}//人出电梯void GET_OUT(SLNode *head,dianti dt,int now){char a[1000]={"人开始出门......"},b[1000]={"已经出门!"};ListInsert(head,g,a,now);g++;ListInsert(head,g,b,now+25);g++;dt.rs--; //电梯中的人数减一个}//返回最新事件(即事件涟表最后一个结点)的发生时间int gettime(SLNode *head){SLNode *pre,*curr;curr=head->next;pre=head;while(curr!=NULL){pre=curr;curr=curr->next;}return pre->mytime;}//电梯运行函数void Go(SLNode *head,int n,dianti dt,clock_t s[1000],man r[1000]){int k=0,i,time,m,flag=0,counter=0; //flag 记录是否有多个人在同一层或去同一层楼for(i=0;i<n;i++){if(dt.door==0){ //初始电梯门状态为关着if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0){//人在该楼层,要进去电梯,且电梯人数不超过规定的12人if(i==0) time=s[i]/100; //记录当时时间else time=gettime(head);if(flag==0&&dt.door==0){OPEN(head,dt,time); //开门dt.door=1;}if((time-s[i]/100)<=r[i].rrsj){time=gettime(head);GET_IN(head,dt,time); //若超过此人的最大容忍时间,该人将放弃乘坐电梯r[i].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d 层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}time=gettime(head); //获得事件链表最后一个结点的时间(即当前时刻)if(dt.lc==r[i+1].lc) {flag=1;counter++;continue;} //该层的所有人都进入电梯else{if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40); //电梯经过40t时间后,若无人进出,则关门dt.door=0; //置电梯门状态为关g++;CLOSE(head,dt,time+40);}}/* 本层人已经全部进入电梯,接下来电梯启动按每个人事件发生的时间顺序将其送往目的楼层*/flag=0;if(dt.lc<=r[i-counter].md){time=gettime(head);while(dt.lc<=r[i-counter].md){ //开往该层第一个人的目的楼层flag=0;if(dt.lc<r[i-counter].md){dt.lc++;time+=30;}for(m=0;m<n;m++){if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){//若该楼层有人等候,使其进入if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;//电梯开门,并设置其门状态为开}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i-counter].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40); //电梯经过40t时间后,若无人进出,则关门dt.door=0;//置电梯门状态为关g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}else if(dt.lc>=r[i-counter].md){time=gettime(head);while(dt.lc>=r[i-counter].md){flag=0;if(dt.lc>r[i-counter].md){dt.lc--; //30t,电梯下降一层time+=30;}for(m=0;m<n;m++){if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){ //若该楼层有人等候,使其进入if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i-counter].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}i=i-counter;}else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1){ //人在电梯中,在该楼层要出去if(i==0)time=s[0]/100;else time=gettime(head);for(m=0;m<n;m++){if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){ //若该楼层有人等候,使其进入if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}//1...if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0) ,,,,人在该楼层,要进去电梯//2...else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,人在电梯中,在该楼层要出去//3...else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0),,,,,,,,,,,人不在该楼层,要进去电梯//4...else if(dt.lc!=r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,,人在电梯里,该楼层不是其目的楼层else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0){ //3...人不在该楼层,要进去电梯flag=0;if(i==0)time=s[0]/100; //以该事件发生的时间为起始时间else time=gettime(head); //取当前时间if(dt.lc<=r[i].lc){while(dt.lc<=r[i].lc){flag=0;if(dt.lc<r[i].lc){dt.lc++;time+=30;//30t,电梯上升一层}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].lc) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}else if(dt.lc>=r[i].lc){while(dt.lc>=r[i].lc){flag=0;if(dt.lc>r[i].lc){dt.lc--;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].lc) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}/*接下来将电梯里的人按时间顺序送到各自的目的楼层*/time=gettime(head);if(dt.lc<=r[i].md&&r[i].in==1){while(dt.lc<=r[i].md){flag=0;if(dt.lc<r[i].md){dt.lc++;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}else if(dt.lc>=r[i].md&&r[i].in==1){while(dt.lc>=r[i].md){flag=0;if(dt.lc>r[i].md){dt.lc--;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}elseif(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯elseif(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}}//1...if(dt.lc==r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0) ,,,,人在该楼层,要进去电梯//2...else if(dt.lc==r[i].md&&r[i].biaozhi==0&&r[i].in==1),,,,,,,,,,人在电梯中,在该楼层要出去//3...else if(dt.lc!=r[i].lc&&dt.rs<12&&r[i].biaozhi==0&&r[i].in==0),,,,,,,,,人不在该楼层,要进去电梯else if(dt.lc!=r[i].md&&r[i].biaozhi==0&&r[i].in==1){ //4...人在电梯里,该楼层不是其目的楼层flag=0;if(i==0)time=s[0]/100; //以该事件发生的时间为起始时间else time=gettime(head); //取当前时间if(dt.lc<=r[i].md){while(dt.lc<=r[i].md){flag=0;if(dt.lc<r[i].md){dt.lc++;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}else if(dt.lc>=r[i].md){while(dt.lc>=r[i].md){flag=0;if(dt.lc>r[i].md){dt.lc--;time+=30;}for(m=0;m<n;m++){//若该楼层有人等候,使其进入if(dt.lc==r[m].lc&&r[m].biaozhi==0&&r[m].in==0&&dt.rs<12){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}if((time-s[m]/100)<=r[m].rrsj){time=gettime(head);GET_IN(head,dt,time);r[m].in=1;}else if(((time-s[m]/100)>r[m].rrsj)&&r[m].biaozhi==0){r[m].biaozhi=1;printf("\n此时有人离开,以下为离开的人的信息:\n");printf("时间:%d(单位:t) 发生的事件超过用户的容忍时间,第%d层楼的人已经离去~~\n",s[m]/100+r[m].rrsj,dt.lc);}flag=1;}//若该楼层有人要出去,使其出电梯,置其状态为1表示该人已经使用过电梯else if(dt.lc==r[m].md&&r[m].biaozhi==0&&r[m].in==1){if(flag==0&&dt.door==0){OPEN(head,dt,time);dt.door=1;}time=gettime(head);GET_OUT(head,dt,time);r[m].biaozhi=1;r[m].in=0;flag=1;}}if(dt.lc==r[i].md) break;if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);time=gettime(head);}}if(dt.door==1){time=gettime(head);ListInsert(head,g,"该层已无人进出,关门",time+40);dt.door=0;g++;CLOSE(head,dt,time+40);}}}}}time=gettime(head);if(dt.lc!=1){ListInsert(head,g,"在该层等候300t时间,无人进出,开始返回第一层",time+300);time=gettime(head);if(dt.lc>1){ListInsert(head,g,"电梯已经回到第一层,等候使用......",time+(dt.lc-1)*30);}else {ListInsert(head,g,"电梯已经回到第一层,等候使用......",time+30);}dt.lc=1;}else{time=gettime(head);ListInsert(head,g,"此时电梯已经在第一层,等候使用......",time);}}void print(SLNode *head){SLNode *p;p=head;if(p->next==NULL)printf("\n 错误,链表为空!\n");//此语句为检验之用while(p->next!=NULL){printf("\n时间:%d(单位:t) 动作:%s",p->next->mytime,p->next->a);p->next=p->next->next;}}//欢迎界面void Welcome(){char c;printf("\n\n\n******************************************************************************\ n");printf("______________________________________________________________________________\ n\n\n\n\n");printf(" ______________ 欢迎使用这个关于电梯模拟的软件! _______________\n");printf(" ______________ 制作者:XXX _______________\n");printf(" 班级:XXX 学号:XXXX \n\n");printf("\n\n\n________________________________________________________________~((M o M))~\n\n");printf("******************************************************************************\ n\n\n");printf(" Please input any key to continue~~");c=getche( );fflush(stdin);//不清除缓冲去会出错system("cls");}//主函数int main(){int t,a,k=0,i,flag=0;SLNode *head;//数组,用来存输入数据时候所用时间clock_t start,shijian[1000],In_put[1000][2];//为了保证输入数据时计时暂停,定义一个In_put[]dianti dt;Welcome();printf("\n\n时间单位t:0.1(秒)");printf("\n楼层范围:0--5(层)");printf("\n最大载客量:12(人)\n");start=clock();dt.lc=1; //开始电梯停在第一层dt.rs=0; //电梯最大人数为12,开始时候电梯内人数为空dt.door=0;t=(int)start/100;printf("\n当前时刻:%d(t) 计时开始.....\n",t);ListInitiate(&head);while(1){printf("\n0.下班楼空1.有人要用电梯\n");printf("请选择指令:");scanf("%d",&a);if(a==0){ printf("\n");break;}if(a==1){In_put[k][0]=clock();printf("\n暂停计时,请输入此人的序号(可以为任意字符): ");scanf("%s",ren[k].name);printf("所在楼层: ");scanf("%d",&ren[k].lc);printf("目的楼层: ");scanf("%d",&ren[k].md);printf("最大容忍时间:");scanf("%d",&ren[k].rrsj);In_put[k][1]=clock();k++;}}printf("------------------------------------------------------------------------------");printf("\n以下为要使用电梯的各个人的信息:(根据其申请使用电梯的时间先后顺序排列)\n");for(i=0;i<k;i++){int j;flag=0;for(j=0;j<i;j++){if(ren[i].lc==ren[j].lc){flag=1;break;} //判断这层是否有多个人一起等候电梯}shijian[i]=In_put[i][0]-start;if(flag==1) //若有多个人一起等候电梯,则申请电梯的时间取第一个人的时间printf("时间: %d(单位:t) 人序号:%s 所在楼层:%d 要去楼层:%d",shijian[j]/100,ren[i].name,ren[i].lc,ren[i].md);else if(flag==0)printf("时间: %d(单位:t) 人序号:%s 所在楼层:%d 要去楼层:%d 最大容忍时间:%d",shijian[j]/100,ren[i].name,ren[i].lc,ren[i].md,ren[i].rrsj);start=In_put[i][1]-In_put[i][0]; //计算输入输入数据所用时间}printf("\n------------------------------------------------------------------------------\n");shijian[i]=0;for(i=0;i<k;i++){ren[i].biaozhi=0;ren[i].in=0;}Go(head,k,dt,shijian,ren);LinListSort(head);printf("\n---------------------------------------------------------------------------\n");printf("\n以下为人和电梯的动作:");print(head);printf("\n\n---------------------------------------------------------------------------\n\n");Destroy(&head);return 0;}六、测试分析1、运行程序,进入如下界面:按任意键开始,进入如下选择界面:选择指令“1”,当只有一个人要进电梯的时候,输入数据:选择指令“0”,进入电梯模拟,操作结果如下:2、人数多于1人以及在不同楼层上下电梯的时候,输入数据:选择指令“0”,执行结果如下:七、心得体会此次选的电梯模拟对于我来说,难度实在是太大了,因为我在编程这块都不是很擅长,本来想选个简单的,结果没看清楚本题的难度系数,选了个最难的,在辅导的时候老师说电梯模拟这个最好要用栈和队列,但是由于能力有限,只能用链表来实现一些简单的基本要求,考虑的也不够周全,学的知识不够灵活应用,有些东西只是想得到,但是没有能力实现,也写不出程序。

数据结构 电梯模拟的报告

数据结构 电梯模拟的报告

1.课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

2.课程设计任务与要求:任务根据教材《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。

设计题目从《数据结构题集》“第二篇实习篇”中选取,每班每题不得超过2人。

另选题:学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。

学生自选课题需在17周前报课程设计指导教师批准方可生效。

要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。

前期准备工作完备与否直接影响到后序上机调试工作的效率。

在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。

2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。

3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。

数据结构课程设计报告第5页,共页数据结构课程设计报告第13页,共页数据结构课程设计报告第19页,共页数据结构课程设计报告第20页,共页。

电梯运行管理系统

电梯运行管理系统

电梯运行管理系统WEB端用户手册(V4。

1)目录欢迎 (3)第一章关于电梯运行管理系统 (5)第二章电梯运行管理系统特点 (8)服务器端软件 (8)第三章电梯运行管理系统系统需求 (11)第四章电梯运行管理系统软件基本结构 (13)第五章电梯运行管理系统软件使用说明 (15)5.1.政府部门用户 (15)5.1.1基本情况统计功能模块 (16)5.1.2资料管理 (17)5.1.3故障管理功能 (18)5.1.4维护管理功能 (20)5.1.5帐户管理功能 (23)5.1.6公告新闻功能 (24)5.2.物业单位用户 (25)5.2.1资料管理 (26)5.2.2故障管理 (28)5.2.3维护管理 (30)5.3.维保用户 (32)5.3.1资料管理功能 (33)5.3.2故障管理模块 (36)5.3.3维护管理功能模块 (38)5.3.4系统管理 (42)欢迎您好!欢迎使用电梯运行管理系统,您将会快速展开电梯管理智能化、系统化的神奇之旅————本平台是您提高电梯管理、维护的好帮手,它能协助您高效、优质地建立起功能强大的属于自己的电梯远程监控系统。

本文档包含了电梯运行管理系统的基本资料,基本讲述了包括本平台大致结构与简介。

有了本使用手册您以轻松了解电梯运行管理系统。

●第一部分:电梯运行管理系统系统简介.●第二部分:电梯运行管理系统系统特点。

●第三部分:电梯运行管理系统系统需求,使您能迅速了解电梯运行管理系统运行系统要求.●第四部分:电梯运行管理系统系统结构,使您初步了解本系统工作的大致结构。

●第五部分:电梯运行管理系统模块详细使用说明。

●第六部分:电梯运行管理系统监控终端的安装与调试。

解释:♦黑体字表明所需选择的项目名称。

♦下划线表示新术语、引用手册标题。

♦大写字母表示文件名、命令名或缩写。

♦单击按动并释放一个鼠标按钮,具体的操作步骤会提示用户是单击鼠标按钮左键还是右键。

♦双击迅速连击鼠标左键两次。

数据结构课程设计:电梯模拟

数据结构课程设计:电梯模拟

问题描述:模拟某校九层教学楼的电梯系统。

该楼有一个自动电梯,能在每层停留。

九个楼层由下至上依次称为地下一层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

乘客可随时地进出于任何层。

对于每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

模拟时钟从0开始,时间单位为0.1秒。

人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t检测一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层精致时间超过300t,则驶回1层候命。

基本要求:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。

需求分析:(1)用系统计时,每当有新的动作要输入时要暂停计时,等输入完成后即可继续计时。

(2)输入各个动作,最后,输入完毕后,可以保存所有动作序列,并有序输出。

设计:设计思想(1)存储结构根据问题描述,可采用单链表结构。

结点描述:定义如下:typedef struct Node{char a[1000];//信息int mytime;//时间struct Node *next;}SLNode;(2)基本思想a.用time.h 里面的clock()来计时,当有输入时,记录下开始输入的时间和结束输入的时间,之后就可以算出动作的时间了。

b.将各个动作发生的时间进行处理,算出每个事件的发生顺序和时间。

c.将各个数据插入链表,即可实现题目要求。

设计表示法(1)过程或函数调用的关系图mainyunxingprintListInsertLinListSort各个动作函数(n个)ge)ListInitiat eDestroy(2)基于数据结构的操作组主要在于yunxing()函数,它将各个时间动作处理成时间事件,并将事件插入到链表中。

(3)过程与接口规格说明无实现注释未实现。

大数据电梯安全运行监测系统方案

大数据电梯安全运行监测系统方案
02
电梯环境数据:温度、湿度、空气质量等
03
用户反馈数据:投诉、建议、评价等
04
外部数据:天气、交通、节假日等信息
05
政府监管数据:法规、政策、标准等信息
06
数据预处理
数据清洗:去除异常值、缺失值、重复值等
数据归一化:将不同量纲的数据转换为统一量纲
数据离散化:将连续数据转换为离散数据
数据降维:减少数据维度,提高数据处理效率
报警方式
实时监控:系统实时监控电梯运行数据,发现异常立即报警
短信通知:系统通过短信通知相关人员,确保及时响应
电话报警:系统通过电话报警,确保信息传递准确无误
邮件通知:系统通过邮件通知相关人员,方便查看和处理报警信息
声光报警:系统通过声光报警,提醒现场人员注意安全
响应流程
实时监控:系统对电梯运行数据进行实时监控,发现异常情况
数据采集:通过传感器实时监测电梯运行数据
01
安全预警与报警
3
预警机制
01
实时监控:对电梯运行数据进行实时监控,及时发现异常情况
02
阈值设定:设定安全阈值,当数据超过阈值时触发预警
03
多级预警:设置多个预警级别,根据情况严重程度进行分级处理
04
自动报警:当预警触发时,自动向相关人员发送报警信息,提醒及时处理
02
数据传输层:负责将采集到的数据传输到数据处理层

04
数据应用层:负责将处理后的数据应用于电梯安全运行监测和管理,如报警、维护建议等
系统优势
实时监测:对电梯运行数据进行实时监测,及时发现安全隐患
01
智能预警:通过数据分析,对可能出现的故障进行提前预警
02
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二题:电梯模拟1、需求分析:电梯运行模拟某校九层教学楼的电梯系统。

该楼有一个自动电梯,能在每层停留。

九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

乘客可随机地进出于任何层。

对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

模拟时钟从0开始,时间单位为0.1秒。

人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。

而题目的最终要求输出时:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。

int waitnow;//已经等待的时间struct passage *next;}Passage;虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息:typedef struct lift{int count_C;//计数电梯已到达的层数int count_A;//系统的总时间计数器记得必须初始化为0int flag_in[High];//九个楼层有无请求的标志哪个楼层如果有请求该标志置1int num;//等待队列中的人数记得要进行初始化为0int people;//电梯中人数int flag_out[High];}Lift;(2)算法设计顾名思义本程序在运行的过程中用到的算法便是—“电梯算法”,电梯算法借鉴了磁盘寻道C-LOOK算法,即电梯向一个方向运行,直到这个方向上没有服务为止。

2.2设计表示(1)、函数调用关系图及其说明如下:(2)函数接口说明:函数中的参数均是使用的全局变量的传递,因而在函数间进行传递的过程中比较简单,下面就将主要函数及他们之间的参数的关系列出如下:int OutOrIn(Lift &L,Passage *Queue,Passage *LiftQ);//进和出电梯的总函数int Update(Lift &L,Passage *Queue,Passage *LiftQ);//刷新的函数int Run(Lift &L,Passage *Queue,Passage *LiftQ);//整个电梯各种状态转换的函数int OpenTheDoor(Lift &L);//开门主要是用于解决其中的时间问题int CloseTheDoor(Lift &L);//关门int In(Lift &L);//进入主要是解决每个人进入电梯的时间问题int Out(Lift &L);//出去int Test(Lift &L,Passage *Queue,Passage *LiftQ);//电梯测试关门还是开门的函数int Request(Lift &L,Passage *Queue);2.3详细设计3、调试分析该程序的调试过程较为轻松,基本在算法实现的基础上没有出现什么错误,因而在调试的过程中并无什么深刻印象。

4、用户手册点击运行程序,在弹出的窗口中,会提示要输入的信息:1、提示信息为:“请输入图中的顶点数和弧数以及图的标志和弧的标志:”按要求输入即可,本题即输入9 11 v a2、提示信息为“请完成该邻接表的输入”:由于邻接表的输入信息一般较多,而且均是采用的链表来存储,因而该部分的输入要特别的小心3、在完成上面两步的输入后按enter键便能得到程序的运行结果,即输出完成整项工程至少需要多少时间和影响工程进度的关键活动5 测试数据及测试结果测试数据如下:9 11 v a131 6 12 4 23 5 3214 1 4314 1 5415 2 6526 9 77 7 8617 4 9718 2 10818 4 119程序运行结果如下:6、原程序清单如下:/*关键路径问题2010年07月31日晚上08:36开始动工*/#include<iostream>using namespace std;const int MAX_V_NUM=20;//最大存储顶点的数目const int STACK_INIT_SIZE=20;//栈的存储空间分配量////数据存储部分/*一下是图的邻接表的存储表示,由于第一次用用的比较的生疏……*/typedef struct ArcNode{i nt adjvex; //该弧所指向的顶点的位置s truct ArcNode *nextarc;//指下一条弧的指针i nt info;//该弧相关信息即权值i nt name;//弧的名字}ArcNode;typedef struct VNode{i nt data;//顶点的信息A rcNode *firstarc;//指向第一条依附该顶点的弧的指针}AdjList[MAX_V_NUM];typedef struct{A djList vertices;i nt vnum,arcnum;//图中当前顶点数和弧数c har kind,kind1;//图中的各类标志顶点和弧}ALGraph;typedef struct{i nt *base;i nt *top;i nt stacksize;}Stack;int ve[MAX_V_NUM];Stack T;//函数体描述部分int InitStack(Stack &S);int Push(Stack &S,int &e);int Pop(Stack &S,int &e);int CriticalPath(ALGraph &G);int ToPoOrder(ALGraph &G,Stack &T);int FindInDegree(ALGraph &G,int (&indegree)[MAX_V_NUM]);/*下面是函数的具体实现部分*///构造一个空栈int InitStack(Stack &S){S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));i f(!S.base)return 0;S.top=S.base;S.stacksize=STACK_INIT_SIZE;//可以用于当栈的存储空间不够的情况下进行扩充r eturn 1;};//元素进栈int Push (Stack &S, int &e){*S.top++=e;r eturn 1;};//元素出栈int Pop(Stack &S, int &e){i f(S.top==S.base)return 0;e=*--S.top;r eturn 1;};//判断栈是否为空int StackEmpty(Stack &S){i f(S.top==S.base)return 1;e lsereturn 0;};//找出每个顶点的入度int FindInDegree(ALGraph &G,int (&indegree)[MAX_V_NUM]) {A rcNode *p;i nt i;f or(i=0;i<MAX_V_NUM;i++)indegree[i]=0;f or(i=0;i<G.vnum;i++){for(p=G.vertices[i].firstarc;p;p=p->nextarc)indegree[p->adjvex]++;}r eturn 0;}//拓扑排序同时求出各活动的最早发生时间int ToPoOrder(ALGraph &G,Stack &T){i nt count=0;i nt i,j,k;S tack S1;A rcNode *p;i nt indegree[MAX_V_NUM];I nitStack(T);I nitStack(S1);F indInDegree(G,indegree);f or(i=0;i<G.vnum;i++)if(indegree[i]==0)Push(S1,i);//建立0入度顶点栈Sf or(i=0;i<G.vnum;i++)ve[i]=0;w hile(!StackEmpty(S1)){Pop(S1,j);Push(T,j);count++;for(p=G.vertices[j].firstarc;p;p=p->nextarc){k=p->adjvex;if(--indegree[k]==0)Push(S1,k);if(ve[j]+(p->info)>ve[k])ve[k]=ve[j]+(p->info);}}// for(i=0;i<G.vnum;i++)// cout<<ve[i]<<endl;i f(count<G.vnum)return 0;e lsereturn 1;}//计算各顶点的最迟发生时间及进行输出int CriticalPath(ALGraph &G){i nt vl[MAX_V_NUM];i nt dut;i nt i,j,k,ee,el;A rcNode *p;// char tag;i f(!ToPoOrder(G,T))return 0;c out<<"完成整项工程至少需要的时间是:"<<ve[G.vnum-1]<<endl;f or(i=0;i<G.vnum;i++)vl[i]=ve[G.vnum-1];w hile(!StackEmpty(T)){for(Pop(T,j),p=G.vertices[j].firstarc;p;p=p->nextarc){k=p->adjvex;dut=(p->info);if(vl[k]-dut<vl[j])vl[j]=vl[k]-dut;}}// for(i=0;i<G.vnum;i++)// cout<<vl[i]<<endl;c out<<"影响工程进度的关键活动是:"<<endl;f or(j=0;j<G.vnum;j++)for(p=G.vertices[j].firstarc;p;p=p->nextarc){k=p->adjvex;dut=(p->info);ee=ve[j];el=vl[k]-dut;//cout<<"j="<<j<<"K="<<k<<"dut="<<dut<<"ee="<<ee<<"el="<<el<< endl;if(ee==el)//tag=(ee=el)?'*':'';cout<<G.kind1<<p->name<<endl;}return 1;}int main(){A LGraph G;i nt i,j,Hnum;A rcNode *p,*q;// int indegree[MAX_V_NUM];//ALGraph G;c out<<"请输入图中的顶点数和弧数以及图的标志和弧的标志:"<<endl;c in>>G.vnum;c in>>G.arcnum;c in>>G.kind;c in>>G.kind1;c out<<"请完成该邻接表的输入:"<<endl;f or(i=0;i<G.vnum;i++){cout<<"请输入该顶点的信息"<<endl;cin>>G.vertices[i].data;cout<<"请输入与"<<G.kind<<G.vertices[i].data<<"号顶点相邻的弧的数目:"<<endl;cin>>Hnum;if(Hnum==0){G.vertices[i].firstarc=0;}else{cout<<"请依次次输入弧的信息(包括顶点的位置及权值和该边的名称)"<<endl;p=(ArcNode *)malloc(sizeof(ArcNode));G.vertices[i].firstarc=p;p->nextarc=0;cin>>p->adjvex;cin>>p->info;cin>>p->name;for(j=0;j<Hnum-1;j++){cout<<"请依次次输入弧的信息(包括顶点的位置及权值和该边的名称)"<<endl;q=(ArcNode *)malloc(sizeof(ArcNode));cin>>q->adjvex;cin>>q->info;cin>>q->name;q->nextarc=p->nextarc;p->nextarc=q;}}}//ToPoOrder(G,T);//CriticalPath(G);////////test///////////* for(i=0;i<G.vnum;i++){cout<<"该顶点是"<<G.kind<<G.vertices[i].data<<endl;cout<<"与该顶点相邻的顶点依次是:"<<endl;for(p=G.vertices[i].firstarc;p;p=p->nextarc){cout<<G.kind<<G.vertices[p->adjvex].data<<endl;}}*/// FindInDegree(G,indegree);//for(i=0;i<G.vnum;i++)// cout<<"indegree["<<i<<"]="<<indegree[i]<<endl;C riticalPath(G);////////////test end///////////r eturn 0;}/*第五题:关键路径问题1、需求分析:当一项工程被划分为若干个子任务或活动后,人们不仅需要确定这些活动的先后次序,而且需要进一步计算完成整个工程的时间,确定哪些活动是影响工程进度的关键活动,以便合理组织人力、物力、财力,加快这些活动的进度,为按时或提前完成整个工程提供保证。

相关文档
最新文档