• 369.00 KB
  • 2022-05-12 10:03:41 发布

学位论文-—基于mfcaccess的交通换乘路线设计.doc

  • 32页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
基于MFC/Access的交通换乘路线设计摘要现如今,人们的出行方式有了更多的选择,城市公交系统作为交通运输的主体得到了迅速的发展,但是目前我国的城市公交换乘信息系统还未发展到较为先进的水平,广大的城市民从公交信息系统得到的信息不是很全面,信息量比较少,为了解决这种状况,使城市公交加速发展,更加信息化,设计一个公交换乘信息系统有较为现实的应用意义。本次设计是基于MFC/Access的公交换乘路线信息系统。首先将公交路线网抽象成一个带权图,然后根据用户提供的起始站点和目的站点,运用dijkstra算法进行搜索,为用户提供一个最优的乘车方案。本系统使用MicrosoftVisualC++6.0作为开发工具,用VC++中的MFC应用程序框架来实现。这个公交换乘信息系统主要包含两个模块,分别是查询模块(按照线路、站点和两站点查询)和管理更新模块(公交线路管理和管理员账户管理),最后根据本系统在开发阶段和调试阶段出现的问题,得到了系统需要改进完善的地方,总结了设计开发本系统所得到的经验和收获。关键词:dijkstra,路线换乘,MFC架构 DesignofTransferbusroutebasedonDijkstraalgorithmAbstractThedevelopmentofthebuspassengerinformationsystemisinalevelthatfallbehindofthecityinourcountry.Thelargepartofpassengerscanacquirefewwaysoftheinformation.Soit"spracticalforustodevelopcity"sbuspassengerinformationsysteminordertoresolvingthisproblem.Thedesignisbasedonthedijkstraalgorithmbustransferlinequerysystem.First,Itsneedtochangethebusroutenetworkintoaweightedgraphabstraction,Thenthesystemsearchesusebythedijkstraalgorithmaccordingtotheinitialsiteanddestinationsitewhichprovidedbyuser,andprovidesuserswithanoptimaltravelprogram.ThesystemusesMicrosoftVisualC++6.0asdevelopmenttool,achievesbytheMFCapplicationframeworkwhichinVC++.thesefunctionscanbedividedintotwoparts---searchsystem(Includingthelinesearch、stationsearchandbetweentwostationssearch)andmanagementupdatesystem(IncludingBuslinemanagementandAdministratoraccountmanagement).Atlastaccordingtotheproblemsthathappenedintheperiodofusing,Isummedupsomewaystoimprovethesystem,andsomeexperiencesthatIcanhavefromthisresearch.Keywords:dijkstra,Tranferline,StructureofMFC 1绪论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程序包含了许多的组件,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。VisualC++6.0程序所包含的所有组件由DeveloperStudio这一个组件集成为和谐的、稳定的软件开发环境。VisualC++大概可以分成三个主要的部分:  1.DeveloperStudio。在日常的程序开发工作中99%的做业都是在这一个集成开发环境完成的。DeveloperStudio虽然拥有者一个很出色的编辑器以及众多Wizard,但是它本身并不包含程序编译或者链接程序的程序功能。而且DeveloperStudio并不是提供予VC专门使用的,它还同样的可以运用在于VB,VJ,VID等VisualStudio家族的其他成员编程编译过程中。 2.MFC。它是微软的基础类,在C++的环境中,通常要编写一个应用程序的框架和引擎时用到MFC这个微软基础类。MFC提供大部分用来进行界面开发的类,关联一个窗口的动作,但它所提供所有类中,有许多的类并不是与窗口进行关联,也就是说这些类是不实现对一个窗口对象的控制的,这些类的作用并不是一个界面类,而是一些在WinDOS(用MFC编写的程序绝大部分都在WinDOS中运行)中进行内部处理的类,例如数据库的管理类就是这样就是这样的一种实现。3.PlatformSDK。它是整个VisualStudio以及VisualC++的核心内容和灵魂所在。它的核心是MicrosoftC/C++编译器,并且配合MASM同时借助其他一些工具和文档资料辅助做业。2.2Access2003微软在1992年基于Windows3.0推出了第一个版本的Access1.1。微软公司在Windows的桌面关系数据库管理系统(RDBMS)的基础上推出Access,常用微软Office软件的知道Office系列应用软件之中就包含有Access。Access提供了7种用来建立数据库系统的对象,他们分别是表、查询、报表、窗体、宏、页、模块;提供了模板、生成器以及多种向导,规范了界面设计、报表生成、数据查询和数据存储等操作;使得建立功能完善的数据库管理系统过程更加简便易行,这样普通用户在实现大部分数据管理操作过程中便可以不需要编写代码就能进行想要的操作。Access是一种关系型数据库管理系统,主要有以下特点:(1)存储方式单一Access包括表、查询、窗体、报表、页、宏和模块七个管理对象,这些管理对象都存放在的数据库文件中,文件的后缀为(.mdb),使用户的操作和管理更为简单方便。(2)面向对象Access这个开发工具是面向对象的,将各种功能利用面向对象的方式在数据库管理系统中进行对象化,把不同的功能看作为不同的对象,并且将数据库管理的各种功能封装于各类对象中。Access将一个应用系统表示为众多对象的集合,每一个对象都附带有一组属性和方法,以这些属性和方法来描述众多对象的行为,用户还可以基于自己的实际要求、需求来增加扩展对象的属性和方法。通过借助对象的方法、属性进行对数据库的操作和管理,方便用户在开发过程中进行使用。同时,这种基于面向对象的开发方式能够使开发应用程序变的更为简单易行。(3)界面友好且易操作Access是一个可视化的开发工具,它的开发风格和Windows 是相同的,用户若是想要生成对象并应用,只需要拖放鼠标即可使用,操作非常的简便、直观。Access同时还提供了报表设计器、查询生成器、表生成器和查询向导、数据库向导、表向导、报表向导以及窗体向导等工具,使得开发操作变得更加容易,减少开发人员的使用难度。(4)集成环境与处理多种数据信息Access需要在Windows操作系统下的集成开发环境中进行工作,由于在这个环境中已经涵盖了各种生成器工具以及向导,因而使开发人员的工作效率有了大幅度的提高,缩短了程序开发的周期时间,因而能够高效有序地进行建立数据库、创建表、设计数据查询、设计用户界面和报表打印等数据库的基本操作。(5)Access是支持ODBC(开发数据库互连,OpenDataBaseConnectivity)的,在Access数据库中借助其强大的DDE(动态数据交换)和OLE(对象的联接和嵌入)特性还可以做到添加声音、位图、Excel表格和Word文档。Access还可以通过网络应用程序与网络上的动态数据进行联接。2.3程序设计语言C++C++语言是在C语言的基础上发展而来的一种优良的面向对象程序设计语言,但但是与C语言相比较起来,C++语言更为容易被用户学习和掌握。C++语言在计算机科学的各个领域中应用是很广泛的,因为C++语言有着其特有的特有的语言机制。在原本结构化程序设计方法基础上将面向对象的设计思想进行了进一步的的一个提升,在C++语言上面完美地体现着面向对象设计方式的各种优势与特色。C++主要特点:完全支持C语言与面向对象。C++基于C语言发展而来,保持了C语言的高效、简洁和在某些操作上继承了汇编语言指令的特性。同时,对C语言的类型作了系统的改革和扩充,弥补了C语言中的存在的一些漏洞,为C++的编译提供了更好的类型检查和编译分析,能够检测出更多的类型错误。C++解决了C语言的安全性问题,相比于C语言来说更加安全可靠。由于C++语言是在C语言的基础上发展而来的一种优良的面向对象程序设计语言所以C++与C语言是可以实现相互兼容的,这样许多C语言代码不用进行修改即可在C++编译器中编译运行,这样的可以相互移植的特性使得实用软件和众多库函数都可以在C语言和C++移植使用。因此,熟练应用C语言的开发人员能很快掌握C++进行编程。此外,与C语言相同的是用C++编写的程序整齐明了,具有良好的的可读性,代码结构清晰合理。C++最主要的特点是支持面向对象的程序设计,使用C++编程效率更 高;由于面向对象的方法更接近人类的思考思维方式,C++对于问题的描述更容易,程序理解与维护也更容易;C++的模板对库代码是支持重用的;在程序员完成大型程序设计时选用C++语言更为有利、有优势。C++支持多种程序设计方法,支持对过程化和基于对象的程序设计方法。适合于开发方法不同的编程人员。2.4系统的开发要求本次开发的公交换乘信息系统对计算机操作系统环境的要求如下:硬件要求:CPU:最低IntelPentiumII500MHz。磁盘空间:1GB。内存:最低限值512MB(最好是在1GB以上)。显示:1024*768,256色软件要求:计算机操作系统:Windows2000以上的计算机操作系统环境。开发平台:VisualC++6.0,Access2003。 3需求分析3.1系统功能需求分析随着社会经济建设的高速发展,人民生活消费需求的不断提高,在忙碌的工作告一段落后更多的人选择旅行来放松自己丰富生活,但是当我们第一次来到这个要旅行的城市时,我们知道自己要去的旅游景区但是对于如何到达的路线是未知的,通常只能请导游随身而行,这时一个能查看具体公交线路的城市公交换乘信息系统变便得很有实用价值、实际意义。本系统在实现信息系统的整体功能时采用了面向对象设计思想和方法,将信息系统的每个模块的功能应用达到系统所需标准,即将整体系统进行合理的划分,使每个不同的模块能够完成其相应的功能,将各个功能模块之间和模块内部的联系清晰的体现,避免系统设计凌乱无序,正确合理完整的将存储信息的数据库进行相互关联,实现每个功能模块之间的数据信息共享,确定各个功能模块其内部结构设计,在模块内部的功能设计完成的同时建立各个功能模块之间的数据、逻辑联系,达到预先计划要求的系统的整体功能。城市公交换乘信息系统总共分为5个功能模块,公交线路查询模块、公交站点查询模块、公交换乘信息模块、数据与维护模块和系统账户管理模块。1.功能名称:线路查询功能概述:在公交换乘信息系统中输入某条公交线路的公交编号查询得到该条公交线路上面所途经的所有公交站点。2.功能名称:站点查询功能概述:在公交换乘信息系统中输入的指定目标公交站点查询得到途经该站点的每条公交路线信息。3.功能名称:公交换乘查询功能概述:通过输入起始站和目的站,系统根据dijkstra算法给出一个基于最短路径的乘车方案。4.功能名称:数据维护功能概述:管理员登录公交换乘信息系统,可以对数据库中的数据进行添加、修改、删除公交线路等更新和维护。5.功能名称:管理账户功能概述:管理员登录公交换乘信息系统,实现对管理员的信息资料、安全密码进行修改和保存功能操作。3.2系统分析建模在设计该系统,首先要考虑如何将数据库的结构与语义 通过数据模型表示、描述出来,将公交线路的相关信息进行抽象,把公交线路的各种信息存入数据库中。目前独立于计算机系统的“概念数据模型”,如“实体联系模型”和直接面向数据库逻辑结构的“结构数据模型”是使用比较广泛的数据模型。在该公交换乘线路信息系统采用“实体联系模型”(ER模型)来构建数据库的结构与描述数据库,以此对现实的公交信息以及彼此的逻辑关联进行初步的抽象化。通过数据库ER图直接从现实中抽象出实体类型及实体间联系,再用数据库ER图来对数据模型进行描述。“实体联系模型”(ER模型)有两个明显的优点:与人的思维方式相类似,比较容易理解实体之间的关系、逻辑关联,易于对实体和实体联系进行抽象使用;与计算机本身无关,用户接受起来相对容易。但是建立ER模型只是构建数据库的第一个步骤。E-R图是直观表示概念模型的工具,构成E-R图的基本要素是实体型、属性和联系,其中用矩形框来描述实体类型,将现实中的目标对象抽象成为实体类型;用菱形框来描述联系类型,此联系即为实体类型之间的逻辑关联;用椭圆形狂来描述实体的属性。实体和属性的定义如下:管理员表(登录姓名,登录密码)站名表(站名编号,公交站名)公交线路编号表(车次,线路公交类型)公交线路表(线路编号,公交车次,公交站名,公交站点的次序)各实体属性图如图3.1所示: 管理员登录姓名登录密码车辆发车时间车次末班时间编号首班时间站名站名编号站名车辆线路编号车次车辆类型线路线路编号次序车次站名车次运行区间车辆编号票价车辆类型能否刷卡图3.1实体属性图本系统的总体E-R图如图3.2所示。图3.2E-R模型图时刻站名车辆线路拥有包含属于M1M1M1 3.3系统数据库需求分析在完成一个信息管理系统的实现过程中,数据库的设计和实现是至关重要的,整个信息管理系统是否高效,是否合理,能否实现要求达到的应用效果完全要依赖于数据库结构设计与实现。一个优良的信息管理系统需要有高效的数据存储的效率,而合理的数据库结构设计可以保证数据的整体性和一致性。数据库技术是在传统的文件系统基础上发展而来的,数据库数据模型的发展依次从层次模型、网状模型发展到关系模型。数据管理是数据库技术发展至今的最新技术,此技术是计算机科学的一个重要分支,它能规范、指导我们完成正确地数据库系统设计,数据管理出现极大地推动了计算机应用的发展。在我们开发一个信息管理系统时,想要更有效的设计完成实用的数据库系统便需要依赖数据库技术的原理和方法。设计构建一个完善、结构清晰的数据库系统需要涵盖数据库管理系统(DBMS),数据库管理员(DBA)、数据库(DB)、应用程序和相应的硬件设施等各部分内容。现在许多数据库管理系统的基础模型都是以关系模型为主,关系模型的主体特点是利用表格结构表达实体,用键来表示实体与实体之间的联系。把关系模型与层次模型和网状模型相比较起来看,关系模型容易而且实用,对于初学者来说使用起来简单易于接受。关系模型是代表着一个集合,它自身包含有若干个关系模式,关系模式类似于记录类型,我们通常把关系模式的实例称之为关系。我们将每个关系用一张表格来描述。关系表格的结构越是简单,实例关系越是容易被用户理解、接受,用户在对数据库进行数据操作时只需用简单的查询语句便可完成目标操作,此过程并不需要用户具备存储结构,访问技术等细节知识点。关系模型其实就是数学化的模型,构建关系模型需要用到集合论、离散数学等方面的知识。关系数据库是SQL语言的代表性语言,现在在一些信息管理系统中已经得到了广泛的应用。在设计数据库的时候,首先要考虑数据的安全性,确保系统运行过程中系统内部数据的安全,防止非法用户通过非法操作入侵到数据库,造成数据库中的一些重要信息泄露,安全严密的数据库保护结构能够有效防止非法用户对数据库进行蓄意破坏。保护数据的方法有许多,如采用用户标识,口令和密码或访问控制等。用户标识是一个完善的数据库应用系统所必须具备的,每个合法用户都拥有一个系统内的用户名和用户名口令,在登录系统时只有输入正确的用户名和用户名口令才能进入系统,这样做才能较为有效的保证合法的用户对数据库系统的独立操作。数据库的数据需要具备完整性约束,保证数据的语义是合法的,即用户输入的数据是符合数据库设计要求的,是合法的数据输入操作。 设计数据库系统时,要提前了解、考虑到用户现有的使用需求和在未来可能增加的系统操作需求,以此来使得系统更加完善,用户使用更加长久化。4系统设计与实现4.1功能设计及实现在功能设计与实现过程中划分出系统的物理元素和设计软件的结构是这个阶段的主要任务,在软件定义期间的任务完成之后就要完成系统的总体设计,通过分析系统,确定系统整体是由哪些系统和功能模块组成,这些系统和功能模块之间又是怎样有机的结合成为一个整体,每一个功能模块的相应功能怎样实现。系统功能设计的最终完成目标是能够实现系统应用所要求的功能,同时,是系统管理便捷高效,用户使用起来安全可靠,后期更新维护过程中便于修改,用户容易操作使用。模块化的目的是将较为复杂的问题分割为许多容易解决的小问题,将这些小问题逐个解决,最终将原有问题简单化,清晰化的解决。模块化设计是将大型软件按照一定的软件设计原则、软件设计要求分割为一个个较小型的功能模块,但是这些小型功能模块在功能上是较为独立的但在逻辑上是相关联的。划分出来的每一个小型模块只需要完成一个特定的子功能,最后将所有小型功能模块进行有序的整合,形成一个完整的系统,系统每个界面、每个功能块能够完成特定的功能,满足系统应用原始的设计需求。软件结构清晰,程序便于测试和调试是采用模块化设计的优点,这样的模块化设计能够提升系统应用的安全性、可靠性和后期维护的可修改性,在软件开发过程中更好分工完成,有序方便的进行开发的组织管理。每一个大型软件可基本都可以划分为不同的功能模块进行编写。模块化理论的几个重要概念如下:抽象。将事物的本质特抽象出来而暂时不去考虑事物细节。处理复杂系统时用层次的方式构造和分析它是唯一有效的方法。一个复杂的动态系统首先要进行抽象化,能够组合一些高级的抽象化概念进行构造分解,而高级的抽象化概念又可以利用一些较低级的概念对其进行分割理解,直到将整个复杂的动态系统分割、分解为最低等级的实体元素。信息隐蔽和局部化。信息隐蔽是指 在系统结构设计过程中和确定功能模块之间的关联性时,一个模块内的信息对于不涉及这些信息的功能模块来说是不允许进信息接触的,功能模块是不能访问、利用这些数据信息的。局部化是指在系统设计时软件元素有关联性的物理的放在一起。这样做有利于对数据信息进行隐蔽,防止无关功能模块的访问。在程序测试期间以及软件维护期间由于应用信息隐蔽原理和局部化,使得程序开发者方便、快捷的修改软件。因为其它部分的子模块是访问不到这些数据信息和过程的,这些信息对于子模块是隐蔽的,这样就避免了由于系统一部分产生错误从而影响到其他子模块的正常实现其功能的可能性。逐步求精的模块化概念。逐步求精与模块化的抽象有着密切的联系。在每一层的软件结构中模块是将软件抽象层次更加的细化。由程序软件顶端逐步向下求精,从抽象到具体的方式分配控制,使软件设计和实现过程更为清晰、简单化,程序软件更容易理解,增加程序软件的可测试性,并且软件进行后期更新、维护时将会更加的容易。模块独立性。模块独立性是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。具有独立的模块的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要。独立的模块比较容易测试和维护。这是因为相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够"插入"模块。总之,模块独立是优秀设计的关键,而设计又是决定软件质量的关键环节。模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。在软件的设计中应追求尽可能松散的耦合。内聚表示在一个模块内每个结构元素相互关联、结合的紧密程度,它是信息隐藏和局部化概念的延伸和拓展化,一个模块只做一件事情属于理想的内聚模块。在设计时应力求做到高内聚。模块划分如下:⒈查询系统模块该查询模块实现公交新路信息查询的功能。此模块有三种查询方式:公交线路查询、公交站点查询和起点—终点查。⒉录入系统模块该模块实现数据的新增、修改、删除、保存功能。 以下为系统模块图:城市公交查询系统数据管理查询新增修改保存按线路查询按站点查询两站点间换乘查询密码管理员账户站点信息车辆参数线路图4.1系统模块图两站点查询模块:当使用者进入该系统后,在主页面内有换乘查询模块,使用者在起始站点的文字输入框中输入自已的出行出发点,然后在终点站文字输入框中输入出行的目的地公交站点,点击左侧查找按钮,进行路线查询。系统先检查用户是否在起始站点和目的地站点的输入框中输入了内容,如果输入框中未输入查询内容则提示使用者站点输入框不能为空,然后再判断使用者所要查询的公交线路信息在数据库的数据信息中是否存在,如果不存在公交线路信息则显示出错提示,如果存在系统根据dijkstra算法搜索、显示出一条最优乘车路线提供给用户。公交站点查询模块:当使用者进入该系统后,从系统主界面切换到公交站点查询的界面,在站点查询模块的文字输入框中输入站点名称进行站点信息查询,点击查找按钮,进行查找。系统首先检查使用者输入的查询站点是否存在,如果不存在则提示查询出错,如果存在所要查询的站点,则给使用者显示出所有途经该站点的公交路线的信息。公交线路查询模块:当使用者进入该系统后,由系统主界面切换到路线查询的界面,在线路查询模块将要查询的线路输入到该界面的文字输入框中,点击查找按钮,进行查找。系统首先判断系统使用者所输入的线路在系统的数据库中是否存在,如果不存在则提示查找出错,如果存在则显示查询的这条公交线路的相关信息,如:早晚车的发车、停运时间,票价,无人售票、配备空调等公交路线信息。系统数据管理模块:本系统的设计包含了数据库管理员和普通使用者能共同的数据管理 界面。管理员需登陆密码验证才能进入管理界面进行操作,而普通用户无需账号登陆可直接进入系统相应的功能界面进行所需信息的查询。但本系统只对普通用户提供信息查询的功能,普通用户没有数据信息的编辑权限。而数据库管理员对数据信息的操作和普通使用者是有区别的,数据库管理员可以对数据库的数据信息进行编辑操作(修改、增加、删除站点,修改、删除、添加线路等功能),例如当地公家运营企业增添新的公交线路或者是在原有公交车线路的基础上增添新的站点,数据库管理员可以登陆到这个数据管理界面,及时完成对线路和站点信息的修改,保证系统内车次线路等相关修改的信息能够及时更新,提供给使用者最新的公交线路信息。此外,数据库管理员还要对整个的信息系统进行定期的运行维护,保证该系统能够安全稳定的运行,长久的服务于广大市民用户,为市民用户提供完准确、详尽的查询服务。4.2数据库设计与实现数据库技术是在传统文件管理系统的基础上发展起来的一种高效数据管理技术,利用数据库技术使系统数据信息保持整体性、完整性以及共享性。在数据库系统存在数据信息访问机制,能够采用合理的存储方式实现数据信息存储有组织化、结构化,提高数据信息的查询、利用效率,做到最小的数据冗余。除此之外,操作应用数据的应用程序与数据库内数据信息的存储是彼此相互独立的,这样能够方便的进行数据库数据信息的管理与操作,同时方便系统开发调试过程中应用程序的编写以及编译。数据库好比是一个储蓄数据信息的大仓库,将数据存储于数据库中能够方便、有效地实现数据共享并且保持数据的一致性。在一个数据信息管理系统中,数据库的设计是主要的开发任务之一,数据库的设计是否清晰、完整直接影响着系统开发的成败、系统使用的效率、系统的质量以及后期的可维护性。在本系统的设计中,充分考虑到了管理系统数据繁杂,重复性很大,数据使用频繁。因此在管理系统设计过程中采用了数据库系统这一种能恰当反映用户使用需求并能够被现在的主流操作系统所接受,后期易于维护且使用效率高的数据信息管理方法。本系统构建的Access数据库是城市公交换乘路线信息系统。数据库设计阶段将的数据文件和日志文件都保存在了公交换乘信息系统文件夹中。这个数据库包含有6个表:①管理员表(LoginTable)管理员表存放的是系统登陆的用户名和密码,登录后台时需要访问该表。表4.1管理员表 字段名数据类型长度是否为空是否为主键说明LoginPwdvarchar50否否登录IDLoginNamevarchar50否是登录姓名②站名转换表(StInfo)站名转换表给每个站名一个唯一编号,修改或查询站名需要访问该表。表4.2站名表字段名数据类型长度是否为空是否为主键说明St_Numint4否是站点编号St_Namevarchar50否否站名③线路表(Bus_St)线路表存放的是公交车线路经过全部站点的数据,修改线路或车站查询的时候需要访问该表。表4.3线路表字段名数据类型长度是否为空是否为主键说明Bus_Numvarchar50否是车次St_Namevarchar50否是站名④车辆表(Bus_Arc)车辆表存放的是经过该弧段的车次的相关信息,修改车次或站站查询需要访问该表。 表4.4车辆表字段名数据类型长度是否为空是否为主键说明Arc_Numint4否是弧段编号Bus_Numint4否是车次⑤加权站站查询表(Graph)查询表存放了完整的公交网络模型的带权图,在程序调用Dijkstra算法搜索最优乘车线路的时候需要访问该表。表4.5加权站站查询表字段名数据类型长度是否为空是否为主键说明St_Num1int4否否站点编号1St_Num2int4否否站点编号2Costint4否否权值ArcIDint4否是弧段编号⑥车次路线表(BusInfo)车次路线表保存某一公交车次的概况信息,进行路线查询的时候需要访问此表。表4.6夏季发车时刻表字段名数据类型长度是否为空是否为主键说明Bus_Numvarchar50否是编号50否否 BeginStvarchar起始站点EndStvarchar50否否终点站点BeginTimevarchar50否否首班时间EndTimevarchar50否否末班时间Notevarchar50否否车辆概况 5测试5.1测试内容因为程序中隐藏的缺陷只又在特定的情况下下才能显露出来,系统缺陷常常是因为对某些特定情况考虑不全面造成。因此测试开发完成的软件程序并不是为了证明程序能够实现设计初期的要求,能够正确运行,成功的测试并不代表软件程序不存在漏洞。软件测试应该试图“破坏”软件系统来实现测试这个环节的意义,精心设计、全面考虑最有可能检测出程序系统漏洞的测试方案。所以程序测试的目标是以尽量少的代价和时间找出程序中潜在的缺陷和错误。从产品角度看,测试方案中的需要测试的范围包括软件系统的分层结构、次系统层、功能模块层、程序模块层中的各功能结构的子模块,从测试方式来看,分为单元测试,集成测试,确认测试等。测试环节在不同的阶段有着不同的测试对象,最基础、最初期的测试方式为单元测试,随后进行的组合测试、确认测试都是对已经测过的模块进行再次的测试。单元测试。单元测试又称为模块测试或者是程序测试,单元测试是单独的对每个模块进行测试,验证设计说明书和模块接口是否一致,对模块的所有主要数据调用、模块关联等路径进行测试,并与初始设计时的结构进行对比分析,还要对所有产生错误的相关路径进行进一步测试。对对程序源代码进行检查,对照设计初期起草的设计说明书检测源程序能否实现系统要求的功能逻辑,是单元测试之前的需要完成的必备工作。程序员一般在软件程序编码过程中进行单元测试的完成,这个过程也称为程序调试。集成测试,英文是IntegrationTesting。集成测试是指一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作并没有冲突。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。一般集成测试以前,单元测试需要完成。集成测试是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。确认测试。软件通过集成测试后进入到该阶段的测试,此时软件已经在预期的设备上进行运行,确认测试是为了验证、证明开发完成的 软件是可以正常工作的,并且符合“软件设计说明书”中规定的需要实现的全部功能和运行性能的要求。确认测试是按照这些要求定出的“确认测试计划”进行的。测试工作是由独立的测试部门软件测试员完成,而且测试全程都应该以软件用户为主体角度进行。系统测试。系统测试是对整体性能的测试,该阶段的测试主要解决各个系统、子功能模块数据调用和数据转移问题以及检测系统是否达到原始的设计要求,系统测试的执行需要依赖于系统分析报告。系统测试的范围是整个软件系统,该阶段测试并不是单单针对软件进行测试,而是把系统整合将硬、软件配套在一起进行。系统测试与建构同时进行或略慢。系统测试需要保证从开始功能到最后结束各个功能都能正常工作才算完成,此次尽量不要再项目完成末期进行系统测试这个环节。用户验收测试。在系统测试完成后,进行用户的验收测试,它是用户在实际应用环境中所进行的真实数据测试。5.2测试方法一般应用的程序测试方法分为两种:白盒测试和黑盒测试。a).白盒测试,英文是WhiteBoxTesting。又称结构测试或者逻辑驱动测试。白盒测试是把测试对象看作一个打开的盒子。利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。白盒测试是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。白盒测试常用工具有:Jtest、VcSmith、Jcontract、C++Test、CodeWizard、logiscope。b).黑盒测试,英文是BlackBoxTesting。又称功能测试或者数据驱动测试。黑盒测试是根据软件的规格对软件进行的测试,这类测试不考虑软件内部的运作原理,因此软件对用户来说就像一个黑盒子。软件测试人员以用户的角度,通过各种输入和观察软件的各种输出结果来发现软件存在的缺陷,而不关心程序具体如何实现的一种软件测试方法。黑盒测试常用工具有:AutoRunner、winrunner、loadrunner。  本系统采用黑盒测试。 5.3测试用例5.3.1系统登录界面1.管理员登录测试目的:检查管理员能否正常登录。表5.1管理员登录功能测试记录表测试描述在系统的主界面输入用户名和密码口令,点击进入。用例输入(用户名:陈文帅密码:123)用例标志符预期的输出/响应实际情况结果登录成功与预期结果一致。界面如图5.1所示:图5.1管理员登录界面2.普通用户登录测试目的:检查普通用户能否正常登录。 表5.2普通用户登录功能测试记录表测试描述不需要输入用户名和密码口令,直接点击进入。用例输入(用户名:(空)密码:(空))用例标志符预期的输出/响应实际情况结果登录成功与预期结果一致。界面如图5.2所示: 图5.2普通用户登录界面5.3.2站站查询测试目的:检查能否实现站站查询功能。表5.3站站查询功能测试记录表测试描述在站站查询界面,起始站和目的站输入相应站点,点击查找用例输入(起始站:华清立交西目的站:多彩商城)用例标志符预期的输出/响应实际情况结果华清立交西->华清村->三府湾西口->多彩商城与预期结果一致。界面如图5.3所示: 图5.3站站查询界面5.3.3路线查询测试目的:检查能否实现路线查询功能。表5.4路线查询功能测试记录表测试描述切换到路线查询界面,在输入框输入相应路线,点击查询用例输入(公交路线:32)用例标志符预期的输出/响应实际情况结果公交路线:32起始站点:华清立交西终点站点:团结南路南口早班车时间:AM06:00晚班车时间:PM08:30公交车其他信息:非空调无人售票车,票价1元,每8到15分钟一班车。与预期结果一致。 界面如图5.4所示:图5.4路线查询界面5.3.4按站点查询测试目的:检查能否实现站点查询功能。表5.5站点查询功能测试记录表测试描述在站点查询界面,在公交站点输入框输入相应站点,点击站点详情。用例输入(公交站点:朝阳门)用例标志符预期的输出/响应实际情况结果如图5.5所示与预期结果一致。 界面如图5.5所示:图5.5站点查询界面5.3.5新增车次线路测试目的:检查能否实现增加车次功能。表5.6增加车次功能测试记录表测试描述管理员登录后,点击进入管理数据库界面用例输入(金康路,吴村庙,919,金康路,韩森寨)用例标志符期望的输出/响应实际情况结果新路线成功存入数据库与期望一致。 界面如图5.6所示:图5.6管理数据库界面5.3.6管理员账号管理测试目的:检查能否实现增加车次功能。表5.7增加车次功能测试记录表测试描述管理员登录后,点击进入管理账号密码界面用例输入(test,123,123)用例标志符预期的输出/响应实际情况结果新用户成功存入数据库与预期结果一致。界面如图5.7所示: 图5.7管理账户界面6结论本系统的特色是运用了dijkstra算法搜索了一条最优路径,给用户提供了一个方便快捷的出行方案,使得软件更加人性化。毕业设计从当初的构思、设计实现到现在基本功能大致实现,但是由于数据库中的站点信息缺乏,只是为了测试功能添加了几组公交线路信息,但是需求功能是能够进行实用的。该信息系统是在大学阶段比较独立的完成一个整体的软件编程,从最初的基础知识学习、知识拓展到整个系统功能构想、数据库设计、界面设计再到最后的代码编写、功能代码调试这一系列的设计工作让我深深感受到完成一个编程开发的不容易,一个系统性的完整编程实现靠一己之力去实现是比较困难的。毕业设计是对大学阶段所有知识的一次整合利用,完成本次毕业设计用到的C++和MFC知识在课堂学习了很少的的一部分,在编程阶段感觉到了自己编程知识的缺乏,需要继续努力学习、积累,在实践中逐步提高自己。在编码阶段一边编码一边对已经完成的功能模块进行编译,包括最后阶段的整体编译调试,通过多次的修改整理,才基本最后定型,在繁琐的编译修改完成后,也体会到了些许的成就感,整个毕业设计过程非常的充实。如今,整个毕业设计项目完成下来虽然遇到很多困难,但是困难后面却存有更多的实用知识,可以积累了更多的编程经验。多动脑多动手,在日后的开发项目中不断拓展知识、见识,全面提升个人能力。 参考文献[1]DijkstraEWAnoteontwoproblemsinconnectionwithgraphs1959[2]FloydRNAlgorithm97shortestpath1962(06)[3]BernMW.EppsteinD.TengShanghuaParallelconstructionofquadtreesandqualiytriangulations1993[4]GalloG.PallottinoSShortestpathsalgorithms1998[5]CherkasskyBV.GoldbergAV.RadzikTShortestpathsalgorithms:theoryandexperimentalevaluationTechnicalReport[93-1480]1993[6]徐立华求解最短路问题的一种计算机算法1989(05)[7]严蔚敏.吴伟民数据结构2007[8]孙健鹤城市道路网络最短路径的统计学特征及实用算法研究[学位论文]硕士2006[9]陈箫枫,蔡秀云,唐德强.最短路径算法分析及其在公交查询的应用[J].工程图学学报,2001,(3):20-24.[10]杨新苗,王炜,马文腾.基于GIS的公交乘客出行路径选择模型[J].东南大学学报(自然科学版)[11]许军林.蒋年德一种改进的公交换乘算法的实现[期刊论文]-电脑知识与技术(学术交流)[12]徐多勇.李志蜀.梅林基于GSM短消息的公交查询系统的最优转乘方案研究与设计[期刊论文]-计算机应用2007(z1)[13]陈寅公交网络最优路线的查询模型与算法2008[14]陆忠.钱翔东.张登荣基于最短路径查询的城市公交网络拓扑建模研究[期刊论文]-遥感信息2002(01)[15]马良河.刘信斌.廖大庆城市公交线路网络图的最短路与乘车路线问题[期刊论文]-数学的实践与认识2004(06) 致谢犹记得作为大一新生刚入学时的情景,转眼间我的大学生活即将结束。这四年我学到了很多很多的知识,是我人生的一个转折。我之所以能取得这些成绩,除了有自己的努力外,在我的学习,生活中还得到了很多人的关心和帮助。在此我要对他们