广东海洋大学公交换乘系统课程设计.doc_第1页
广东海洋大学公交换乘系统课程设计.doc_第2页
广东海洋大学公交换乘系统课程设计.doc_第3页
广东海洋大学公交换乘系统课程设计.doc_第4页
广东海洋大学公交换乘系统课程设计.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

广东海洋大学信息学院课程设计报告设计题目公交换乘系统课程名称数据结构姓名(学号)201411621146联系电话专业名称计算机科学与技术所在班级计科1141指导教师谢仕义 教师职称教授起止时间2015 年11月20日至 2015年12月26日评定成绩目录一、课程设计主要内容P31.1 概况.P31.2 主要内容.P41.3 开发环境和工具.P4二、功能和结构设计.P4三、流程图和算法设计P4四、源程序代码.P9五、课程设计总结.P175.1 优点P175.2 缺点P175.3 自我总结P17六、参考资料.P18一、课程设计主要内容1.1 概况名称:公交换乘系统用途:交通运输公司、乘客功能:实现最优路线的显示1.2 主要内容公交换乘在一个城市的公共交通系统设计中占据着极其重要的地位,公交换乘的过程将直接影响居民出行时间的长短,公交换乘的过程如下:指定一起始公交站点与目的公交站点,依据参考因素,例如:换乘路线的路径最短、耗费时间最短、所需车资最少等,经过分析处理得到可达目的站点换乘次数最少的乘车方案,具体可分为: (1)零次换乘 起始站点和目的站点之间存在可直达的公交线路,即出行居民无需转乘就可以直接到达目的站点,这也是较为理想的方案。 (2)一次换乘 起始站点和目的站点之间没有公交车直接往返,即两站点之间不存在可直达的公交线路,则出行居民需要在途经的某个站点下车,然后转乘另一线路公交车才能达到目的站点。 (3)多次换乘 在起始站点和目的站点之间没有可直达的公交线路,出行居民需要经过一次以上的转乘才能达到目的站点,则得到多次换乘方案。多次换乘方案可通过一次换乘的递归计算得到,一般情况下,超过两次转乘的方案对于出行居民来说是难以接受的,本课程设计只要求计算零次和一次换乘方案,对于一次以上的公交换乘不作要求。 下面以图所示的公交线路图为例,来看一下公交换乘方案的选择。在该交通公交线路图网中共有1线、2线、3线3条公交线路,每条线路各布有若干个公交站点(与公交线路对应颜色的小圆点标示),其中黑色圆点表示换乘站点,即不同线路共同经过的公交站点。例如,某一居民在湾桥站乘车前往目的站点建新东路站,则该居民可乘坐2线公交车即可直达目的站点,即零次换乘;如果该居民前往目的站点海运集团公司站,分析该公交线路可知该居民有两种一次换乘的乘车方案:其一是该居民在湾桥站乘坐2线公车到农垦医院站,然后再换乘1线公交车直到海运集团公司站;其二是该居民在湾桥站乘坐2线公车直到霞湖医院站,再换乘1线公交车到海运集团公司站;同理,仿照一次换乘的方法可得到其他多次换乘的乘车方案,用户可以自行分析。1.3 开发环境和工具开发语言:C+程序设计语言开发软件:Visual C+ 6.0二、功能和结构设计1)输入出发点:2)输入终点:3)查询结果:三、流程图和算法设计用户通过输入起始站点和终点站来获取公交线路信息,流程图如下:算法:(1)首先建立3个一位数组保存各个站点信息。具体算法如下:Busline:Busline(string p,int n) /构造函数,初始化公交线路站点信息 if(npathlen) throw上溢; for(int i=0;ipathlen;i+) busi=pi; string path1pathlen=农垦医院站,潜水运动学校站,海滨宾馆站,海上城市站,市旅游总公司站,霞湖医院站,海运集团公司站; string path2pathlen=东华站,湾桥站,农垦医院站,啤酒厂站,俱乐部站,广医附院站,国贸站,广州湾站,建新东路站,霞湖医院站,霞山汽车运输总站; string path3pathlen=海滨医院站,海滨宾馆站,儿童公园站,广州湾站,建设路站,湛江汽车南站,人民大道中巴专线,世纪广场站;Busline a(path1,7); Busline b(path2,11); Busline c(path3,8);(2)判断乘客是否需要换乘,即起点和终点是否位于同一条公交线上:1)如果可以直达,起点和终点位于同一条公交线上,算法如下:void Busline:through(int i,string sp,string fp,string p,int l) /l为公交专线,i是站点下标,sp是出发点,fp是终点qd=i; int count1=0,count2=0,sum1=0;/count1,count2用于记录经过的站点数 for(int j=0;jpathlen;j+) if(fp=pj) cout可以直达,乘坐l号车!endl; if(ij) /起点下标小于终点下标 cout该路线为:endl; for(int k=i;k=j-1;k+) coutpk; count1+;coutpj; else /起点下标大于终点下标cout该路线为:=j+1;k-) coutpk; count2+; coutpj; sum1=count1+count2+1;/统计经过的站点个数coutendl;cout共经过站点数为:;coutsum1endl; 2)如果需要换乘,起点和终点位于不同一条公交线上,若有多种换乘方案,则选取经过站点数最少的方案,即最优路线作为输出,算法如下:void Busline:transfer(int i,int j,string sp,string fp,string p1,string p2) qd=i; zd=j; int count1=0,count2=0,count3=0,count4=0;/i是起点下标,j是终点下标int sum1=0,sum2=0; for(int k=0;kpathlen;k+) for(int h=0;hpathlen;h+) if(fp=p1h&sp=p2k) for(int x=0;x4;x+) for(int l=0;lpathlen;l+) for(int l1=0;l1pathlen;l1+) if(ax=p2l&ax=p1l1) /ax为换乘前后路线的交点 if(i=l) /起点下标小于交点下标 cout该路线为:endl; for(int y=i;yl;y+) coutp2y; /输出换乘之前的站点count1+;/统计站点个数 if(j=l1) /终点下标小于交点下标 coutaxendl;cout然后在ax转乘j;z-) count2+;/统计站点个数coutp1z; /输出换乘后的站点 coutfpl1) /终点下标大于交点下标 coutaxendl; cout然后在ax转乘endl; for(int z=l1;zj;z+) count2+;coutp1z; coutfpendl; sum1=count1+count2+1;/换乘前后总共经过的站点数cout共经过站点数为:;coutsum1endl;cout-l) /起点下标大于交点下标 cout该路线为:l;y-) count3+;coutp2y; if(j=l1) /终点下标小于交点下标 coutaxendl;cout然后在ax转乘j;z-) count4+;coutp1z; coutfpl1) /终点下标大于交点下标 coutaxendl;cout然后在ax转乘endl; for(int z=l1;zj;z+) count4+;coutp1z; coutfpendl; sum2=count3+count4+1;cout共经过站点数为:;coutsum2endl;cout-endl; if(sum1!=0&sum2!=0)if(sum1=sum2)cout同一转乘方式下,最优路线为:共经过站点数为sum1的路线!endl;elsecout同一转乘方式下,最优路线为:共经过站点数为sum2的路线!endl; 四、源程序代码#include #include using namespace std; const int pathlen=11; int qd,zd;/起点,终点的下标 string a4=农垦医院站,广州湾站,霞湖医院站,海滨宾馆站; /转乘站点/int const count1=0,count2=0,count3=0,count4=0;/int const sum1=0,sum2=0; class Buslinepublic: Busline(string p,int n); void through(int i,string sp,string fp,string p,int l); void transfer(int i,int j,string sp,string fp,string p1,string p2); void map(); private: string buspathlen; ; Busline:Busline(string p,int n) /构造函数,初始化公交线路站点信息 if(npathlen) throw上溢; for(int i=0;ipathlen;i+) busi=pi; void Busline:through(int i,string sp,string fp,string p,int l) /l为公交专线,i是站点下标,sp是出发点,fp是终点qd=i; int count1=0,count2=0,sum1=0; for(int j=0;jpathlen;j+) if(fp=pj) cout可以直达,乘坐l号车!endl; if(ij) cout该路线为:endl; for(int k=i;k=j-1;k+) coutpk; count1+;coutpj; else cout该路线为:=j+1;k-) coutpk; count2+; coutpj; sum1=count1+count2+1;coutendl;cout共经过站点数为:;coutsum1endl; void Busline:transfer(int i,int j,string sp,string fp,string p1,string p2) qd=i; zd=j; int count1=0,count2=0,count3=0,count4=0;int sum1=0,sum2=0; for(int k=0;kpathlen;k+) for(int h=0;hpathlen;h+) if(fp=p1h&sp=p2k) for(int x=0;x4;x+) for(int l=0;lpathlen;l+) for(int l1=0;l1pathlen;l1+) if(ax=p2l&ax=p1l1) if(i=l) cout该路线为:endl; for(int y=i;yl;y+) coutp2y; count1+; if(j=l1) coutaxendl;cout然后在ax转乘j;z-) count2+;coutp1z; coutfpl1) coutaxendl; cout然后在ax转乘endl; for(int z=l1;zj;z+) count2+;coutp1z; coutfpendl; sum1=count1+count2+1;cout共经过站点数为:;coutsum1endl;cout-l) cout该路线为:l;y-) count3+;coutp2y; if(j=l1) coutaxendl;cout然后在ax转乘j;z-) count4+;coutp1z; coutfpl1) coutaxendl;cout然后在ax转乘endl; for(int z=l1;zj;z+) count4+;coutp1z; coutfpendl; sum2=count3+count4+1;cout共经过站点数为:;coutsum2endl;cout-endl; if(sum1!=0&sum2!=0)if(sum1=sum2)cout同一转乘方式下,最优路线为:共经过站点数为sum1的路线!endl;elsecout同一转乘方式下,最优路线为:共经过站点数为sum2的路线!endl; void Busline:map() cout 湛江公交路线图 endl; cout 2线 endl; cout endl; cout 东华站 endl; cout endl; cout 湾桥站 潜水运动 海滨医院站 endl; cout 学校站 海上城市站 endl; cout农垦医院站海滨宾馆站 endl; cout endl; cout 啤酒厂站 儿童公园站 市旅游总公司站 endl; cout endl; cout 俱乐部站 endl; cout 广州湾站 霞湖医院站 endl; cout endl; cout 广医附院站 国贸站 建新东路站 霞山汽车运输总站 endl; cout endl; cout 3线 endl; cout 建设路站 海运集团公司站 endl; cout世纪广场站 人民大道 湛江汽车南站 endl; cout 中巴专线 1线 endl; cout (为换乘站点,为普通站点) endl; coutendl; void main() string path1pathlen=农垦医院站,潜水运动学校站,海滨宾馆站,海上城市站,市旅游总公司站,霞湖医院站,海运集团公司站; string path2pathlen=东华站,湾桥站,农垦医院站,啤酒厂站,俱乐部站,广医附院站,国贸站,广州湾站,建新东路站,霞湖医院站,霞山汽车运输总站; string path3pathlen=海滨医院站,海滨宾馆站,儿童公园站,广州湾站,建设路站,湛江汽车南站,人民大道中巴专线,世纪广场站; Busline a(path1,7); Busline b(path2,11); Busline c(path3,8); a.map(); string sp,fp; begin:cout请输入出发点:sp; begin1:cout请输入终点:fp; int j1=1,jj=1; for(int d=0;d7;d+) if(sp=path1d) j1=2; if(fp=path1d) jj=2; for( d=0;d11;d+) if(sp=path2d) j1=2; if(fp=path2d) jj=2; for( d=0;d8;d+) if(sp=path3d) j1=2; if(fp=path3d) jj=2; if(j1=1) cout输入的出发点有错,请重新输入:endl; goto begin; if(jj=1) cout输入的终点点有错,请重新输入:endl; goto begin1; else cout-查询结果-endl;for(int i=0;ipathlen;i+) for(int k1=0;k1pathlen;k1+) if(fp=path1k1) if(sp=path1i) a.through(i,sp,fp,path1,1);coutendl;break; else if(sp!=path1i) if(sp=path2i) cout需要换乘,转乘方式为:2路转1路线endl; a.transfer(i,k1,sp,fp,path1,path2); coutendl; if(sp=path3i) cout需要换乘,转乘方式:3路转1路线endl; a.transfer(i,k1,sp,fp,path1,path3); coutendl; /break; else if(fp=path2k1) if(sp=path2i) b.through(i,sp,fp,path2,2);coutendl;break; else if(sp!=path2i) if(sp=path1i)cout需要换乘,转乘方式:1路转2路线endl; b.transfer(i,k1,sp,fp,path2,path1);coutendl;else if(sp=path3i) cout需要换乘,转乘方式:3路转2路线endl; b.transfer(i,k1,sp,fp,path2,path3); coutendl; / break; else if(fp=path3k1) if(sp=path3i) c.through(i,sp,fp,path3,3); coutendl;break; else if(sp!=path3i) if(sp=path1i) cout需要换乘,转乘方式:1路转3路线endl; c.transfer(i,k1,sp,fp,path3,path1); coutendl; else if(sp=path2i) cout需要换乘,转乘方式:2路转3路线endl;

温馨提示

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

评论

0/150

提交评论