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

上传人:仙人指路1688 文档编号:3995547 上传时间:2023-03-30 格式:DOC 页数:26 大小:248KB
返回 下载 相关 举报
高速公路客运活动仿真程序.doc_第1页
第1页 / 共26页
高速公路客运活动仿真程序.doc_第2页
第2页 / 共26页
高速公路客运活动仿真程序.doc_第3页
第3页 / 共26页
高速公路客运活动仿真程序.doc_第4页
第4页 / 共26页
高速公路客运活动仿真程序.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

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

1、高速公路客运活动仿真程序 设计说明书一、 问题描述 1.本问题目的是进行西安到宝鸡高速公路运作的仿真。在西安市到宝鸡市之间的高速公路是一条主要的线路之一,经过简化后的客运路线端点、中途停靠点和里程如下图所示(括号里是简称,里程的单位是公里)。从西安到宝鸡的高速公路上有两种车:沃尔沃和依维柯,车中有两种最主要的属性:速度和容量。汽车每天在一定的时间区间内会在两地间互相行驶。在西安和宝鸡两地每时每刻都会产生乘客,在西安和宝鸡之间有XY, XP, WG, CP, GZ五个中间站,乘客会选择在五个站中的任意一站和终点站下车,中途只许下车不许上车。从西安到宝鸡的车到了宝鸡自动排在从宝鸡到西安的车的车队末

2、尾。宝鸡(BJ) 蔡家坡(CP) 兴平(XP) 西安(XN)242162212422 虢镇(GZ) 武功(WG) 咸阳(XY)2.限定条件(1)从 XN 始发至 BJ 的客车和从 BJ 始发至 XN 的客车均有两种车型:沃尔沃(限定乘客人数为 40 人);依维柯(限定乘客人数为 21 人)。沃尔沃的速度为 2 公里/分钟,依维柯的速度为 1.4 公里/分钟。(2)起始状态时,XN 拥有沃尔沃和依维柯客车分别为 XN W 和 XNY 辆,BJ 拥有沃尔沃和依维柯客车分别为 BJ W 和 BJ Y 辆。(3)从 XN 至 BJ 和从 BJ 至 XN 的沃尔沃,均为上午 8:30 开始,每小时一班,

3、最后一班为下午 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_XB

4、WG 、P_XBCP 、P_XBG Z 和 P_XBB J。这些可能性之和为 1;乘坐从 BJ 至 XN 客车的乘客,其下车点为 GZ、CP、WG、XP、XY和 XN 的可能性分别为 P_BXGZ、P_BXCP 、P_BXWG 、P_BX XP 、P_BX XY 和 P_BX XN 。这些可能性之和为 1。3.须仿真的客运活动(1)从上午 7:30 开始到下午 5:59 为止,每分钟分别在 XN 和 BJ 随机产生去往 BJ 和 XN 方向的新到达的乘客。每分钟到达的人数范围为 0PN 人。(2)按照限定条件(7)的规定,随机产生新到达的乘客的目的地。(3)乘客按到达的先后顺序上最近一辆(依照

5、限定条件(3)的规定)始发的客车,若该车客满则等候下一辆始发的客车。(4)若客车到达中途停靠站时有乘客在此下车,按限定条件(5)和(6)处理,否则不停车继续行驶。4.仿真时的可变参数(1)XN 和 BJ 在仿真开始时拥有的客车数量 XNW 、 Y 、 W 和 BJ Y 。XN BJ可先按 XNW =5,XNY =12,BJ W =4,BJ Y =15 进行,然后自己可以改变其中一个或多个,来观察不同起始状态对仿真结果的影响。(2)确定乘客目的地的可能性 P_XBXY 、P_XBXP 、P_XBWG 、P_XBCP 、P_XBG Z 和 P_XBB J,以及 P_BXGZ、P_BX CP 、P_

6、BXWG 、P_BX XP 、P_BX XY 和 P_BXXN 。应注意乘客去往远一些的目的地的可能性,通常大于去往近一些的目的地的可能性。(3)每分钟到达的人数上限 PN 。可先按 PN =2 进行,然后自己可以改变,来观察不同。5.经过分析在仿真系统中应至少包括如下功能(1)始发站控制产生相应的客车(根据预先给定的汽车的属性);(2)始发站控制产生相应的乘客;(3)乘客来到车站以后选择合适的车,上车;(4)汽车到了发车时间,发车;(5)汽车在公路上行驶(包括在中间站停车);(6)汽车到终点站,并准备再次发车,执行(4);(7)乘客到站下车。二、 建立模型1定义结构typedef struc

