Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

公交换乘系统

Fu Hantians  发表于:2011-05-12 10:28:51  
复制

12个城市,8342条线路,想做个查询系统。

 

按“站名”或“线路号”查询应该是非常简单的事情,但是“换乘”查询就比较麻烦,比如最多三条线路的换乘,如何实现啊?哪位大侠帮帮忙,呵呵。

 

p.s.:附件中只是数据,没有做窗体,哪位大侠来吧?

 

点击下载此附件

 

Top
煮江品茶 发表于:2011-05-12 10:37:34
这个问题有点意思。

aslxt 发表于:2011-05-12 18:10:48

确实很有意思

大概想了一下,表结构要改为线路表【城市,类型,ID,线路,...,备注】、站点表【ID,线路ID,站号,站点,备注】这样的结构,其中ID为自动编号或主键,线路表的“ID”和站点表的“线路ID”为一对多的关系。查询思路:

1、首先查询经过某城市某出发地的车次,会有很多记录;

2、其次查询经过某城市某目的地的车次,同样也会有很多记录;

3、如果上述1、2两个查询有交集(即共同的线路ID),且出发地的站号小于目的地的站号,就是直达线路。站号表达的是某路公共汽车从起点到终点的每个站的顺序,1、2、3...。这是站号的一个用途。

4、如果上述1、2两个查询没有交集(即共同的线路ID),说明没有直达的公车线路。这是最麻烦的地方:

1)循环查询经过某城市某出发地的车次的下一个站点,是否与某城市某目的地的车次的上一个站点相同,直至出发车次的终点和目的地车次的起点,如果存在相同的站点,就是一次转车的结果。否则进行下一步。

2)循环查询经过某城市某目的地的车次的上一个站点和经过某城市某出发地的车次的下一个站点,是否有相同的新的线路ID,如果有相同的新的线路id,就是二次转车的结果,否则进行下一步。下一步是嵌套1)的查询。

可否?请高手指教!



煮江品茶 发表于:2011-05-12 18:24:49
aslxt 发表于:2011-05-12 21:46:33

楼上管理员的实例很好,可惜没有实现类似导航(输入起点和终点站,自动列出换乘站点和公交线路)那样的查询?



学习者 发表于:2011-05-13 06:43:44
先拿去看看   昨天出去有事了    晚上没逛帖子!

Fu Hantians 发表于:2011-05-13 14:16:09

煮江老师做的挺好了,但查询起来还是不方便。另外就是,站站换乘的功能没有实现。

还有就是,能将您的站序/站名拆分的源码发一下吗?



煮江品茶 发表于:2011-05-13 18:05:44

Fu Hantians同志:

1、数据拆分的代码没有保留,其基本方法就是用Split函数进行分解。你可以尝试着做一下,不是很难。

2、站站查询中直达查询比较简单,换乘查询就异常复杂了。而且换乘查询运算的数据量特别大,似乎还需要用递归的方法解决,就Access本身的运算能力看,大概不能满足需要。换乘查询中有一种叫做枢纽站换乘查询的方法相对简单一些,不过查询的结果不能覆盖非枢纽站换乘的情形。

  就此问题来看,如果假设查询人对城市的大体情况熟悉的话,可以将人的判断与计算机的判断结合起来进行,这样程序可以简化很多。



总记录:7篇  页次:1/1 9 1 :