数据结构a类电梯运行模拟正文终稿.docx

上传人:b****7 文档编号:9577817 上传时间:2023-02-05 格式:DOCX 页数:33 大小:19.52KB
下载 相关 举报
数据结构a类电梯运行模拟正文终稿.docx_第1页
第1页 / 共33页
数据结构a类电梯运行模拟正文终稿.docx_第2页
第2页 / 共33页
数据结构a类电梯运行模拟正文终稿.docx_第3页
第3页 / 共33页
数据结构a类电梯运行模拟正文终稿.docx_第4页
第4页 / 共33页
数据结构a类电梯运行模拟正文终稿.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

数据结构a类电梯运行模拟正文终稿.docx

《数据结构a类电梯运行模拟正文终稿.docx》由会员分享,可在线阅读,更多相关《数据结构a类电梯运行模拟正文终稿.docx(33页珍藏版)》请在冰豆网上搜索。

数据结构a类电梯运行模拟正文终稿.docx

数据结构a类电梯运行模拟正文终稿

#include

#include

#include

#include

#include

usingnamespacestd;

//初始定义

constintmaxfloor=14;//最高楼层

clock_ttick;//获取系统当前运行时间

//基本数据结构及其功能函数与类的声明模块

structCondition{//状态类

floattime;//该状态下持续的时间;

intsympol;//状态的开关标志符

};

structLiftCondition{//电梯状态类

Conditionrest;

Conditionup;

Conditiondown;

};

structLift{//电梯类

intpaNum;//乘客数

intpresentFloor;//当前楼层

LiftConditionliftCon;//电梯状态

intlight[maxfloor+1];//目标层数数组

intgoalNum[maxfloor+1];//要去每层的人数

floatworkTime;

floatworkTimePre;

};

structPassenger{//乘客类

intpresentFloor;//乘客当前楼层

intgoalFloor;//目标层

inttolerateTime;//容忍时间

floatinitTime;//建立时间

Passenger*next;

Passenger*pre;

};

structQue{

Passenger*front;//队列头指针

Passenger*rear;//队列尾指针;

Passenger*mid;

intlength;

};

voidinitQue(Que&q){//队列的建立函数

q.front=(Passenger*)malloc(100*sizeof(Passenger));

q.rear=q.front;

q.length=0;

}

voidaddQue(Que&q,Passenger&p){//队列成员增加函数

q.rear->next=&p;

p.pre=q.rear;

q.rear=q.rear->next;

q.length++;

}

intqueLength(Que&q){//队列的长度函数

returnq.length;

}

voidoutQue(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;

}

}

structFloor{//楼层类

QuegoUp;

QuegoDown;

intcallUp;

intcallDown;

inttotalNum;

};

//全局变量

intpassNum=0;

Floorfl[15];

Passengerpa[100];

inti=0;//循环计数器;

//函数模块

externvoidaddPassenger(Passenger&p);

externvoidgetInUp(Lift&l);

externvoidgetInDown(Lift&l);

externvoidliftUp(Lift&l);

externvoidgetOut(Lift&l);

externintergodicFloorUp(Lift&l);

externintergodicFloorDown(Lift&l);

externvoidUserFace(Lift&l);

voidinitFloor(){//初始化每个楼层的函数

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;

}

}

voidinitLift(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;

}

voidaddPassenger(Passenger&p){//创建一名乘客

cout<<"该乘客所在楼层"<

cin>>p.presentFloor;

if(p.presentFloor<1||p.presentFloor>14)

{

cout<<"楼层越界"<

cout<<"重新输入"<

cin>>p.presentFloor;

}

cout<<"该乘客要去的楼层"<

cin>>p.goalFloor;

if(p.goalFloor<1||p.goalFloor>14)

{

cout<<"楼层越界"<

cout<<"重新输入"<

cin>>p.goalFloor;

}

cout<<"该乘客的容忍时间"<

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++;

}

voidgetInUp(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<<"电梯门打开………………"<

Sleep(500);

cout<<"乘客正在进入电梯…"<

Sleep(500);

cout<<"乘客正在进入电梯……"<

Sleep(500);

cout<<"乘客正在进入电梯………"<

Sleep(500);

cout<<"乘客正在进入电梯…………"<

Sleep(500);

cout<<"乘客正在进入电梯……………"<

Sleep(500);

cout<<"乘客正在进入电梯………………"<

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<<"有一名乘客因等待时间过长已经离开"<

outQue(fl[l.presentFloor].goUp);

}

if(queLength(fl[l.presentFloor].goUp)==0){

cout<<"乘客进入电梯完毕,电梯关门"<

break;

}

}

if(l.paNum==2){

cout<<"电梯已满员,电梯关门"<

}

}

voidgetInDown(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<<"电梯门打开………………"<

Sleep(500);

cout<<"乘客正在进入电梯…"<

Sleep(500);

cout<<"乘客正在进入电梯……"<

Sleep(500);

cout<<"乘客正在进入电梯………"<

Sleep(500);

cout<<"乘客正在进入电梯…………"<

Sleep(500);

cout<<"乘客正在进入电梯……………"<

Sleep(500);

cout<<"乘客正在进入电梯………………"<

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<<"有一名乘客因等待时间过长已经离开"<

outQue(fl[l.presentFloor].goDown);

}

