《公交车查询系统》实验报告一、概述1、项目背景(1)我国城市公交查询系统的现状我国城市公交查询系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。我国公交查询系统的现状特点如下:①乘客可以获得的公交信息很少,而且方式主要是常规手段。我国乘客一般获得公交信息的方式局限于电话,交通图,向熟人问讯等常规方式。乘客可以获得的公交信息很少,除去线路,站点等基本信息以外,有关班次,车辆到离站时间的信息基本上没有。②乘客出行中获得信息困难,基本上没有实时信息。除去在杭州,上海等少数几个城市,乘客可以通过分布于城市中的若干电子站牌获得一些公交车辆的运营信息以外,在其它城市“出行中”的乘客无法获得任何实时信息。在我国一些城市中,有不少装饰华美的公交站台,但在这些站台上却找不到实用的城市交通图。③缺乏专门的交通信息发布管理机构,乘客获得的信息准确性得不到保证。目前,我国大多数城市对于交通信息的发布没有专门的管理机构和规章制度。在城市交通信息服务需求小的情况下尚可应付。但随着城市交通信息服务需求的增长,从事交通信息服务的人员和企业数量的增加,需要有专门的管理机构和制度。当前的城市交通信息服务存在着混乱和低效的问题,有些甚至是对乘客的误导。(2)我国城市公交查询系统的需求随着人民生活水平的提高和城市的发展,平常人们出行的次数和范围都在增加,作为城市主动脉的公共交通承担着越来越繁重的运输任务也要与此相对应,公交的线路数量和投入运营的车辆数量也在迅猛增加,公交的服务时间延长,服务范围扩大。服务质量提高,对人们的吸引力也在增强。在油价上涨和能源短缺的今天,人们的出行将越来越依赖公共交通。一般意义上,完整的出行问题是解决出发点到目的地的路径选优问题随着人们活动范围的扩大,乘公交出行往往也不可能一车到达,乘客从某一起点,可能需要一次或多次换乘才能到达目的地。因此,如何选择最优的出行路线,即如何换乘、换乘几次,成为人们出行首要考虑的问题。2、编写目的随着计算机技术的迅速发展,推动了信息技术的广泛、深入地应用到人们生活的各个领域并发挥着越来越重要的作用。计算机软件技术应用于信息管理是必然的趋势。作为计算机应用的一部分,充分发挥计算机的优势,将大量复杂的数据交给计算机来处理,有着人工管理所无法比拟的优点。如:查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,是真正意义的合理利用资源,也是政府以及企事业管理科学化、正规化和世界接轨的重要条件。公交车作为现代城市生活中一种重要的交通工具,在现代城市生活中尤其重要,公交线路繁多,数量也逐渐增多,这样使得人们的出行很不方便。在这样的背景下,我们决定做公交查询系统,并以六安市公交数据为例,设计了公交查询系统,验证了一些算法的可行性。该算法基于对经典的算法的学习和研究,沿用其关于求最短路径的思想,并加以对换乘次数,站点范围限制等内容的深入研究而提出的。在利用算法设计的公交查询系统中,综合居民出行公交路线选择的问题,影响居民出行的多种因素,如换乘次数,出行时间,出行路程,出行花费,出行舒适程度等调查结果,将算法应用于公交查询系统中,形成该以最少换乘次数为第一目标,最短出行时间为第二目标的公交线路查询解决方案。该方案能够在一定程度上解决人们出行公交路线选择的问题,使公众的出行更加通畅、快捷、便利。3、软件定义根据实际的需求,公交查询系统是一个在对公交乘客出行心理特征进行分析的基础上,考虑了乘客选择公交线路决策的因素,建立了基于时间价值的公交线路选择合理的模型,是一款面向广大城市出行用户的基于WEB的公交查询应用软件。此软件系统提供了站点换乘查询、公交线路查询、公交站点查询等功能。4、开发环境操作系统:WindowXPSP3数据库:MySql5.0开发平台:EditPlus3.0数据库管理工具:Navicat8CPU:AMDAthlon(tm)64X2Dual2.4GHz内存:2G5、开发工具及技术简介PHP是一种HTML内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP的特性包括:①开放的源代码:所有的PHP源代码事实上都可以得到,PHP是免费的。②php的便捷性:php十分便捷,学习简单。③基于服务器端:由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下。④嵌入HTML:因为PHP可以嵌入HTML语言,所以学习起来并不困难。⑤简单的语言:PHP坚持脚本语言为主,与Java和C++不同。⑥效率高:PHP消耗相当少的系统资源。⑦图像处理:用PHP动态创建图像。⑧面向对像:在php4,php5中,面向对象方面都有了很大的改进,现在php完全可以用来开发大型商业程序。⑨PHP相对于其他语言,编辑简单,实用性强,更适合初学者。二、需求分析1、问题陈述通过对现实中的城市公交系统(六安市城市公交系统)的考察,得到第一手的资料。人们在面对选择众多的公交车以及公交线路的问题上的需要,公交查询系统主要解决的问题是人们在城市中不熟悉公交系统的问题。通过调查得出:设计一个公交查询系统需要解决人们对一个城市公交系统的整个的查询问题。如:站点换乘查询、公交线路查询、公交站点查询等功能。六安市公交站点(以1路公交车为例)如下:2、功能需求要设计一个良好的公交查询系统,就必须首先明确该应用环境对系统的要求。城市公交查询系统是为了方便市民出行而设计的,因此,该系统需满足以下几方面需求:(1)站点换乘查询功能:能面向普通市民,通过普通的浏览器提供按照站名查询的方式,给出起始站点至目的站点的换乘方案。(2)公交线路查询功能:通过普通的浏览器提供按照线路名称查询的方式,给出该线路按顺序经过的所有站点名称。(3)公交站点查询功能:通过普通的浏览器提供按照站点名称查询的方式,输出经过该站点的所有公交线路名称。结合上述需求对系统功能设计的要求分析以及对功能模块的划分,从而分析出数据库的数据项。3、E-R模型图站点作为一个实体线路作为一个实体公交查询系统的基本E-R图三、数据库逻辑设计1、关系表2、表描述(1)表bus_Stop字段StopID为主键,存储站点的编号,字段StopName用来存储站点的名称(如:皖西学院本部),字段FirstLetter字段用来存储站点的首写字母。(2)表bus_Route字段RouteID为主键,存储线路的编号,字段RouteName用来存储线路的名称(如:11路(上行)),字段RouteGenName字段用来存储线路的根名称(如11路)。(3)表bus_Stop_Route字段StopID、RouteID、sIndex为主键,StopID存储站点的编号,字段RouteID用来存储线路的编号,字段sIndex字段用来存储站点在该线路中按顺序的编号。3、存储过程(1)InquiryT0(站点换乘查询直达乘车方案要执行的一些对数据库的操作)createprocedureInquiryT0(myStartStopvarchar(32),myEndStopvarchar(32))begindroptableifexiststemp_nochange;createtabletemp_nochangeselectbs1.StopNameasStartStop,bs2.StopNameasEndStop,br.RouteNameasRoute,sr2.sIndex-sr1.sIndexasStopCountfrombus_stop_routesr1,bus_stop_routesr2,bus_stopbs1,bus_stopbs2,bus_routebrwheresr1.RouteID=sr2.RouteIDandsr1.sIndexsr2.sIndexandsr1.StopID=(selectStopIDfrombus_stopwhereStopName=myStartStop)andsr2.StopID=(selectStopIDfrombus_stopwhereStopName=myEndStop)andbs1.StopID=sr1.StopIDandbs2.StopID=sr2.StopIDandbr.RouteID=sr1.RouteIDorderby(sr2.sIndex-sr1.sIndex)asc;end(2)InquiryT1(站点换乘查询一次换乘乘车方案要执行的一些对数据库的操作)createprocedureInquiryT1(myStartStopvarchar(32),myEndStopvarchar(32))begindroptableifexiststemp_once_s1;droptableifexiststemp_once;createtemporarytabletemp_once_s1selectr1.StartStopasStartStop,r1.RouteIDasRoute1,r1.EndStopasSwitch,r2.RouteIDasRoute2,r2.EndStopasEndStop,r1.StopCount+r2.StopCountasStopCountfrombus_RouteT0r1,bus_RouteT0r2wherer1.StartStop=(selectStopIDfrombus_stopwhereStopName=myStartStop)andr1.EndStop=r2.StartStopandr2.EndStop=(selectStopIDfrombus_stopwhereStopName=myEndStop);createtabletemp_onceselectbs1.StopNameasStartStop,rt1.RouteNameasRoute1,bs2.StopNameasSwitch,rt2.RouteNameasRoute2,bs3.StopNameasEndStop,ts1.StopCountasStopCountfrombus_stopbs1,bus_stopbs2,bus_stopbs3,bus_routert1,bus_routert2,temp_once_s1ts1wherets1.StartStop=bs1.StopIDandts1.Switch=bs2.StopIDandts1.EndStop=bs3.StopIDandts1.Route1=rt1.RouteIDandts1.Route2=rt2.RouteIDorderbyts1.StopCountasc;end(3)InquiryT2(站点换乘查询两次换乘乘车方案要执行的一些对数据库的操作)createprocedureInquiryT1(myStartStopvarchar(32),myEndStopvarchar(32))begindroptableifexiststemp_R1;droptableifexiststemp_R2;droptableifexiststemp_R3;droptableifexiststemp_twice_s1;droptableifexiststemp_twice_s2;droptableifexiststemp_twice;createtemporarytabletemp_R1select*frombus_GrouteT0whereStartStop=(selectStopIDfrombus_stopwhereStopName=myStartStop);createtemporarytabletemp_R3select*frombus_GrouteT0whereEndStop=(selectStopIDfrombus_stopwhereStopName=myEndStop);createtemporarytablete