广东海洋大学数据结构课程设计——公交换乘系统(C++)

合集下载

广东海洋大学数据库原理及应用课程设计——学生信息管理系统(Java+SQL)

广东海洋大学数据库原理及应用课程设计——学生信息管理系统(Java+SQL)

本科生课程设计课程名称数据库原理及应用课程设计课程编号J1670101学号学生姓名所在专业所在班级指导教师成绩教师签字年月日课程设计时间:年月日至年月日目录目录设计总说明 (I)1、需求分析 (3)2、概念结构设计 (3)3、逻辑结构设计 (4)4、物理结构设计 (4)5、系统实现 ....................................................................................... 错误!未定义书签。

5.1前台界面 .................................................................................. 错误!未定义书签。

5.2 后台实现 .................................................................................. 错误!未定义书签。

6、优缺点及自我评价....................................................................... 错误!未定义书签。

7、参考文献 (7)设计总说明(1)系统开发目的学生信息管理系统是学校管理的重要工具,是学校不可或缺的部分。

随着在校大学生人数的不断增加,教务系统的数量也不断的上涨。

学校工作繁杂、资料众多,人工管理信息的难度也越来越大,显然是不能满足实际的需要,效率也是很低的。

并且这种传统的方式存在着很多的弊端,如:保密性差、查询不便、效率低,很难维护和更新等。

然而,本系统针对以上缺点能够极大地提高学生信息管理的效率,也是科学化、正规化的管理,与世界接轨的重要条件。

所以如何自动高效地管理信息是这些年来许多人所研究的。

(2)开发内容用数据库和Java相关技术开发一个学生信息管理系统(3)开发要求能够对学生信息进行简单的添加,删除和查询(4)开发环境及工具1、操作系统:Windows 72、数据库软件:SQL Server 20083、Java开发工具:Eclipse(5)系统功能简介一、学生管理1、添加学生信息。

C语言课程设计报告--公交路线管理系统

C语言课程设计报告--公交路线管理系统

计算机科学与技术系课程设计报告2011 ~2012 学年第二学期课程面向过程综合设计课程设计名称公交路线管理系统学生姓名学号专业班级指导教师2012 年6 月一、设计思想我的系统主要功能是实现对公交路线的查询管理和维护。

众所周知,公交车在每一个城市中都有着非常大的作用,几乎每个市民都要用到公交车。

以及公交车的路线经常会有所改动。

因此如果使用我的这个系统,就可以及时的对路线信息进行修改和保存可以很好地满足市民的查询,方便人民的生活。

而且该系统使用起来也很方便。

用户只需根据显示的提示信息进行选择和输入就可以实现你要求的功能查询到你需要的信息。

本系统具有显示路线信息、添加线路信息、删除线路信息、修改线路信息、查询信息的功能。

用户们可以根据自己所需要的情况进行相应的功能选择,得到自己所需要的信息。

其具体功能简单描述如下:(1)显示路线信息:即将路线信息显示到屏幕中,供用户查看。

该功能比较简单,在这里不具体说明。

(2)添加路线信息:即添加一条新的公交路线或者是某一条路线上的站点。

每次可以添加一条路线信息,若用户想添加多条路线信息的话可以重复执行该功能,同样的,添加站点的话也是每一次添加一个站点,若用户想添加多条路线信息的话也只需要重复执行该功能即可。

这样,就实现了对公交路线的添加信息管理。

(3)删除路线信息:即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。

若要删除路线时只需要输入你要删除的公交路线号即可,若要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。

(4)修改路线信息:即能修改一条你需要该的路线信息。

修改内容包括:修改该条公交路线号、修改站点名称(输入新的信息时该条路线的站点长度不能改变,若要改变站点长促可以选择增加和删除功能,即可实现)。

(5)查询路线信息:即能够查找出你要的公交路线信息和总共有多少站。

简单地说,就是用户先选择你要查询的公交路线号,在输入起点站和终点站名称,然后系统就会自动显示出起点站和终点站之间共有多少站点,以及起点站和终点站之间所有站点的序号和名称,从而使用户一目了然的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节省了很多时间。

数据结构公交换乘系统

数据结构公交换乘系统

数据结构公交换乘系统一、系统概述数据结构公交换乘系统是一种基于数据结构算法的智能化交通规划系统,旨在提供高效、准确的公交换乘服务。

