6 各功能模块的详细说明 内容来自www.paper51.com
6.1 查询模块功能设计 http://www.paper51.com 本模块机能是从数据库中,根据所要求的查询条件以及查询方法,在数据库中进行交通信息的查询和筛选,并以表格的方式表现出来。查询的总体思路为: 内容来自www.paper51.com 由于交通班次具有方向性,所以在交通关系表中特别设定了stops关键字,用来存放交通信息的到达顺序,并且在每次查询的时候都加入查询条件start.stops<end.stops,这样就能保证每条查询出的交通路线都具有正确的方向性,以及避免了交通路线重复的情况。而查询的总体思路是把城市作为结点,交通关系作为通路来构成连通的有向图,然后用广度优先的方法进行遍历为基础。为了提高查询效率,在构造查询的时候,又是以起点和终点的结点构造个子的最小生成树,通过查找其交叉结点或通路,我们就可以得到我们的查询结果。 http://www.paper51.com 在查询系统的主页面中,将要查询的信息输入文本,并选择方法提交以后,查询系统将输入的信息存入session变量中,并根据不同的查询方法和种类,跳转到不同的页面进行处理。查询主页面的主要输入页面如下: 内容来自www.paper51.com
图9 查询主界面 内容来自www.paper51.com 根据查询的方法和种类不同,查询共分为6个部分: paper51.com
6.1.1 直达查询 copyright paper51.com
在直达查询中,可以查询到从起点城市出发到终点城市,可以乘坐的交通工具基本信息,以及起点城市的出发时间、终点城市到达时间、其间该班次可能经过的城市的到达时间和出发时间。 内容来自www.paper51.com
通过查询总体思路的派生,直达查询的主要查询方法简化为以起点城市和终点城市作为结点,查询出连通该2个结点的通路,该通路即为我们需要查询的交通路线。当用户以直达查询提交以后,系统将会跳转到chaxun.aspx页面。在打开chaxun.aspx页面后,后台将用以存入session变量中的起点城市和终点城市来查询数据库,并测试有无符合条件的交通工具,其SQL语句为: 内容来自论文无忧网 www.paper51.com select a.tid,b.gotime,a.gettime,b.stops as stopsb,a.stops asstopsa from copyright paper51.com //将所有经过终点城市的车信息作为子集合 http://www.paper51.com (select * from buswhere cityid=(select cityid from ctxx where cityname=@ends))A, copyright paper51.com //将所有经过起点城市的车的信息作为子集B copyright paper51.com
(select * from bus where cityid=(select cityid from ctxx wherecityname=@start))B 内容来自论文无忧网 www.paper51.com
whereA.stops>B.stops and a.tid=b.tid 内容来自论文无忧网 www.paper51.com 当查询到交通路线时,进行需要返回的相关信息查询并显示;若没有,则返回“无班次到达”的结果,并输出超连接,可连接到chaxun2.aspx页面进行一次转乘查询。 内容来自www.paper51.com 6.1.2 一次转乘查询 http://www.paper51.com
在一次转乘查询中,可以查询到从起点城市出发到终点城市,其间要经过的一个城市,以及要乘坐的2个交通工具的基本信息和中转城市的到达时间以及出发时间。 copyright paper51.com 通过查询总体思路的派生,一次转乘查询的主要查询方法简化为以起点城市和终点城市作为结点,分别查询出连通该2个结点的通路,然后在这些通路的基础上,查找他们交汇的结点,此时,这些结点就为我们一次转乘的中转城市,而分别连通起点和终点结点的通路即为我们需要查询的交通路线。当用户以一次转乘查询提交或者在直达查询后通过超连接跳转到chaxun2.aspx页面。在chaxun2.aspx中,后台首先测试其中转城市是否存在,其SQL语句为: copyright paper51.com select cityid,cityname from ctxx where cityid in http://www.paper51.com
// 将所有经过起点城市的交通信息作为子集a paper51.com (select b.cityid from (select * from bus where cityid=(select cityidfrom ctxx where cityname=@start))a, copyright paper51.com //将所有经过起点城市的车的信息(主要查询到达城市)作为子集b 内容来自论文无忧网 www.paper51.com (select * from buswhere tid in(select tid from bus where cityid=(select cityid from ctxx wherecityname=@start)))b, copyright paper51.com //将所有经过终点城市的车的信息(主要查询到达城市)作为子集c paper51.com (select * from buswhere tid in(select tid from bus where cityid=(select cityid from ctxx wherecityname=@ends)))c, 内容来自www.paper51.com
//将所有经过终点城市的交通信息作为子集d http://www.paper51.com
(select * from buswhere cityid=(select cityid from ctxx where cityname=@ends))d 内容来自论文无忧网 www.paper51.com //起点和终点能到达的城市中相同的城市 http://www.paper51.com where A.stops <B.stops and a.tid=b.tid and c.stops < d.stops and c.tid=d.tid and b.cityid=c.cityid) 内容来自论文无忧网 www.paper51.com 若存在,则首先查询出中转城市名,即我们查询出通路的交叉结点,用dataset对象的table属性将返回结果保存起来。然后利用for循环,每次循环首先输出起点到中转城市的交通信息,然后再输出中转城市到终点城市的交通信息。 内容来自论文无忧网 www.paper51.com 否则返回“无班次到达”的结果,并输出超连接,转到2转查询的chaxun3.aspx页面。 内容来自论文无忧网 www.paper51.com 6.1.3 二次转乘查询 paper51.com 在二次转乘查询中,可以查询到从起点城市出发到终点城市,其间要经过的2个城市,以及要乘坐的3个交通工具的基本信息和中转城市的到达时间以及出发时间。 paper51.com 通过查询总体思路的派生,二次转乘查询的主要查询方法简化为以起点城市和终点城市作为结点,分别查询出连通该2个结点的所有通路。再利用集合的方法,将连通起点城市结点的通路连通的所有城市设为集合A,将连通终点城市结点的通路连通的所有城市设为集合B,这样,我们就只需要将集合A的城市作为起点结点,将集合B的城市作为终结点,进行直达查询算法,若查询有结果,就表示我们二次转乘查询成功。为了不让我们的查询结果中出现循环的现象,在查询条件中还需要加上所有的中转城市与起点和终点城市不相同的条件。 copyright paper51.com
进入chaxun3.aspx页面后,还是进行查询结果测试,其SQL语句为: 内容来自www.paper51.com select a.cityid, b.tid,b.cityid,bus.tid,c.cityid,c.tid,d.cityid from bus, 内容来自www.paper51.com //将所有经过起点城市的交通信息作为子集a http://www.paper51.com (select * from buswhere cityid=(select cityid from ctxx where cityname=@start))a, http://www.paper51.com //将所有经过起点城市的车的信息(主要查询到达城市)作为子集b 内容来自论文无忧网 www.paper51.com (select * from bus where tid in(select tid from bus wherecityid=(select cityid from ctxx where cityname=@start)))b, http://www.paper51.com //将所有经过终点城市的车的信息(主要查询到达城市)作为子集c 内容来自论文无忧网 www.paper51.com (select * from bus where tid in(select tid from bus wherecityid=(select cityid from ctxx where cityname=@ends)))c, 内容来自论文无忧网 www.paper51.com
//将所有经过终点城市的交通信息作为子集d 内容来自www.paper51.com (select * from buswhere cityid=(select cityid from ctxx where cityname=@ends))d copyright paper51.com //从起点城市能到达的所有城市 内容来自论文无忧网 www.paper51.com
where A.stops <B.stops and a.tid=b.tid and 内容来自www.paper51.com
//从终点城市能到达的所有城市 paper51.com
c.stops <d.stops and c.tid=d.tid copyright paper51.com
//在子集合b和子集c中有交通关系存在 内容来自www.paper51.com and bus.tid in (select bus.tid from bus where cityid=b.cityid)and bus.tid in (select bus.tid from bus where cityid=c.cityid) andbus.stops='1' http://www.paper51.com
//经过的4个城市各不相同。 内容来自www.paper51.com
and a.cityid<>b.cityid and a.cityid<>c.cityid anda.cityid<>d.cityid and b.cityid<>c.cityid andb.cityid<>d.cityid and c.cityid<>d.cityid 。 内容来自论文无忧网 www.paper51.com 若查询有结果,则利用dataset对象中的table属性将需要的信息保存下来,然后再根据其信息进行各交通工具和城市信息的查询和输出;若查询无结果,则执行输出:“现有条件查询不到符合要求的结果”并结束。 内容来自www.paper51.com 6.1.4 高级查询 copyright paper51.com 通过高级查询的超连接,可以跳转到高级查询页面gjcx.aspx。在此页面,用户除了可以输入起点城市和终点城市以外,还可以根据自己的需要,选择性的输入需要限定的时间、价格等信息,如下图所示: 内容来自www.paper51.com 图10 高级查询 paper51.com 当用户在高级查询页面提交查询后,首先测试是否有从起点城市到达终点城市的交通路线,其SQL语句与直达查询相同。当查询到交通路线时,进行需要返回的相关信息查询并显示;若没有,则返回“无班次到达”的结果。在此页面中,在测试路线的SQL语句是在直达查询的SQL语句的基础上,整合了页面提交的限定条件,并根据条件查询和输出结果。 内容来自www.paper51.com |