if(queLength(fl[l.presentFloor].goDown)==0){

cout<<"乘客进入电梯完毕,电梯关门"<

break;

}

}

if(l.paNum==12){

cout<<"电梯已满员,电梯关门"<

}

}

voidgetOut(Lift&l){

l.liftCon.rest.sympol=1;

l.liftCon.down.sympol=0;

l.liftCon.up.sympol=0;

Sleep(500);

cout<<"该楼层电梯内正有乘客出电梯…"<

Sleep(500);

cout<<"该楼层电梯内正有乘客出电梯……"<

Sleep(500);

cout<<"该楼层电梯内正有乘客出电梯………"<

Sleep(500);

cout<<"该楼层电梯内正有乘客出电梯…………"<

Sleep(500);

cout<<"该楼层电梯内正有乘客出电梯……………"<

Sleep(500);

cout<<"该楼层电梯内正有乘客出电梯………………"<

l.light[l.presentFloor]=0;

l.paNum-=l.goalNum[l.presentFloor];

l.goalNum[l.presentFloor]=0;

cout<<"电梯内现在有"<

}

intergodicFloorUp(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);

}

}

intergodicFloorDown(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);

}

}

voidliftDown(Lift&l){

l.liftCon.rest.sympol=0;

l.liftCon.down.sympol=1;

l.liftCon.up.sympol=0;

Sleep(500);

cout<<"电梯正在下降…"<

cout<<"电梯在"<

Sleep(500);

cout<<"电梯正在下降……"<

cout<<"电梯在"<

Sleep(500);

cout<<"电梯正在下降………"<

cout<<"电梯在"<

Sleep(500);

cout<<"电梯正在下降…………"<

cout<<"电梯在"<

Sleep(500);

cout<<"电梯正在下降………………"<

cout<<"电梯在"<

Sleep(500);

l.presentFloor--;

cout<<"电梯正在下降…………………"<

cout<<"电梯在"<

l.liftCon.down.time+=3;

cout<<"是否有新的乘客出现?

是1否0"<

intj;

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<<"电梯内无乘客到该层,且该层没有呼叫电梯向下,电梯继续下降"<

liftDown(l);

}

if(l.light[l.presentFloor]==1&&fl[l.presentFloor].callDown!

=1){

getOut(l);

if(l.paNum>0){

cout<<"电梯门已经关闭,电梯继续下降"<

liftDown(l);

}

else{

if(ergodicFloorDown(l)==1){

liftDown(l);

}

else{

if(ergodicFloorUp(l)==1){

liftUp(l);

}

else{

while

(1){

cout<<"现在无人使用电梯,电梯静止在"<

cout<<"是否返回主菜单?

是1否0"<

intk;

cin>>k;

if(k!

=0){

UserFace(l);

}

cout<<"是否有新的乘客出现?

是1否0"<

cin>>j;

if(j!

=0){

system("cls");

addPassenger(pa[passNum]);

if(pa[passNum-1].presentFloor>l.presentFloor){

liftUp(l);

}

elseif(pa[passNum-1].presentFloor

liftDown(l);

}

elseif(pa[passNum-1].goalFloor>l.presentFloor){

getInUp(l);

liftUp(l);

}

else{

getInDown(l);

liftDown(l);

}

break;

}

else

continue;

}

}

}

}

}

if(l.light[l.presentFloor]!

=1&&fl[l.presentFloor].callDown==1&&l.paNum<12){

cout<<"该层有人呼叫向下"<

getInDown(l);

//以防电梯里没人时,排队的人已经走了

if(l.paNum>0){

cout<<"电梯门已经关闭,电梯继续下降"<

liftDown(l);

}

else{

if(ergodicFloorDown(l)==1){

liftDown(l);

}

else{

if(ergodicFloorUp(l)==1){

liftUp(l);

}

else{

while

(1){

cout<<"现在无人使用电梯,电梯静止在"<

cout<<"是否返回主菜单?

是1否0"<

intk;

cin>>k;

if(k!

=0){

UserFace(l);

}

cout<<"是否有新的乘客出现?

是1否0"<

cin>>j;

if(j!

=0){

system("cls");

addPassenger(pa[passNum]);

if(pa[passNum-1].presentFloor>l.presentFloor){

liftUp(l);

}

elseif(pa[passNum-1].presentFloor

liftDown(l);

}

elseif(pa[passNum-1].goalFloor>l.presentFloor){

getInUp(l);

liftUp(l);

}

else{

getInDown(l);

liftDown(l);

}

break;

}

else

continue;

}

}

}

}

}

if(l.light[l.presentFloor]==1&&fl[l.presentFloor].callDown==1){

cout<<"该层有人呼叫向下且有电梯出电梯"<

getOut(l);

getInDown(l);

if(l.paNum>0){

cout<<"电梯门已经关闭,电梯继续下降"<

liftDown(l);

}

else{

if(ergodicFloorDown(l)==1){

liftDown(l);

}

else{

if(ergodicFloorUp(l)==1){

l

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1