该系统通过分析用户出发地和目的地,结合公交线路数据、交通拥堵情况等信息,计算出最佳的公交换乘方案,为用户提供准确的出行指导。

二、系统功能1. 用户注册与登录用户可以通过手机号码或邮箱注册账号,并通过账号登录系统。

登录后,用户可以享受系统提供的各项功能。

2. 输入出发地和目的地用户可以在系统界面中输入出发地和目的地的信息,包括地点名称、地理坐标等。

系统将根据用户输入的信息进行后续处理。

3. 公交线路查询系统根据用户输入的出发地和目的地,查询公交线路数据,并进行路径规划。

系统将根据用户的出行需求和实时交通情况,计算出最佳的公交换乘方案。

4. 换乘方案展示系统将计算出的最佳换乘方案展示给用户,包括具体的公交线路、乘车站点、换乘路线等信息。

用户可以根据系统提供的方案进行出行决策。

5. 实时交通信息更新系统会实时获取交通拥堵情况、公交车实时位置等信息,并对方案进行动态调整。

用户可以获取最新的交通信息,以便做出更合理的出行决策。

6. 路线导航用户选择最佳换乘方案后,系统将提供路线导航功能,指导用户如何步行至乘车站点、换乘公交线路及下车位置。

系统可以通过地图、文字等方式提供导航指引。

7. 历史记录与收藏系统会记录用户的出行历史,并提供历史记录查询功能。

用户还可以将常用的出行方案收藏起来,方便下次查询。

三、系统设计1. 数据存储系统需要存储大量的公交线路数据、地理信息数据等。

可以采用数据库来存储这些数据,以便系统能够高效地进行查询和处理。

2. 数据结构设计系统需要设计合适的数据结构来存储和处理公交线路数据、地理信息数据等。

可以使用图、树、队列等数据结构来表示和计算公交线路、路径规划等。

3. 算法设计系统需要设计高效的算法来进行公交线路查询和路径规划。

可以使用最短路径算法、深度优先搜索算法等来计算最佳换乘方案。

c语言公交最优路径查询数据结构(附设计报告_完整代码)

c语言公交最优路径查询数据结构(附设计报告_完整代码)

《数据结构》课程设计说明一、课程设计的基本要求①根据上述公交线路的输入格式,定义并建立合适的图模型。

②针对上述公交线路,能查询获得任何两个站点之间最便宜的路径,即输入站名S,T后,可以输出从S到T的最便宜的路径,输出格式为:线路x:站名S,…,站名M1;换乘线路x:站名M1,…,站名M2;…;换乘线路x:站名MK,…,站名T。

共花费x元。

③针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(不考虑在中间站等下一辆线路的等待时间),即输入站名S,T后,可以输出从S 到T的考虑在中间站等下一辆线路的等待时间的最省时间的路径,输出格式为:线路x:站名S,…,站名M1;换乘线路x:站名M1,…,站名M2;…;换乘线路x:站名MK,…,站名T。

共花费x时间。

④针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(要考虑在中间站等下一辆线路的等待时间),即输入站名S,T后,可以输出从S 到T的考虑在中间站等下一辆线路的等待时间的最省时间的路径,输出格式为:线路x:站名S,…,站名M1;换乘线路x:站名M1,…,站名M2;…;换乘线路x:站名MK,…,站名T。

共花费x时间。

二、课程设计的主要内容(包含分工)主要内容:首先将多有要用到的结构体全部定义完全,在课程设计的进程安排1.2010年01月10日之前:完成所有要用到的结构体的定义。

2.2010年01月11日——01月12日:完成建立合适的图模型以及信息的初始化。

3.2010年01月15日前:将初始化的所有的信息与建立的图模型完全连接起来,写调整函数将每一条路线的车的信息存放到所有的节点里去。

4.2010年1月16日——2010年1月18日:完成按时间和价格的最优的方法选择路线。

5. 2010年1月19日——2010年1月20日:完成所有的程序。

6. 2010年1月21日答辩具体分工:XX(组长):①,定义所有将要用到的结构体②,编写函数实现根据公交路线信息修改站点信息的功能③,利用Floyd算法找出按时间的所有两站之间的最优路径④,编写时间最优的路线选择(不考虑等待时间)⑤,编写时间最优的路线选择(考虑等待时间)XX :①,初始化所有信息②,建立图模型③,编写价格最优的路线选择④,界面优化2010年01月11日《数据结构》课程设计报告(模板)一正文1、目的求公交线路上优化路径的查询。

