公交查询系统源代码.docx
《公交查询系统源代码.docx》由会员分享,可在线阅读,更多相关《公交查询系统源代码.docx(25页珍藏版)》请在冰豆网上搜索。
![公交查询系统源代码.docx](https://file1.bdocx.com/fileroot1/2022-11/21/eb233d79-4265-415e-81f7-98fbb66e5d09/eb233d79-4265-415e-81f7-98fbb66e5d091.gif)
公交查询系统源代码
《公交车查询系统》实验报告
一、概述
1、项目背景
(1)我国城市公交查询系统的现状
我国城市公交查询系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。
我国公交查询系统的现状特点如下:
①乘客可以获得的公交信息很少,而且方式主要是常规手段。
我国乘客一般获得公交信息的方式局限于电话,交通图,向熟人问讯等常规方式。
乘客可以获得的公交信息很少,除去线路,站点等基本信息以外,有关班次,车辆到离站时间的信息基本上没有。
②乘客出行中获得信息困难,基本上没有实时信息。
除去在杭州,上海等少数几个城市,乘客可以通过分布于城市中的若干电子站牌获得一些公交车辆的运营信息以外,在其它城市“出行中”的乘客无法获得任何实时信息。
在我国一些城市中,有不少装饰华美的公交站台,但在这些站台上却找不到实用的城市交通图。
③缺乏专门的交通信息发布管理机构,乘客获得的信息准确性得不到保证。
目前,我国大多数城市对于交通信息的发布没有专门的管理机构和规章制度。
在城市交通信息服务需求小的情况下尚可应付。
但随着城市交通信息服务需求的增长,从事交通信息服务的人员和企业数量的增加,需要有专门的管理机构和制度。
当前的城市交通信息服务存在着混乱和低效的问题,有些甚至是对乘客的误导。
(2)我国城市公交查询系统的需求
随着人民生活水平的提高和城市的发展,平常人们出行的次数和范围都在增加,作为城市主动脉的公共交通承担着越来越繁重的运输任务也要与此相对应,公交的线路数量和投入运营的车辆数量也在迅猛增加,公交的服务时间延长,服务范围扩大。
服务质量提高,对人们的吸引力也在增强。
在油价上涨和能源短缺的今天,人们的出行将越来越依赖公共交通。
一般意义上,完整的出行问题是解决出发点到目的地的路径选优问题随着人们活动范围的扩大,乘公交出行往往也不可能一车到达,乘客从某一起点,可能需要一次或多次换乘才能到达目的地。
因此,如何选择最优的出行路线,即如何换乘、换乘几次,成为人们出行首要考虑的问题。
2、编写目的
随着计算机技术的迅速发展,推动了信息技术的广泛、深入地应用到人们生活的各个领域并发挥着越来越重要的作用。
计算机软件技术应用于信息管理是必然的趋势。
作为计算机应用的一部分,充分发挥计算机的优势,将大量复杂的数据交给计算机来处理,有着人工管理所无法比拟的优点。
如:
查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高信息管理的效率,是真正意义的合理利用资源,也是政府以及企事业管理科学化、正规化和世界接轨的重要条件。
公交车作为现代城市生活中一种重要的交通工具,在现代城市生活中尤其重要,公交线路繁多,数量也逐渐增多,这样使得人们的出行很不方便。
在这样的背景下,我们决定做公交查询系统,并以六安市公交数据为例,设计了公交查询系统,验证了一些算法的可行性。
该算法基于对经典的算法的学习和研究,沿用其关于求最短路径的思想,并加以对换乘次数,站点范围限制等内容的深入研究而提出的。
在利用算法设计的公交查询系统中,综合居民出行公交路线选择的问题,影响居民出行的多种因素,如换乘次数,出行时间,出行路程,出行花费,出行舒适程度等调查结果,将算法应用于公交查询系统中,形成该以最少换乘次数为第一目标,最短出行时间为第二目标的公交线路查询解决方案。
该方案能够在一定程度上解决人们出行公交路线选择的问题,使公众的出行更加通畅、快捷、便利。
3、软件定义
根据实际的需求,公交查询系统是一个在对公交乘客出行心理特征进行分析的基础上,考虑了乘客选择公交线路决策的因素,建立了基于时间价值的公交线路选择合理的模型,是一款面向广大城市出行用户的基于WEB的公交查询应用软件。
此软件系统提供了站点换乘查询、公交线路查询、公交站点查询等功能。
4、开发环境
操作系统:
WindowXPSP3
数据库:
MySql5.0
开发平台:
EditPlus3.0
数据库管理工具:
Navicat8
CPU:
AMDAthlon(tm)64X2Dual2.4GHz
内存:
2G
5、开发工具及技术简介
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))
begin
droptableifexiststemp_nochange;
createtabletemp_nochange
select
bs1.StopNameasStartStop,
bs2.StopNameasEndStop,
br.RouteNameasRoute,
sr2.sIndex-sr1.sIndexasStopCount
from
bus_stop_routesr1,
bus_stop_routesr2,
bus_stopbs1,
bus_stopbs2,
bus_routebr
where
sr1.RouteID=sr2.RouteID
andsr1.sIndexandsr1.StopID=(selectStopIDfrombus_stopwhereStopName=myStartStop)
andsr2.StopID=(selectStopIDfrombus_stopwhereStopName=myEndStop)
andbs1.StopID=sr1.StopID
andbs2.StopID=sr2.StopID
andbr.RouteID=sr1.RouteID
orderby(sr2.sIndex-sr1.sIndex)asc;
end
(2)InquiryT1(站点换乘查询一次换乘乘车方案要执行的一些对数据库的操作)
createprocedureInquiryT1(myStartStopvarchar(32),myEndStopvarchar(32))
begin
droptableifexiststemp_once_s1;
droptableifexiststemp_once;
createtemporarytabletemp_once_s1
select
r1.StartStopasStartStop,
r1.RouteIDasRoute1,
r1.EndStopasSwitch,
r2.RouteIDasRoute2,
r2.EndStopasEndStop,
r1.StopCount+r2.StopCountasStopCount
from
bus_RouteT0r1,
bus_RouteT0r2
where
r1.StartStop=(selectStopIDfrombus_stopwhereStopName=myStartStop)
andr1.EndStop=r2.StartStop
andr2.EndStop=(selectStopIDfrombus_stopwhereStopName=myEndStop);
createtabletemp_once
selectbs1.StopNameasStartStop,
rt1.RouteNameasRoute1,
bs2.StopNameasSwitch,
rt2.RouteNameasRoute2,
bs3.StopNameasEndStop,
ts1.StopCountasStopCount
frombus_stopbs1,bus_stopbs2,bus_stopbs3,bus_routert1,bus_routert2,temp_once_s1ts1
wherets1.StartStop=bs1.StopIDandts1.Switch=bs2.StopIDandts1.EndStop=bs3.StopIDandts1.Route1=rt1.RouteIDandts1.Route2=rt2.RouteID
orderbyts1.StopCountasc;
end
(3)InquiryT2(站点换乘查询两次换乘乘车方案要执行的一些对数据库的操作)
createprocedureInquiryT1(myStartStopvarchar(32),myEndStopvarchar(32))
begin
droptableifexiststemp_R1;
droptableifexiststemp_R2;
droptableifexiststemp_R3;
droptableifexiststemp_twice_s1;
droptableifexiststemp_twice_s2;
droptableifexiststemp_twice;
createtemporarytabletemp_R1
select*
frombus_GrouteT0
where
StartStop=(selectStopIDfrombus_stopwhereStopName=myStartStop);
createtemporarytabletemp_R3
select*
frombus_GrouteT0
where
EndStop=(selectStopIDfrombus_stopwhereStopName=myEndStop);
createtemporarytabletemp_twice_s1
select
temp_R1.StartStopasStartStop,
temp_R1.EndStopasSwitch1,
temp_R2.EndStopasSwitch2,
temp_R3.EndStopasEndStop,
(temp_R1.MinStopCount+temp_R2.MinStopCount+temp_R3.MinStopCount)asMinStopCount
fromtemp_R1,bus_GrouteT0temp_R2,temp_R3
where
temp_R1.EndStop=temp_R2.StartStopandtemp_R2.EndStop=temp_R3.StartStop;
createtemporarytabletemp_twice_s2
selectts1.StartStopasStartStop,
br0.RouteIDasRoute1,
ts1.Switch1asSwitch1,
br1.RouteIDasRoute2,
ts1.Switch2asSwitch2,
br2.RouteIDasRoute3,
ts1.EndStopasEndStop,
ts1.MinStopCountasMinStopCount
frombus_routet0br0,bus_routet0br1,bus_routet0br2,temp_twice_s1ts1
where
ts1.StartStop=br0.StartStopandts1.Switch1=br0.EndStopandts1.Switch1=br1.StartStopandts1.Switch2=br1.EndStopandts1.Switch2=br2.StartStopandts1.EndStop=br2.EndStop;
createtabletemp_twice
selectbs1.StopNameasStartStop,
r1.RouteNameasRoute1,
bs2.StopNameasSwitch1,
r2.RouteNameasRoute2,
bs3.StopNameasSwitch2,
r3.RouteNameasRoute3,
bs4.StopNameasEndStop,
ts2.MinStopCountasStopCount
frombus_stopbs1,bus_stopbs2,bus_stopbs3,bus_stopbs4,bus_router1,bus_router2,bus_router3,temp_twice_s2ts2
wherets2.StartStop=bs1.StopIDandts2.Switch1=bs2.StopIDandts2.Switch2=bs3.StopIDandts2.EndStop=bs4.StopIDandts2.Route1=r1.RouteIDandts2.Route2=r2.RouteIDandts2.Route3=r3.RouteID
orderbyts2.MinStopCountasc;
end
四、软件功能设计
1、站点换乘查询
输入起始站点和目的站点的名称,系统给出从起始站点到目的站点的乘车方案。
例:
查询从皖西学院本部至客运北站的乘车方案:
2、公交线路查询
输入欲查询的公交线路名称,系统给出该线路按顺序经过的所有站点名称。
例:
查询11路车经过的所有站点:
3、公交站点查询
输入欲查询的站点名称,系统给出经过该站点的所有公交线路名称。
例:
查询经过九墩塘的所有站点:
五、界面设计
1、站点换乘查询界面
2、公交线路查询界面
3、公交站点查询界面
六、结束语
这次软件技术实验,我们小组做的是“公交查询系统”,系统以整个六安市区的公交路线为数据来源,实现了对六安市区公交系统的站点换乘查询、公交线路查询、公交站点查询等功能。
以前我写程序时,如果需要对数据库进行操作,都是通过将数据库查询语句传递给PHP语言自带的函数对数据库进行操作,但是这次课程设计,数据库存储了整个六安市区的公交线路,信息量比较大,且需多次对数据库执行操作,所以执行效率需要被重点考虑,由此我想到了使用存储过程。
在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。
这种已经编译好的过程可极大地改善SQL语句的性能。
由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
并且它还可以降低网络的通信量,这对于B/S架构的系统来说同样很重要。
只是这点,就让我从这次课程设计中受益匪浅。
通过此次课程设计,使我们加深了对数据库理论的理解和数据库系统实现的方法的应用以及软件工程知识的理解。
掌握了数据库应用系统的设计与实现方法,提高了数据库应用系统的设计水平,以及分析问题和解决实际问题的能力。
实验中我们进一步巩固了对数据模型,ER图的设计与实现,视图、索引等概念的掌握,加深了对范式的理解,熟练了对SQL语言应用。
通过与指导老师的交流,接纳老师的意见对系统进行了反复测试与修改,让其更趋完善。
通过这个反复的过程,使我在关系型数据库理论方面有了崭新的认识和更深刻的体会,为以后的开发积累了更多的经验。
七、参考文献
【1】《数据库系统概论(第四版)》王珊、萨师煊高等教育出版社,2006.5.
【2】《PHP与MySQL程序设计(第3版)》W.JasonGilmori译者:
朱涛江人民邮电出版社2009.6
【3】《公共交通线路网多条最短路径算法》张国伍,钱大琳.
八、附:
源代码
1、config.php(功能说明:
存储一些在整个程序中要用到全局变量。
)
$hostname="localhost";
$db_user="root";
$db_password="faleier2046007";
$db_name="bus";
$table_Stop="bus_stop";
$table_Route="bus_route";
$table_Stop_Route="bus_stop_route";
$table_RouteT0="bus_routet0";
$table_GRouteT0="bus_groutet0";
$table_nochange="temp_nochange";
$table_once="temp_once";
$table_twice="temp_twice";
?
>
2、conn.php(功能说明:
实现与数据库的连接。
)
php
require_once"config.php";
@mysql_connect($hostname,$db_user,$db_password)
ordie("couldnotconnecttomysqlserver");
@mysql_select_db("$db_name")ordie("couldnotselectdatabase");
mysql_query("setcharactersetgb2312");
?
>
3、index.php(功能说明:
程序首页,查询输入界面。
)
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
六安公交查询系统
|
|
|
|
php require"conn.php"; $query_all_path="selectdistinct(RouteGenName)from$table_Route"; $info=mysql_query($query_all_path); while($it=mysql_fetch_array($info)) { echo"path=$it[RouteGenName]>".$it['RouteGenName']."".""; } ? > |
展开阅读全文
相关搜索