公交换乘课程设计报告

  • 格式:pdf
  • 大小:593.39 KB
  • 文档页数:45

下载文档原格式

  / 45
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

11
for(k=1;k<j-l;k++) { cout<<line[y/100-1][l+k].busStationName<<"-->"; longers+=line[y/100-1][l+k].longer; } cout<<line[y/100-1][l+k].busStationName<<endl; } else { //money+=line[y/100-1][l-1].longer; for(k=-1;k>j-l;k--) { cout<<line[y/100-1][l+k].busStationName<<"-->"; longers+=line[y/100-1][l+k].longer; } cout<<line[y/100-1][l+k].busStationName<<endl; longers+=line[y/100-1][l+k].longer; } cout<<"----路程所需费用:"<<longers*0.5<<"元,祝您路途愉快! ----"<<endl; nn=true; break;
15
{ for(int i=0;i<lineNum;i++) delete [] line[i]; lineNum=0; delete [] busStationNum; delete [] line; } template<typename T> void Bus<T>::input() { cout<<"请输入公交线路数:"; cin>>lineNum; line=new Pointer[lineNum];//三条线路 busStationNum=new int [lineNum];//每条线路的车站数 for(int a=0;a<lineNum;a++) { cout<<"请输入第"<<a+1<<"条公交线路的车站数:"; cin>>busStationNum[a]; }
//是否可乘换
//指向三条路线的指针
int lineNum;//路线数 int *busStationNum;//每条路线的车站数 }; template<typename A> class Administrator { public: Administrator(); ~Administrator();
//比较可换乘的站点是否有相同的,如果有,可以了一次换乘到达目的地;否则不 可以 bool nn=false; for(a=0;a<5;a++) { for(b=0;b<5;b++) { if(takeName[0][a]!=" "&&takeName[1][b]!=" "&&takeName[0][a]==takeName[1][b]) { cout<<"您可以【1】次换乘到达目的地(换乘点前面有“*”提示), 为你选择的路线如下:"<<endl; l=takeNum[0][a]%100; if(l-i>0) {
注:系统默认的公交线路图(系统开发者为用户事先存好的,在 f1.txt 文档中)
1
三、流程图和算法设计
2
3
4
5
6
算法: (给出查找最短路径的方法) void Bus<T>::findline() { int x,y,i,j,k,l,longers; longers=0; //x、y是起始和终止车站的编码;i、j是每个站点后两位编码;k是每个站点后两位编码 的差值;l是转乘站点的后两位编码 while(1) { cout<<"请输入起始站点编号:"; cin>>x; cout<<" cin>>y; 终止站点编号:";
一、课程设计的主要内容
1、 公交线路中,为用户查找最短路径,有【0】次换乘就能到达目的地和【1】次换乘就 能到达目的地。 2、 为用户计算出路程所需费用。 3、 该课程设计的公交系统中有分权限;分管理员用户和普通用户,管理员的登陆需要帐 号和密码(暗文) ,普通用户可以直接登陆。 4、 管理员可以重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存 入新公交路线资料(慎用! ) 、查找最短公交路线、新增管理员用户和删除管理员用户。 5、 普通用户只能输出公交路线和查找最短公交路线两个功能。 二、功能和结构设计 1、 为用户分权限 2、 管理员有重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存入 新公交路线资料(慎用! ) 、查找最短公交路线、新增管理员用户和删除管理员用户 3、 普通用户只能输出公交路线和查找最短公交路线两个功能。
7
if((x/100)==(y/100)) { cout<<"您可【0】次换乘到达目的地,路线如下:"<<endl; // k=j-i; if(j-i>0) { for(k=0;k<j-i;k++) { cout<<line[x/100-1][x%100+k].busStationName<<"-->"; longers+=line[x/100-1][x%100+k].longer; } cout<<line[x/100-1][x%100+k].busStationName<<endl; } else { for(k=0;k>j-i;k--) { cout<<line[x/100-1][x%100+k].busStationName<<"-->"; longers+=line[x/100-1][x%100+k-1].longer; } cout<<line[x/100-1][x%100+k].busStationName<<endl; longers+=line[x/100-1][x%100+k].longer;
12
} else if(a==4&&b==4) cout<<"很抱歉,没有【0】次换乘或【1】次换乘可以到达目的地的路 线!"; } if(nn) break; } } } 四、源程序代码 Bus.h: #include<iostream> #include<string> using namespace std; template <typename T> class Bus { public: struct BusStation { int number; //车站编号
8
} cout<<"----路程所需费用:"<<longers*0.5<<"元,祝您路途愉快!----"<<endl; } else { string takeName[2][5];//存放两条路线上可转乘车站的名称; int takeNum[2][5];//存放两条路线上可转乘车站的编号; int a,b;//a、b是计数的 for(a=0;a<2;a++) for(b=0;b<5;b++) { takeName[a][b]=" "; takeNum[a][b]=0; } //遍历每条路线可换乘的站点 for(a=0,b=0;a<busStationNum[x/100-1];a++) if(line[x/100-1][a].take) { takeName[0][b]=line[x/100-1][a].busStationName; takeNum[0][b]=line[x/100-1][a].number; b++; }
string busStationName;//车站名称
13
bool take; int longer; //到下一个车站的路程 }; Bus(); ~Bus(); void input(); void output(); void findline();//查找线路 void readfile();//读取公交路线数据 void writefile();//存入公交路线数据 typedef BusStation* Pointer; private: Pointer *line;
广东海洋大学信息学院 课程设计报告
设 计 题 目 课 程 名 称 姓名(学号) 联 系 电 话 专 业 名 称 所 在 班 级 指 导 教 师 教 师 职 称 起 止 时 间 评 定 成 绩
公交换乘系统
数据结构 XXX XXX 计算机科学与技术 XXX XXX 教授 2011 年 12 月 26 日至 2012 年 1 月 6 日
if((x/100)>lineNum||(x/100)<=0||(x%100)>=busStationNum[x/100-1]||(y/100)>lineNum||(y/100)<= 0||(y%100)>=busStationNum[y/100-1])//前两个是判断车站编码的首位的, 第三个是判断车站编 码的后两位的 cout<<"----找不到您所输入站点,请重新输入!----"<<endl; else break; } i=x%100; j=y%100;
10
for(k=0;k<l-i;k++) { cout<<line[x/100-1][x%100+k].busStationName<<"-->"; longers+=line[x/100-1][x%100+k].longer; } cout<<"*"<<line[x/100-1][x%100+k].busStationName<<"-->"; // } else { for(k=0;k>l-i;k--) { cout<<line[x/100-1][x%100+k].busStationName<<"-->"; longers+=line[x/100-1][x%100+k-1].longer; } cout<<"*"<<line[x/100-1][x%100+k].busStationName<<"-->"; // } l=takeNum[1][b]%100; if(j-l>0) { longers+=line[y/100-1][l].longer; money+=line[x/100-1][x%100+k].longer; money+=line[x/100-1][x%100+k].longer;
14
void readAdministrator();//读取管理员资料 void writeAdministrator();//存入管理员资料 void addAdministrator();//增加用户 void deleteAdministrator();//删除用户 bool land(); private: string *name; string *mima; int num; }; /////////////////////////////////////////////////////////////////////////// Bus.cpp #include"Bus.h" #include<fstream> template<typename T> Bus<T>::Bus() { lineNum=0; line=new Pointer[lineNum];//三条线路 busStationNum=new int [lineNum];//每条线路的车站数 } template<typename T> Bus<T>::~Bus()
for(int b=0;b<lineNum;b++) line[b]=new BusStation[busStationNum[b]];//依据每条线路的车站数创建每条线路
16
int k,m,i,j;//k指前一线,m指后一线,i指要比较的前一线的车站,j指要比较的后一线的 车站
ቤተ መጻሕፍቲ ባይዱ
cout<<"请依次输入每个车站的名称、到下一站点的距离:"<<endl; for(i=0;i<lineNum;i++) { cout<<"第"<<i+1<<"条路线的资料"<<endl; for(j=0;j<busStationNum[i];j++) { line[i][j].number=(i+1)*100+j;//设置每个车站的编号 line[i][j].take=false;//初始化每个车站为不可换乘 cin>>line[i][j].busStationName; if(j<busStationNum[i]-1) cin>>line[i][j].longer;//到下一站点有3公里 else cin>>line[i][j].longer; } } //以下是要找出线路中可换乘的车站 for(k=0,m=k+1;k<lineNum-1;)//每条路线的站点与另一条路线的站点进行比较 { for(i=0;i<busStationNum[k];i++) for(j=0;j<busStationNum[m];j++)
9
for(a=0,b=0;a<busStationNum[y/100-1];a++) if(line[y/100-1][a].take) { takeName[1][b]=line[y/100-1][a].busStationName; takeNum[1][b]=line[y/100-1][a].number; b++; }