大学C++课程设计报告--学生成绩管理系统(附源代码)

大学C++课程设计报告--学生成绩管理系统(附源代码)

广东海洋大学课程设计报告课程名称:C/C++语言程序设计课程编号:@@学生姓名:陈@@学生班级:信管1071学号:实习地点:科技楼起止时间:2008.12.29-2009.01.02指导教师:@@一、目的与要求通过本课程设计的实践,全面总结C++课程学习中的的数据类型、程序结构、数组、函数、指针、结构体、链表等基本概念,掌握其使用方法。

掌握面向对象程序设计中有关类、对象、继承、重载、多态性、输入输出流类体系、文件操作的基本概念,初步学会用类与对象这种面向对象的程序设计方法编写应用程序。

培养使用面向对象的程序设计方法编写计算机程序的能力。

通过设计一个《学生成绩统计管理》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。

了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与Visual C++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。

程序设计是一门实践性很强的课程,必须十分重视实践环节。

许多实际的知识不是靠听课和看书学到的,而是通过长时间的实践积累的。

二、设计内容学生成绩管理系统1.基本功能:a)成绩的输入(学号、姓名、英语、数学、C++语言…);b)成绩统计(各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例);c)总成绩统计(学生的总成绩、平均成绩及成绩排名)d)成绩的统计结果显示。

2.扩展功能:a)学生数据的添加、修改、与删除b)学生数据的读取与存储3.设计要求a)采用面向对象的思想和方法完成设计,最好能够基于windows图形界面。

b)至少设计四个类;学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称(如高等数学,大学英语等);学生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入。

三、过程与结果主要内容如下:1.关键类的设计,继承层次关系,代码:首先,创建了一个student类.在student类的共有部分声明程序所需函数;然后就是student类的函数实现部分,其中定义student类的带参数及不带参数构造函数;再是常用函数的调用,并定义系统菜单函数及其界面;最后就是主函数文件。

C 公交换乘系统

C  公交换乘系统

公交换乘系统本科生课程设计课程名称公交换乘系统学号学生姓名所在专业所在班级指导教师成绩教师签字课程设计时间:2010年6月一、目的与要求通过一个学期的系统学习,学生们掌握了数据结构的基础理论知识,然而由于数据结构原理的抽象性,可能使得学生对数据结构各部分理论的理解不够深入。

设置本课程设计,通过了解公交换乘算法的设计与实现,使学生能够学以致用,培养和提高学生的算法设计、运用计算机进行编程、调试等技能,从而培养学生独立工作的能力和创造能力。

二、设计内容公交换乘系统公交换乘在一个城市的公共交通系统设计中占据着极其重要的地位,公交换乘的过程将直接影响居民出行时间的长短,公交换乘的过程如下:指定一起始公交站点与目的公交站点,依据参考因素,例如:换乘路线的路径最短、耗费时间最短、所需车资最少等,经过分析处理得到可达目的站点换乘次数最少的乘车方案,具体可分为:(1)零次换乘起始站点和目的站点之间存在可直达的公交线路,即出行居民无需转乘就可以直接到达目的站点,这也是较为理想的方案。

(2)一次换乘起始站点和目的站点之间没有公交车直接往返,即两站点之间不存在可直达的公交线路,则出行居民需要在途经的某个站点下车,然后转乘另一线路公交车才能达到目的站点。

(3)多次换乘在起始站点和目的站点之间没有可直达的公交线路,出行居民需要经过一次以上的转乘才能达到目的站点,则得到多次换乘方案。

多次换乘方案可通过一次换乘的递归计算得到,一般情况下,超过两次转乘的方案对于出行居民来说是难以接受的,本课程设计只要求计算零次和一次换乘方案,对于一次以上的公交换乘不作要求。

三:本系统功能介绍:在这里通过主函数显示程序的主页版,上面是湛江的公交线路图。

在这里输入出发站点的名字,回车确定!在这里输入最终站点的名字!输入错误会提醒重新输入!输入要查询的起点和终点0次换乘,输出查询结果:按y或Y,可以继续查询!输入出发点和终点,一次换乘的结果如下:四:设计要求认真参阅本课程设计的相关参考资料、数据,了解公交换乘的原理要求,设计一个实现公交换乘的算法:指定任一起始站点和目的站点,依据算法得到所有可达目的站点的的公交线路,包括中间站点的换乘方法以及该公交线路所经过的公交站点。

