版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报课程设计名称:数据结构课程设计学院:信息工程学院学生姓名:*班级:14计本1学号:成绩:指导教师:*开课时间:2015-2016学年一学期设计题目:公交线路管理系统一、实习目的通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。二、问题描述实现功能:文件初始化交通图、公共汽车路线、城市站点信息;管理员和乘客登录;系统介绍使用说明;判断输入量路径间是否存在直接到达路径,此函数为录入交通线和添加删除路线中的辅助判断函数邻接表和邻接矩阵的互化,删除和添加路线,增设交
2、通运行路线,查找公交车运营路线,查找任意两个城市之间是否有路径,若有则将最短路径输出,操作结束后检测文件是否被修改,若被更改则自动保存;功能分配:三、需求分析该程序所做的工作是对公交车运行线路及城市交通网络的管理,首先城市交通信息应用文件形式进行保存,在运行开始前用文件对城市中城市交通图初始化;结束时用文件对程序各项数据信息进行保存。本程序面向乘客和管理员,故在开始时设计登录界面,只有输入密码获得管理员权限才可以使用本程序中设计的,增加路线,删除路线,和保存功能;普通乘客只能使用两类信息查询功能,公交路线查询和路径查询。本程序遵循由路必有车走、有车走必有路的原则设计城市路线和交通网络。四、概要
3、设计#defineMaxC20/最多容纳20站点#defineLimit10000/以10000千米代表两城市之间无站点#defineAdministrator1/管理员标志#definePassenger0/乘客身份标志usingnamespacestd;typedefunsignedintNO_TYPE;/*定义城市类型包含城市编号和城市名称*/typedefstructNO_TYPEno_city;/城市编号stringcity_name;/城市名称CityType;/*定义邻接边类型*/typedefstructRoad/城市节点类型NO_TYPEadjcity;/该边终点城市编号st
4、ructRoad*NextCity;/顶点城市下一条邻边floatRoad_length;/路径长度RoadNode;/*定义邻接表表头节点*/typedefstructCityTypedata;/城市节点信息RoadNode*firstcity;/此城市可通向的第一个城市CitiesNode;/*定义车辆类型*/typedefstructstringNo_Bus;/车辆编号NO_TYPEnum_Cities;/所经过城市的数目NO_TYPEWayMaxC;/所经过路线以城市编号表示BusType;/*定义文件修改标志*/enumChangeYes,No;/*定义城市交通图类*/classTG
5、raphvectorCitiesNodeCList;/交通图邻接表类型N0_TYPEnum_of_city;/城市数量(City)vectorBusTypeBus_info;/车辆信息shortUser_id;/用户身份标志Changem;/交通图修改标志public:TGraph();/*文件初始化在运行开始时形成一张邻接表*/boolInit_Graph();/初始化交通图/*为简便程序设计和保存方便故设计转化函数让程序中对交通图处理更加灵活*/boolMattoList(floatmapMaxC);/转化邻接矩阵voidListtoMat(floatmapMaxC);/邻接表转化为邻接矩
6、阵voidFind_info();/查询/*采用狄克斯特拉算法求一节点到另一节点最短路径*/voidFind_way(string,string);/查询直接路径/*设计用于跟新线路信息*/voidUpdata(N0_TYPE,N0_TYPE);/更新/*在两个站点之间插入新路线*/voidInsert_rode(N0_TYPE,N0_TYPE);/judge_rode/*判断两城市是否是已有城市*/boolJudge_city(string,string);/*增加路线*/voidAdd_road();/添加路线/*判断两城市之间有无直接路径*/boolJudge_road(N0_TYPE,
7、N0_TYPE);boolDelete();/删除操作/*删除添加操作都应调用此函数进行线路同步修改*/voidBus_mend(BusType*);/修改公交路线voidSave();/存入文件中/*最后将申请的空间都释放*/voidClean();/释放申请的空间voidDisplay();/输出当前交通网络boolLand();/管理员/用户登录;voidMainmenu(TGraph&G,int&k);/主菜单函数voidIntroduced();/系统使用说明与登录函数一起使用五、详细设计#includedecl.hfloatmapMaxCMaxC;/使最短路径查询简化/TGraph
8、:TGraph()if(!Init_Graph()cout初始化失败!endl;boolTGraph:Init_Graph()inti,j,n;ifstreaminput;input.open(City.txt);/打开城市文件if(!input)/文件打开出错cerr文件City.txt打开错误!endl;returnfalse;inputnum_of_city;/文件初始化城市基本信息for(i=0;inum_of_city;i+)/先将城市基本信息初始化CitiesNodec;/临时变量inputc.data.no_cityc.data.city_namec.firstcity=NULL
9、;CList.push_back(c);/将初始化好的加入向量中input.close();/解绑文件input.clear();/清理输入流已备后用input.open(Bus.txt);if(!input)cerrb.No_Busb.num_Cities;n=b.num_Cities;/经过城市数量for(i=0;in;i+)inputb.Wayi;Bus_info.push_back(b);input.close();input.clear();/floatmapMaxCMaxC;/接收从文件中读取到的信息input.open(Map.txt);if(!input)cerr文件Map.t
10、xt打开错误endl;returnfalse;for(i=0;inum_of_city;i+)/文件初始化邻接表for(j=0;jnum_of_city;j+)inputmapij;/读取文件内容MattoList(map);/将从文件中读取的内容转化为邻接表input.close();/解绑文件returntrue;/*将文件中读取到的数据转化为临接表*/boolTGraph:MattoList(floatmapMaxC)inti,j;RoadNode*r1=0;vectorCitiesNode:iteratorit_c=CList.begin();for(i=0;inum_of_city&
11、it_c!=CList.end();it_c+,i+)for(j=0;jnum_of_city;j+)if(mapij!=Limit&mapij!=0)r1=newRoadNode;r1-Road_length=mapij;r1-adjcity=j+1;r1-NextCity=(*it_c).firstcity(*it_c).firstcity=r1;returntrue;voidTGraph:Findinfo()stringc1,c2;coutc1;coutc2;Find_way(c1,c2);voidTGraph:Find_way(stringBegin,stringEnd)floatdi
12、stMaxC;NO_TYPEpathMaxC;NO_TYPEvisitedMaxC;floatmindis;inti,j,u,k,d;NO_TYPEn_b,n_e;NO_TYPEapathMaxC;vector:iteratorit_c=CList.begin();while(it_c!=CList.end()/获取城市对应编号if(*it_c).data.city_name=Begin)n_b=(*it_c).data.no_city;if(*it_c).data.city_name=End)n_e=(*it_c).data.no_city;it_c+;n_e-;n_b-;for(i=0;i
13、num_of_city;i+)disti=mapn_bi;visitedi=0;if(mapn_biLimit)pathi=n_b;elsepathi=-1;visitedn_b=1;pathn_b=0;for(i=0;inum_of_city;i+)mindis=Limit;for(j=0;jnum_of_city;j+)if(visitedj=0&distjmindis)u=j;mindis=distj;visitedu=1;for(j=0;jnum_of_city;j+)if(visitedj=0)if(mapujLimit&distu+mapujdistj)distj=distu+ma
14、puj;pathj=u;if(visitedn_e=1&n_e!=n_b)cout从CListn_b.data.city_name到CListn_e.data.city_name;for(j=d-1;j=0;j-)cout=0)cout;coutt总长度为:distn_ekmendl;/-*/*I*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*X*/h-J+-1I/voidTGraph:Updata(NO_TYPEn_b,NO_TYPEn_e)floatr_l;/存放修改值cout请输入修改后的路径长度:endl;c
15、inr_l;RoadNode*r;/作为处理信息的指针r=CListn_e-1.firstcity;while(r)/顺着定位好的r找到在其下的终点城市改边两者之间的路径长度if(r-adjcity=n_e)r-Road_length=r_l;m=Yes;break;elser=r-NextCity/*插入新线路*/voidTGraph:Insert_rode(NO_TYPEn_b,NO_TYPEn_e)RoadNode*r1=0,*r2=0;vector:iteratorit_c=CList.begin();while(it_c!=CList.end()/获取起始节点位置if(*it_c).
16、data.no_city=n_b)r1=(*it_c).firstcity;break;else+it_c;if(r1)while(r1-NextCity)r1=r1-NextCity;/将r移至末端r2=newRoadNode;/新开一存储空间保存新的邻接边r2-adjcity=n_e;/临接边的编号设为终点编号r2-NextCity=NULL;/将其下一邻接边打空cout请输入此路线长度endl;cinr2-Road_length;r1-NextCity=r2;BusTypeb;cout你需要设计一条公交线路来将此新线路变得有意义:endl;Bus_mend(&b);Bus_info.pu
17、sh_back(b);/*添加路线*/voidTGraph:Add_road()stringif_con(l);/继续操作标志strings_begin,s_end;辻(User_id=Administrator)/只有管理员身份才可操作CitiesNodec;while(if_con0=1)/system(cls);cout请输入你想添加路线的两个城市前者代表起点后者带表终点endls_begins_end;if(Judge_city(s_begin,s_end)/判断输入两城市是否正确NO_TYPEn_b=0,n_e=0;vector:iteratorit_c=CList.begin();
18、while(it_c!=CList.end()/获取城市对应编号if(*it_c).data.city_name=s_begin)n_b=(*it_c).data.no_city;/记录起点位置if(*it_c).data.city_name=s_end)n_e=(*it_c).data.no_city;/记录终点位置it_c+;/迭代器下移if(Judge_road(n_b,n_e)/如果插入两节点之间存在路线cout你所要插入新线路的两个城市间已有线路!endlendl;cout1更新线路信息ttt2放弃插入endl;stringinsert_select;cininsert_select
19、;switch(insert_select0)caseT:Updata(n_b,n_e);break;/表示要更新case2:return;default:cout输入错误!;/switch/judge_roadelseInsert_rode(n_b,n_e);/若两者之间并无路径则插入if_con=0;/将继续标志打为否/judge_cityelsecout输入城市有误!endlendl;coutendl是否继续!0否1是;cinif_con;/是否继续标志elsecoutendl乘客身份无法操作!boolTGraph:Judge_city(stringc1,stringc2)inti=0;
20、vectorCitiesNode:iteratorit_c=CList.begin();while(it_c!二CList.end()/如果cl,c2皆在已有数据中则i将被加之2if(*it_c).data.city_name=c1)i+;if(*it_c).data.city_name=c2)i+;it_c+;if(2=i)returntrue;elsereturnfalse;boolTGraph:Judge_road(NO_TYPEc1,NO_TYPEc2)RoadNode*r;vectorCitiesNode:iteratorit_c=CList.begin();while(it_c!=
21、CList.end()获取起始节点邻接边if(*it_c).data.no_city=c1)r=(*it_c).firstcity;break;elseit_c+;while(r)/当邻接边不空if(r-adjcity=c2)/并且其中有终点节点returntrue;/找到就返回正确值elser=r-NextCity;returnfalse;/*删除操作*/boolTGraph:Delete()if(User_id=Administrator)/管理员方可操作system(cls);RoadNode*f,*r;strings_begin,s_end;cout请输入你想删除路线的起始城市和终点城
22、市:endlendl;cins_begins_end;NO_TYPEn_b=0,n_e=0;vectorCitiesNode:iteratorit_c=CList.begin();while(it_c!=CList.end()/获取城市对应编号if(*it_c).data.city_name=s_begin)n_b=(*it_c).data.no_city;if(*it_c).data.city_name=s_end)n_e=(*it_c).data.no_cityit_c+;if(!Judge_road(n_b,n_e)/判断这两城市之间是否有路径coutNextCity;while(r)/
23、先确定位置后删除if(r-adjcity=n_e)f-NextCity=r-NextCity;deleter;m=Yes;elsef=r;r=r-NextCity;else/如果是第一条则直接删除CListn_b-1.firstcity=f-NextCity;deletef;m=Yes;vectorBusType:iteratorit_b=Bus_info.begin();/修改公交路线for(;it_b!=Bus_info.end();it_b+)/逮到走这条路线的公交车for(inti=0;i(*it_b).num_Cities;i+)if(*it_b).Wayi-1=n_b&(*it_b
24、).Wayi=n_e)coutttt(*it_b).No_Bus号公交线路将不可用!必须修改:endl;Bus_mend(it_b);returntrue;cout游客无法操作!endl;returnfalse;/*修改公交路线*/voidTGraph:Bus_mend(BusType*b)cout请输入公交车编号:endlendl;cinb-No_Bus;cout请输入公交车行驶过的城市数:endlendl;cinb-num_Citiesboolinput_err=true;/初始化为错误状态while(input_err)inti=0,j;input_err=false;/默认管理员会输对
25、cout请输入行车路线(以城市编号顺序表示):endl;for(j=0;jnum_of_city;j+)/输出个城市供管理员参考coutCListj.data.no_city.CListj.data.city_name.coutendl;cinb-Wayi;/避免数组越界访问for(i=1;ib-num_Cities;+i)/录入公交路线cinb-Wayi;if(!Judge_road(b-Wayi-l,b-Wayi)/判断管理员输入的城市之间是否有路线可走cout你添加的城市CListb-Way/输出是哪里出错了i-1-1.data.city_nameCListb-Wayi-1.data.c
26、ity_name之间没有路线可走,请确认后重新输入!endl;input_err=true;/置为出错break;m=Yes;/表示文件已被修改for(inti=0;inum_of_city;i+)/将矩阵形式的交通图输入voidTGraph:Save()if(m=Yes)/若文件修改过则执行下面的写入intib;floatmap_outMaxCMaxC;vector:iteratorit_b=Bus_info.begin();ofstreamoutput(Bus.txt);/将公交路线保存到文件while(it_b!=Bus_info.end()&output)ib=0;outputsetw
27、(8)(*it_b).No_Bussetw(8)(*it_b).num_Cities;for(;ib(*it_b).num_Cities;ib+)outputsetw(6)(*it_b).Wayib;/依次向文件输入公交路线if(it_b+1!=Bus_info.end()/最后一个不可以换行outputendl;+it_b;output.close();output.clear();/使之又可用ListtoMat(map_out);/将邻接表转化为邻接矩阵output.open(Map.txt);for(intj=0;jnum_of_city;j+)outputsetw(6)map_outi
28、j;outputendl;output.close();/解绑文件voidTGraph:ListtoMat(floatmapMaxC)RoadNode*r;for(inti=0;inum_of_city;i+)for(intj=0;jnum_of_city;j+)if(i=j)mapij=0;elsemapij=Limit;vector:iteratorit_c=CList.begin();for(i=0;it_c!=CList.end();it_c+,i+)/以每个城市循环r=(*it_c).firstcity;while(r)/以各邻接边循环mapir-adjcity-1=r-Road_l
29、engthr=r-NextCityvoidTGraph:Clean()RoadNode*f,*rvector:iteratorit_c=CList.begin();for(;it_c!=CList.end()&(*it_c).firstcity;it_c+)f=(*it_c).firstcity;r=f-NextCity;while(r)deletef;f=r;r=r-NextCity;deletef;voidTGraph:Display()inti=0;system(cls);coutendlttttt当前公交车信息:endl;vector:iteratorit_b=Bus_info.beg
30、in();vectorCitiesNode:iteratorit_c=CList.begin();while(it_b!=Bus_info.end()i=0;couttttt(*it_b).No_Busendl;/输出汽车编号couttttt;while(i;it_b+;coutendlendl;/*x*x*x*x*X*X*X*i、庁|*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*/I才匕.,|=/voidMainmenu(TGraph&G,int&k)/主菜单函数system(cls);ints;nz-K-t-4-/ff)1II
31、、endlendl;coutttt*tl.输出公交信息tt*tendlendl;coutt*ttt2.查询站点信息tt*t*endlendl;couttttt*3.添加新路线t*tt*endlendl;couttt*tt4.注销路线或公交信息tt*tendlendl;cout*tttt5.保存公交信息t*ttendlendl;couts;switch(s)case1:G.Display();break;case2:G.Find_info();break;case3:G.Add_road();break;case4:G.Delete();break;case5:G.Save();break;ca
32、se6:k=0;break;default:std:couttt输入错误!endl;voidIntroduced()coutttt*endl;coutttl、本程序提供给车站管理员和用户使用使用;endl;couttt2、乘客只有查询路线和查询公交信息的权限;endl;couttt3、进入界面时会有管理员登录和用户登录两种模式;endl;couttt4、选择管理员登录时会要求输入密码,共有三次机会;endl;couttt5、为保证每条路不会形同虚设故在删除和插入路操作时endl;couttt会自动检测公交线路是否真确,会让管理员调整;endl;couttt6、如果退出时检测到文件已修改但未保存
33、会自动保存;endl;couttt7、请不要在不必要时打开文件并作修改!;endl;coutt*endlendl;boolTGraph:Land()intid;strings;Introduced();cout请选择登录方式1管理员2乘客endlendl;if(cinid)if(1=id)inti(0);cout请输入管理员密码:endlendl;while(1)cins;if(s=123456)User_id=Administrator;returntrue;elsecout输入密码错误,请重新输入:;/输出提示信息i+;if(i=3)break;cout输入错误三次!系统自动退出!endl
34、endl;returnfalse;elseUser_id=Passenger;returntrue;elsecout登录失败请重试!endlk;G.Save();/若管理员对信息进行了更改则保存G.Clean();/清理system(cls);coutttt*endlendl;coutttt谢谢使用!endlendl;coutttt*endlendl;return0;Bus.txtKT1513467KT242567KT371234567KT4215City.txt71南京2宿迁3徐州4盐城5北京6淮安7常州Map.txt4810000510000100001000006100001010000
35、10000100001000002100001000010000100001000010000037100001000010000100001000006100001000010000100001000010000051000010000100001000010000100000六、测试分析以下测试均在上述文件下进行电*电*电*电*电*电*电*电*电*电*电*电*电*电*电*本程序提供给车站管理貝和用P使用使用:乘f-RW询路线和查询公交信息的权限;进入界面时会有管理员登录和用户登录两种模式;选管理员登录时会要求输入密码.也有三初机会:5*为保证毎条路不会形同虚设.故在删除和插入路操作时会目动
36、检测公交线路是否-直确.会让管理员调整;二如果退出时检测到文件已修改但丰保存会自动保存;7、i青下要再卞必要是轩开文件井作修改!i*请迦睪登录方式1管理员s乘容图一:系统介绍*丄.输出也变信息*2.查询站点信息*g療加新路线*4.注销踣线或金嶷信嵐*朋存公变信息*&退岀*图二:乘客登录界面当前公交车信息:KT1南京一一滁州-盐城-7淮安-常州KT.2:諳辻北京滩安常州ET8南京一一宿1-徐州一一盐城一一北京一一淮安一一常州KT4_南京北京是否継续?1是0退岀图三:公交线路查询图四:选择查询路径输入南京到盐城通过文件可以算出南京到盐城确实是以上路径最短并且是10km;2请输人起始点名称:南京请输
37、恳终点番标:盐城从.南京到盐城的最短路径为:南京一一汹余州述i城总长度为:10km是否继续?1一一0一一退出呂乘客身份无法操作!是否纟瞬?1是0_退岀图五:以乘客身份插入路线失败谢谢使用!图六:退出界面请输人你想添加路线的两个城帀前者代表起点后者带表终点南京宿连你所要插新线路的两个城帀间已有线路!1更新线路信息S放弃插入图七:管理员登录插入路线时已有路线情况已有路线时就询问管理员是否是更新还是不在插入i青输入你想添加路线的两个城帀前看代表起点后看带表终点南尽宿迁你所要插入新线路的两个城市间已有线路!1更新线路信惠2放弃插入I请输炙修改后的路径长匱4&图八:选择修改路线长度为45e8ieeee5
38、16060ieeee1660即s|ieeeieee100OSieeeieeegieee10606Q2106O160QSieeesieee1Q6QSieeee37ieeesieee10609100QS1QQ63Q6ieeesieee1060100QS1QQ61060Q5ieee1060ieeesieees1060ieees图九:文件光标所指之处被成功修改为45请输入你想添加路线的两个城市前者代表起点后者带表终点盐城请输入此路线按度你需要设计V公交线路来将此新线路变得有意义;请输入公交车编号:KT4请希入公交丰行驶过的城帀数:奮输入行车路线(以城市编号顺序表示):L南寮2宿迁$涂州4盐城5北蕊氐淮
39、安化常州147你添机的城帀代盐城常朴f之间没有路线肝走,请确认后重新输入!请输入行车路线U次城市编号顺序表示):匚南京2宿迁&徐州生盐城乩北京&淮安化常州4咅:皂否继续?1一是0退岀图十:设计路线可以看到程序准确的判断出了管理员输入城市中那两个城市不合要求KT1KT2KT3KT4图十一:公交路线被成功存入文件a4851030310033aaaa屿|aaaa10000100000210000100001000010300100001000003710000103001000010000aaa0610000looao1000010330133000Eaaaa昌图十二:保存交通图的矩阵被成功修改请输
40、人怖想删I除跆线旳起始城币利终点城币:北京返T号營交践路将不可用!必狈隊扱请输埶舊交车编号丫ET4请输人公交车行驶过的城市数:备输人行车路銭(以城市编号顺序表示J:1.南京;2箱注8.馀州4.盘诚5北京S.淮安7.常州124你添加的城科宿迁盐城它间没有路线可走请确认后重新输入I请输入彳亍车路线(以城市编号顺序表示):;1.甫京2.宿注3.徐州4.盘诚5.北京6.淮安7.常州13是否继续?1一一是Q一退出图十三:删除操作04810000100001000010000100000610000101000010000100001000002100001000010000100001000010000031100001000010000100001000006100001000010000100001000010000051000010000100001000010000100000图十四:文件修改成功七、使用说明本程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 投资股权合同范本
- 税务担保合同范本
- 荐股合作协议合同
- 蜜蜂赔偿协议书
- 视频录像协议书
- 认筹购房协议书
- 设备折旧协议书
- 设备退车协议书
- 评审合作协议书
- 试聘期合同协议
- 2025年广西公需科目答案6卷
- 黔东南州2024-2025学年度第一学期期末文化水平测试七年级数学试卷
- 特气系统培训
- 食品加工项目可行性研究报告
- 工程材料知到智慧树章节测试课后答案2024年秋中国石油大学(华东)
- 镀锌钢管供货及售后服务方案
- 钢板桩支护施工方案完整版
- 搅拌车包月合同模板
- 2020海湾DH-GSTN5208测温式电气火灾监控探测器安装使用说明书
- 音乐与健康智慧树知到期末考试答案2024年
- 国开电大《人文英语4》一平台机考总题库珍藏版
评论
0/150
提交评论