公交车路线查询系统后台数据库设计--查询算法
来源:互联网 发布:海盗湾中文域名 编辑:程序博客网 时间:2024/04/18 21:17
转:http://www.cnblogs.com/lucc/archive/2009/02/11/1388684.html
1. 公交车路线信息在数据库中的存储方式
显然,如果在数据库中简单的使用表bus_route(路线名,路线经过的站点,费用)来保存公交车路线的线路信息,则很难使用查询语句实现乘车线路查询,因此,应该对线路的信息进行处理后再保存到数据库中,笔者使用的方法是用站点-路线关系表stop_route(站点,路线名,站点在路线中的位置)来存储公交车路线,例如,如果有以下3条路线
R1: S1->S2->S3->S4->S5
R2: S6->S7->S2->S8
R3: S8->S9->S10
则对应的站点-路线关系表stop_route为
Stop
Route
Position
S1
R1
1
S2
R1
2
S3
R1
3
S4
R1
4
S5
R1
5
S6
R2
1
S7
R2
2
S2
R2
3
S8
R2
4
S8
R3
1
S9
R3
2
S10
R3
3
注:Stop为站点名,Route为路线名,Position为站点在路线中的位置
2.直达乘车路线查询算法
基于表stop_route可以很方便实现直达乘车路线的查询,以下是用于查询直达乘车路线的存储过程InquiryT0:
3.查询换乘路线算法
(1)直达路线视图
直达路线视图可以理解为一张存储了所有直达路线的表(如果两个站点之间存在直达路线,那么在直达路线视图中就有一行与之相对应)。例如R1,R2,R3对应的RouteT0如下:
起点
终点
乘坐路线
站点数
S3
S4
R1
1
S3
S5
R1
2
S4
S5
R1
1
S1
S2
R1
1
S1
S3
R1
2
S1
S4
R1
3
S1
S5
R1
4
S2
S3
R1
1
S2
S4
R1
2
S2
S5
R1
3
S2
S8
R2
1
S6
S2
R2
2
S6
S7
R2
1
S6
S8
R2
3
S7
S2
R2
1
S7
S8
R2
2
S8
S10
R3
2
S8
S9
R3
1
S9
S10
R3
1
RouteT0定义如下:
(2)换乘路线算法
显然,一条换乘路线由若干段直达路线组成(每段路线的终点与下一段路线的起点相同),因此,基于直达路线视图RouteT0可以很方便实现换乘查询,以下是实现一次换乘查询的存储过程InquiryT1:
同理可以得到二次换乘的查询语句
4.测试
运行结果:
- 公交车路线查询系统后台数据库设计——查询算法
- 公交车路线查询系统后台数据库设计——查询算法
- 公交车路线查询系统后台数据库设计--查询算法
- 公交车路线查询系统后台数据库设计
- 公交车路线查询系统后台数据库设计—路线查询
- 公交车路线查询系统后台数据库设计--引入步行路线
- 公交车路线查询系统后台数据库设计--关联地名和站点
- 公交车路线查询系统后台数据库设计——换乘算法改进与优化
- 公交车路线查询系统后台数据库设计--换乘算法改进与优化
- 公交车路线查询系统后台数据库设计—关联地名和站点
- 公交车路线查询系统后台数据库设计——关联地名和站点
- 【编程总结】公交车路线管理与查询系统
- 公交车线路查询系统
- 公交车查询系统
- 公交车线路查询系统
- 公交车查询的数据库设计
- 公交车查询系统(20070719更新)
- SQL-公交车线路查询系统
- Cxgrid列表加一列序号
- MuleESB--简介
- Thrift示例分析
- 使用EF框架实现MVC的增删改查功能!!!Entity Framework
- zoj 3326
- 公交车路线查询系统后台数据库设计--查询算法
- 最小生成树--普里姆算法(Prim)
- 今天开始,进军响应式开发和THML5
- BZOJ-3110-K大数查询-ZJOI2013-暴力
- python高级特性
- MicroSoft Visual Studio2012配置OpenGl
- iOS传值(block传值)
- activiti-explorer.war部署tomcat报 “Context [/activiti-explorer] startup failed due to previous errors”
- 0-1背包问题与完全背包问题C++实现 动态规划