电梯程序源代码.docx
《电梯程序源代码.docx》由会员分享,可在线阅读,更多相关《电梯程序源代码.docx(17页珍藏版)》请在冰点文库上搜索。
电梯程序源代码
#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时下标iLowerLayers表示电梯内地下i楼层按钮是否被按下,i>0,i-LowerLayers-1表示电梯内地上i楼层按钮是否被按下,0未按,1按下
intOuterDownButton[MostLayers];//整形数组,i为楼层且i!
=0,i<0时下i-
LowerLayers表示电梯外i层向下按钮是否被按下,i>0i-LowerLayers-1表示电梯外i
层向下按钮是否被按下,0未按,1按下
intOuterUpButton[MostLayers];//整形数组,i为楼层且i!
=0,i<0时下标iLowerLayers表示电梯外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]=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(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();
}