#include

using namespace std;

const int MostLayers = 100;

class CElevator

{

public:

CElevator();//构造函数

CElevator(int uLayers, int lLayers);//构造函数

CElevator(CElevator &myElevator);//拷贝构造函数

void PressOuterButton(int direction, int floor);//电梯外部各楼层操作按钮

void PressInnerDigitalButton(int floor);//电梯内部数字按钮

void PressOpen_CloseButton(int operate);//电梯内部开合控制按钮

void PressAlert();//电梯内部报警按钮

void run();//电梯运行

int States[5];//电梯状态

int DigitalButton[MostLayers];

int OuterDownButton[MostLayers];

int OuterUpButton[MostLayers];

~CElevator();//析构函数

protected:

void OpenElevator();//打开电梯

void CloseElevator();//关闭电梯

void UserOperate();//由于程序单线程运行,因此将用户的所有操作集中在每一层停止的时候完成。

const int UpperLayers; //电梯最高能到达的楼层

const int LowerLayers; //电梯最低能到达的楼层

};

CElevator::CElevator():UpperLayers(10),LowerLayers(1)

{

States[0] = 0;//初始状态为停止

States[1] = 1;//初始楼层在1楼

States[2] = 0;//初始方向为向上

States[3] = 1;//初始电梯为合

States[4] = 0;//初始电梯正常

for(int i=0;i

{

DigitalButton[i] = 0;//记录电梯内i楼层是否被按下

OuterDownButton[i] = 0;//记录电梯外i楼层向下按钮是否被按下

OuterUpButton[i] = 0;//记录电梯外i楼层向上按钮是否被按下

}

}

CElevator::CElevator(int uLayers, int lLayers):UpperLayers(uLayers),LowerLayers(lLayers)

{

States[0] = 0;//初始状态为停止

States[1] = 1;//初始楼层在1楼

States[2] = 0;//初始方向为向上

States[3] = 1;//初始电梯为合

States[4] = 0;//初始电梯正常

for(int i=0;i

{

DigitalButton[i] = 0;

OuterDownButton[i] = 0;

OuterUpButton[i] = 0;

}

}

CElevator::CElevator(CElevator &myElevator):UpperLayers(myElevator.UpperLayers),LowerLayers( myElevator.LowerLayers)

{

States[0] = myElevator.States[0];

States[1] = myElevator.States[1];

States[2] = myElevator.States[2];

States[3] = myElevator.States[3];

States[4] = myElevator.States[4];

for(int i=0;i

{

DigitalButton[i] = myElevator.DigitalButton[i];

OuterDownButton[i] = myElevator.DigitalButton[i];

OuterUpButton[i] = myElevator.DigitalButton[i];

}

}

CElevator::~CElevator()

{

}

void CElevator::PressOuterButton(int direction, int floor)

{

if(direction==0)

OuterUpButton[floor-LowerLayers-1] = 1;

else

OuterDownButton[floor-LowerLayers-1] = 1;

}

void CElevator::PressInnerDigitalButton(int floor)

{

DigitalButton[floor-LowerLayers-1] = 1;

}

void CElevator::PressOpen_CloseButton(int operate)

{

if(operate == 0)//打开电梯

{

OpenElevator();

}

else//关闭电梯

{

CloseElevator();

}

}

void CElevator::OpenElevator()

{

if(States[3] == 0)

{

cout<

}

else

{

cout<

States[3] = 0;

}

}

void CElevator::CloseElevator()

{

if(States[3] == 1)

{

cout<

}

else

{

cout<

States[3] = 1;

}

}

void CElevator::PressAlert()//按报警按钮

{

cout<

States[4] = 1;

}

void CElevator::UserOperate()

{

int alm;

cout<

cin>>alm;

cout<

if(alm==1)

{

States[4] = 1;

cout<

while(States[4]==1)

{

cout<

cin>>alm;

cout<

if(alm == 0 || alm ==1)

{

States[4] = alm;

}

}

}

OpenElevator();

//电梯内部输入到达楼层

cout<

cout<

int floor = 1;

while(true)

{

cin>>floor;

if(floor==0)

{

break;

}

if((floor>=LowerLayers) && (floor<=UpperLayers) && (floor!=States[1]))

{

if(floor<0)//地下

{

DigitalButton[floor-LowerLayers] = 1;

}

else//地上

{

DigitalButton[floor-LowerLayers-1] = 1;//上floor楼层的按钮被按下

}

}

}

cout<

//电梯外部各楼层输入上楼信号

cout<

cout<

while(true)

{

cin>>floor;

if(floor==0)

{

break;

}

else

{

if((floor>=LowerLayers) && (floor

{

if(floor<0)//地下

{

OuterUpButton[floor-LowerLayers] = 1;//floor楼层被按下

}

else//地上

{

OuterUpButton[floor-LowerLayers-1] = 1;//floor楼层被按下

}

}

}

}

cout<

//电梯外部各楼层输入下楼信号

cout<

cout<

while(true)

{

cin>>floor;

if(floor==0)

{

break;

}

else

{

if((floor>LowerLayers) && (floor<=UpperLayers) && (floor!=States[1]))

{

if(floor<0)//地下

{

OuterDownButton[floor-LowerLayers] = 1;//floor楼层被按下

}

else//地上

{

OuterDownButton[floor-LowerLayers-1] = 1;//floor楼层被按下

}

}

}

}

cout<

}

void CElevator::run()

{

while(true)

{

if(States[0]==0)

{

cout<

if(States[2]==0)//向上

{

if(States[1]<0)//地下

{

OuterUpButton[States[1]-LowerLayers] = 0;//将记录电梯States[1]层有向上的标志取消

DigitalButton[States[1]-LowerLayers] = 0;//将记录电梯在States[1]层停靠的标志取消

}

else//地上

{

OuterUpButton[States[1]-LowerLayers-1] = 0;//将记录电梯States[1]层有向上的标志取消

DigitalButton[States[1]-LowerLayers-1] = 0;//将记录电梯在States[1]层停靠的标志取消

}

}

else//向下

{

if(States[1]<0)//地下

{

OuterDownButton[States[1]-LowerLayers] = 0;//将记录电梯States[1]层有向下的标志取消

DigitalButton[States[1]-LowerLayers] = 0;//将记录电梯在States[1]层停靠的标志取消

}

else//地上

{

OuterDownButton[States[1]-LowerLayers-1] = 0;//将记录电梯States[1]层有向下的标志取消

DigitalButton[States[1]-LowerLayers-1] = 0;//将记录电梯在States[1]层停靠的标志取消

}

}

UserOperate();

States[0] = 1;

}

else

{

if(States[2]==0)//向上

{

States[1]++;

if(States[1]==0)

{

States[1]++;//没有层

}

else

{

cout<

if(States[1]==UpperLayers)//向上到最顶,必定要停,且方向变为向下

{

States[2] = 1;//变方向

States[0] = 0;

}

else

{

if(OuterUpButton[States[1]-LowerLayers-1]==0 && DigitalButton[States[1]-LowerLayers-1]==0)

{

cout<

}

else

{

States[0] = 0;

}

}

}

}

else//向下

{

States[1]--;

if(States[1]==0)

{

States[1] = 0;//没有层

}

else

{

cout<

if(States[1]==LowerLayers)//向下到最底,必定要停,且方向变为向上

{

States[2] = 0;//变方向

States[0] = 0;

}

else

{

if(OuterDownButton[States[1]-LowerLayers-1]==0 && DigitalButton[States[1]-LowerLayers-1]==0)

{

cout<

}

else

{

States[0] = 0;

}

}

}

}

}

}

}

void main()

{

CElevator CEl1;

CEl1.run();

}

c 语言的电梯调度算法,电梯调度算法相关推荐

  1. 2022年电梯考试电梯检验员练习题及答案

    题库来源:优题宝公众号 2022年电梯考试电梯检验员练习题及答案,由优题宝公众号根据最新电梯考试电梯检验员大纲与历年电梯考试电梯检验员真题汇总编写,包含电梯考试电梯检验员常考重点题型与知识点,有助于考 ...

  2. 楚纳阻止电动车进电梯,禁止电瓶车上电梯,电梯管控装置

    电动车已经走进千家万户,而中国的电瓶车拥有量已经接近3亿.但是有些电动车会无视国家的相关法律法规违规将电瓶车通过电梯上楼充电,个人存在侥幸心理.电动车通过电梯上居民楼,再放在楼道或是家里充电,都存在安 ...

  3. 实现FCFS和SJF调度算法(电梯调度算法详解)

    实现FCFS和SJF调度算法 操作系统实验报告 实验一:作业调度 学院:软件学院 专业:软件工程 班级:软件工程12-01 姓名:*** 学号:541213460157 实验一:作业调度 实现FCFS ...

  4. C语言实现简单的电梯控制系统

    项目已经转移至GitHub:https://github.com/Kyfafyd 在刚刚看到这个题目的时候,觉得毫无头绪,之后在CSDN上面也看到了很多想法,但是大多不是C语言,也不是源码,或者编译不 ...

  5. 八楼电梯的c语言程序,本科毕业设计—电梯自动语音提示系统.doc

    电梯自动语音提示系统 院 系:信息科学与工程学院 专 业 班:电子科学与技术1102班 姓 名: 学 号: 指导教师: 2015年5月 电梯自动语音提示系统 The Elevator Automati ...

  6. c语言数据结构课程设计电梯,数据结构课程设计报告(模拟电梯).doc

    数据结构课程设计报告(模拟电梯) 山东理工大学计算机学院 课 程 设 计 (数据结构) 班 级姓 名学 号 指导教师 二〇一二年一月十日 课程设计任务书及成绩评定 课题名称电 梯 模 拟 Ⅰ.题目的目 ...

  7. 作业调度响应比最高c语言实现,高响应比调度算法(c语言程序实现)

    <高响应比调度算法(c语言程序实现)>由会员分享,可在线阅读,更多相关<高响应比调度算法(c语言程序实现)(3页珍藏版)>请在人人文库网上搜索. 1.高响应比调度算法#incl ...

  8. 关于c语言排序计时器完整程序,先来先服务调度算法模拟实验程序源代码(C语言)...

    先来先服务调度算法模拟实验程序源代码(C语言) 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水 ...

  9. 时间片轮转算法程序c语言,时间片轮转算法和优先级调度算法 C语言模拟实现...

    满意答案 真不容易啊,怕是没人弄了! 优先级调度算法程序: #include "stdio.h" #include "stdlib.h" #include &q ...

最新文章

  1. 数据结构与算法笔记(六)—— 冒泡排序
  2. 家庭中计算机应用包括,《管理信息系统中计算机应用》沟通考笔试B卷答案
  3. bzoj 1191 [HNOI2006]超级英雄Hero
  4. 21、python基础学习-new_three_menu
  5. Xamarin中国峰会2019
  6. Java远程通讯技术及原理分析
  7. “智慧法院”数据融合分析与集成应用
  8. vsto java,从Excel VSTO项目打开WPF应用程序
  9. Excel如何判断数据是否重复
  10. 《计算复杂性与算法分析》和《计算复杂性》学习
  11. ionic4基础教程(案例和实战小demo)
  12. springboot + rabbitmq 做智能家居,我也没想到会这么简单
  13. 计算机utf-8/gbk/utf-16对照表
  14. 电脑上的软件卸载不了怎么办
  15. 羊了怎么居家办公?免费不限速的远程控制软件RayLink一解燃眉之急!!
  16. Mac磁盘工具教程 – 抹掉并重新格式化硬盘/移动硬盘
  17. ctab法提取dna流程图_CTAB法提取DNA原理及步骤、制胶、电泳
  18. 轻量级CNN模块!RepGhost:重参数化实现硬件高效的Ghost模块
  19. android c++ 线程,Android多线程分析之二:Thread的实现
  20. ubuntu 创建定时任务

热门文章

  1. web期末作业设计网页 HTML5+CSS大作业——明星个人主页(15页) 创作主页
  2. icpc西部区域赛_ICPC西部区域赛捷报传来!
  3. 大数据专业适合考研吗?
  4. 将地图导出为图片或PDF文件
  5. Java基础(数组)对象数组、有条件找出最大值对象
  6. vue-element-admin花裤衩项目,关于下载 svg 并放到文件夹之中,修改Icon字体图标的颜色样式问题
  7. 1个做了7年外包公司老板的自述
  8. 【绘制】HTML5 Canvas 中渐变色和图案(图文、示例)
  9. 检验真爱粉!豆瓣入局内容付费市场,北岛诗歌课卖128元
  10. MapReduce —— MapTask阶段源码分析(Output环节)