数据结构a类电梯运行模拟正文终稿Word下载.docx
- 文档编号:22713842
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:33
- 大小:19.52KB
数据结构a类电梯运行模拟正文终稿Word下载.docx
《数据结构a类电梯运行模拟正文终稿Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构a类电梯运行模拟正文终稿Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
//目标层数数组
intgoalNum[maxfloor+1];
//要去每层的人数
floatworkTime;
floatworkTimePre;
structPassenger{//乘客类
//乘客当前楼层
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->
q.front->
next=q.mid->
q.mid->
next->
pre=q.front;
next=NULL;
pre=NULL;
q.length--;
}
else{
q.rear->
q.rear=q.front;
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&
externvoidliftUp(Lift&
externvoidgetOut(Lift&
externintergodicFloorUp(Lift&
externintergodicFloorDown(Lift&
externvoidUserFace(Lift&
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;
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<
<
"
该乘客所在楼层"
endl;
cin>
>
p.presentFloor;
if(p.presentFloor<
1||p.presentFloor>
14)
{
cout<
楼层越界"
重新输入"
cin>
该乘客要去的楼层"
p.goalFloor;
if(p.goalFloor<
1||p.goalFloor>
该乘客的容忍时间"
p.tolerateTime;
if(p.goalFloor>
p.presentFloor){
fl[p.presentFloor].callUp=1;
addQue(fl[p.presentFloor].goUp,p);
fl[p.presentFloor].callDown=1;
addQue(fl[p.presentFloor].goDown,p);
fl[p.presentFloor].totalNum++;
p.initTime=(float)tick/CLK_TCK;
passNum++;
voidgetInUp(Lift&
l){//进入电梯往上行驶函数
l.liftCon.rest.sympol=1;
l.liftCon.up.sympol=0;
fl[l.presentFloor].callUp=0;
Sleep(500);
电梯门打开………………"
乘客正在进入电梯…"
乘客正在进入电梯……"
乘客正在进入电梯………"
乘客正在进入电梯…………"
乘客正在进入电梯……………"
乘客正在进入电梯………………"
l.workTime=(float)tick/CLK_TCK;
while(l.paNum<
2){
if((l.workTime-fl[l.presentFloor].goUp.front->
initTime)<
=fl[l.presentFloor].goUp.front->
tolerateTime){
l.light[fl[l.presentFloor].goUp.front->
goalFloor]=1;
l.goalNum[fl[l.presentFloor].goUp.front->
goalFloor]++;
outQue(fl[l.presentFloor].goUp);
l.paNum++;
else{
cout<
有一名乘客因等待时间过长已经离开"
if(queLength(fl[l.presentFloor].goUp)==0){
乘客进入电梯完毕,电梯关门"
break;
}
if(l.paNum==2){
电梯已满员,电梯关门"
voidgetInDown(Lift&
l){//进入电梯往下行驶函数
fl[l.presentFloor].callDown=0;
12){
if((l.workTime-fl[l.presentFloor].goDown.front->
=fl[l.presentFloor].goDown.front->
l.light[fl[l.presentFloor].goDown.front->
l.goalNum[fl[l.presentFloor].goDown.front->
outQue(fl[l.presentFloor].goDown);
if(queLength(fl[l.presentFloor].goDown)==0){
if(l.paNum==12){
voidgetOut(Lift&
l){
l.liftCon.rest.sympol=1;
l.liftCon.down.sympol=0;
l.liftCon.up.sympol=0;
Sleep(500);
该楼层电梯内正有乘客出电梯…"
该楼层电梯内正有乘客出电梯……"
该楼层电梯内正有乘客出电梯………"
该楼层电梯内正有乘客出电梯…………"
该楼层电梯内正有乘客出电梯……………"
该楼层电梯内正有乘客出电梯………………"
l.light[l.presentFloor]=0;
l.paNum-=l.goalNum[l.presentFloor];
l.goalNum[l.presentFloor]=0;
电梯内现在有"
l.paNum<
人"
intergodicFloorUp(Lift&
l){//电梯内人数为0时遍历函数
if((l.liftCon.rest.sympol)==1){
for(i=l.presentFloor;
if(fl[i].callDown==1||fl[i].callUp==1){
return
(1);
return(0);
intergodicFloorDown(Lift&
i>
=1;
i--){
voidliftDown(Lift&
l.liftCon.rest.sympol=0;
l.liftCon.down.sympol=1;
电梯正在下降…"
电梯在"
l.presentFloor<
层"
电梯正在下降……"
电梯正在下降………"
电梯正在下降…………"
电梯正在下降………………"
l.presentFloor--;
电梯正在下降…………………"
l.liftCon.down.time+=3;
是否有新的乘客出现?
是1否0"
intj;
j;
if(j!
=0){
system("
cls"
);
addPassenger(pa[passNum]);
if(l.light[l.presentFloor]!
=1&
&
fl[l.presentFloor].callDown!
fl[l.presentFloor].callUp!
=1){
电梯内无乘客到该层,且该层没有呼叫电梯向下,电梯继续下降"
liftDown(l);
if(l.light[l.presentFloor]==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<
现在无人使用电梯,电梯静止在"
是否返回主菜单?
intk;
cin>
k;
if(k!
UserFace(l);
}
if(j!
system("
addPassenger(pa[passNum]);
if(pa[passNum-1].presentFloor>
l.presentFloor){
liftUp(l);
}
elseif(pa[passNum-1].presentFloor<
l.presentFloor){
liftDown(l);
elseif(pa[passNum-1].goalFloor>
getInUp(l);
else{
getInDown(l);
break;
else
continue;
}
if(l.light[l.presentFloor]!
fl[l.presentFloor].callDown==1&
该层有人呼叫向下"
getInDown(l);
//以防电梯里没人时,排队的人已经走了
if(l.light[l.presentFloor]==1&
fl[l.presentFloor].callDown==1){
该层有人呼叫向下且有电梯出电梯"
l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 电梯 运行 模拟 正文