1、公交查询系统源代码公交车查询系统实验报告一、概述1、项目背景(1)我国城市公交查询系统的现状我国城市公交查询系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。我国公交查询系统的现状特点如下:乘客可以获得的公交信息很少,而且方式主要是常规手段。我国乘客一般获得公交信息的方式局限于电话,交通图,向熟人问讯等常规方式。乘客可以获得的公交信息很少,除去线路,站点等基本信息以外,有关班次,车辆到离站时间的信息基本上没有。乘客出行中获得信息困难,基本上没有实时信息。除去在杭州,上海等少数几个城市,乘客可以通过分布于城
2、市中的若干电子站牌获得一些公交车辆的运营信息以外,在其它城市“出行中”的乘客无法获得任何实时信息。在我国一些城市中,有不少装饰华美的公交站台,但在这些站台上却找不到实用的城市交通图。缺乏专门的交通信息发布管理机构,乘客获得的信息准确性得不到保证。目前,我国大多数城市对于交通信息的发布没有专门的管理机构和规章制度。在城市交通信息服务需求小的情况下尚可应付。但随着城市交通信息服务需求的增长,从事交通信息服务的人员和企业数量的增加,需要有专门的管理机构和制度。当前的城市交通信息服务存在着混乱和低效的问题,有些甚至是对乘客的误导。(2)我国城市公交查询系统的需求随着人民生活水平的提高和城市的发展,平常
3、人们出行的次数和范围都在增加,作为城市主动脉的公共交通承担着越来越繁重的运输任务也要与此相对应,公交的线路数量和投入运营的车辆数量也在迅猛增加,公交的服务时间延长,服务范围扩大。服务质量提高,对人们的吸引力也在增强。在油价上涨和能源短缺的今天,人们的出行将越来越依赖公共交通。一般意义上,完整的出行问题是解决出发点到目的地的路径选优问题随着人们活动范围的扩大,乘公交出行往往也不可能一车到达,乘客从某一起点,可能需要一次或多次换乘才能到达目的地。因此,如何选择最优的出行路线,即如何换乘、换乘几次,成为人们出行首要考虑的问题。2、编写目的随着计算机技术的迅速发展,推动了信息技术的广泛、深入地应用到人
4、们生活的各个领域并发挥着越来越重要的作用。计算机软件技术应用于信息管理是必然的趋势。作为计算机应用的一部分,充分发挥计算机的优势,将大量复杂的数据交给计算机来处理,有着人工管理所无法比拟的优点。如:查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,是真正意义的合理利用资源,也是政府以及企事业管理科学化、正规化和世界接轨的重要条件。公交车作为现代城市生活中一种重要的交通工具,在现代城市生活中尤其重要,公交线路繁多,数量也逐渐增多,这样使得人们的出行很不方便。在这样的背景下,我们决定做公交查询系统,并以六安市公交数据为例,设计了公交查询系统,验证了一些
5、算法的可行性。该算法基于对经典的算法的学习和研究,沿用其关于求最短路径的思想,并加以对换乘次数,站点范围限制等内容的深入研究而提出的。在利用算法设计的公交查询系统中,综合居民出行公交路线选择的问题,影响居民出行的多种因素,如换乘次数,出行时间,出行路程,出行花费,出行舒适程度等调查结果,将算法应用于公交查询系统中,形成该以最少换乘次数为第一目标,最短出行时间为第二目标的公交线路查询解决方案。该方案能够在一定程度上解决人们出行公交路线选择的问题,使公众的出行更加通畅、快捷、便利。3、软件定义根据实际的需求,公交查询系统是一个在对公交乘客出行心理特征进行分析的基础上,考虑了乘客选择公交线路决策的因
6、素,建立了基于时间价值的公交线路选择合理的模型,是一款面向广大城市出行用户的基于WEB的公交查询应用软件。此软件系统提供了站点换乘查询、公交线路查询、公交站点查询等功能。4、开发环境 操作系统:Window XP SP3数据库:MySql 5.0开发平台:EditPlus 3.0数据库管理工具:Navicat 8 CPU: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 相对于其他语言,编辑简单,实用性强,更适合初学者。二、需求分析1、问题陈述通过对现实中的城市
8、公交系统(六安市城市公交系统)的考察,得到第一手的资料。人们在面对选择众多的公交车以及公交线路的问题上的需要,公交查询系统主要解决的问题是人们在城市中不熟悉公交系统的问题。通过调查得出:设计一个公交查询系统需要解决人们对一个城市公交系统的整个的查询问题。如:站点换乘查询、公交线路查询、公交站点查询等功能。六安市公交站点(以1路公交车为例)如下:2、功能需求要设计一个良好的公交查询系统, 就必须首先明确该应用环境对系统的要求。城市公交查询系统是为了方便市民出行而设计的,因此,该系统需满足以下几方面需求:(1)站点换乘查询功能:能面向普通市民,通过普通的浏览器提供按照站名查询的方式,给出起始站点至
9、目的站点的换乘方案。(2)公交线路查询功能:通过普通的浏览器提供按照线路名称查询的方式,给出该线路按顺序经过的所有站点名称。(3)公交站点查询功能:通过普通的浏览器提供按照站点名称查询的方式,输出经过该站点的所有公交线路名称。结合上述需求对系统功能设计的要求分析以及对功能模块的划分,从而分析出数据库的数据项。3、E-R模型图站点作为一个实体线路作为一个实体公交查询系统的基本E-R图三、数据库逻辑设计1、关系表2、表描述(1)表bus_Stop字段StopID为主键,存储站点的编号,字段StopName用来存储站点的名称(如:皖西学院本部),字段FirstLetter字段用来存储站点的首写字母。
10、(2)表bus_Route字段RouteID为主键,存储线路的编号,字段RouteName用来存储线路的名称(如:11路(上行),字段RouteGenName字段用来存储线路的根名称(如11路)。(3)表bus_Stop_Route字段StopID、RouteID、sIndex为主键,StopID存储站点的编号,字段RouteID用来存储线路的编号,字段sIndex字段用来存储站点在该线路中按顺序的编号。3、存储过程(1) InquiryT0(站点换乘查询直达乘车方案要执行的一些对数据库的操作)create procedure InquiryT0(myStartStop varchar(32)
11、,myEndStop varchar(32)begindrop table if exists temp_nochange; create table temp_nochange select bs1.StopName as StartStop, bs2.StopName as EndStop, br.RouteName as Route, sr2.sIndex-sr1.sIndex as StopCount from bus_stop_route sr1, bus_stop_route sr2, bus_stop bs1, bus_stop bs2, bus_route br where s
12、r1.RouteID=sr2.RouteID and sr1.sIndexsr2.sIndex and 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.StopID and bs2.StopID=sr2.StopID and br.RouteID=sr1.RouteID order by (sr2.sIndex-sr1.sIndex
13、) asc;end(2) InquiryT1(站点换乘查询一次换乘乘车方案要执行的一些对数据库的操作)create procedure InquiryT1(myStartStop varchar(32),myEndStop varchar(32)begin drop table if exists temp_once_s1; drop table if exists temp_once; create temporary table temp_once_s1 select r1.StartStop as StartStop, r1.RouteID as Route1, r1.EndStop a
14、s Switch, r2.RouteID as Route2, r2.EndStop as EndStop, r1.StopCount+r2.StopCount as StopCount from bus_RouteT0 r1, bus_RouteT0 r2 where r1.StartStop=(select StopID from bus_stop where StopName=myStartStop) and r1.EndStop=r2.StartStop and r2.EndStop=(select StopID from bus_stop where StopName=myEndSt
15、op);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.Sto
16、pID 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 table i
17、f 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 table
18、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+t
19、emp_R3.MinStopCount) as MinStopCount from 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.
20、Switch2 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.Swit
21、ch2=br2.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
22、_stop bs2,bus_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.MinSto
23、pCount asc;end四、软件功能设计1、站点换乘查询输入起始站点和目的站点的名称,系统给出从起始站点到目的站点的乘车方案。例:查询从 皖西学院本部 至 客运北站 的乘车方案:2、公交线路查询 输入欲查询的公交线路名称,系统给出该线路按顺序经过的所有站点名称。例:查询 11路车 经过的所有站点:3、公交站点查询 输入欲查询的站点名称,系统给出经过该站点的所有公交线路名称。例:查询经过 九墩塘 的所有站点:五、界面设计1、站点换乘查询界面2、公交线路查询界面3、公交站点查询界面六、结束语这次软件技术实验,我们小组做的是“公交查询系统”,系统以整个六安市区的公交路线为数据来源,实现了对六安市
24、区公交系统的站点换乘查询、公交线路查询、公交站点查询等功能。以前我写程序时,如果需要对数据库进行操作,都是通过将数据库查询语句传递给PHP语言自带的函数对数据库进行操作,但是这次课程设计,数据库存储了整个六安市区的公交线路,信息量比较大,且需多次对数据库执行操作,所以执行效率需要被重点考虑,由此我想到了使用存储过程。在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。并且它还可以降低网络的通信量,这对于B/S架构的系统来说同样很重要。只是这点,就让我从
25、这次课程设计中受益匪浅。通过此次课程设计,使我们加深了对数据库理论的理解和数据库系统实现的方法的应用以及软件工程知识的理解。掌握了数据库应用系统的设计与实现方法,提高了数据库应用系统的设计水平,以及分析问题和解决实际问题的能力。实验中我们进一步巩固了对数据模型,ER图的设计与实现,视图、索引等概念的掌握,加深了对范式的理解,熟练了对SQL语言应用。通过与指导老师的交流,接纳老师的意见对系统进行了反复测试与修改,让其更趋完善。通过这个反复的过程,使我在关系型数据库理论方面有了崭新的认识和更深刻的体会,为以后的开发积累了更多的经验。七、参考文献【1】 数据库系统概论(第四版) 王珊、萨师煊 高等教
26、育出版社,2006.5.【2】PHP与MySQL程序设计(第3版)W.Jason Gilmori 译者:朱涛江 人民邮电出版社 2009.6【3】公共交通线路网多条最短路径算法 张国伍,钱大琳.八、附:源代码1、config.php(功能说明:存储一些在整个程序中要用到全局变量。)2、conn.php(功能说明:实现与数据库的连接。)3、index.php(功能说明:程序首页,查询输入界面。) 六安公交查询系统 ?phprequire conn.php;$query_all_path=select distinct(RouteGenName) from $table_Route;$info=mysql_query($query_all_path);while($it=mysql_fetch_array($info) echo .$itRouteGenName. ;?td width=381 row
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1