公交车信息c课程设计

公交车信息c课程设计

公交车信息c课程设计一、课程目标知识目标:1. 让学生掌握公交车的基本信息,包括线路、站点、运营时间等。

2. 培养学生运用地图、公交查询工具等获取所需公交信息的能力。

3. 了解城市公共交通系统的基本构成及其在生活中的重要性。

技能目标:1. 培养学生通过观察、询问、搜索等途径获取公交车信息的能力。

2. 培养学生运用所学的公交信息,解决实际生活中的出行问题。

3. 提高学生的团队协作能力和问题解决能力。

情感态度价值观目标:1. 培养学生对公共交通的尊重和爱护,树立绿色出行意识。

2. 培养学生关注社会、关爱他人的情感,学会为他人提供帮助。

3. 培养学生积极向上的生活态度,认识到学习与生活的紧密联系。

课程性质:本课程为实践性课程,结合学生生活实际,通过实际操作和团队合作,培养学生获取和处理公交车信息的能力。

学生特点:考虑到学生所在年级,具备一定的信息获取和处理能力,对公共交通有一定了解,但实际操作能力有待提高。

教学要求:教师需结合学生特点,设计富有实践性和趣味性的教学活动,引导学生主动参与,提高学生的动手操作能力和问题解决能力。

同时,注重培养学生的情感态度价值观,使学生在学习过程中形成正确的价值观。

通过分解课程目标,为后续教学设计和评估提供依据。

二、教学内容1. 公交车的基本信息:介绍公交车的线路、站点、运营时间等,结合教材相关章节,让学生了解城市公共交通的基本情况。

2. 公交信息查询工具:讲解地图、公交查询APP等工具的使用方法,学会如何获取所需的公交车信息。

3. 实践活动:组织学生分组进行实地考察,收集公交车线路、站点等信息,并整理成报告。

4. 公交出行问题解决:针对实际生活中的公交出行问题,如线路选择、换乘等,引导学生运用所学知识进行分析和解决。

5. 绿色出行意识培养:结合教材内容,讲解公共交通对环境保护的重要性,引导学生树立绿色出行意识。

6. 团队协作与问题解决:通过实践活动,培养学生团队协作能力和问题解决能力。

数据结构课程设计报告-公交换乘系统

数据结构课程设计报告-公交换乘系统

广东海洋大学信息学院课程设计报告设计题目公交换乘系统课程名称数据结构姓名(学号)联系电话专业名称计算机科学与技术所在班级1101班指导教师教师职称起止时间2011 年12月26日至2012年1月6日评定成绩一、课程设计的主要内容1、公交线路中,为用户查找最短路径,有【0】次换乘就能到达目的地和【1】次换乘就能到达目的地。

2、为用户计算出路程所需费用。

3、该课程设计的公交系统中有分权限;分管理员用户和普通用户,管理员的登陆需要帐号和密码(暗文),普通用户可以直接登陆。

4、管理员可以重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存入新公交路线资料(慎用!)、查找最短公交路线、新增管理员用户和删除管理员用户。

5、普通用户只能输出公交路线和查找最短公交路线两个功能。

二、功能和结构设计1、为用户分权限2、管理员有重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存入新公交路线资料(慎用!)、查找最短公交路线、新增管理员用户和删除管理员用户3、普通用户只能输出公交路线和查找最短公交路线两个功能。

注:系统默认的公交线路图(系统开发者为用户事先存好的,在f1.txt文档中)三、流程图和算法设计算法:(给出查找最短路径的方法)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;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;elsebreak;}i=x%100;j=y%100;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;}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++;}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++;}//比较可换乘的站点是否有相同的,如果有,可以了一次换乘到达目的地;否则不可以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){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<<"-->";// money+=line[x/100-1][x%100+k].longer;}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<<"-->";// money+=line[x/100-1][x%100+k].longer;}l=takeNum[1][b]%100;if(j-l>0){longers+=line[y/100-1][l].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;}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;}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; //车站编号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;//每条路线的车站数};template<typename A>class Administrator{public:Administrator();~Administrator();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 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];}for(int b=0;b<lineNum;b++)line[b]=new BusStation[busStationNum[b]];//依据每条线路的车站数创建每条线路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公里elsecin>>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++){if(line[k][i].busStationName==line[m][j].busStationName){line[k][i].take=true;line[m][j].take=true;}}if(m>=lineNum-1){k++;m=k;}m++;}}template<typename T>void Bus<T>::output(){cout<<"编码";cout<<"车站名称";cout<<"到下一站的距离";cout<<"是否可以乘换"<<endl;cout<<setiosflags(ios::left);for(int i=0;i<lineNum;i++){for(int j=0;j<busStationNum[i];j++){cout<<setw(6)<<line[i][j].number;cout<<setw(20)<<line[i][j].busStationName;cout<<setw(20)<<line[i][j].longer;if(line[i][j].take)cout<<"是"<<endl;elsecout<<"否"<<endl;}cout<<endl;}}template<typename T>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;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;elsebreak;}i=x%100;j=y%100;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;}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++;}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++;}//比较可换乘的站点是否有相同的,如果有,可以了一次换乘到达目的地;否则不可以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){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<<"-->";// money+=line[x/100-1][x%100+k].longer;}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<<"-->";// money+=line[x/100-1][x%100+k].longer;}l=takeNum[1][b]%100;if(j-l>0){longers+=line[y/100-1][l].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;}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;}else if(a==4&&b==4)cout<<"很抱歉,没有【0】次换乘或【1】次换乘可以到达目的地的路线!";}if(nn)break;}}//cout<<"还未写代码";}template<typename T>void Bus<T>::readfile(){ifstream infile("f1.txt",ios::in);if(!infile){cerr<<"open error!"<<endl;exit(1);}infile>>lineNum;line=new Pointer[lineNum];//三条线路busStationNum=new int [lineNum];//每条线路的车站数for(int a=0;a<lineNum;a++){infile>>busStationNum[a];}for(int b=0;b<lineNum;b++)line[b]=new BusStation[busStationNum[b]];//依据每条线路的车站数创建每条线路for(int i=0;i<lineNum;i++)for(int j=0;j<busStationNum[i];j++){infile>>line[i][j].number;infile>>line[i][j].busStationName;infile>>line[i][j].longer;infile>>line[i][j].take;}cout<<"----读取成功----"<<endl;infile.close();}template <typename T>void Bus<T>::writefile(){ofstream outfile("f1.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;exit(1);}outfile<<lineNum<<" ";for(int a=0;a<lineNum;a++){outfile<<busStationNum[a]<<" ";}for(int i=0;i<lineNum;i++)for(int j=0;j<busStationNum[i];j++){outfile<<line[i][j].number<<" ";outfile<<line[i][j].busStationName<<" ";outfile<<line[i][j].longer<<" ";outfile<<line[i][j].take<<" ";}cout<<"----存入成功----"<<endl;outfile.close();}//////////////////////////////////////////////template <typename A>Administrator<A>::Administrator(){num=0;name=new string[num];mima=new string[num];}template<typename A>Administrator<A>::~Administrator(){num=0;delete [] name;delete [] mima;name=NULL;mima=NULL;}template<typename A>void Administrator<A>::readAdministrator() {ifstream infile("Administrator.txt",ios::in);if(!infile){cerr<<"open error!"<<endl;exit(1);}infile>>num;name=new string[num];mima=new string[num];for(int i=0;i<num;i++){infile>>name[i]>>mima[i];}}template<typename A>void Administrator<A>::writeAdministrator() {ofstream outfile("Administrator.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;exit(1);}outfile<<num<<" ";for(int i=0;i<num;i++){outfile<<name[i]<<" ";outfile<<mima[i]<<" ";}}template<typename A>bool Administrator<A>::land(){string myname;string mymima;cout<<"请输入管理员帐号:";cin>>myname;cout<<" 密码:";char ch;while ((ch=getch())!=13) //输入密码时显示星号功能。

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

广东海洋大学信息学院课程设计报告设计题目公交换乘课程名称数据结构姓名(学号)联系电话专业名称所在班级指导教师教师职称起止时间评定成绩一、课程设计的主要内容公交换乘在一个城市的公共交通系统设计中占据着极其重要的地位,公交换乘的过程将直接影响居民出行时间的长短,公交换乘的过程如下:指定一起始公交站点与目的公交站点,依据参考因素,例如:换乘路线的路径最短、耗费时间最短、所需车资最少等,经过分析处理得到可达目的站点换乘次数最少的乘车方案,具体可分为:(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);}五、课程设计总结在这次关于公交换乘的课程设计中,我了解到了我的不足,如算法的不完善、不细心和耐心不是很好等等。

相关文档
最新文档