1、数据结构a类电梯运行模拟正文终稿#include #include #include#include#include using namespace std;/初始定义const int maxfloor=14;/最高楼层clock_t tick;/获取系统当前运行时间/基本数据结构及其功能函数与类的声明模块struct Condition/状态类 float time;/该状态下持续的时间; int sympol;/状态的开关标志符 ;struct LiftCondition/电梯状态类 Condition rest; Condition up; Condition down;struct
2、Lift/电梯类 int paNum;/乘客数 int presentFloor;/当前楼层 LiftCondition liftCon;/电梯状态 int lightmaxfloor+1;/目标层数数组 int goalNummaxfloor+1;/要去每层的人数 float workTime; float workTimePre;struct Passenger/乘客类 int presentFloor;/乘客当前楼层 int goalFloor;/目标层 int tolerateTime;/容忍时间 float initTime;/建立时间 Passenger *next; Passen
3、ger *pre;struct Que Passenger *front;/队列头指针 Passenger *rear;/队列尾指针; Passenger *mid; int length; ;void initQue(Que &q)/队列的建立函数 q.front=(Passenger *)malloc(100*sizeof(Passenger); q.rear =q.front; q.length =0;void addQue(Que &q,Passenger &p)/队列成员增加函数 q.rear -next =&p; p.pre =q.rear ; q.rear =q.rear -ne
4、xt ; q.length +;int queLength(Que &q)/队列的长度函数 return q.length ;void outQue(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
5、 =0; struct Floor/楼层类 Que goUp; Que goDown; int callUp; int callDown; int totalNum;/全局变量int passNum=0;Floor fl15;Passenger pa100;int i=0;/循环计数器;/函数模块extern void addPassenger(Passenger &p);extern void getInUp(Lift &l);extern void getInDown(Lift &l);extern void liftUp(Lift &l);extern void getOut(Lift
6、&l);extern int ergodicFloorUp(Lift &l);extern int ergodicFloorDown(Lift &l);extern void UserFace(Lift &l);void initFloor()/初始化每个楼层的函数 for(i=1;i15;i+) initQue(fli.goDown ); initQue(fli.goUp ); fli.totalNum =0; fli.callDown =0; fli.callUp =0; void initLift(Lift &l)/初始化电梯 l.liftCon.rest.sympol =1; l.li
7、ftCon .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;i15;i+) l.lighti=0; l.goalNum i=0; l.paNum=0; l.presentFloor=1; tick=clock(); l.workTime=l.workTimePre=(float)tick/CLK_TCK;void addPassenger(Passenger &p)/创建一名乘客 cout该乘客所
8、在楼层p.presentFloor; if(p.presentFloor 14) cout楼层越界endl; cout重新输入p.presentFloor; cout该乘客要去的楼层p.goalFloor ; if(p.goalFloor 14) cout楼层越界endl; cout重新输入p.goalFloor ; cout该乘客的容忍时间p.tolerateTime ; if(p.goalFloor p.presentFloor ) flp.presentFloor .callUp =1; addQue(flp.presentFloor .goUp ,p); else flp.presen
9、tFloor .callDown =1; addQue(flp.presentFloor .goDown ,p); flp.presentFloor .totalNum +; tick=clock(); p.initTime =(float)tick/CLK_TCK; passNum+;void getInUp(Lift &l)/进入电梯往上行驶函数 l.liftCon .rest.sympol =1; l.liftCon .down .sympol =0; l.liftCon .up .sympol =0; fll.presentFloor .callUp =0; Sleep(500); c
10、out电梯门打开endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; tick=clock(); l.workTime =(float)tick/CLK_TCK; while(l.paNumnext -initTime)next -tolerateTime ) l.lightfll
11、.presentFloor.goUp .front-next -goalFloor=1; l.goalNumfll.presentFloor.goUp .front-next -goalFloor+; outQue(fll.presentFloor .goUp ); l.paNum +; else cout有一名乘客因等待时间过长已经离开endl; outQue(fll.presentFloor .goUp ); if(queLength(fll.presentFloor .goUp )=0) cout乘客进入电梯完毕,电梯关门endl; break; if(l.paNum =2) cout电
12、梯已满员,电梯关门endl; void getInDown(Lift &l)/进入电梯往下行驶函数 l.liftCon .rest.sympol =1; l.liftCon .down .sympol =0; l.liftCon .up .sympol =0; fll.presentFloor .callDown=0; Sleep(500); cout电梯门打开endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入
13、电梯endl; Sleep(500); cout乘客正在进入电梯endl; Sleep(500); cout乘客正在进入电梯endl; tick=clock(); l.workTime =(float)tick/CLK_TCK; while(l.paNumnext -initTime)next -tolerateTime ) l.lightfll.presentFloor.goDown .front-next -goalFloor=1; l.goalNumfll.presentFloor.goDown .front-next -goalFloor+; outQue(fll.presentFlo
14、or .goDown ); l.paNum +; else cout有一名乘客因等待时间过长已经离开endl; outQue(fll.presentFloor .goDown ); if(queLength(fll.presentFloor .goDown )=0) cout乘客进入电梯完毕,电梯关门endl; break; if(l.paNum =12) cout电梯已满员,电梯关门endl; void getOut(Lift &l) l.liftCon .rest.sympol =1; l.liftCon .down .sympol =0; l.liftCon .up .sympol =0
15、; Sleep(500); cout该楼层电梯内正有乘客出电梯endl; Sleep(500); cout该楼层电梯内正有乘客出电梯endl; Sleep(500); cout该楼层电梯内正有乘客出电梯endl; Sleep(500); cout该楼层电梯内正有乘客出电梯endl; Sleep(500); cout该楼层电梯内正有乘客出电梯endl; Sleep(500); cout该楼层电梯内正有乘客出电梯endl; l.light l.presentFloor =0; l.paNum -=l.goalNum l.presentFloor ; l.goalNum l.presentFloor
16、 =0; cout电梯内现在有 l.paNum 人endl;int ergodicFloorUp(Lift &l)/电梯内人数为0时遍历函数 if(l.liftCon .rest.sympol ) =1) for(i=l.presentFloor;i=1;i-) if(fli.callDown =1|fli.callUp =1) return(1); return(0); void liftDown(Lift &l) l.liftCon .rest.sympol =0; l.liftCon .down .sympol =1; l.liftCon .up .sympol =0; Sleep(50
17、0); cout电梯正在下降endl; cout电梯在 l.presentFloor 层endl; Sleep(500); cout电梯正在下降endl; cout电梯在 l.presentFloor 层endl; Sleep(500); cout电梯正在下降endl; cout电梯在 l.presentFloor 层endl; Sleep(500); cout电梯正在下降endl; cout电梯在 l.presentFloor 层endl; Sleep(500); cout电梯正在下降endl; cout电梯在 l.presentFloor 层endl; Sleep(500); l.pres
18、entFloor -; cout电梯正在下降endl; cout电梯在 l.presentFloor 层endl; l.liftCon .down.time +=3; cout是否有新的乘客出现?是1否0j; if(j!=0) system(cls); addPassenger(papassNum); if(l.light l.presentFloor !=1&fll.presentFloor .callDown !=1&fll.presentFloor.callUp !=1) cout电梯内无乘客到该层,且该层没有呼叫电梯向下,电梯继续下降0) cout电梯门已经关闭,电梯继续下降endl;
19、 liftDown(l); else if(ergodicFloorDown(l)=1) liftDown(l); else if(ergodicFloorUp(l)=1) liftUp(l); else while(1) cout现在无人使用电梯,电梯静止在 l.presentFloor 层endl; cout是否返回主菜单?是1否0k; if(k!=0) UserFace(l); cout是否有新的乘客出现?是1否0j; if(j!=0) system(cls); addPassenger(papassNum); if(papassNum-1.presentFloor l.presentF
20、loor ) liftUp(l); else if(papassNum-1.presentFloor l.presentFloor ) getInUp(l); liftUp(l); else getInDown(l); liftDown(l); break; else continue; if(l.light l.presentFloor !=1&fll.presentFloor .callDown =1&l.paNum 12) cout该层有人呼叫向下0) cout电梯门已经关闭,电梯继续下降endl; liftDown(l); else if(ergodicFloorDown(l)=1)
21、liftDown(l); else if(ergodicFloorUp(l)=1) liftUp(l); else while(1) cout现在无人使用电梯,电梯静止在 l.presentFloor 层endl; cout是否返回主菜单?是1否0k; if(k!=0) UserFace(l); cout是否有新的乘客出现?是1否0j; if(j!=0) system(cls); addPassenger(papassNum); if(papassNum-1.presentFloor l.presentFloor ) liftUp(l); else if(papassNum-1.presentFloor l.presentFloor ) getInUp(l); liftUp(l); else getInDown(l); liftDown(l); break; else continue; if(l.light l.presentFloor =1&fll.presentFloor .callDown =1) cout该层有人呼叫向下且有电梯出电梯0) cout电梯门已经关闭,电梯继续下降endl; liftDown(l); else if(ergodicFloorDown(l)=1) liftDown(l); else if(ergodicFloorUp(l)=1) l
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1