C++电梯仿真.docx
- 文档编号:5297013
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:14
- 大小:17KB
C++电梯仿真.docx
《C++电梯仿真.docx》由会员分享,可在线阅读,更多相关《C++电梯仿真.docx(14页珍藏版)》请在冰豆网上搜索。
C++电梯仿真
一:
CElevator.h文件内容
#ifndefCELEVATOR_H
#defineCELEVATOR_H
constintMostLayers=100;
classCElevator
{
public:
CElevator();//构造函数
CElevator(intuLayers,intlLayers);//构造函数
CElevator(CElevator&myElevator);//拷贝构造函数
voidPressOuterButton(intdirection,intfloor);//电梯外部各楼层操作按钮
voidPressInnerDigitalButton(intfloor);//电梯内部数字按钮
voidPressOpen_CloseButton(intoperate);//电梯内部开合控制按钮
voidPressAlert();//电梯内部报警按钮
voidrun();//电梯运行
~CElevator();//析构函数
protected:
voidOpenElevator();//打开电梯
voidCloseElevator();//关闭电梯
voidUserOperate();//由于程序单线程运行,因此将用户的所有操作集中在每一层停止的时候完成。
constintUpperLayers;//电梯最高能到达的楼层
constintLowerLayers;//电梯最低能到达的楼层
intStates[5];//电梯当前状态,States[0]表示运行或停止,0停止,1运行,初值0;States[1]表示当前所在楼层,初值1;States[2]表示运行方向,向上0,向下1,初值0;States[3]表示开合,0开,0合,初值1;States[4]表示是否故障,0正常,1故障,初值1
intDigitalButton[MostLayers];//整形数组,i为楼层且i!
=0,i<0时下标i-LowerLayers表示电梯内地下i楼层按钮是否被按下,i>0,i-LowerLayers-1表示电梯内地上i楼层按钮是否被按下,0未按,1按下
intOuterDownButton[MostLayers];//整形数组,i为楼层且i!
=0,i<0时下标i-LowerLayers表示电梯外i层向下按钮是否被按下,i>0,i-LowerLayers-1表示电梯外i层向下按钮是否被按下,0未按,1按下
intOuterUpButton[MostLayers];//整形数组,i为楼层且i!
=0,i<0时下标i-LowerLayers表示电梯外i层向上按钮是否被按下,i>0,i-LowerLayers-1表示电梯外i层向上按钮是否被按下,0未按,1按下
};
#endif
二:
CElevator.cpp文件内容
#include
#include"CElevator.h"
usingnamespacestd;
CElevator:
:
CElevator():
UpperLayers(10),LowerLayers
(1)
{
States[0]=0;//初始状态为停止
States[1]=1;//初始楼层在楼
States[2]=0;//初始方向为向上
States[3]=1;//初始电梯为合
States[4]=0;//初始电梯正常
for(inti=0;i { DigitalButton[i]=0; OuterDownButton[i]=0; OuterUpButton[i]=0; } } CElevator: : CElevator(intuLayers,intlLayers): UpperLayers(uLayers),LowerLayers(lLayers) { States[0]=0;//初始状态为停止 States[1]=1;//初始楼层在楼 States[2]=0;//初始方向为向上 States[3]=1;//初始电梯为合 States[4]=0;//初始电梯正常 for(inti=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[5]; for(inti=0;i { DigitalButton[i]=myElevator.DigitalButton[i]; OuterDownButton[i]=myElevator.DigitalButton[i]; OuterUpButton[i]=myElevator.DigitalButton[i]; } } CElevator: : ~CElevator() { } voidCElevator: : PressOuterButton(intdirection,intfloor) { if(direction==0) OuterUpButton[floor-LowerLayers-1]=1; else OuterDownButton[floor-LowerLayers-1]=1; } voidCElevator: : PressInnerDigitalButton(intfloor) { DigitalButton[floor-LowerLayers-1]=1; } voidCElevator: : PressOpen_CloseButton(intoperate) { if(operate==0)//打开电梯 { OpenElevator(); } else//关闭电梯 { CloseElevator(); } } voidCElevator: : OpenElevator() { if(States[3]==0) { cout<<"电梯已打开,请先出后进! "< } else { cout<<"电梯正在打开…电梯已打开,请先出后进! "< States[3]=0; } } voidCElevator: : CloseElevator() { if(States[3]==1) { cout<<"电梯已关闭,请保持安静! "< } else { cout<<"电梯正在关闭…电梯已关闭,请保持安静! "< States[3]=1; } } voidCElevator: : PressAlert() { cout<<"电梯内部有人报警,请援助! "< States[4]=1; } voidCElevator: : UserOperate() { //按报警按钮 intalm=0; cout<<"按报警按钮吗? 输入1表示按,0表示不按: "; cin>>alm; cout< if(alm==1) { States[4]=1; while(States[4]==1) { cout<<"电梯出现故障,请维修! 维修好请输入0,维修不好请输入1! "; cin>>alm; cout< if(alm==0||alm==1) { States[4]=alm; } else { cout<<"维修数据不正确! "< } } } OpenElevator(); //电梯内部输入到达楼层 cout<<"请电梯内乘客输入所要到达的楼层! "< cout<<"多个楼层中间用空格隔开,结束输入0: "; intfloor=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;//没有楼 } } } cout< //电梯外部各楼层输入上楼信号 cout<<"请电梯外部乘客输入上楼信号! "< cout<<"多个楼层用空格隔开,结束输入0: "; while(true) { cin>>floor; if(floor==0) { break; } else { if((floor>=LowerLayers)&&(floor =States[1])) { if(floor<0)//地下 { OuterUpButton[floor-LowerLayers]=1; } else//地上 { OuterUpButton[floor-LowerLayers-1]=1;//没有楼 } } } } cout< //电梯外部各楼层输入下楼信号 cout<<"请电梯外部乘客输入下楼信号,"< cout<<"多个楼层用空格隔开,结束输入0: "; while(true) { cin>>floor; if(floor==0) { break; } else { if((floor>LowerLayers)&&(floor<=UpperLayers)&&(floor! =States[1])) { if(floor<0)//地下 { OuterDownButton[floor-LowerLayers]=1; } else//地上 { OuterDownButton[floor-LowerLayers-1]=1;//没有楼 } } } } cout< //按开电梯按钮 intdirection=0; cout<<"电梯将要关闭,等人请按打开按钮! "< cout<<"输入1表示按,表示0不按: "; cin>>direction; cout< if(direction==1) { OpenElevator(); for(inti=0;i<50;i++);//延时 CloseElevator(); } //按关电梯按钮 cout<<"按关电梯按钮吗? 输入1表示按,表示0不按: "; cin>>direction; cout< if(direction==0) { for(inti=0;i<50;i++);//延时 CloseElevator(); } else { CloseElevator(); } } voidCElevator: : 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]层停靠的标志取消 } } if(States[1]==1) { cout<<"终止电梯程序运行吗? 终止输入1,继续运行输入0: "; inttemp=0; cin>>temp; if(temp==1) { exit(0); } } cout< 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]=-1;//没有层 } 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; } } } } } } } 三: main.cpp主函数文件内容 #include #include"CElevator.h" usingnamespacestd; #include"CElevator.h" voidmain() { CElevatormyElevator(8,-3); myElevator.run(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 电梯 仿真