1、公交车查询系统实验报告一、概述1、项目背景(1)我国城市公交查询系统的现状我国城市公交查询系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。我国公交查询系统的现状特点如下:乘客可以获得的公交信息很少,而且方式主要是常规手段。我国乘客一般获得公交信息的方式局限于电话,交通图,向熟人问讯等常规方式。乘客可以获得的公交信息很少,除去线路,站点等基本信息以外,有关班次,车辆到离站时间的信息基本上没有。乘客出行中获得信息困难,基本上没有实时信息。除去在杭州,上海等少数几个城市,乘客可以通过分布于城市中的若干电子站牌
2、获得一些公交车辆的运营信息以外,在其它城市“出行中”的乘客无法获得任何实时信息。在我国一些城市中,有不少装饰华美的公交站台,但在这些站台上却找不到实用的城市交通图。缺乏专门的交通信息发布管理机构,乘客获得的信息准确性得不到保证。目前,我国大多数城市对于交通信息的发布没有专门的管理机构和规章制度。在城市交通信息服务需求小的情况下尚可应付。但随着城市交通信息服务需求的增长,从事交通信息服务的人员和企业数量的增加,需要有专门的管理机构和制度。当前的城市交通信息服务存在着混乱和低效的问题,有些甚至是对乘客的误导。(2)我国城市公交查询系统的需求随着人民生活水平的提高和城市的发展,平常人们出行的次数和范
3、围都在增加,作为城市主动脉的公共交通承担着越来越繁重的运输任务也要与此相对应,公交的线路数量和投入运营的车辆数量也在迅猛增加,公交的服务时间延长,服务范围扩大。服务质量提高,对人们的吸引力也在增强。在油价上涨和能源短缺的今天,人们的出行将越来越依赖公共交通。一般意义上,完整的出行问题是解决出发点到目的地的路径选优问题随着人们活动范围的扩大,乘公交出行往往也不可能一车到达,乘客从某一起点,可能需要一次或多次换乘才能到达目的地。因此,如何选择最优的出行路线,即如何换乘、换乘几次,成为人们出行首要考虑的问题。2、编写目的随着计算机技术的迅速发展,推动了信息技术的广泛、深入地应用到人们生活的各个领域并
4、发挥着越来越重要的作用。计算机软件技术应用于信息管理是必然的趋势。作为计算机应用的一部分,充分发挥计算机的优势,将大量复杂的数据交给计算机来处理,有着人工管理所无法比拟的优点。如:查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,是真正意义的合理利用资源,也是政府以及企事业管理科学化、正规化和世界接轨的重要条件。公交车作为现代城市生活中一种重要的交通工具,在现代城市生活中尤其重要,公交线路繁多,数量也逐渐增多,这样使得人们的出行很不方便。在这样的背景下,我们决定做公交查询系统,并以六安市公交数据为例,设计了公交查询系统,验证了一些算法的可行性。该算
5、法基于对经典的算法的学习和研究,沿用其关于求最短路径的思想,并加以对换乘次数,站点范围限制等内容的深入研究而提出的。在利用算法设计的公交查询系统中,综合居民出行公交路线选择的问题,影响居民出行的多种因素,如换乘次数,出行时间,出行路程,出行花费,出行舒适程度等调查结果,将算法应用于公交查询系统中,形成该以最少换乘次数为第一目标,最短出行时间为第二目标的公交线路查询解决方案。该方案能够在一定程度上解决人们出行公交路线选择的问题,使公众的出行更加通畅、快捷、便利。3、软件定义根据实际的需求,公交查询系统是一个在对公交乘客出行心理特征进行分析的基础上,考虑了乘客选择公交线路决策的因素,建立了基于时间
6、价值的公交线路选择合理的模型,是一款面向广大城市出行用户的基于 WEB 的公交查询应用软件。此软件系统提供了站点换乘查询、公交线路查询、公交站点查询等功能。4、开发环境操作系统:Window XP SP3数据库:MySql 5.0开发平台:EditPlus 3.0数据库管理工具:Navicat 8CPU:AMD Athlon(tm) 64 X2 Dual 2.4GHz内存:2G5、开发工具及技术简介PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入 HTML 文档的脚本语言,语言的风格有类似于 C 语言,现在被很多的网站编程人员广泛的运用。PHP 的特性包括:开放的源代码:所有
7、的 PHP 源代码事实上都可以得到,PHP 是免费的。php的便捷性 : php 十分便捷,学习简单。基于服务器端:由于 PHP 是运行在服务器端的脚本,可以运行在 UNIX、LINUX、WINDOWS 下。嵌入 HTML:因为 PHP可以嵌入 HTML 语言,所以学习起来并不困难。简单的语言:PHP 坚持脚本语言为主,与 Java 和 C+不同。效率高:PHP 消耗相当少的系统资源。图像处理:用 PHP 动态创建图像。面向对像:在 php4,php5 中,面向对象方面都有了很大的改进,现在 php 完全可以用来开发大型商业程序。PHP 相对于其他语言,编辑简单,实用性强,更适合初学者。二、需
8、求分析1、问题陈述通过对现实中的城市公交系统(六安市城市公交系统)的考察,得到第一手的资料。人们在面对选择众多的公交车以及公交线路的问题上的需要,公交查询系统主要解决的问题是人们在城市中不熟悉公交系统的问题。通过调查得出:设计一个公交查询系统需要解决人们对一个城市公交系统的整个的查询问题。如:站点换乘查询、公交线路查询、公交站点查询等功能。六安市公交站点(以 1 路公交车为例)如下:2、功能需求要设计一个良好的公交查询系统, 就必须首先明确该应用环境对系统的要求。城市公交查询系统是为了方便市民出行而设计的,因此,该系统需满足以下几方面需求:(1)站点换乘查询功能:能面向普通市民,通过普通的浏览
9、器提供按照站名查询的方式,给出起始站点至目的站点的换乘方案。(2)公交线路查询功能:通过普通的浏览器提供按照线路名称查询的方式,给出该线路按顺序经过的所有站点名称。(3)公交站点查询功能:通过普通的浏览器提供按照站点名称查询的方式,输出经过该站点的所有公交线路名称。结合上述需求对系统功能设计的要求分析以及对功能模块的划分,从而分析出数据库的数据项。3、E-R 模型图站点作为一个实体线路作为一个实体公交查询系统的基本 E-R 图三、数据库逻辑设计1、关系表2、表描述(1)表 bus_Stop字段 StopID 为主键,存储站点的编号,字段 StopName 用来存储站点的名称(如:皖西学院本部)
10、,字段 FirstLetter 字段用来存储站点的首写字母。(2)表 bus_Route字段 RouteID 为主键,存储线路的编号,字段 RouteName 用来存储线路的名称(如:11 路(上行),字段 RouteGenName 字段用来存储线路的根名称(如 11 路)。(3)表 bus_Stop_Route字段 StopID、RouteID、sIndex 为主键,StopID 存储站点的编号,字段RouteID 用来存储线路的编号,字段 sIndex 字段用来存储站点在该线路中按顺序的编号。3、存储过程(1) InquiryT0(站点换乘查询直达乘车方案要执行的一些对数据库的操作)cre
11、ate procedure InquiryT0(myStartStop varchar(32),myEndStop varchar(32)begindrop table if exists temp_nochange;create table temp_nochangeselectbs1.StopName as StartStop,bs2.StopName as EndStop,br.RouteName as Route,sr2.sIndex-sr1.sIndex as StopCountfrombus_stop_route sr1,bus_stop_route sr2,bus_stop bs
12、1,bus_stop bs2,bus_route brwheresr1.RouteID=sr2.RouteIDand sr1.sIndexsr2.sIndexand sr1.StopID=(select StopID from bus_stop where StopName=myStartStop)and sr2.StopID=(select StopID from bus_stop where StopName=myEndStop)and bs1.StopID=sr1.StopIDand bs2.StopID=sr2.StopIDand br.RouteID=sr1.RouteIDorder
13、 by (sr2.sIndex-sr1.sIndex) asc;end(2) InquiryT1(站点换乘查询一次换乘乘车方案要执行的一些对数据库的操作)create procedure InquiryT1(myStartStop varchar(32),myEndStop varchar(32)begindrop table if exists temp_once_s1;drop table if exists temp_once;create temporary table temp_once_s1selectr1.StartStop as StartStop,r1.RouteID as
14、Route1,r1.EndStop as Switch,r2.RouteID as Route2,r2.EndStop as EndStop,r1.StopCount+r2.StopCount as StopCountfrombus_RouteT0 r1,bus_RouteT0 r2wherer1.StartStop=(select StopID from bus_stop where StopName=myStartStop)and r1.EndStop=r2.StartStopand r2.EndStop=(select StopID from bus_stop where StopNam
15、e=myEndStop);create table temp_onceselect bs1.StopName as StartStop,rt1.RouteName as Route1,bs2.StopName as Switch,rt2.RouteName as Route2,bs3.StopName as EndStop,ts1.StopCount as StopCountfrom bus_stop bs1,bus_stop bs2,bus_stop bs3,bus_route rt1,bus_route rt2,temp_once_s1 ts1where ts1.StartStop=bs1
16、.StopID and ts1.Switch=bs2.StopID and ts1.EndStop=bs3.StopID and ts1.Route1=rt1.RouteID and ts1.Route2=rt2.RouteIDorder by ts1.StopCount asc;end(3) InquiryT2(站点换乘查询两次换乘乘车方案要执行的一些对数据库的操作)create procedure InquiryT1(myStartStop varchar(32),myEndStop varchar(32)begindrop table if exists temp_R1;drop tab
17、le if exists temp_R2;drop table if exists temp_R3;drop table if exists temp_twice_s1;drop table if exists temp_twice_s2;drop table if exists temp_twice;create temporary table temp_R1select *from bus_GrouteT0whereStartStop =(select StopID from bus_stop where StopName=myStartStop);create temporary tab
18、le temp_R3select *from bus_GrouteT0whereEndStop =(select StopID from bus_stop where StopName=myEndStop);create temporary table temp_twice_s1selecttemp_R1.StartStop as StartStop,temp_R1.EndStop as Switch1,temp_R2.EndStop as Switch2,temp_R3.EndStop as EndStop,(temp_R1.MinStopCount+temp_R2.MinStopCount
19、+temp_R3.MinStopCount) as MinStopCountfrom temp_R1,bus_GrouteT0 temp_R2,temp_R3wheretemp_R1.EndStop=temp_R2.StartStop and temp_R2.EndStop=temp_R3.StartStop;create temporary table temp_twice_s2select ts1.StartStop as StartStop,br0.RouteID as Route1,ts1.Switch1 as Switch1,br1.RouteID as Route2,ts1.Swi
20、tch2 as Switch2,br2.RouteID as Route3,ts1.EndStop as EndStop,ts1.MinStopCount as MinStopCountfrom bus_routet0 br0,bus_routet0 br1,bus_routet0 br2,temp_twice_s1 ts1wherets1.StartStop=br0.StartStop and ts1.Switch1=br0.EndStop and ts1.Switch1=br1.StartStop and ts1.Switch2=br1.EndStop and ts1.Switch2=br
21、2.StartStop and ts1.EndStop=br2.EndStop;create table temp_twiceselect bs1.StopName as StartStop,r1.RouteName as Route1,bs2.StopName as Switch1,r2.RouteName as Route2,bs3.StopName as Switch2,r3.RouteName as Route3,bs4.StopName as EndStop,ts2.MinStopCount as StopCountfrom bus_stop bs1,bus_stop bs2,bus
22、_stop bs3,bus_stop bs4,bus_route r1,bus_route r2,bus_route r3,temp_twice_s2 ts2where ts2.StartStop=bs1.StopID and ts2.Switch1=bs2.StopID and ts2.Switch2=bs3.StopID and ts2.EndStop=bs4.StopID and ts2.Route1=r1.RouteID and ts2.Route2=r2.RouteID and ts2.Route3=r3.RouteIDorder by ts2.MinStopCount asc;end四、软件功能设计公交车查询系统站点换乘查询 公交线路查询 公交站点查询公交车查询系统软件功能图1、站点换乘查询输入起始站点和目的站点的名称,系统给出从起始站点到目的站点的乘车方案。例:查询从 皖西学院本部 至 客运北站 的乘车方案:2、公交线路查询输入欲查询的公交线路名称,系统给出该线路按顺序经过的所有站点名称。例:查询 11 路车 经过的所有站点: