数据结构课程设计报告-公交换乘系统.doc_第1页
数据结构课程设计报告-公交换乘系统.doc_第2页
数据结构课程设计报告-公交换乘系统.doc_第3页
数据结构课程设计报告-公交换乘系统.doc_第4页
数据结构课程设计报告-公交换乘系统.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

广东海洋大学信息学院课程设计报告设计题目公交换乘系统课程名称数据结构姓名(学号)联系电话专业名称计算机科学与技术所在班级1101班指导教师教师职称起止时间2011 年12月26日至 2012年1月6日评定成绩一、 课程设计的主要内容1、 公交线路中,为用户查找最短路径,有【0】次换乘就能到达目的地和【1】次换乘就能到达目的地。2、 为用户计算出路程所需费用。3、 该课程设计的公交系统中有分权限;分管理员用户和普通用户,管理员的登陆需要帐号和密码(暗文),普通用户可以直接登陆。4、 管理员可以重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存入新公交路线资料(慎用!)、查找最短公交路线、新增管理员用户和删除管理员用户。5、 普通用户只能输出公交路线和查找最短公交路线两个功能。二、 功能和结构设计1、 为用户分权限2、 管理员有重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存入新公交路线资料(慎用!)、查找最短公交路线、新增管理员用户和删除管理员用户3、 普通用户只能输出公交路线和查找最短公交路线两个功能。注:系统默认的公交线路图(系统开发者为用户事先存好的,在f1.txt文档中)三、 流程图和算法设计算法:(给出查找最短路径的方法)void Bus:findline()int x,y,i,j,k,l,longers;longers=0;/x、y是起始和终止车站的编码;i、j是每个站点后两位编码;k是每个站点后两位编码的差值;l是转乘站点的后两位编码while(1)coutx;couty;if(x/100)lineNum|(x/100)=busStationNumx/100-1|(y/100)lineNum|(y/100)=busStationNumy/100-1)/前两个是判断车站编码的首位的,第三个是判断车站编码的后两位的cout-找不到您所输入站点,请重新输入!-endl;elsebreak;i=x%100;j=y%100;if(x/100)=(y/100)cout您可【0】次换乘到达目的地,路线如下:0)for(k=0;kj-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;coutlinex/100-1x%100+k.busStationNamej-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;coutlinex/100-1x%100+k.busStationNameendl;longers+=linex/100-1x%100+k.longer;cout-路程所需费用:longers*0.5元,祝您路途愉快!-endl;elsestring takeName25;/存放两条路线上可转乘车站的名称;int takeNum25;/存放两条路线上可转乘车站的编号;int a,b;/a、b是计数的for(a=0;a2;a+)for(b=0;b5;b+)takeNameab= ;takeNumab=0;/遍历每条路线可换乘的站点for(a=0,b=0;abusStationNumx/100-1;a+)if(linex/100-1a.take)takeName0b=linex/100-1a.busStationName;takeNum0b=linex/100-1a.number;b+;for(a=0,b=0;abusStationNumy/100-1;a+)if(liney/100-1a.take)takeName1b=liney/100-1a.busStationName;takeNum1b=liney/100-1a.number;b+;/比较可换乘的站点是否有相同的,如果有,可以了一次换乘到达目的地;否则不可以bool nn=false;for(a=0;a5;a+)for(b=0;b5;b+)if(takeName0a!= &takeName1b!= &takeName0a=takeName1b)cout您可以【1】次换乘到达目的地(换乘点前面有“*”提示),为你选择的路线如下:0)for(k=0;kl-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;elsefor(k=0;kl-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;l=takeNum1b%100;if(j-l0)longers+=liney/100-1l.longer;for(k=1;kj-l;k+)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNamej-l;k-)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNameendl;longers+=liney/100-1l+k.longer;cout-路程所需费用:longers*0.5元,祝您路途愉快!-endl;nn=true;break;else if(a=4&b=4)cout很抱歉,没有【0】次换乘或【1】次换乘可以到达目的地的路线!;if(nn)break;四、 源程序代码Bus.h:#include#includeusing namespace std;template class Buspublic:struct BusStationint number; /车站编号string busStationName;/车站名称bool take; /是否可乘换int longer; /到下一个车站的路程;Bus();Bus();void input();void output();void findline();/查找线路void readfile();/读取公交路线数据void writefile();/存入公交路线数据typedef BusStation* Pointer;private:Pointer *line; /指向三条路线的指针int lineNum;/路线数int *busStationNum;/每条路线的车站数;templateclass Administratorpublic:Administrator();Administrator();void readAdministrator();/读取管理员资料void writeAdministrator();/存入管理员资料void addAdministrator();/增加用户void deleteAdministrator();/删除用户bool land();private:string *name;string *mima;int num;/Bus.cpp#includeBus.h#includetemplateBus:Bus()lineNum=0;line=new PointerlineNum;/三条线路busStationNum=new int lineNum;/每条线路的车站数templateBus:Bus()for(int i=0;ilineNum;i+)delete linei;lineNum=0;delete busStationNum;delete line;templatevoid Bus:input()coutlineNum;line=new PointerlineNum;/三条线路busStationNum=new int lineNum;/每条线路的车站数for(int a=0;alineNum;a+)cout请输入第a+1busStationNuma;for(int b=0;blineNum;b+)lineb=new BusStationbusStationNumb;/依据每条线路的车站数创建每条线路int k,m,i,j;/k指前一线,m指后一线,i指要比较的前一线的车站,j指要比较的后一线的车站cout请依次输入每个车站的名称、到下一站点的距离:endl;for(i=0;ilineNum;i+)cout第i+1条路线的资料endl;for(j=0;jlineij.busStationName;if(jlineij.longer;/到下一站点有3公里elsecinlineij.longer;/以下是要找出线路中可换乘的车站for(k=0,m=k+1;klineNum-1;)/每条路线的站点与另一条路线的站点进行比较for(i=0;ibusStationNumk;i+)for(j=0;j=lineNum-1)k+;m=k;m+;templatevoid Bus:output()cout编码 ;cout车站名称 ;cout到下一站的距离 ;cout是否可以乘换endl;coutsetiosflags(ios:left);for(int i=0;ilineNum;i+)for(int j=0;jbusStationNumi;j+)coutsetw(6)lineij.number;coutsetw(20)lineij.busStationName;coutsetw(20)lineij.longer;if(lineij.take)cout是 endl;elsecout否 endl;coutendl;templatevoid Bus:findline()int x,y,i,j,k,l,longers;longers=0;/x、y是起始和终止车站的编码;i、j是每个站点后两位编码;k是每个站点后两位编码的差值;l是转乘站点的后两位编码while(1)coutx;couty;if(x/100)lineNum|(x/100)=busStationNumx/100-1|(y/100)lineNum|(y/100)=busStationNumy/100-1)/前两个是判断车站编码的首位的,第三个是判断车站编码的后两位的cout-找不到您所输入站点,请重新输入!-endl;elsebreak;i=x%100;j=y%100;if(x/100)=(y/100)cout您可【0】次换乘到达目的地,路线如下:0)for(k=0;kj-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;coutlinex/100-1x%100+k.busStationNamej-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;coutlinex/100-1x%100+k.busStationNameendl;longers+=linex/100-1x%100+k.longer;cout-路程所需费用:longers*0.5元,祝您路途愉快!-endl;elsestring takeName25;/存放两条路线上可转乘车站的名称;int takeNum25;/存放两条路线上可转乘车站的编号;int a,b;/a、b是计数的for(a=0;a2;a+)for(b=0;b5;b+)takeNameab= ;takeNumab=0;/遍历每条路线可换乘的站点for(a=0,b=0;abusStationNumx/100-1;a+)if(linex/100-1a.take)takeName0b=linex/100-1a.busStationName;takeNum0b=linex/100-1a.number;b+;for(a=0,b=0;abusStationNumy/100-1;a+)if(liney/100-1a.take)takeName1b=liney/100-1a.busStationName;takeNum1b=liney/100-1a.number;b+;/比较可换乘的站点是否有相同的,如果有,可以了一次换乘到达目的地;否则不可以bool nn=false;for(a=0;a5;a+)for(b=0;b5;b+)if(takeName0a!= &takeName1b!= &takeName0a=takeName1b)cout您可以【1】次换乘到达目的地(换乘点前面有“*”提示),为你选择的路线如下:0)for(k=0;kl-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;elsefor(k=0;kl-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;l=takeNum1b%100;if(j-l0)longers+=liney/100-1l.longer;for(k=1;kj-l;k+)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNamej-l;k-)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNameendl;longers+=liney/100-1l+k.longer;cout-路程所需费用:longers*0.5元,祝您路途愉快!-endl;nn=true;break;else if(a=4&b=4)cout很抱歉,没有【0】次换乘或【1】次换乘可以到达目的地的路线!;if(nn)break;/cout还未写代码;templatevoid Bus:readfile()ifstream infile(f1.txt,ios:in);if(!infile)cerropen error!lineNum;line=new PointerlineNum;/三条线路busStationNum=new int lineNum;/每条线路的车站数for(int a=0;abusStationNuma;for(int b=0;blineNum;b+)lineb=new BusStationbusStationNumb;/依据每条线路的车站数创建每条线路for(int i=0;ilineNum;i+)for(int j=0;jlineij.number;infilelineij.busStationName;infilelineij.longer;infilelineij.take;cout-读取成功-endl;infile.close();template void Bus:writefile()ofstream outfile(f1.txt,ios:out);if(!outfile)cerropen error!endl;exit(1);outfilelineNum ;for(int a=0;alineNum;a+)outfilebusStationNuma ;for(int i=0;ilineNum;i+)for(int j=0;jbusStationNumi;j+)outfilelineij.number ;outfilelineij.busStationName ;outfilelineij.longer ;outfilelineij.take ;cout-存入成功-endl;outfile.close();/template Administrator:Administrator()num=0;name=new stringnum;mima=new stringnum;templateAdministrator:Administrator()num=0;delete name;delete mima;name=NULL;mima=NULL;templatevoid Administrator:readAdministrator()ifstream infile(Administrator.txt,ios:in);if(!infile)cerropen error!num;name=new stringnum;mima=new stringnum;for(int i=0;inameimimai;templatevoid Administrator:writeAdministrator()ofstream outfile(Administrator.txt,ios:out);if(!outfile)cerropen error!endl;exit(1);outfilenum ;for(int i=0;inum;i+)outfilenamei ;outfilemimai ;templatebool Administrator:land()string myname;string mymima;coutmyname;cout 密码:;char ch; while (ch=getch()!=13) /输入密码时显示星号功能。老师,学生登录时也与这个相同。 mymima+=ch;/string对象重载了+= coutmymima;readAdministrator();for(int i=0;inum;i+)if(myname=namei&mymima=mimai)return true;return false;template void Administrator:addAdministrator()string *name_aux,*mima_aux;name_aux=new stringnum+1;mima_aux=new stringnum+1;for(int i=0;inum;i+)/将用户的帐户和密码赋给辅助变量name_auxi=namei;mima_auxi=mimai;/一下几行代码是为了扩大存储帐户和密码的数组delete name;delete mima;num+;name=new stringnum;mima=new stringnum;for(int j=0;jnum-1;j+)/将用户和密码重新复制回来namej=name_auxj;mimaj=mima_auxj;delete name_aux;delete mima_aux;name_aux=NULL;mima_aux=NULL;coutnamenum-1;coutmimanum-1;for(int k=0;knum-1;k+)if(namek=namenum-1)cout帐户已存在!;num-;break;else if(k=num-2)cout-新管理员用户创建成功-;writeAdministrator();templatevoid Administrator:deleteAdministrator()string dname,dmima;/分别存放要删除的管理员用户的帐号和密码coutdname;coutdmima;for(int i=0;inum;i+)if(dname=namei&dmima=mimai)for(int j=i;jnum-1;j+)namej=namej+1;mimaj=mimaj+1;num-;writeAdministrator();cout-您已经成功删除dname管理员用户=num-1)cout-您要删除的用户不存在!-;getch();/main.cpp/*日期:2011.12.282011.12.30作者:周钦雄声明:我只是编程世界中小兵,程序中不足之处请多多提点,不胜感激*/#includeBus.cpp#include#include#includevoid main()/system(Color 3D);Bus b;Administrator a;int num;loop:while(1)system(cls);coutsetw(70)endl;coutsetw(70) 欢迎进入公交换乘系统 wwwwwwwwwendl;coutsetw(70) endl;coutsetw(70) 1、 管理员登陆 endl;coutsetw(70) 2、普通用户登陆 endl;coutsetw(70) 3、 退出 endl;coutsetw(70) 请选择 endl;coutsetw(70)num;switch(num)case 1:if(a.land()goto g;elsecoutendl;cout-用户不存在或密码错误-;getch();break;case 2:goto h;break;case 3:goto I;break;default:cout-您的输入有误!按任意键重新选择-;getch();goto loop;g:while(1)system(cls);coutsetw(70)endl;coutsetw(70) 管理员界面 wwwwwwwwwendl;coutsetw(70) endl;coutsetw(70) 1、输入新公交路线 endl;coutsetw(70) 2、输出公交路线 endl;coutsetw(70) 3、读取公交线资料 endl;coutsetw(70) 4、存入公交线资料(慎用!) endl;coutsetw(70) 5、查找最短公交路线 endl;coutsetw(70) 6、新增管理员用户 endl;coutsetw(70) 7、删除管理员用户 endl;coutsetw(70) 8、 返回 endl;couts

温馨提示

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

评论

0/150

提交评论