import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class lineQuery {
ArrayList list;
DbOperation db;
ResultSet rs;
line_ope line_message;
public lineQuery(){}//空构造方法
//获得转乘方案的方法。如果没有,返回空
public ArrayList getShiftLine(String startStation,String endStation) throws SQLException, ClassNotFoundException{
String sql="";
//判断是否查询到结果
Boolean isHaveLine=false;
//存储经过起点的线路的arraylist
ArrayList startLine=new ArrayList();
//存储经过终点的线路的arraylist
ArrayList endLine=new ArrayList();
//存储所有的中转点
ArrayList line=new ArrayList();
//中转点
station station_shift;
int start,end,startOrder,endOrder,stationL1,stationL2,lineLong=0,minLineLong=10000;
sql="select line from station where station='"+startStation+"'";
db=new DbOperation();
//查询出过起点的路线
rs=db.executeQuery(sql);
while(rs.next()){
startLine.add(Integer.parseInt(rs.getString("line")));//将通过起点的路线都添加到arraylist中
}
sql="select line from station where station='"+endStation+"'";
//查询出过终点的路线
rs=db.executeQuery(sql);
while(rs.next()){
endLine.add(Integer.parseInt(rs.getString("line")));//将通过终点的路线添加到另一个arraylist中
}
for(int m=0;m<startLine.size();m++){//循环找出经过起点和终点的路线的交点
for(int n=0;n<endLine.size();n++){
station_shift=new station();
start=(Integer)startLine.get(m);
end=(Integer)endLine.get(n);
sql="select station from station where line='"+start+"' and station in(select station from station where line='"+end+"')";
//System.out.println(sql);
rs=db.executeQuery(sql);
while(rs.next()){//将查到的点都存到arraylist中
isHaveLine=true;
//存储中转点信息
station_shift.setLine(start);
station_shift.setLine2(end);
station_shift.setStationName(rs.getString("station"));
line.add(station_shift);
}
}
}
//循环得到转乘中共经过多少站点
for(int a=0;a<line.size();a++){
station_shift=(station)line.get(a);
sql="select ord from station where line='"+station_shift.getLine()+"' and station='"+startStation+"'";
startOrder=db.queryInt("公交信息", sql);
//System.out.println(sql);
sql="select ord from station where line='"+station_shift.getLine2()+"' and station='"+endStation+"'";
//System.out.println(sql);
endOrder=db.queryInt("公交信息", sql);
sql="select ord from station where line='"+station_shift.getLine()+"' and station='"+station_shift.getStationName()+"'";
stationL1=db.queryInt("公交信息", sql);
sql="select ord from station where line='"+station_shift.getLine2()+"' and station='"+station_shift.getStationName()+"'";
stationL2=db.queryInt("公交信息", sql);
if(startOrder<stationL1)
lineLong=stationL1-startOrder;
else
lineLong=startOrder-stationL1;
if(endOrder<stationL2)
lineLong+=stationL2-endOrder;
else
lineLong+=endOrder-stationL2;
if(lineLong<minLineLong)
minLineLong=lineLong;
station_shift.setLineLong(lineLong);
line.set(a, station_shift);
//System.out.println("开始 "+station_shift.getLine()+" "+startOrder+"结束 "+station_shift.getLine2()+" "+endOrder);
}
//循环筛选出经过站点最少的路线
for(int a=0;a<line.size();a++){
station_shift=(station)line.get(a);
if(station_shift.getLineLong()>minLineLong)
{
line.remove(a);
a--;
}
//System.out.println("长度"+station_shift.getLineLong()+"经过站点"+station_shift.getStationName()+"线路1 "+station_shift.getLine()+"线路2 "+station_shift.getLine2());
}
db.close();
//System.out.println("zuiduan:"+minLineLong);
if(isHaveLine)
return line;
else
return null;
}
//获得直达方案的方法
public ArrayList getStraightLine(String startStation,String endStation) throws SQLException, ClassNotFoundException{
int lineNum=10000,lineLong=10000,startOrder,endOrder,line_temp,count=0;
db=new DbOperation();
String sql="select line from station where station='"+startStation+"'and line in("+"select line from station where station='"+endStation+"')";
list=new ArrayList();
rs=db.executeQuery(sql);
while(rs.next())
{count++;
String line1=rs.getString("line");
sql="select ord from station where station='"+startStation+"' and line='"+line1+"'";
System.out.print(line1+" ");
startOrder=db.queryInt("公交信息", sql);
sql="select ord from station where station='"+endStation+"' and line='"+line1+"'";
endOrder=db.queryInt("公交信息", sql);
if(startOrder>endOrder)
line_temp=startOrder-endOrder;
else line_temp=endOrder-startOrder;
//将所有直达线路的信息存入line_message对象中
line_message=new line_ope();
line_message.setLineNum(Integer.parseInt(line1));
line_message.setLineLong(line_temp);
//将line_message对象加入arraylist
list.add(line_message);
if(line_temp<lineLong){
lineLong=line_temp;
lineNum=Integer.parseInt(line1);
}
//System.out.println(line_temp+" "+lineNum);
}
for(int a=0;a<list.size();a++){
line_ope b=(line_ope)list.get(a);
//System.out.print("线路 "+b.getLineNum()+"长度 "+b.getLineLong());
}
//循环筛选出长度最小的路线
for(int i=0;i<list.size();i++){
line_ope a=(line_ope)list.get(i);
if(a.getLineLong()>lineLong)
{list.remove(i);
i--;
}
}
db.close();
if(count==0)
return null;
else
return list;
}
public String getLineStr(String start,String end) throws SQLException, ClassNotFoundException{
ArrayList line=this.getStraightLine(start, end);
ArrayList lineStr=new ArrayList();
String l="";
int temp=0;
//判断有没有直达的方案
if(line==null){
//调用转乘方法
line=this.getShiftLine(start, end);
//判断有没有转乘方案
if(line!=null){//如果有转乘方案
/* for(int i=0;i<line.size();i++){
station s=(station)line.get(i);
temp=i+1;
l+="线路"+temp+":"+"从 "+start+" 乘坐 "+s.getLine()+" 路车到达 "+s.getStationName()+" 换乘 "+s.getLine2()+" 路车到达 "+end+" 站,本条线路经过 "+s.getLineLong()+" 个站点\n";
}*/
station s=(station)line.get(0);
l="线路"+temp+":"+"从 "+start+" 乘坐 "+s.getLine()+" 路车到达 "+s.getStationName()+" 换乘 "+s.getLine2()+" 路车到达 "+end+" 站,本条线路经过 "+s.getLineLong()+" 个站点\n";
return l;
}
else//如果既没有转乘方案又没有直达方案
return "没有合适的公交路线,请打车前往。";
}
else{//如果有直达方案
line_ope lp;
/*for(int i=0;i<line.size();i++){
lp=(line_ope)line.get(i);
temp=i+0;
l+="线路"+temp+":从 "+start+" 乘坐 "+lp.getLineNum()+" 路车"+"到达 "+end+" 站,本条线路经过 "+lp.getLineLong()+" 个站点\n";
}*/
lp=(line_ope)line.get(0);
l="线路"+temp+":从 "+start+" 乘坐 "+lp.getLineNum()+" 路车"+"到达 "+end+" 站,本条线路经过 "+lp.getLineLong()+" 个站点\n";
return l;
}
}
public int StringToInt(String str){
return Integer.parseInt(str);
}
}
- 1
- 2
- 3
- 4
前往页