?? 電梯管理 程序.cpp
字號:
for (i=0;i<lift2.stay_in_floor+2;i++)
out_low=out_low || floor[i].up || floor[i].down;
low=0;
for (i=lift1.stay_in_floor+1;i>=0;i--)
low=low || floor[i].up || floor[i].down;
if (lift2.up)
{
if (lift2.stay_in_floor<9)
lift2.stay_in_floor++; //更新電梯所在的樓層
floor[lift2.stay_in_floor+2].up=0; //更新電梯外的“上”按鈕狀態(tài)
lift2.inbutton_state[lift2.stay_in_floor+2]=0;//更新電梯內(nèi)該層按鈕狀態(tài)
flag1=in_high;
flag2=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&out_high;
flag3=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&out_high&(lift1.down || lift1.stay);
flag4=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.up≬
flag5=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.up&high_down;
flag6=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.stay&between_near;
flag7=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.down&between_up;
flag8=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.down&high;
flag_up=flag1 || flag2 ||flag3 ||flag4 ||flag5 ||flag6 ||flag7 ||flag8;
if (flag_up)
{
lift2.all_persons=lift2.all_persons-lift2.out_persons[lift2.stay_in_floor+2]+floor[lift2.stay_in_floor+2].up_persons;//更新電梯1內(nèi)的總?cè)藬?shù)
t_inperson=floor[lift2.stay_in_floor+2].up_persons;
floor[lift2.stay_in_floor+2].up_persons=0; //更新在該層樓等待進(jìn)入電梯的人數(shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
}
else if (!flag_up)
{
flag9=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.up&!out_high&!between_down;
flag10=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.stay&!out_high&!between_near;
flag11=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.down&!out_high&!between&!low_up;
flag12=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.up&!out_low;
flag13=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.stay&!out_low&!out_high;
flag14=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.down&!out_high;
flag15=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.up&!out_low&!between&!high_down;
flag16=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.stay&!out_low&!between_near&!high_down;
flag17=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.down&!out_low&!between_up&!high;
flag_stay=flag9 || flag10 || flag11 || flag12 || flag13 || flag14 || flag15 || flag16 || flag17;
if (flag_stay)
{
lift2.all_persons=lift2.all_persons-lift2.out_persons[lift2.stay_in_floor+2];//更新電梯1內(nèi)的總?cè)藬?shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
lift2.up=0;lift2.down=0;lift2.stay=1; //更新電梯的運(yùn)動狀態(tài)
}
else
{
lift2.all_persons=lift2.all_persons-lift2.out_persons[lift2.stay_in_floor+2]+floor[lift2.stay_in_floor+2].down_persons;//更新電梯1內(nèi)的總?cè)藬?shù)
t_inperson=floor[lift2.stay_in_floor+2].down_persons;
floor[lift2.stay_in_floor+2].down_persons=0; //更新在該層樓等待進(jìn)入電梯的人數(shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
lift2.up=0;lift2.down=1;lift2.stay=0; //更新電梯的運(yùn)動狀態(tài)
floor[lift2.stay_in_floor+2].down=0; //更新電梯外的“上”按鈕狀態(tài)
}
}
}
else if (lift2.down)
{
if (lift2.stay_in_floor>-2)
lift2.stay_in_floor--; //更新電梯所在的樓層
floor[lift2.stay_in_floor+2].down=0; //更新電梯外的“上”按鈕狀態(tài)
lift2.inbutton_state[lift2.stay_in_floor+2]=0;//更新電梯內(nèi)該層按鈕狀態(tài)
flag1=in_low;
flag2=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&out_low;
flag3=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&out_low&(lift1.up || lift1.stay);
flag4=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.up&between_down;
flag5=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.up&low;
flag6=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.stay&between_near;
flag7=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.down≬
flag8=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.down&low_up;
flag_down=flag1 || flag2 ||flag3 ||flag4 ||flag5 ||flag6 ||flag7 ||flag8;
if (flag_down)
{
lift2.all_persons=lift2.all_persons-lift2.out_persons[lift2.stay_in_floor+2]+floor[lift2.stay_in_floor+2].down_persons;//更新電梯1內(nèi)的總?cè)藬?shù)
t_inperson=floor[lift2.stay_in_floor+2].down_persons;
floor[lift2.stay_in_floor+2].down_persons=0; //更新在該層樓等待進(jìn)入電梯的人數(shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
}
else if (!flag_down)
{
flag9=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.up&!out_high&!between_down;
flag10=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.stay&!out_high&!between_near;
flag11=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.down&!out_high&!between&!low_up;
flag12=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.up&!out_low;
flag13=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.stay&!out_low&!out_high;
flag14=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.down&!out_high;
flag15=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.up&!out_low&!between&!high_down;
flag16=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.stay&!out_low&!between_near&!high_down;
flag17=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.down&!out_low&!between_up&!high;
flag_stay=flag9 || flag10 || flag11 || flag12 || flag13 || flag14 || flag15 || flag16 || flag17;
if (flag_stay)
{
lift2.all_persons=lift2.all_persons-lift2.out_persons[lift2.stay_in_floor+2];//更新電梯1內(nèi)的總?cè)藬?shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
lift2.up=0;lift2.down=0;lift2.stay=1; //更新電梯的運(yùn)動狀態(tài)
}
else
{
lift2.all_persons=lift2.all_persons-lift2.out_persons[lift2.stay_in_floor+2]+floor[lift2.stay_in_floor+2].down_persons;//更新電梯1內(nèi)的總?cè)藬?shù)
t_inperson=floor[lift2.stay_in_floor+2].up_persons;
floor[lift2.stay_in_floor+2].up_persons=0; //更新在該層樓等待進(jìn)入電梯的人數(shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
lift2.up=1;lift2.down=0;lift2.stay=0; //更新電梯的運(yùn)動狀態(tài)
floor[lift2.stay_in_floor+2].up=0; //更新電梯外的“上”按鈕狀態(tài)
}
}
}
else
{
lift2.inbutton_state[lift2.stay_in_floor+2]=0;//更新電梯內(nèi)該層按鈕狀態(tài)
flag1=in_high;
flag2=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&out_high;
flag3=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&out_high&lift1.down;
flag4=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.up≬
flag5=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.up&high_down;
flag6=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.stay&between_near;
flag7=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.down&between_up;
flag8=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.down&high;
flag18=!flag1&floor[lift2.stay_in_floor+2].up;
flag_up=flag1 || flag2 ||flag3 ||flag4 ||flag5 ||flag6 ||flag7 ||flag8 || flag18;
if (flag_up)
{
lift2.all_persons=lift1.all_persons-lift2.out_persons[lift2.stay_in_floor+2]+floor[lift2.stay_in_floor+2].up_persons;//更新電梯1內(nèi)的總?cè)藬?shù)
t_inperson=floor[lift2.stay_in_floor+2].up_persons;
floor[lift2.stay_in_floor+2].up_persons=0; //更新在該層樓等待進(jìn)入電梯的人數(shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
floor[lift2.stay_in_floor+2].up=0; //更新電梯外的“上”按鈕的狀態(tài)
lift2.up=1;lift2.down=0;lift2.stay=0; //更新電梯的運(yùn)動狀態(tài)
}
else if (!flag_up)
{
flag9=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.up&!out_high&!between_down;
flag10=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.stay&!out_high&!between_near;
flag11=!flag1&(lift2.stay_in_floor>lift1.stay_in_floor)&lift1.down&!out_high&!between&!low_up;
flag12=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.up&!out_low;
flag13=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.stay&!out_low&!out_high;
flag14=!flag1&(lift2.stay_in_floor==lift1.stay_in_floor)&lift1.down&!out_high;
flag15=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.up&!out_low&!between&!high_down;
flag16=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.stay&!out_low&!between_near&!high_down;
flag17=!flag1&(lift2.stay_in_floor<lift1.stay_in_floor)&lift1.down&!out_low&!between_up&!high;
flag_stay=flag9 || flag10 || flag11 || flag12 || flag13 || flag14 || flag15 || flag16 || flag17;
if (!flag_stay)
{
lift2.all_persons=lift2.all_persons-lift2.out_persons[lift2.stay_in_floor+2]+floor[lift2.stay_in_floor+2].down_persons;//更新電梯1內(nèi)的總?cè)藬?shù)
t_inperson=floor[lift2.stay_in_floor+2].down_persons;
floor[lift2.stay_in_floor+2].down_persons=0; //更新在該層樓等待進(jìn)入電梯的人數(shù)
t_outperson=lift2.out_persons[lift2.stay_in_floor+2];
lift2.out_persons[lift2.stay_in_floor+2]=0; //更新在該層樓出去電梯的人數(shù)
lift2.up=0;lift2.down=1;lift2.stay=0; //更新電梯的運(yùn)動狀態(tài)
floor[lift2.stay_in_floor+2].down=0; //更新電梯外的“上”按鈕狀態(tài)
}
}
}
//下面,輸出電梯的狀態(tài)
Sleep(500); //再讓print線程睡眠0.5秒,在這段時間里電梯不能響應(yīng)電梯內(nèi)、外的按鈕
//在此加入清屏
//cls;
//clrscr();
SuspendThread(hprint); //掛起print線程
cout<<"電梯2目前在"<<lift2.stay_in_floor<<"層"<<endl; //輸出電梯所在的樓層
if (lift2.all_persons>max_persons)
{
lift2.all_persons=max_persons;
Beep(800,1000);
}
else if (lift2.all_persons<0)
lift2.all_persons=0;
cout<<"電梯2內(nèi)有"<<lift2.all_persons<<"人"<<endl; //輸出電梯內(nèi)的總?cè)藬?shù)
/* if (t_outperson>lift2.all_persons)
t_outperson=lift2.all_persons;
else
if (t_outperson<0)
t_outperson=0;
if (t_inperson>(max_persons-lift2.all_persons))
t_inperson=max_persons-lift2.all_persons;
else
if (t_inperson<0)
t_inperson=0;*/
if (t_outperson!=0 || t_inperson!=0)
cout<<"電梯2在本層出去"<<t_outperson<<"人,進(jìn)入"<<t_inperson<<"人"<<endl;//輸出電梯進(jìn)、出人數(shù)情況
t_inperson=0;
t_outperson=0;
if (lift2.up)
cout<<"電梯2目前運(yùn)動狀態(tài):向上"<<endl;
else if (lift2.down)
cout<<"電梯2目前運(yùn)動狀態(tài):向下"<<endl;
else
cout<<"電梯2目前運(yùn)動狀態(tài):暫停"<<endl;
cout<<endl;
ResumeThread(hprint); //恢復(fù)print線程
}
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -