基于MFC/Access的交通换乘路线设计摘要现如今,人们的出行方式有了更多的选择,城市公交系统作为交通运输的主体得到了迅速的发展,但是目前我国的城市公交换乘信息系统还未发展到较为先进的水平,广大的城市民从公交信息系统得到的信息不是很全面,信息量比较少,为了解决这种状况,使城市公交加速发展,更加信息化,设计一个公交换乘信息系统有较为现实的应用意义。本次设计是基于MFC/Access的公交换乘路线信息系统。首先将公交路线网抽象成一个带权图,然后根据用户提供的起始站点和目的站点,运用dijkstra算法进行搜索,为用户提供一个最优的乘车方案。本系统使用MicrosoftVisualC++6.0作为开发工具,用VC++中的MFC应用程序框架来实现。这个公交换乘信息系统主要包含两个模块,分别是查询模块(按照线路、站点和两站点查询)和管理更新模块(公交线路管理和管理员账户管理),最后根据本系统在开发阶段和调试阶段出现的问题,得到了系统需要改进完善的地方,总结了设计开发本系统所得到的经验和收获。关键词:dijkstra,路线换乘,MFC架构DesignofTransferbusroutebasedonDijkstraalgorithmAbstractThedevelopmentofthebuspassengerinformationsystemisinalevelthatfallbehindofthecityinourcountry.Thelargepartofpassengerscanacquirefewwaysoftheinformation.Soit'spracticalforustodevelopcity'sbuspassengerinformationsysteminordertoresolvingthisproblem.Thedesignisbasedonthedijkstraalgorithmbustransferlinequerysystem.First,It’sneedtochangethebusroutenetworkintoaweightedgraphabstraction,Thenthesystemsearchesusebythedijkstraalgorithmaccordingtotheinitialsiteanddestinationsitewhichprovidedbyuser,andprovidesuserswithanoptimaltravelprogram.ThesystemusesMicrosoftVisualC++6.0asdevelopmenttool,achievesbytheMFCapplicationframeworkwhichinVC++.thesefunctionscanbedividedintotwoparts---searchsystem(Includingthelinesearch、stationsearchandbetweentwostationssearch)andmanagementupdatesystem(IncludingBuslinemanagementandAdministratoraccountmanagement).Atlastaccordingtotheproblemsthathappenedintheperiodofusing,Isummedupsomewaystoimprovethesystem,andsomeexperiencesthatIcanhavefromthisresearch.Keywords:dijkstra,Tranferline,StructureofMFC1绪论1.1课题背景意义为了使城市市民的出行更加便捷、迅速出现了城市公交这样的客运企业,城市公交发展至今已经成为城市社会和经济活动的重要组成部分。随着国民经济的快速发展和城市建设的日益繁荣,人口的逐渐增加,解决好人们出行的需求成为一个城市需要面对的重要课题。城市公交的发展水平直接体现出城市的经济建设和城市居民的生活水平,对一个城市的发展具有着全局性、先导性的作用,城市公交以其方便、快捷、覆盖广、容量大成为了城市交通客运的主体。但是随着客运产业的不断发展,城市公交系统也在日益壮大,这时在市民面前出现一个难题,出行的市民很难得到全面而准确的公交信息,造成城市公交发展了而市民出行困难了。因此,急需一个全面、准确、易用、便捷的公交换乘信息系统在城市经济快速发展的推动下城市建设的步伐不断加快,导致城市规模不断扩大,人口基数急剧增长,解决日益突出城市交通运输问题迫在眉睫,面对这样的问题急需找到有效的解决方案。要有效的解决城市交通运输问题就必须降低市民的出行时间,这样做将会为公交乘坐者和交通运输企业带来更大的效益,与此同时便捷的交通,准确详尽的换乘信息和广阔的市场也可以提升城市公交运输的整体形象,进而增加城市公交的客运量和运输效率。在绝大多数市民出行时,城市公交已经成为了这些出行者的首选交通方式,由于城市公共交通运输覆盖面广、出行成本低、便捷,各地城市政府也在全力扶持城市公交运输的发展与建设。在城市公交运输发展前景如此广阔的条件下,城市有必要为公交系统建设相对应的城市公交换乘信息系统,以满足当地市民或者是外来游玩、出差、探亲等急需了解本地道路情况的人对换乘路线的便捷查询要求,为他们的出行和生活提供更多的帮助,让出行者能够实现便捷出行。目前,我国城市公交换乘信息系统建设不够完善,广大乘客获取公交换乘信息的方式有限,,并且很难保证公交换乘信息全面而准确。人民现在的生活消费水平日益增高,出行的次数和里程都在增加,作为城市枢纽的城市公交系统将会承担越来越重大的客运任务。同时,为了让公交线路覆盖更多的地区,公交车数量迅速增加,公交对市民服务时间和到站路程不断增长,公交乘运服务不断人性化,彻底的改变了人们的生活和出行方式。在全球性的油价上涨、能源短缺大环境下,城市公交运营系统成为人们的出行的最大依赖、保障。随着人们出行所涉及的区域不断扩大,出行方式很难做到乘坐一个线路公交直达目的地,出往往需要在途中换乘多辆公交,如何在耗时最短、换乘次数最少、出行成本最低的情况下最有效率的到达目的地,成为了出行者要思考的问题。基于MFC/Access利用Dijkstra算法设计的公交换乘信息系统能够解决在乘客给出任意起点的情况下,动态查询选择最短出行路径的常用算法。该公交换乘信息系统的设计将会对开发公交换乘查询系统和方便乘客规划出行路线有着重要的意义。1.2设计的主要内容1.建立公交路网信息:对实际的公交道路图中的路段属性,如单行、路口转向、距离、行驶时间等信息进行编码,提供公交路网信息管理功能,包括:录入信息、修改信息、删除信息和查询信息等常用功能。2.建立公交路网模型:将公交道路网用赋权有向图表示,把一条道路的十字路口或一条道路的终点看做赋权有向图中的一个结点;两个节点之间的道路定义为一条弧;把每条弧的上述属性定义为路段权重。在赋权有向图上,一条路径的始点和终点分别为i和l,这条路径表示为一个弧的序列,并且满足前一个弧的终点是下一个弧的始点,第一个弧的始点是i,最后一个弧的终点是l,用这样一个有序的点集来表示一条公交路线,一条路径的代价是这条路径上所有弧的权重之和,由此建立公交道路网模型。3.出行路线的自动诊断:根据建立完成的公交路网模型,利用Dijkstra算法判断出始点到终点的最短公交线路,并为应用者提供出行线路的查询、保存、打印等常用功能。1.3算法完善Dijkstra算法是在图论学等科领域中计算最短路的经典算法,该算法对于道路网或计算机网络的拓扑结构很适合,通过对Dijkstra算法的改进,判断出最为便捷的公交出行线路方案。在原来公交换乘线路设计中用到的Dijkstra算法,只能给出从起始站点到终点站点所要途径的所有公交站点的集合,这对于应用城市公交换乘信息系统的出行者来说是不够方便的,因为出行乘客在出行时只会在意要坐哪个线路的车,在这条线路车途径的哪个站点下车进行公交换乘继续出行,至于公交车在运行阶段所要途经的站点信息并不是很关注,不会去刻意了解。当然该城市公交换乘信息系统也涵盖了改进完善之前的Dijkstra算法的一些优点,例如在公交路线表中便捷的查询得到某条公交线路包含的所有站点。但是由于城市公交网络中涉及的数据量太过庞大,且公交线路具有有向性的特点,这使的利用Dijkstra算法进行计算要消耗较大的时间成本,于是需要基于运算时间较长和公交网络的自身特性这两方面作出改进。例如,我们要查询从A公交站点到B公交站点的最佳公交换乘线路,在查询经过A公交站点的所有公交线路集合的同时也能够查询得到经过B公交站点的所有公交线路的集合。在查询从a站点到站点b的最优路线的过程中,首先看a、b站点之间是否能够直达,若能直达,则按照所有线路的权值进行排序,选择出最优路线;若不能直达,则查询a站点和b站点可以直达的所有站点,对这两个集合取交集,若是交集不为Φ,结束迭代,按照线路的权值进行排序,选择出最优公交路线,否则,仍然继续迭代。查询由A公交站点出发,在途中必须要进行一次公交换乘才能到达的目标站点集合,与可以不用进行公交换乘,直接到达B公交站点的所有目标站点集合进行取交集,若取得的交集不为Φ,则迭代结束,这样便得到必须换乘两次才能到达目的地的公交换乘方案,按照线路的权值进行排序,选择出最优线路。否则,迭代继续进行,直至查询得到最优乘坐公交的换乘路线方案或者所有公交站点完成迭代为止。1.4论文的组织结构论文第2章是开发系统所需要的工具工具与所需具备的环境的概述,介绍了该系统设计开发使用的VisualC++6.0中的C++开发语言和系统在数据库的设计开发中使用的数据库连接技术ADO,并介绍了开发该系统所需要具备的计算机环境。第3章是需求分析,包括系统功能需求,系统数据库需求等。第4章是系统设计与架构,包括划分系统的功能模块,数据库设计及建立。第5章是测试。包括测试的内容、方法和用例。2系统的开发工具与环境基于MFC/Access利用dijkstra算法的设计的公交换乘线路信息系统属于计算机软件开发的范畴。就目前的计算机软件开发,它要求程序的可维护性、可扩充性及可伸展性。为保证软件的质量,可采用相应的不同的设计方案。由于面向对象程序设计具有继承、封装以及多态等特点,所以在城市公交信息查询系统的设计和编程阶段都能够有效降低程序复杂度。本软件开发使用了面向对象语言C++实现,使用了微软公司的VC开发工具下的MFC来编程。用到了MFC中的基础类,做到了代码的重用,为软件的开发节省了不少时间。2.1开发平台VisualC++6.0VisualC++6.0,简称为VC或VC6.0,是由微软公司开发推出的一款C++编译器,这款VisualC++6.0程序是可以将“高级语言”翻译为“低级语言”的。VisualC++开发工具有非常强大的的功能,可以实现可视化软件开发。在1993年Microsoft公司推出首款VisualC++系列程序VisualC++1.0之后,VisualC++不断的推出新的版本,随着VisualC++的不断更新,功能不断增强,现如今不少的专业程序员在进行程序编写编译时的首选工具便是VisualC++。此后,虽然微软公司在VisualC++6.0之后还继续新的版本VisualC++.NET也称为VisualC++7.0,但因为VisualC++.NET在应用时它的局限性很大,程序只适用于Windows2000、WindowsXP以及WindowsNT4.0这些系统。所以在实际的宽肩开发过程中,VisualC++6.成为了主要的程序开发编译平台。VisualC++6.0不仅仅是一个简单的C++的编译器,同时还是Windows操作系统环境下的一个可视化集成开发环境(integrateddevelopmentenvironment,IDE)。VisualC++6.0程序包含了许多的组件,包括编辑器、调试器以及程序向导Ap