广东海洋大学信息学院课程设计报告设计题目公交换乘课程名称数据结构姓名(学号)联系电话专业名称所在班级指导教师教师职称起止时间评定成绩一、课程设计的主要内容公交换乘在一个城市的公共交通系统设计中占据着极其重要的地位,公交换乘的过程将直接影响居民出行时间的长短,公交换乘的过程如下:指定一起始公交站点与目的公交站点,依据参考因素,例如:换乘路线的路径最短、耗费时间最短、所需车资最少等,经过分析处理得到可达目的站点换乘次数最少的乘车方案,具体可分为:(1)零次换乘起始站点和目的站点之间存在可直达的公交线路,即出行居民无需转乘就可以直接到达目的站点,这也是较为理想的方案。
(2)一次换乘起始站点和目的站点之间没有公交车直接往返,即两站点之间不存在可直达的公交线路,则出行居民需要在途经的某个站点下车,然后转乘另一线路公交车才能达到目的站点。
(3)多次换乘在起始站点和目的站点之间没有可直达的公交线路,出行居民需要经过一次以上的转乘才能达到目的站点,则得到多次换乘方案。
多次换乘方案可通过一次换乘的递归计算得到,一般情况下,超过两次转乘的方案对于出行居民来说是难以接受的,本课程设计只要求计算零次和一次换乘方案,对于一次以上的公交换乘不作要求。
二、功能和结构设计1、功能设计在这里通过主函数显示程序的主页版,上面是湛江的公交线路图在这里输入出发站点的名字,回车确定!在这里输入最终站点的名字!输入错误会提醒重新输入!输入要查询的起点和终点0次换乘,输出查询结果:按y或Y,可以继续查询!输入出发点和终点,一次换乘的结果如下:2、结构设计设计一个实现公交换乘的算法:指定任一起始站点和目的站点,依据算法得到所有可达目的站点的的公交线路,包括中间站点的换乘方法以及该公交线路所经过的公交站点。
1.分析公交站点和公交线路的数据属性,并依据公交换乘的功能要求,确定算法设计方案;2.设计公交站点信息以及公交线路信息的存储结构;3.设计公交换乘算法,并画出程序流程图;4.使用C++程序设计语言编写实现公交换乘的程序;三、流程图和算法设计四、源程序代码#include<iostream>#include<string>using namespace std;const int pathlen=11;int qd,zd;//起点,终点的下标string a[4]={"农垦医院站","广州湾站","霞湖医院站","海滨宾馆站"}; class Busline{public:Busline(string p[],int n);void zhida(int i,string sp,string fp,string p[],int l);void gjhc(int i,int j,string sp,string fp,string p1[],string p2[]);void tu();private:string bus[pathlen];};Busline::Busline(string p[],int n){if(n>pathlen) throw"上溢";for(int i=0;i<pathlen;i++){bus[i]=p[i];}}void Busline::zhida(int i,string sp,string fp,string p[],int l){qd=i;for(int j=0;j<pathlen;j++)if(fp==p[j]){cout<<"可以直达,乘坐"<<l<<"号车!"<<endl;if(i<j){cout<<"该路线为:"<<endl;for(int k=i;k<=j;k++){cout<<p[k]<<" ";}}elsecout<<"该路线为:"<<endl;for(int k=i;k>=j;k--){cout<<p[k]<<" ";}}}void Busline::gjhc(int i,int j,string sp,string fp,string p1[],string p2[]) {qd=i;zd=j;for(int k=0;k<pathlen;k++)for(int h=0;h<pathlen;h++)if(fp==p1[h]&&sp==p2[k]){for(int x=0;x<4;x++)for(int l=0;l<pathlen;l++)for(int l1=0;l1<pathlen;l1++){if(a[x]==p2[l]&&a[x]==p1[l1]){if(i<l){for(int y=i;y<l;y++){cout<<"经"<<p2[y]<<" ";}if(j<l1){cout<<"在"<<a[x]<<"转程,"<<" ";for(int z=l1;z>=j;z--){cout<<"经"<<p1[z]<<" ";}cout<<"到"<<fp<<endl;}else if(j>l1){cout<<"在"<<a[x]<<"转程,"<<" ";for(int z=l1;z<=j;z++){cout<<"经"<<p1[z]<<" ";}cout<<"到"<<fp<<endl;}}else if(i>l){cout<<"在"<<a[x]<<"转程,"<<" ";for(int y=i;y>l;y--){cout<<"经"<<p2[y]<<" ";}cout<<"到"<<fp<<endl;if(j<l1){for(int z=l1;z>=j;z--){cout<<"转"<<p1[z]<<" ";}}else if(j>l1){cout<<"在"<<a[x]<<"转程,"<<" ";for(int z=l1;z<=j;z++){cout<<"转"<<p1[z]<<" ";}cout<<"到"<<fp<<endl;}}}}}}void Busline::tu(){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;cout<<endl;}void main(){string path1[pathlen]={"农垦医院站","潜水运动学校站","海滨宾馆站","海上城市站","市旅游总公司站","霞湖医院站","海运集团公司站"};string path2[pathlen]={"东华站","湾桥站","农垦医院站","啤酒厂站","俱乐部站","广医附院站","国贸站","广州湾站","建新东路站","霞湖医院站","霞山汽车运输总站"};string path3[pathlen]={"海滨医院站","海滨宾馆站","儿童公园站","广州湾站","建设路站","湛江汽车南站","人民大道中巴专线","世纪广场站"};Busline a(path1,7);Busline b(path2,11);Busline c(path3,8);a.tu();string sp,fp;begin:cout<<"请输入出发点:"<<endl;cin>>sp;begin1:cout<<"请输入终点:"<<endl;cin>>fp;int j1=1,jj=1;for(int d=0;d<7;d++){if(sp==path1[d])j1=2;if(fp==path1[d])jj=2;}for( d=0;d<11;d++){if(sp==path2[d])j1=2;if(fp==path2[d])jj=2;}for( d=0;d<8;d++){if(sp==path3[d])j1=2;if(fp==path3[d])jj=2;}if(j1==1){cout<<"输入的出发点有错,请重新输入:"<<endl;goto begin;}if(jj==1){cout<<"输入的终点点有错,请重新输入:"<<endl;goto begin1;}elsefor(int i=0;i<pathlen;i++){for(int k1=0;k1<pathlen;k1++)if(fp==path1[k1]){if(sp==path1[i]){a.zhida(i,sp,fp,path1,1);}else if(sp!=path1[i]){if(sp==path2[i]){cout<<"需要换乘,转程方式为:2路转1路线"<<endl;a.gjhc(i,k1,sp,fp,path1,path2);}if(sp==path3[i]){cout<<"需要换乘,转程方式:3路转1路线"<<endl;a.gjhc(i,k1,sp,fp,path1,path3);}}}else if(fp==path2[k1]){if(sp==path2[i]){b.zhida(i,sp,fp,path2,2);}else if(sp!=path2[i]){if(sp==path1[i]){cout<<"需要换乘,转程方式:1路转2路线"<<endl;b.gjhc(i,k1,sp,fp,path2,path1);}else if(sp==path3[i]){cout<<"需要换乘,转程方式:3路转2路线"<<endl;b.gjhc(i,k1,sp,fp,path2,path3);}}}else if(fp==path3[k1]){if(sp==path3[i]){c.zhida(i,sp,fp,path3,3);}else if(sp!=path3[i]){if(sp==path1[i]){cout<<"转程方式:1路转3路线"<<endl;c.gjhc(i,k1,sp,fp,path3,path1);}else if(sp==path2[i]){cout<<"转程方式:2路转3路线"<<endl;c.gjhc(i,k1,sp,fp,path3,path2);}}}}cout<<"\n"<<"是否继续?继续请输入y或者Y!!!"<<endl;char t;cin>>t;if(t=='y'||t=='Y')goto begin;elseexit(1);}五、课程设计总结在这次关于公交换乘的课程设计中,我了解到了我的不足,如算法的不完善、不细心和耐心不是很好等等。