www.pudn.com > QingHuangDaoBus.rar > Finding_way.java


//Finding_way.java 
//该类用来计算乘车方案。 
import java.net.URL; 
import java.sql.*; 
public class Finding_way 
{ 
  private Beg_end_sta  inputstation;//起始站点 
  private Path [] bestpath;//20个乘车方案 
  private boolean isfinding;//是否找到可行的乘车方案 
  private int pathTotal; 
  private int errState=0;//1 表示没有直达方案   2表示起点站与终点站为同一站点 
                         //3 表示间接查询中,起点站不存在   5该车次无车站  
                         //6 倒一次车的中间站点不存在 
   
  public Finding_way() 
     { 
 
     }    
 
  public Finding_way( Beg_end_sta  inputstation,Path [] bestpath, boolean isfinding ) 
     { 
        this.inputstation=inputstation; 
         
        this.bestpath=bestpath; 
        this.isfinding=isfinding; 
     } 
  public Finding_way ( Beg_end_sta inputstation ) 
     { 
       this.inputstation=inputstation; 
 
     } 
  public void createFindWay(Beg_end_sta inputstation) 
      { 
         this.inputstation=new Beg_end_sta(); 
         this.inputstation=inputstation; 
         this.bestpath=new Path[20]; 
          
 
 
      } 
  public  void createFindWay(Station begining,Station ending ) 
      { 
          inputstation=new Beg_end_sta(); 
          inputstation.set_be_sta(  begining , ending ); 
          bestpath=new Path[20]; 
          for ( int i=0; i<20; i++) 
             { 
                bestpath[i]=new Path();           
             }   
           
      } 
 
   public  void createFindWay(String begining,String ending ) 
      { 
          inputstation=new Beg_end_sta(); 
          inputstation.set_be_sta( new Station(begining) , new Station (ending) ); 
          bestpath=new Path[20]; 
          for ( int i=0; i<20; i++) 
             { 
                bestpath[i]=new Path(); 
                 
           
             }   
          
      } 
 
