ps1 = conn.prepareStatement(sql) ;
ps1.setString(1,start+end);
ps1.setString(2,result1);
ps1.setString(3,result2);
ps1.setString(4,result3);
ps1.setString(5,result4);
ps1.executeUpdate();
用户查询时若数据库中已有缓存数据,则调用以下方法获取缓存的换乘数据:
String sql1="select * from zhuancheng where id="+"'"+start+end+"'";
ps1 = conn.prepareStatement(sql1) ;
rs1 = ps1.executeQuery() ;
while(rs1.next()){
result1=rs1.getString("result1");
result2=rs1.getString("result2");
result3=rs1.getString("result3");
result4=rs1.getString("result4");
业务逻辑类(Logic Class)的实现
(1)查询公交线路
该方法比较简单,通过“select * from businfo where busno="+busno”即可得到符合条件的公交车,同时返回用户需要的数据。
(2)按站查询经过的公交线路,步骤如下:
① 通过辅助类判断用户输入的站名或者附近标志名,并找到对应的公交站名。
② 通过Sql语句找到经过该站的公交车,存放在一个集合中并返回。
(3)按起点终点查找乘坐方案
这是本系统中最复杂的一块,通过前面提到的基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法来实现,具体实现方法如下:
① 通过 start=tool.getbusstop(start); end=tool.getbusstop(end);来确定起点和终点的公交站名。
② 检验站名是否存在,存在则继续往下,不存在则返回提示信息。
③ 若站名存在,则尝试从数据库中取得直达缓存信息,如数据库中没有直达信息,则查找换乘信息。
④ 若数据库中没有缓存,则开始查找有无直达线路,找到后把结果存入数据库。
⑤ 如果没有直达方案,则开始查找1次换乘方案,找到后按照经过站数排序,站数少的排前面,由于换乘方案过多,故只返回前几条。
由于一次换乘结果可能成百上千,故只给用户前几条换乘方案进行选择,先将全部换乘方案按经过车站数进行排序,再取前4条返回给用户。
排序类为一个实现了Serializable和Comparable的工具类,具体排序方法在compareTo方法中实现,通过compareTo(Object b)来定义如何排序,代码如下:
public int compareTo(Object b)
{
SortBean sort=(SortBean)b;
return (this.length-sort.length) ;
}
⑥换乘得到结果后放入Collection中返回。
⑦最后把找到的结果集写入到数据库缓存中。
tool.insertDB(start,end,zhuanchengresult[0],zhuanchengresult[1],zhuanchengresult[2],zhuanchengresult[3]);
⑧如果找不到一次换乘(这种情况非常渺茫),而用户又非常执着的要继续找公交车,就不得不使用二次换乘,算法在3.3节已有说明,下面列出具体做法:
首先查找出经过起点站和终点站的线路,再通过线路找到该站能直达的所有站点,以起点站为例:
Collection stop1bus=findbusnobystop(stop1);//经过stop1的公交车
Collection stop2bus=findbusnobystop(stop2);//经过stop2的公交车
Iterator itr=stop1bus.iterator();
while(itr.hasNext()){
Iterator initr1=searchbusline((String)itr.next()).iterator();
while(initr1.hasNext()){
String stopname=(String)initr1.next();
map1.put(stopname,"rubbish");
这里使用HashMap的KEY作为存放站名的容器,因为从一个站台辐射出去的公交线路经过的站点往往有重复,而HashMap在KEY重复的时候只是重新设置了VALUE值,KEY值则无法重复插入,故选用HashMap。
在分别找到起点和终点能直达的站点集合后,就开始进行循环查找,开始检验起点能直达的站点中是否有能直达终点能直达站点的站点,如有,则证明可以进行二次换乘。
Iterator key1= map1.keySet().iterator();
Iterator key2= map2.keySet().iterato
首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/10/10
免费基于J2ME的公交查询系统的设计与实现(五)由毕业论文网(www.huoyuandh.com)会员上传。