7、t Quenode int get_off6; int nop; char plate; char *model; struct Quenode *next; Quenode; /typedef struct quefr Quenode *front,*rear; quefr; /quefr *Createqueue(char *x,int m,char *m1) Quenode *h=NULL,*p=NULL;quefr *q=NULL;h=(Quenode*)malloc(sizeof(Quenode); q=(quefr*)malloc(sizeof(quefr);h-plate=*(x

8、+0);h-nop=0;h-model=m1;q-front=h;q-rear=h;for(int i=1;iplate=*(x+i); p-nop=0; p-model=m1; p-next=NULL; q-rear-next=p; q-rear=p; return q; /Quenode *deque(quefr *q) Quenode *p,*p1;p1=q-front;p=q-front-next;q-front=p;return p1; /void enque(quefr *q,Quenode *e) q-rear-next=e;q-rear=e; 其中包括了客车运行的所有状态:车牌

9、号(plate),车型(modle),客车每个停靠点下车人数(get_off6),客车的座位数,上车的总人数(nop)。2 定义车型,创建队列链表charw15=a,b,c,d,e; /西安站依维柯客车型号 char y112=A,B,C,D,E,F,G,H,I,J,K,L; /西安站沃尔沃客车型号 charw24=f,g,h,i; /宝鸡站依维柯客车型号 char y215=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

10、(y2,15,mod1);q4=Createqueue(w2,4,mod2); /创建4个队列3 时间与刷屏显示while(1)Sleep(1000);system(cls); if(M=59)H+=1;M=00; elseM+=1; 三、 仿真流程源程序清单/ 2013软件技术大作业.cpp : 定义控制台应用程序的入口点。/定义1秒等于1分钟/客车提前10分钟上车#includestdafx.h#include #include stdlib.h#include windows.h#include #include #include using namespace std;/double

11、w_s=2.0; /沃尔沃速度double y_s=1.4; /依维柯速度int w=40,y=21; /车内座位数char *mod1=依维柯; /车型char *mod2=沃尔沃;double n16=0.1,0.13,0.16,0.16,0.20,0.25; /自定义西安到宝鸡,乘客在每站下车的概率double n26=0.1,0.13,0.16,0.16,0.20,0.25; / 宝鸡到西安,乘客在每站下车的概率/typedef struct Quenode /队列链表结点int get_off6; /每站下车的人数 int nop; /上车的总人数char plate; /车牌号ch

12、ar *model; /车型struct Quenode *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-f

13、ront=h;q-rear=h;for(int i=1;iplate=*(x+i);p-nop=0;p-model=m1;p-next=NULL;q-rear-next=p;q-rear=p;return q; /Quenode *deque(quefr *q) /弹出队首元素Quenode *p,*p1;p1=q-front;p=q-front-next;q-front=p;return p1;/voidenque(quefr *q,Quenode *e) /在队尾进入元素q-rear-next=e;q-rear=e;/void Number_waiting_Y(Quenode*p1,Que

14、node*p3,int *h,int *m) /依维柯在西安站和宝鸡站情况 bool f1=0,f2=0;if(yp1-nop)srand(unsigned)time(NULL);p1-nop+=(rand()%2); /到西安站候车人数 if(p1-nopy)cout西安站的依维柯客车(型号plate)正在站内!还剩:nop张票额nop=y) cout开往宝鸡方向的(型号plate)依维柯客车票额已卖完p3-nop)srand(unsigned)time(NULL);p3-nop+=(rand()%2+1); /到宝鸡站候车人数if(p3-nopy)cout宝鸡站的依维柯客车(型号plate

15、)正在站内!还剩:nop张票额nop=y) cout开往西安方向的(型号plate) 依维柯客车票额已卖完=8)&(*m=0|*m=20|*m=40)|(f1=1&f2=1) /依维柯发车时间 int i;for(i=0;iget_offi=p1-nop*n1i;p3-get_offi=p3-nop*n2i;p1-get_off6+=2;p3-get_off6+=2;coutendl*p2-nop)srand(unsigned)time(NULL);p2-nop+=(rand()%2+1); /到西安站候车人数if(p2-nopy)cout西安站的沃尔沃客车(型号plate)正在站内!还剩:n

16、op张票额nop=y) cout开往宝鸡方向的(型号plate)沃尔沃客车票额已卖完p4-nop)srand(unsigned)time(NULL);p4-nop+=(rand()%2+1); /到宝鸡站候车人数if(p4-nopy)cout宝鸡站的沃尔沃客车(型号plate)正在站内!还剩:nop张票额nop=y) cout开往西安方向的(型号plate)沃尔沃客车票额已卖完=8)|(f1=1&f2=1)int i;for(i=0;iget_offi=p2-nop*n1i;p4-get_offi=p4-nop*n2i;p2-get_off6+=2;p4-get_off6+=2; /车内人数c

17、outendl*endl;/char ModelPut(char *md)for(int i=0;i6;i+)cout*(md+i);return 0;/bool DIS1(Quenode *p,quefr *q,double dis) /西安到宝鸡if(dis20.6) /定义一个范围表示是否到站,dis表示距离coutmodel)客车(车牌号为plate)离咸阳还有22-dis公里(车上有nop人)20.6&disget_off0!=0)p-nop=p-nop-p-get_off0;coutmodel)客车(车牌号为plate)在咸阳站有get_off0人下车; cout停车两分钟;;Sl

18、eep(2000);elsecoutmodel)客车(车牌号为plate)在咸阳无人下车,咸阳站不停!endl;return 0;if(dis22)coutmodel)客车(车牌号为plate)离兴平还有double(46-dis)公里(车上有nop人)44.6&disget_off1!=0)p-nop=p-nop-p-get_off1; coutmodel)客车(车牌号为plate)在兴平站有get_off1人下车;cout停车两分钟;;Sleep(2000);elsecoutmodel)客车(车牌号为plate)在兴平无人下车,兴平站不停!endl;return 0;if(dis46)co