  public  void setinputstation (Beg_end_sta inputstation ) 
     { 
         this.inputstation=inputstation; 
     } 
  public Beg_end_sta getinputstation( ) 
     {  
        return inputstation;   
     } 
  public void  setbestpath(Path [] bestpath ) 
     { 
         this.bestpath=bestpath; 
     } 
  public Path[]  getbestpath() 
     { 
        return bestpath; 
     } 
  public void setisfinding( boolean isfinding ) 
     { 
       this.isfinding=isfinding; 
     } 
   
//给出不倒车直接到达的方案 
  public boolean direct_find() 
     { 
             int i=0; 
             int resBegSeq,resEndSeq; 
             int resBegSeqShadow,resEndSeqShadow; 
             int distance;//起点站到终点站所经过的车站数 
             String [] resBusNo=new String [20]; 
             String begining,ending; 
             String queryBusNo,queryBegSeq,queryEndSeq,queryPassSta; 
             String queryPath; 
             //String busNo; 
             begining=inputstation.getBegName(); 
             ending=inputstation.getEndName(); 
             if(begining==ending) 
                    { 
                           //System.out.println("起点和终点是同一站点"); 
                           errState=2;    //起点和终点是同一站点 
                           return false; 
                           
                            
                                 
                    } 
 
             queryBusNo="SELECT bus_no    FROM  bus_table   WHERE station_name='" + begining + "'  AND bus_no In ( SELECT bus_no FROM bus_table WHERE station_name='" + ending +"')";  
             try 
                { 
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
                    Connection con=DriverManager.getConnection("jdbc:odbc:bus"); 
                    Statement  stmt; 
                    stmt=con.createStatement(); 
                    ResultSet  resultBusNo ,resultBegSeq,resultEndSeq,resultPassSta; 
                    resultBusNo=stmt.executeQuery( queryBusNo  ); 
                    //System.out.println(resultBusNo); 
                    //找到从起点直达终点的一系列公交车次 
                    //System.out.println(resultBusNo); 
                  /* if (resultBusNo)//找到合适的函数来检查是否有有效数据!!!!!!!!!!!!!!!!! 
                         { 
                              System.out.println("无可行方案 "); 
                              errState=1;    
                              return false; 
                         } 
                   */    
                     if( !resultBusNo.next()  ) 
                                { 
                                   errState=1;   
                                   //System.out.println(resBusNo[0]+"dd"); 
                                   return false; 
                                } 
                        else 
                               { 
                                     resBusNo[i]=resultBusNo.getString(1); 
                                     bestpath[i].addSegment(  resBusNo[i] ); 
                                     i++;                   
                                  
                               } 
 
                                        
                    while( resultBusNo.next() && i<20 ) 
                        {   
                             
                            resBusNo[i]=resultBusNo.getString(1); 
                              
                                                        
                            bestpath[i].addSegment(  resBusNo[i] ); 
                                   
                             
                          //System.out.print("s"+resBusNo[i]+"f   "); 
                            i++;    
                        } 
                    pathTotal=i; 
                    resultBusNo.close(); 
                    //System.out.println(" "); 
                    //System.out.println(" "); 
 
                    //找到各公交车次中从起点车站到终点车站在整条公交线路中所经过的车站  
                    //System.out.println(" i="+i); 
                    for(int j=0;j0) 
                                {  
                                     queryPath="    "; 
                                } 
                           else 
                                {  
                                    queryPath="  DESC  "; 
                                }   
 
                            //System.out.println(queryPath); 
                           
                          queryPath="SELECT station_name  FROM  bus_table	 WHERE  bus_no='"+resBusNo[j]+"' AND station_sequence  BETWEEN " +resBegSeq+"  AND  "+resEndSeq+" ORDER BY station_sequence  " +queryPath; 
                           
                 
                          //System.out.println(queryPath); 
                          resultPassSta=stmt.executeQuery(queryPath); 
                          //ResultSetMetaData  rsmd=resultPassSta.getMetaData(); 
                          //int numCols=rsmd.getColumnCount(); 
                          //System.out.print(" 乘车路线:  "+resBusNo[j]+"路车方案   "); 
                          String busStation; 
                          int q=0; 
                           while(resultPassSta.next()) 
                               {        
                                            busStation=resultPassSta.getString(1); 
                                             
                                            // System.out.print( busStation+"   "); 
 
                                            bestpath[j].setPassSegment( busStation,q,0); 
                                            //System.out.print("  "); 
                                            q++; 
                               } 
 
                          
                          //resEndSeq=resultEndSeq.getInt("station_sequence"); 
                          //System.out.println(resEndSeq); 
                          resultPassSta.close(); 
                          //System.out.println(""); 
                          //System.out.println(""); 
 
 
                         
                          
                        } 
                      
                    //System.out.println(" "); 
                   // System.out.println("Create successfully!"); 
                    //resultBegSeq.close(); 
                    //resultEndSeq.close(); 
                     
                    stmt.close(); 
                    con.close();    
                        
 
                } 
             catch(SQLException ex) 
                { 
                    System.out.println("\n***SQLException Caught ***\n"); 
                    while(ex!=null) 
                        { 
                           System.out.println(" SQLState: " +ex.getSQLState() );   
                           System.out.println(" Message: " +ex.getMessage() ); 
                           System.out.println("Vendor: "+ex.getErrorCode()); 
                           ex=ex.getNextException(); 
			   System.out.println("  ");                   
 
                        }            
 
                } 
            catch(java.lang.Exception ex ) 
                { 
                   ex.printStackTrace(); 
                }     
          
                    
 
 
         return true;     
     } 
   
