高速公路客运活动仿真程序.docx
- 文档编号:6907452
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:28
- 大小:164.38KB
高速公路客运活动仿真程序.docx
《高速公路客运活动仿真程序.docx》由会员分享,可在线阅读,更多相关《高速公路客运活动仿真程序.docx(28页珍藏版)》请在冰豆网上搜索。
高速公路客运活动仿真程序
高速公路客运活动仿真程序
设计说明书
一、问题描绘
1.本问题目的是进展西安到宝鸡高速公路运作的仿真。
在西安市到宝鸡市之间的高速公路是一条主要的线路之一,经过简化后的客运道路端点、中途停靠点和里程如以下图所示〔括号里是简称,里程的单位是公里〕。
从西安到宝鸡的高速公路上有两种车:
沃尔沃和依维柯,车中有两种最主要的属性:
速度和容量。
汽车每天在一定的时间区间内会在两地间互相行驶。
在西安和宝鸡两地每时每刻都会产生乘客,在西安和宝鸡之间有XY,XP,WG,CP,GZ五个中间站,乘客会选择在五个站中的任意一站和终点站下车,中途只许下车不许上车。
从西安到宝鸡的车到了宝鸡自动排在从宝鸡到西安的车的车队末尾。
宝鸡〔BJ〕蔡家坡〔CP〕兴平〔XP〕西安〔XN〕
24
21
62
21
24
22
虢镇〔GZ〕武功〔WG〕咸阳〔XY〕
〔1〕从XN始发至BJ的客车和从BJ始发至XN的客车均有两种车型:
沃尔沃〔限定乘客人数为40人〕;依维柯〔限定乘客人数为21人〕。
沃尔沃的速度为2公里/分钟,依维柯的速度为1.4公里/分钟。
〔2〕起始状态时,XN拥有沃尔沃和依维柯客车分别为XNW和XNY辆,BJ拥有沃尔沃和依维柯客车分别为BJW和BJY辆。
〔3〕从XN至BJ和从BJ至XN的沃尔沃,均为上午8:
30开始,每小时一班,最后一班为下午5:
30;从XN至BJ和从BJ至XN的依维柯,均为上午8:
00开始,每20分钟一班,最后一班为下午6:
00。
〔4〕从XN至BJ的客车到达BJ后,即成为从BJ至XN的客车,排在当时BJ同类车型的队尾,再按〔3〕确定发车时间;从BJ至XN的客车到达XN后的规那么一样。
〔5〕只考虑途中只有乘客下车、没有乘客上车的情况。
〔6〕有乘客下车时,不管方向与车型,停车时间统一为2分钟。
〔7〕乘坐从XN至BJ客车的乘客,其下车点为XY、XP、WG、CP、GZ和BJ的可能性分别为P_XBXY、P_XBXP、P_XBWG、P_XBCP、P_XBGZ和P_XBBJ。
这些可能性之和为1;乘坐从BJ至XN客车的乘客,其下车点为GZ、CP、WG、XP、XY和XN的可能性分别为P_BXGZ、P_BXCP、P_BXWG、P_BXXP、P_BXXY和P_BXXN。
这些可能性之和为1。
〔1〕从上午7:
30开始到下午5:
59为止,每分钟分别在XN和BJ随机产生去往BJ和XN方向的新到达的乘客。
每分钟到达的人数范围为0~PN人。
〔2〕按照限定条件〔7〕的规定,随机产生新到达的乘客的目的地。
〔3〕乘客按到达的先后顺序上最近一辆〔按照限定条件〔3〕的规定〕始发的客车,假设该车客满那么等候下一辆始发的客车。
〔4〕假设客车到达中途停靠站时有乘客在此下车,按限定条件〔5〕和〔6〕处理,否那么不停车继续行驶。
〔1〕XN和BJ在仿真开始时拥有的客车数量XNW、Y、W和BJY。
XNBJ可先按XNW=5,XNY=12,BJW=4,BJY=15进展,然后自己可以改变其中一个或多个,来观察不同起始状态对仿真结果的影响。
〔2〕确定乘客目的地的可能性P_XBXY、P_XBXP、P_XBWG、P_XBCP、P_XBGZ和P_XBBJ,以及P_BXGZ、P_BXCP、P_BXWG、P_BXXP、P_BXXY和P_BXXN。
应注意乘客去往远一些的目的地的可能性,通常大于去往近一些的目的地的可能性。
〔3〕每分钟到达的人数上限PN。
可先按PN=2进展,然后自己可以改变,来观察不同。
5.经过分析在仿真系统中应至少包括如下功能
〔1〕始发站控制产生相应的客车〔根据预先给定的汽车的属性〕;
〔2〕始发站控制产生相应的乘客;
〔3〕乘客来到车站以后选择适宜的车,上车;
〔4〕汽车到了发车时间,发车;
〔5〕汽车在公路上行驶〔包括在中间站停车〕;
〔6〕汽车到终点站,并准备再次发车,执行〔4〕;
〔7〕乘客到站下车。
二、建立模型
1定义构造
typedefstructQuenode
{
intget_off[6];
intnop;
charplate;
char*model;
structQuenode*next;}Quenode;
//
typedefstructquefr
{
Quenode*front,*rear;}quefr;
//
quefr*Createqueue(char*x,intm,char*m1)
{
Quenode*h=NULL,*p=NULL;
quefr*q=NULL;
h=(Quenode*)malloc(sizeof(Quenode));
q=(quefr*)malloc(sizeof(quefr));
h->plate=*(x+0);
h->nop=0;
h->model=m1;
q->front=h;
q->rear=h;
for(inti=1;i {p=(Quenode*)malloc(sizeof(Quenode)); p->plate=*(x+i); p->nop=0; p->model=m1; p->next=NULL; q->rear->next=p; q->rear=p;} returnq;} // Quenode*deque(quefr*q) {Quenode*p,*p1; p1=q->front; p=q->front->next; q->front=p; returnp1;} // voidenque(quefr*q,Quenode*e) {q->rear->next=e; q->rear=e;} 其中包括了客车运行的所有状态: 车牌号〔plate〕,车型〔modle〕,客车每个停靠点下车人数〔get_off[6]〕,客车的座位数,上车的总人数〔nop〕。 2定义车型,创立队列链表 charw1[5]={'a','b','c','d','e'};//西安站依维柯客车型号 chary1[12]={'A','B','C','D','E','F','G','H','I','J','K','L'};//西安站沃尔沃客车型号 charw2[4]={'f','g','h','i'};//宝鸡站依维柯客车型号 chary2[15]={'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','@'};//宝鸡站沃尔沃客车型号 q1=Createqueue(y1,12,mod1);q2=Createqueue(w1,5,mod2); q3=Createqueue(y2,15,mod1); q4=Createqueue(w2,4,mod2);///创立4个队列 3时间与刷屏显示 while (1) { Sleep(1000); system("cls"); if(M==59){H+=1;M=00;} else{M+=1;}} 三、仿真流程 源程序清单 //2021软件技术大作业.cpp: 定义控制台应用程序的入口点。 //定义1秒等于1分钟 //客车提早10分钟上车 #include"stdafx.h" #include #include"stdlib.h" #include"windows.h" #include #include #include usingnamespacestd; // doublew_s=2.0;//沃尔沃速度 doubley_s=1.4;//依维柯速度 intw=40,y=21;//车内座位数 char*mod1="依维柯";//车型 char*mod2="沃尔沃"; doublen1[6]={0.1,0.13,0.16,0.16,0.20,0.25};//自定义西安到宝鸡,乘客在每站下车的概率 doublen2[6]={0.1,0.13,0.16,0.16,0.20,0.25};//宝鸡到西安,乘客在每站下车的概率 // typedefstructQuenode//队列链表结点 { intget_off[6];//每站下车的人数 intnop;//上车的总人数 charplate;//车牌号 char*model;//车型 structQuenode*next; }Quenode; // Typedefstructquefr//队列链表的头指针和尾指针 { Quenode*front,*rear; }quefr; // quefr*Createqueue(char*x,intm,char*m1)//创立队列链表 { Quenode*h=NULL,*p=NULL; quefr*q=NULL; h=(Quenode*)malloc(sizeof(Quenode));//分配容量 q=(quefr*)malloc(sizeof(quefr)); h->plate=*(x+0); h->nop=0; h->model=m1; q->front=h; q->rear=h; for(inti=1;i { p=(Quenode*)malloc(sizeof(Quenode)); p->plate=*(x+i); p->nop=0; p->model=m1; p->next=NULL; q->rear->next=p; q->rear=p; } returnq; } // // Quenode*deque(quefr*q)//弹出队首元素 { Quenode*p,*p1; p1=q->front; p=q->front->next; q->front=p; returnp1; } // voidenque(quefr*q,Quenode*e)//在队尾进入元素 { q->rear->next=e; q->rear=e; } // voidNumber_waiting_Y(Quenode*p1,Quenode*p3,int*h,int*m) //依维柯在西安站和宝鸡站情况 { boolf1=0,f2=0; if(y>p1->nop) { srand((unsigned)time(NULL)); p1->nop+=(rand()%2);//到西安站候车人数 if(p1->nop { cout<<"西安站的依维柯客车"<<"("<<"型号"< "<<"还剩: "< } if(p1->nop==y) { cout<<"开往宝鸡方向的"<<"("<<"型号"< } } if(y>p3->nop) { srand((unsigned)time(NULL)); p3->nop+=(rand()%2+1);//到宝鸡站候车人数 if(p3->nop { cout<<"宝鸡站的依维柯客车"<<"("<<"型号"< "<<"还剩: "< } if(p3->nop==y) { cout<<"开往西安方向的"<<"("<<"型号"< } } if(((*h>=8)&&(*m==0||*m==20||*m==40))||(f1==1&&f2==1))//依维柯发车时间 { inti; for(i=0;i<6;i++) { p1->get_off[i]=p1->nop*n1[i]; p3->get_off[i]=p3->nop*n2[i]; } p1->get_off[6]+=2;p3->get_off[6]+=2; } cout< } // voidNumber_waiting_W(Quenode*p2,Quenode*p4,int*h1,int*m1)//沃尔沃在西安站和宝鸡站的情况 { boolf1=0,f2=0; if(y>p2->nop) { srand((unsigned)time(NULL)); p2->nop+=(rand()%2+1);//到西安站候车人数 if(p2->nop { cout<<"西安站的沃尔沃客车"<<"("<<"型号"< "<<"还剩: "< } if(p2->nop==y) { cout<<"开往宝鸡方向的"<<"("<<"型号"< } } if(y>p4->nop) { srand((unsigned)time(NULL)); p4->nop+=(rand()%2+1);//到宝鸡站候车人数 if(p4->nop { cout<<"宝鸡站的沃尔沃客车"<<"("<<"型号"< "<<"还剩: "< } if(p4->nop==y) { cout<<"开往西安方向的"<<"("<<"型号"< } } if((((*h1)*60+*m1)%20==0&&(*h1)>=8)||(f1==1&&f2==1)) { inti; for(i=0;i<6;i++) { p2->get_off[i]=p2->nop*n1[i]; p4->get_off[i]=p4->nop*n2[i]; } p2->get_off[6]+=2;p4->get_off[6]+=2;//车内人数 } cout< } // charModelPut(char*md) { for(inti=0;i<6;i++) { cout<<*(md+i); } return0; } // boolDIS1(Quenode*p,quefr*q,doubledis)//西安到宝鸡 { if(dis<20.6)//定义一个范围表示是否到站,dis表示间隔 { cout< } if(dis>20.6&&dis<=22) { if(p->get_off[0]! =0) { p->nop=p->nop-p->get_off[0]; cout< cout<<"停车两分钟;"; Sleep(2000); } else { cout< "< }return0; } if(dis<44.6&&dis>22) { cout< } if(dis>44.6&&dis<=46) { if(p->get_off[1]! =0) { p->nop=p->nop-p->get_off[1]; cout< cout<<"停车两分钟;"; Sleep(2000);} else { cout< "< }return0; } if(dis<65.6&&dis>46) { cout< } if(dis>65.6&&dis<=67) { if(p->get_off[2]! =0) { p->nop=p->nop-p->get_off[2]; cout<<"车牌号"< cout<<"停车两分钟;"; Sleep(2000); } else { cout< "< } } if(dis<127.6&&dis>67) { cout< } if(dis>127.6&&dis<=129) { if(p->get_off[3]! =0) { p->nop=p->nop-p->get_off[3]; cout< cout<<"停车两分钟;"; Sleep(2000); } else { cout< "< } } if(dis<148.6&&dis>129) { cout< } if(dis>148.6&&dis<=150) { if(p->get_off[4]! =0) { p->nop=p->nop-p->get_off[4]; cout< cout<<"停车两分钟;"; Sleep(2000); } else { cout< "< } } if(dis<172.6&&dis>150) { cout< } if(dis>172.6&&dis<=174) { cout<<"车牌号"< enque(q,p); return1; } } // boolDIS2(Quenode*p,quefr*q,doubledis)//宝鸡到西安 { if(dis
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高速公路 客运 活动 仿真 程序