19、utmodel)客车(车牌号为plate)离武功还有double(67-dis)公里(车上有nop人)65.6&disget_off2!=0)p-nop=p-nop-p-get_off2; cout车牌号plate的model)客车在武功站有get_off2人下车;cout停车两分钟;;Sleep(2000);elsecoutmodel)客车(车牌号为plate)在武功无人下车,武功站不停!endl;if( dis67)coutmodel)客车(车牌号为plate)离蔡家坡还有double(129-dis)公里(车上有nop人)127.6&disget_off3!=0)p-nop=p-nop-

20、p-get_off3; coutmodel)客车(车牌号为plate)在蔡家坡站有get_off3人下车;cout停车两分钟;;Sleep(2000);elsecoutmodel)客车(车牌号为plate)在蔡家坡无人下车,蔡家坡站不停!endl;if( dis129)coutmodel)客车(车牌号为plate)离虢镇站还有double(150-dis)公里(车上有nop人)148.6&disget_off4!=0)p-nop=p-nop-p-get_off4; coutmodel)客车(车牌号为plate)在虢镇站有get_off4人下车;cout停车两分钟;;Sleep(2000);el

21、secoutmodel)客车(车牌号为plate)在虢镇无人下车,虢镇站不停!endl;if( dis150)coutmodel)客车(车牌号为plate)离宝鸡还有double(174-dis)公里(车上有nop人)172.6&dis=174)cout车牌号plate的model)客车到站,有get_off5人下车endl;enque(q,p);return 1;/bool DIS2(Quenode *p,quefr *q,double dis) /宝鸡到西安if(dis22.6)coutmodel)客车(车牌号为plate)离虢镇有double(24-dis)公里(车上有人nop)22.6

22、&disget_off0!=0)p-nop=p-nop-p-get_off0;coutmodel)客车(车牌号为plate)在虢镇站有人下车;cout停车两分钟;;Sleep(2000);elsecoutmodel)客车(车牌号为plate)在虢镇无人下车,虢镇站不停!endl;if(dis24)coutmodel)客车(车牌号为plate)离蔡家坡还有double(45-dis)公里(车上有人nop)43.6&disget_off1!=0)p-nop=p-nop-p-get_off1;coutmodel)客车(车牌号为plate)在蔡家坡站还有人下车;cout停车两分钟;;Sleep(200

23、0);elsecoutmodel)客车(车牌号为plate)在蔡家坡无人下车,蔡家坡站不停!endl;if( dis45)coutmodel)客车(车牌号为plate)武功有double(107-dis)公里(车上有人nop)105.6&disget_off2!=0)p-nop=p-nop-p-get_off2;coutmodel)客车(车牌号为plate)在武功站有人下车;cout停车两分钟;;Sleep(2000);elsecoutmodel)客车(车牌号为plate)在武功无人下车,武功站不停!endl;if( dis107)coutmodel)客车(车牌号为plate)兴平还有doub

24、le(128-dis)公里(车上有人nop)126.6&disget_off3!=0)p-nop=p-nop-p-get_off3; coutmodel)客车(车牌号为plate)在兴平站有人下车; cout停车两分钟;; Sleep(2000);elsecoutmodel)客车(车牌号为plate)在兴平无人下车,兴平站不停!endl;if( dis128)coutmodel)客车(车牌号为plate)咸阳还有double(152-dis)公里(车上有人nop)150.6&disget_off4!=0)p-nop=p-nop-p-get_off4;coutmodel)客车(车牌号为plate

25、)在咸阳站有人下车;cout停车两分钟;;Sleep(2000);elsecoutmodel)客车(车牌号为plate)在咸阳无人下车,咸阳站不停!endl;if( dis152)coutmodel)客车(车牌号为plate)西安还有double(174-dis)公里(车上有人nop)172.6&dis=174)coutmodel)客车(车牌号为plate)到站,有get_off5人下车endl;enque(q,p);return 1;void Dis_XBW(Quenode *p,quefr *q,int *h,int *m) /西安到宝鸡的沃尔沃bool t=0;while(1) doub

26、le dis=0; dis=(*h)*60+(*m)-(8*60+30)*2.0; t=DIS1(p,q,dis); if(t=1)break; Sleep(5000);/void Dis_BXW(Quenode *p,quefr *q,int *h1,int *m1) /宝鸡到西安的沃尔沃 bool t=0;while(1) double dis=0; dis=(*h1)*60+(*m1)-(8*60+30)*2.0;/距离 t=DIS2(p,q,dis); if(t=1)break;Sleep(5000);/void Dis_XBY1(Quenode *p,quefr *q,int *h,int *m) /西安到宝鸡的依维柯8:00bool t=0;while(1)double dis=0; dis=(*h)*60+(*m)-(8*60+0)*1.4;t=DIS1(p,q,dis);if(t=1)break;Sleep(50

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号