高速公路客运活动仿真程序.doc_第1页
高速公路客运活动仿真程序.doc_第2页
高速公路客运活动仿真程序.doc_第3页
高速公路客运活动仿真程序.doc_第4页
高速公路客运活动仿真程序.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高速公路客运活动仿真程序 设计说明书一、 问题描述 1.本问题目的是进行西安到宝鸡高速公路运作的仿真。在西安市到宝鸡市之间的高速公路是一条主要的线路之一,经过简化后的客运路线端点、中途停靠点和里程如下图所示(括号里是简称,里程的单位是公里)。从西安到宝鸡的高速公路上有两种车:沃尔沃和依维柯,车中有两种最主要的属性:速度和容量。汽车每天在一定的时间区间内会在两地间互相行驶。在西安和宝鸡两地每时每刻都会产生乘客,在西安和宝鸡之间有xy, xp, wg, cp, gz五个中间站,乘客会选择在五个站中的任意一站和终点站下车,中途只许下车不许上车。从西安到宝鸡的车到了宝鸡自动排在从宝鸡到西安的车的车队末尾。宝鸡(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 开始,每小时一班,最后一班为下午 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_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)乘客按到达的先后顺序上最近一辆(依照限定条件(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_bxwg 、p_bx xp 、p_bx xy 和 p_bxxn 。应注意乘客去往远一些的目的地的可能性,通常大于去往近一些的目的地的可能性。(3)每分钟到达的人数上限 pn 。可先按 pn =2 进行,然后自己可以改变,来观察不同。5.经过分析在仿真系统中应至少包括如下功能(1)始发站控制产生相应的客车(根据预先给定的汽车的属性);(2)始发站控制产生相应的乘客;(3)乘客来到车站以后选择合适的车,上车;(4)汽车到了发车时间,发车;(5)汽车在公路上行驶(包括在中间站停车);(6)汽车到终点站,并准备再次发车,执行(4);(7)乘客到站下车。二、 建立模型1定义结构typedef struct 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+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; 其中包括了客车运行的所有状态:车牌号(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(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 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; /车牌号char *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-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;/voidenque(quefr *q,quenode *e) /在队尾进入元素q-rear-next=e;q-rear=e;/void number_waiting_y(quenode*p1,quenode*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)正在站内!还剩: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)正在站内!还剩:nop张票额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; /车内人数coutendl*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停车两分钟;;sleep(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)coutmodel)客车(车牌号为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-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);elsecoutmodel)客车(车牌号为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&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(2000);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)兴平还有double(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)在咸阳站有人下车;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) double 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(5000);/void dis_xby2(quenode *p,quefr *q,int *h,int *m) / 西安到宝鸡的依维柯8:20bool t=0;while(1)double dis=0; dis=(*h)*60+(*m)-(8*60+20)*1.4;t=dis1(p,q,dis);if(t=1)break;sleep(5000);/void dis_xby3(quenode *p,quefr *q,int *h,int *m) /西安到宝鸡的依维柯8:40bool t=0;while(1)double dis=0; dis=(*h)*60+(*m)-(8*60+40)*1.4;t=dis1(p,q,dis);if(t=1)break;sleep(5000);/void dis_bxy1(quenode *p,quefr *q,int *h1,int *m1) /同理宝鸡到西安的依维柯bool t=0;while(1)double dis=0; dis=(*h1)*60+(*m1)-(8*60+0)*1.4;t=dis2(p,q,dis);if(t=1)break;sleep(5000);/void dis_bxy2(quenode *p,quefr *q,int *h1,int *m1)bool t=0;while(1)double dis=0; dis=(*h1)*60+(*m1)-(8*60+20)*1.4;t=dis2(p,q,dis);if(t=1)break;sleep(5000);/void dis_bxy3(quenode *p,quefr *q,int *h1,int *m1)bool t=0;while(1)double dis=0; dis=(*h1)*60+(*m1)-(8*60+40)*1.4;t=dis2(p,q,dis);if(t=1)break;sleep(5000);/int _tmain(int argc, _tchar* argv)quefr *q1=null,*q2=null,*q3=null,*q4=null;quenode *p1=null,*p2=null,*p3=null,*p4=null;/char w15=a,b,c,d,e; /西安站依维柯客车型号 char y112=a,b,c,d,e,f,g,h,i,j,k,l; /西安站沃尔沃客车型号 char w24=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); /创建4个队列 q2=createqueue(w1,5,mod2); q3=createqueue(y2,15,mod1); q4=createqueue(w2,4,mod2);/bool f1=0,f2=0;bool fy=0,fw=0;inth=7,m=49; /时间 while(1)sleep(1000);system(cls); /刷屏if(m=59)h+=1;m=00; / 时间elsem+=1;/cout时间:h:m /*两站的依维柯客车8:00发车,17:59停车;沃尔沃客车8:30发车,17:30停车*/; cout*=7&(m=50|m=10|m=30)p1=deque(q1); p3=deque(q3);f1=1; if(h=8&m=20)p2=deque(q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论