广东海洋大学数据结构课程设计——公交换乘系统(C++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广东海洋大学信息学院课程设计报告
设计题目公交换乘
课程名称数据结构
姓名(学号)
联系电话
专业名称
所在班级
指导教师
教师职称
起止时间
评定成绩
一、课程设计的主要内容
公交换乘在一个城市的公共交通系统设计中占据着极其重要的地位,公交换乘的过程将直接影响居民出行时间的长短,公交换乘的过程如下:指定一起始公交站点与目的公交站点,依据参考因素,例如:换乘路线的路径最短、耗费时间最短、所需车资最少等,经过分析处理得到可达目的站点换乘次数最少的乘车方案,具体可分为:
(1)零次换乘起始站点和目的站点之间存在可直达的公交线路,即出行居民无需转乘就可以直接到达目的站点,这也是较为理想的方案。
(2)一次换乘起始站点和目的站点之间没有公交车直接往返,即两站点之间不存在可直达的公交线路,则出行居民需要在途经的某个站点下车,然后转乘另一线路公交车才能达到目的站点。
(3)多次换乘在起始站点和目的站点之间没有可直达的公交线路,出行居民需要经过一次以上的转乘才能达到目的站点,则得到多次换乘方案。多次换乘方案可通过一次换乘的递归计算得到,一般情况下,超过两次转乘的方案对于出行居民来说是难以接受的,本课程设计只要求计算零次和一次换乘方案,对于一次以上的公交换乘不作要求。
二、功能和结构设计
1、功能设计
在这里通过主函数显示程序的主页版,上面是湛江的公交线路图
在这里输入出发站点的名字,回车确定!
在这里输入最终站点的名字!
输入错误会提醒重新输入!
输入要查询的起点和终点
0次换乘,输出查询结果:
按y或Y,可以继续查询!
输入出发点和终点,一次换乘的结果如下:
2、结构设计
设计一个实现公交换乘的算法:指定任一起始站点和目的站点,依据算法得到所有可达目的站点的的公交线路,包括中间站点的换乘方法以及该公交线路所经过的公交站点。
1.分析公交站点和公交线路的数据属性,并依据公交换乘的功能要求,确定算法设计方案;
2.设计公交站点信息以及公交线路信息的存储结构;
3.设计公交换乘算法,并画出程序流程图;
4.使用C++程序设计语言编写实现公交换乘的程序;
三、流程图和算法设计
四、源程序代码
#include
#include
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 { bus[i]=p[i]; } } void Busline::zhida(int i,string sp,string fp,string p[],int l) { qd=i; for(int j=0;j if(fp==p[j]) { cout<<"可以直达,乘坐"< if(i { cout<<"该路线为:"< for(int k=i;k<=j;k++) { cout< } } else cout<<"该路线为:"< for(int k=i;k>=j;k--) { cout< } } } void Busline::gjhc(int i,int j,string sp,string fp,string p1[],string p2[]) { qd=i; zd=j; for(int k=0;k for(int h=0;h if(fp==p1[h]&&sp==p2[k]) { for(int x=0;x<4;x++) for(int l=0;l for(int l1=0;l1 { if(a[x]==p2[l]&&a[x]==p1[l1]) { if(i { for(int y=i;y { cout<<"经"< } if(j { cout<<"在"< for(int z=l1;z>=j;z--) { cout<<"经"< } cout<<"到"< } else if(j>l1) { cout<<"在"< for(int z=l1;z<=j;z++) { cout<<"经"< } cout<<"到"< } } else if(i>l) { cout<<"在"< for(int y=i;y>l;y--) { cout<<"经"< } cout<<"到"< if(j { for(int z=l1;z>=j;z--) {