版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 公交线路乘车方案查询系统设计与实现一、实验目的开发一个信息更新及时、界面友好、查询优化的公交查询系统,系统具备的基本功能是:1、公交线路的数据输入与维护:线路的录入,修改,编辑功能;2、公交线路的查询:自动,快速,灵活的查询功能;3、乘车方案查询:起始站点线路查询,设定中转站点查询,最短路径查询功能。 在开发系统的过程中使学生能对以下知识进行巩固和扩充:1,数据库理论知识;应用数据库理论对具体问题具体分析,设计出合理的数据库结构。2,数据结构理论知识;根据具体问题提出合理的数据结构,并使用相应处理方法,理解图和和图相关的搜索算法。3,算法设计与分析理论知识;对于不同的查询优化算法进行分析,选
2、用合适的算法。4,程序设计理论知识;系统的最终实现需要编程环境,不同程序语言的选用可以更好的理解程序设计的相关知识。二、实验内容1、数据库结构设计;由于公交线路查询系统中所涉及的信息较多,它们之间的性质并不完全相同或者类似,势必造成信息冗余,但是为了系统提高查询速度和便利,可以牺牲存储空间,加快查询速度的方法。表8-1公交线路表(line)字段中文名字段英文名字段类型字段长度容许空路线编号line_idint4路线名称line_namevarchar50 始发车fristbusvarchar50末班车lastbusvarchar50站点1station1varchar50站点2station2
3、varchar50站点3station3varchar50varchar50varchar50varchar50站点45station45varchar50表8-2站点表(stop)字段中文名英文字段名字段类型长度容许空站点编号stop_idint4站点名称stop_namevarchar50表8-3路线站点表(linestops)字段中文名英文字段名字段类型长度容许空路线编号line_idint4站点编号stop_idint4标记ordint42、数据结构设计;1)通过程序将line表中的所有数据(站点)信息存放入一个一维数组中;2)编写程序再将该数组中所有相同的数据删除,这样就有了站点(s
4、top)表;3)将line表中的每条线路的站点一个一个记录下来存放入一个三列的二维数组中,如(1,火车站,1)表示:(线路编号:1;站名:火车站;线路所经站号:1);4)对二维数组的第二列值进行修改,参照stop表,将其字符全部换为stop_id。3、算法设计 ;1)起始站点查询算法第一步:查询经过这两个站点的所有公交线路,找出含有相同的线路编号的线路信息。第二步:判断以上查询中是否有满足要求的记录,若有,则记录两站点在线路中的位置,判断是否满足行驶方向的要求,通过定义一个数组,将线路信息中的线路名称,起始和目的站点名称以及两站点之间的站点个数存入数组并输出。若没有满足的记录,证明查询的站点之
5、间不能直达,线路需要转乘。第三步:查询出两站点之间所有线路的站点交集(中转站点),将这些站点存放入一个一维数组中,查询从起始站点到达中转站点的所有公交线路,将线路信息中的线路名称,起始和中转站点名称以及两站点之间的站点个数存入一个二维数组;再查询从中转站点到达目的站点的所有公交线路,将线路信息中的线路名称,中转站点和目的站点名称以及两站点之间的站点个数存入另一个二维数组。第四步:判断两组路线之间是否有相同的站点,相同的站点即为中转站,将转乘信息输出。2)指定中转站点查询算法:第一步:查询经过起始和中转站点的所有公交线路,将符合查询条件的线路信息中的线路名称,起始和中转站点名称以及两站点之间的站
6、点个数存入一个二维数组。第二步:再查询从中转站点到达目的站点的所有公交线路,将线路信息中的线路名称,中转站点和目的站点名称以及两站点之间的站点个数存入另一个二维数组。第三步:判断两组路线之间是否有相同的站点,相同的站点即为中转站,将转乘信息输出。3)最短路线查询算法最短路线查询算法的思想是在起始点查询的算法的基础上,是对站点之间的个数加入了一段比较着站点个数代码,通过三个临时变量,用于记录所有线路中的最短路径和两站点信息在数组中的位置,最后通过临时变量记录下来的信息,输出数组中相应位置的信息。4、开发平台选用本系统基于集成软件开发平台(Delphi)及数据库管理系统软件(SQL Server)
7、实现。三、实验器材1、PC机(已安装Delphi7.0和SQL Server2000) 1台 四、实验原理“乘车方案查询系统的设计与实现”数据流程是:将用户要查询的公交线路信息、进行条件查询,将查询结果在界面上显示。用户需要查询的公交线路信息的要求是:从数据库中查询每条满足用户要求的公交线路,包括每条线路的线路名称及经过的所有站点。录入的信息进行条件查询的要求是:利用算法算出最符合用户需求的公交线路,在所输入的条件没有直达车的情况下,系统会自动给予转乘方案。查询结果显示的要求是:直观、简单、快捷的输出每条满足条件的信息。1,公交线路网络特点道路网络一般是以交叉口为结点,各路段为弧段。对于公交网
8、络,同一条路段上可以由很多公交线路,并且,每条线路都有固定的行车线路和发出频率,乘客只能在具有相同站点的线路间换乘。因此,相对道路网络来说,公交网络更为复杂。其主要特点为:1)连通性:城市道路网络的连通性和公交网络的连通性含义不同。在道路网络中,道路交叉点连接着与该交叉口相连的多条路段,车辆在交叉点可以从一条路段进入另一条路段。在公交网络中,若几条不同公交线路经过空间上的同一站点,如果在该站点能够换车,则这几条公交线路是连通的,而且,换车存在换乘消耗,包括时间消耗、费用消耗等。另外多条公交线路虽然在空间上的同一点相交,但是该点不一定是公交站点,或不是同时有站点,此时,不同公交线路是不连通,的乘
9、客不能在该点换乘。2)节点的特性:由于公交车只能在行驶线路上的相应站点停靠,因此,不同的公交线路,其行驶线路在空间上可能有重叠,但停靠站点不可能完全重叠。实际上,公交乘客在换乘时通常要步行一段距离才能到达另外一条公交线路的站点,达到换乘的目的。此时,换乘的两条公交线路的站点并不重叠。因此,在进行公交网络建模时,要把空间上相近的不同线路上的站点,合理抽象成公交网络图上的相关节点,来模拟不同公交线之间的换车情况。公交车只能按既定的顺序停靠站点,每条公交线路都有规定的方向,因此,由实际公交网络抽象的拓扑网络图是一个有向图,在拓扑网络图上不同属性的边在节点处连通,表示乘客可以在该节点处换乘换。乘必须在
10、公交站点进行,不同公交线的站点在空间上并不一定完全相同,乘客在换乘时,一般需要步行一段距离,才能完成换乘。因此,需要将空间位置邻近的站点抽象成网络图中的一个节点。将公交站点抽象成网络节点后,接下来要做的工作是将公交线路的各站点间的路段抽象成网络图中的边。公交网络图是一个赋权有向图,边的权值可以是路段的长度、路段通行时间,或其它的含义。通常一条公交线路有两个行驶方向,当两个方向的行驶线路重合时,网络图上的节点在两个方向上各有一条出边和入边;当两个方向的行驶线路不重合时,网络图上的节点在每个方向上只有一条出边或入边。如果一个节点是多条公交线路的交汇点,则该节点处的边数等于各条公交线路在该节点处的出
11、边和入边之和。如图1,此公交网由7 各节点A、B、C、D、E、F、G;3 条线路L1:ABDEG;L2:BDEF;L3:CDEG。在公交网中经过节点B的线路是L1、L2在线路L1中B为第二站在线路L2中B为起始站节点B的入边数是1,出边数为2。图8-1 公交网络图例最短路径算法研究在设计最短路线算法时,考虑到公交线路的线路搜索与数据结构中赋权值图的搜索算法很相近,进行了相关资料和算法的研究。图是一些点和一些连接两点之间的连线所组成的图形的抽象,一个图由节点集边集,和节点与边的对应关系构成。设有图G, 对G中的每一条边(Vi,Vj),相应地有一个数L(Vi,Vj)称为边的权。图G连同在它边上的权
12、被称为赋权图。一条边的权也说成它的长。一条道路u=V1,V2,Vm的长是u上所有长的和,即L (V1, V2) +L (V2, V3) +L (Vm-1, Vm)。在赋权图中给定一个始点Vi及终点的所谓最短路径问题就是在(Vi,Vj)道路集合Pij中,寻求长为最小的路径,这样的路径称为从Vi到Vj的最短路径。从Vi到Vj的最短路径长度即最短距离记作d(Vi,Vj)。赋权图中的权可以表示两个顶点间的距离,或者途中所经的时间,或者交通费用等。此时路径长度的度量不是路径上边的数目,而是路径上边的权(距离、时间、费用等)之和。例如 图2每个顶点表示城市两个顶点构成的边表示两城市间的道路,边上的数字也就
13、是上面说的权表示两个城市之间的距离(公里),如果用汽车运输货物从A城到H城,司机就会考虑走路程最短的道路,那么最短路径是哪一条呢?应该是A-B-D-H, 而且最短距离d (A, H)=L (A, B)十L(B ,D )+ L (D,H )= 100+100+100=300公里。图8-2 赋权值图的最短路径 迪杰斯特拉(Dijksrta)最短路径算法寻找两顶点间的最短路径的算法很多,目前公认最好的算法是迪杰斯特拉(Dijksrta)在1959年提出的,它不仅求出从始点到终点的最短路径,而且最后所得到的实际上是始点到各顶点的最短路径。对 Dijkstra算法进行补充得出的步骤如下:第一步:初始化。
14、V=1,2 , N , S = F,D I=LF, I ,Y I=F,其中I=1,2, N。F表示路径的始点,I表示某一顶点,N表示网络中所有顶点的数目,V是所有顶点的集合,LF, I表示从F点到I点的距离,S是顶点的集合,D为N个元素的数组用来存储顶点F到其它顶点的最短距离,Y为N个元素的数组用来存储最短路径中在顶点I之前经过的最近顶点。第二步:从VS集合中找一个顶点T使得DT是最小值,并将T加入到S集合中。如果VS是空集合则结束运算。第三步:调整Y、D数组中的值:在VS集合中对于顶点T的邻接各顶点I,如果DI> DT+LI, T,那么令YI=T, DI=DT+LI, T。继续执行第二
15、步。Dijksrta最短路径算法由于其稳定性、能适应网络拓扑的变化,同时对系统的内存空间占用少,因而在计算机网络拓扑路径选择中得到广泛的应用。但是对公交线路来说,Dijkstra算法所采用的数据结构及其实现方法总体上说是比较复杂的,其缺点也是明显的,难以应付公交线路的网络拓扑中的复杂性。主要表现如下:(1)数据结构复杂;(2)算法时间长;(3)Dijksrta最短路径算法对于网络拓扑图要求简捷,对于复杂的公交网络拓扑,必须对其进行复杂的抽象、合并成简捷的网络拓扑图,这无疑增加了程序的复杂性。(4)公交转车中的特殊性并不一定要求用Dijkstra算法算出一条最短路径。求乘客从A站到B站的最短路径
16、,将每个公交站点均看作网络上的顶点,每相邻站点间的路段看作一条边,假设乘客每到一个公交站点都考虑转车,才可用Dijkstra算法计算最短路径。用Dijkstra算法计算出来的结果可能是:从A站到B站需要转好几次车或十几次车才能到达。这样的计算结果是没有什么意义的。五、实验步骤1、起始站点查询算法实现第一步:通过查询站点(stop)表,将用户输入的站点信息(stop_name)转换成站点编号(stop_id),以站点编号为条件,查询线路站点关联(linestops)表中对应的记录,并记录下它们的线路编号(line_id),对经过这两个站点的所以公交线路进行比较,记录下相同的线路编号;第二步:判断
17、以上查询中是否有满足要求的记录,若recordcount<>0,则记录两站点在线路中的位置,判断是否满足行驶方向的要求,通过定义一个数组,将线路信息中的线路名称,起始和目的站点名称以及两站点之间的站点个数存入数组并输出。若recordcount=0,证明查询的站点之间不能直达,需要转乘;第三步:查询出两站点之间所有线路的站点交集(中转站点),通过查询站点(stop)表,将用户输入的站点信息(stop_name)转换成站点编号(stop_id),这里定义为id1,id2;以它们为条件,搜寻线路站点关联(linestops)表中两个站点通过直达方式各自能够到达的站点集合,最后他们的交集
18、就是我们所需要的换乘站点,将这些站点存放入一个一维数组中;第四步:重复第一、二步的操作,查询从起始站点到达中转站点的所有公交线路,将线路信息中的线路名称,起始和中转站点名称以及两站点之间的站点个数存入一个二维数组;第五步:再重复第一、二步的操作,查询从中转站点到达目的站点的所有公交线路,将线路信息中的线路名称,中转站点和目的站点名称以及两站点之间的站点个数存入另一个二维数组。第六步:判断两组路线之间是否有相同的站点,相同的站点即为中转站,将转乘信息输出。主要代码:第一步:查询两站点之间在直达情况下的所有线路。select * from line where line_id in ( selec
19、t A.line_id from(select line_id from linestops where stop_id in (select stop_id as id1 from stop where stop_name=' edit1.text ') A,(select line_id from linestops where stop_id in (select stop_id as id2 from stop where stop_name=' edit2.text ') Bwhere A.line_id = B.line_id);第二步:输出线路名称
20、,起始和目的站点名称以及两站点之间的站点个数。if recordcount<>0 thenMyArrayP,3:=inttostr(y-x);MyArrayP,1:=edit1.Text;MyArrayP,2:=FieldValues'line_name'MyArrayP,4:=edit2.Text;P:=P+1; for i:=1 to P-1 dobeginmemo1.Lines.add(MyArrayi,1+'>>'+MyArrayi,2+'('+MyArrayi,3+'站'+')'+
21、'>>'+MyArrayi,4);end;第三步: 查询两站点之间不能直达的情况下,可选择的中转站点。select stop_name from stop where stop_id in(select A.stop_id from ( select distinct stop_id from linestops where line_id in (select line_id from linestops where stop_id in (select stop_id as id1 from stop where stop_name=' edit1.te
22、xt ')A, ( select distinct stop_id from linestops where line_id in (select line_id from linestops where stop_id in (select stop_id as id2 from stop where stop_name=' edit2.text ')B where A.stop_id = B.stop_id); /*得到中转站点名称*/第四步:重复第一、二步的操作,查询起点到中转站点的线路信息;第五步:重复第一、二步的操作,查询中转站到目的站点的线路信息;第六步:判
23、断两组路线之间是否有相同的中转站,将转乘信息输出。指定中转站点查询算法实现第一步:查询出两站点之间所有线路的站点交集(中转站点),通过查询站点(stop)表,将用户输入的站点信息(stop_name)转换成站点编号(stop_id),这里定义为id1,id2;以它们为条件,搜寻线路站点关联(linestops)表中两个站点通过直达方式各自能够到达的站点集合,最后他们的交集就是我们所需要的换乘站点,将这些站点存放入一个一维数组中;第二步:对从起点到中转站的线路进行查询,通过查询站点(stop)表,将用户输入的站点信息(stop_name)转换成站点编号(stop_id),以站点编号为条件,查询线路站点关联(linestops)表中对应的记录,并记录下它们的线路编号(line_id),对查询出的所有公交线路进行比较,将线路信息中的线路名称,起点和中转站名称以及两站点之间的站点个数存入一个二维数组;第三步:对从中转站到终点的线路进行查询,采用和第二步相同的操作,将线路信息中的线路名称,中转站和目的站点名称以及两站点之间的站点个数存入另一个二维数组;第四步:判断两组路线之间是否有相同的中转站,将转乘信息输出。最短路线查询算法实现最短路线查询算法的实现与起始站点查询算法的实现相似,只是在记录站点之间的个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育馆场地租赁合同要点
- 纺织服装行业个性化定制与柔性生产解决方案
- 服务业行业智能化酒店管理与客户服务方案
- 2024年大数据分析与应用咨询服务合同
- 2024年农业产业升级改造项目合同
- 农业行业农业精准农业与种植方案
- 农村个人房屋买卖合同
- 医院聘用医师合同
- 在线学习平台开发与服务协议
- 企业文化建设与团队管理指南
- 论辛弃疾词作的愁情主题及其审美价值
- 新形势下我国保险市场营销的现状、问题及对策
- LTE无线网络优化PPT课件
- 动态血压监测在社区高血压患者管理的意义
- 管道中英文对照表
- 240灯控台_说明书
- 新形势下加强市场监管局档案管理工作的策略
- 例行检查和确认检验程序
- 上海旅游资源基本类型及其旅游区布局特点(共5页)
- 六一汤_医方类聚卷一○二引_御医撮要_减法方剂树
- 准格尔旗协华煤矿技改设计资料
评论
0/150
提交评论