高速公路客运活动仿真程序.docx

上传人:b****5 文档编号:6907452 上传时间:2023-01-12 格式:DOCX 页数:28 大小:164.38KB
下载 相关 举报
高速公路客运活动仿真程序.docx_第1页
第1页 / 共28页
高速公路客运活动仿真程序.docx_第2页
第2页 / 共28页
高速公路客运活动仿真程序.docx_第3页
第3页 / 共28页
高速公路客运活动仿真程序.docx_第4页
第4页 / 共28页
高速公路客运活动仿真程序.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

高速公路客运活动仿真程序.docx

《高速公路客运活动仿真程序.docx》由会员分享,可在线阅读,更多相关《高速公路客运活动仿真程序.docx(28页珍藏版)》请在冰豆网上搜索。

高速公路客运活动仿真程序.docx

高速公路客运活动仿真程序

 

高速公路客运活动仿真程序

 

 

设计说明书

一、问题描绘

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<<"西安站的依维柯客车"<<"("<<"型号"<plate<<")"<<"正在站内!

"<<"还剩:

"<nop<<"张票额"<

}

if(p1->nop==y)

{

cout<<"开往宝鸡方向的"<<"("<<"型号"<plate<<")"<<"依维柯客车"<<"票额已卖完"<

}

}

if(y>p3->nop)

{

srand((unsigned)time(NULL));

p3->nop+=(rand()%2+1);//到宝鸡站候车人数

if(p3->nop

{

cout<<"宝鸡站的依维柯客车"<<"("<<"型号"<plate<<")"<<"正在站内!

"<<"还剩:

"<nop<<"张票额"<

}

if(p3->nop==y)

{

cout<<"开往西安方向的"<<"("<<"型号"<plate<<")"<<"依维柯客车"<<"票额已卖完"<

}

}

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<<"西安站的沃尔沃客车"<<"("<<"型号"<plate<<")"<<"正在站内!

"<<"还剩:

"<nop<<"张票额"<

}

if(p2->nop==y)

{

cout<<"开往宝鸡方向的"<<"("<<"型号"<plate<<")"<<"沃尔沃客车"<<"票额已卖完"<

}

}

if(y>p4->nop)

{

srand((unsigned)time(NULL));

p4->nop+=(rand()%2+1);//到宝鸡站候车人数

if(p4->nop

{

cout<<"宝鸡站的沃尔沃客车"<<"("<<"型号"<plate<<")"<<"正在站内!

"<<"还剩:

"<nop<<"张票额"<

}

if(p4->nop==y)

{

cout<<"开往西安方向的"<<"("<<"型号"<plate<<")"<<"沃尔沃客车"<<"票额已卖完"<

}

}

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<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"离咸阳还有"<<22-dis<<"公里"<<'('<<"车上有"<nop<<"人"<<')'<

}

if(dis>20.6&&dis<=22)

{

if(p->get_off[0]!

=0)

{

p->nop=p->nop-p->get_off[0];

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在咸阳站有"<get_off[0]<<"人下车";

cout<<"停车两分钟;";

Sleep(2000);

}

else

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在咸阳无人下车,咸阳站不停!

"<

}return0;

}

if(dis<44.6&&dis>22)

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"离兴平还有"<nop<<"人"<<')'<

}

if(dis>44.6&&dis<=46)

{

if(p->get_off[1]!

=0)

{

p->nop=p->nop-p->get_off[1];

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在兴平站有"<get_off[1]<<"人下车";

cout<<"停车两分钟;";

Sleep(2000);}

else

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在兴平无人下车,兴平站不停!

"<

}return0;

}

if(dis<65.6&&dis>46)

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"离武功还有"<nop<<"人"<<')'<

}

if(dis>65.6&&dis<=67)

{

if(p->get_off[2]!

=0)

{

p->nop=p->nop-p->get_off[2];

cout<<"车牌号"<plate<<"的"<model)<<"客车在武功站有"<get_off[2]<<"人下车";

cout<<"停车两分钟;";

Sleep(2000);

}

else

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在武功无人下车,武功站不停!

"<

}

}

if(dis<127.6&&dis>67)

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"离蔡家坡还有"<nop<<"人"<<')'<

}

if(dis>127.6&&dis<=129)

{

if(p->get_off[3]!

=0)

{

p->nop=p->nop-p->get_off[3];

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在蔡家坡站有"<get_off[3]<<"人下车";

cout<<"停车两分钟;";

Sleep(2000);

}

else

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在蔡家坡无人下车,蔡家坡站不停!

"<

}

}

if(dis<148.6&&dis>129)

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"离虢镇站还有"<nop<<"人"<<')'<

}

if(dis>148.6&&dis<=150)

{

if(p->get_off[4]!

=0)

{

p->nop=p->nop-p->get_off[4];

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在虢镇站有"<get_off[4]<<"人下车";

cout<<"停车两分钟;";

Sleep(2000);

}

else

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"在虢镇无人下车,虢镇站不停!

"<

}

}

if(dis<172.6&&dis>150)

{

cout<model)<<"客车"<<'('<<"车牌号为"<plate<<')'<<"离宝鸡还有"<nop<<"人"<<')'<

}

if(dis>172.6&&dis<=174)

{

cout<<"车牌号"<plate<<"的"<model)<<"客车到站,有"<get_off[5]<<"人下车"<

enque(q,p);

return1;

}

}

//

boolDIS2(Quenode*p,quefr*q,doubledis)//宝鸡到西安

{

if(dis

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

当前位置:首页 > 人文社科

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

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