//给出倒一次车的,间接到达方案 
  public boolean indirect_find() 
      { 
           String begining=inputstation.getBegName(); 
           String ending=inputstation.getEndName();   
           String queBegBusNo="SELECT bus_no  FROM  bus_table   WHERE  station_name='"+begining+"'"; 
           String queEndBusNo="SELECT bus_no  FROM  bus_table   WHERE  station_name='"+ending+"'"; 
           String  [] begBusNo=new String [20]; 
           String  [] endBusNo=new String [20];  
           String  [] midBusSta=new String [20];   
           int i=0,j=0;     
           //System.out.println(queBegBusNo); 
           try 
                { 
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
                    Connection con=DriverManager.getConnection("jdbc:odbc:bus"); 
                    Statement stmt; 
                    stmt=con.createStatement(); 
                                         
                    ResultSet  resultBegBusNo,resultEndBusNo; 
 
                    //经过起始站点的线路名称 
                    resultBegBusNo=stmt.executeQuery( queBegBusNo  ); 
                     
                    if( !resultBegBusNo.next()  ) 
                                { 
                                   //System.out.println(resBusNo[0]+"dd"); 
                                   //间接查询中,起点站不存在,为错误三 
                                   errState=3;  
                                   return false; 
                                } 
                        else 
                               { 
                                     begBusNo[i]=resultBegBusNo.getString(1); 
                                                        
                                     //System.out.print(begBusNo[i]+"     "); 
                                     i++; 
                               } 
 
                     
                    while( resultBegBusNo.next() && i<20 ) 
                        {   
                             
                            begBusNo[i]=resultBegBusNo.getString(1); 
                              
                            //System.out.print(begBusNo[i]+"     "); 
                            i++; 
                        } 
        
                    resultBegBusNo.close(); 
 
 
 
                   //System.out.println("beging and end"); 
 
 
                    resultEndBusNo=stmt.executeQuery( queEndBusNo  ); 
                     
                    if( !resultEndBusNo.next()  ) 
                                { 
                                    
                                   //间接查询中,终点站不存在,为错误三 
                                   errState=3;  
                                   return false; 
                                } 
                        else 
                               { 
                                     endBusNo[j]=resultEndBusNo.getString(1); 
                                                        
                                     // System.out.print(endBusNo[j]+"     "); 
                                     j++; 
                               } 
 
                     
                    while( resultEndBusNo.next() && i<20 ) 
                        {   
                             
                            endBusNo[j]=resultEndBusNo.getString(1); 
                              
                            //System.out.print(endBusNo[j]+"     "); 
                            j++; 
                        } 
                    resultEndBusNo.close(); 
 
                    //System.out.println("bus station"); 
 
                    int q=0,l=0,k=0; 
                    //ResultSet  resultBegBusNo,resultEndBusNo; 
                    String  [] passBegSta=new String [40]; 
                    String  [] passEndSta=new String [40]; 
                    String  quePassBegSta, quePassEndSta; 
          
                    //System.out.println(i+"bus station"+j); 
                    for(int n=0;  n=20)   break; 
                             
                                         this.bestpath[x].addSegment(  firSegment.bestpath[i]); 
                                         this.bestpath[x].addSegment(  secSegment.bestpath[j]); 
                                         x++; 
                                          
                                     } 
 
                        } 
                    pathTotal=x; 
 
 
                    //System.out.println("Create successfully!"); 
                    stmt.close(); 
                    con.close(); 
                
 
                } 
           catch(SQLException ex) 
                { 
                    System.out.println("\n***SQLException Caught ***\n"); 
                    while(ex!=null) 
                        { 
                           System.out.println(" SQLState: " +ex.getSQLState() );   
                           System.out.println(" Message: " +ex.getMessage() ); 
                           System.out.println("Vendor: "+ex.getErrorCode()); 
                           ex=ex.getNextException(); 
			   System.out.println("  ");                   
 
                        }            
 
                } 
            catch(java.lang.Exception ex ) 
                { 
                   ex.printStackTrace(); 
                }     
            
         return true; 
 
              
      } 
//根据站点使用频率,给出模糊方案 
  public  boolean mistiness_find() 
      { 
           return true; 
      } 
  public  boolean find_bestway () 
      { 
           boolean finded; 
           finded=direct_find(); 
           if(!finded) 
               { 
                     finded=indirect_find(); 
                     if(!finded) 
                          { 
                               return false; 
                          } 
               } 
           return  true; 
 
      } 
  public void show() 
      {  //System.out.println(" show");  
         //System.out.println(pathTotal);  
         //pathTotal=1; 
         int m; 
         for(int n=0;n