1.开发一套石家庄地铁线路查询系统。

2.功能设计

(1)数据库设计:将石家庄地铁线路图的各个线路,各个站点,换乘信息等用数据库的形式保存起来,应该保存的信息有 {线路号,线路的各个站名,车站的换乘信息}。

(2)站点查询:用户可以输入任一一条线路或输入出发地和目的地信息,可以查询到相关内容。

例如输入出发地:石家庄铁道大学   目的地 博物院

返回经历的站名的个数,和路径,如果有换乘,请列出换乘的线路

设计思想:

  将所有的站点可分为两类:一种是只在一条线路上(普通点),一种是可在两条线路上,即为两条线路交点(换乘点)。

所以可以分为3种情况:

  ①:起始点:普通点   终点:普通点

  ②:起始点:普通点   终点:换乘点      或     起始点:换乘点   终点:普通点

  ③:起始点:换乘点    终点:换乘点

以上每种情况都可以分为以下几种:直达,一次换乘,二次换乘,多次换乘(此种情况很少,所以此次试验中并未考虑)。直达:通过得到的起始站和终点站的两个站名,获取它们的id,

然后查询到两站之间的站名存入数组输出即可。一次换乘:找到起始站和终点站所在线路的交点,然后转化成求两段直达线路。二次换乘,找到起始站两侧最近的中转站A和B(若两侧都存在都要考虑),

以A为例,计算起始站与A的直达线路,再计算A与终点站的一次换乘。

LoginerDaolmpl.java

package com.demo;
import util.util;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;import javax.swing.plaf.synth.SynthSpinnerUI;public class LoginerDaolmpl {static Connection conn;static PreparedStatement ps = null;static ResultSet rs;static String sql = "select * from station";static util ut= new util();static Scanner in = new Scanner(System.in);public User loadUser(String a) {conn=ut.getConn();ps=null;ResultSet rs=null;User user=null;sql="select * from station where Name=?";try {ps=conn.prepareStatement(sql);ps.setString(1, a);rs=ps.executeQuery();if(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));}}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}return user;}public User Select_Id(int a) {conn=ut.getConn();ps=null;ResultSet rs=null;User user=null;sql="select * from station where Id=?";try {ps=conn.prepareStatement(sql);ps.setInt(1, a);rs=ps.executeQuery();if(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));}}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}return user;}public List<User> load(){conn=ut.getConn();ps=null;ResultSet rs=null;String id;sql="select * from station order by Id ";
//        sql="select * from station where Id between ? and ? order by Id";List<User> users=new ArrayList<User>();User user=null;try {ps=conn.prepareStatement(sql);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}return users;}//只能返回站数,能判断一条线上,有两个转战口,但不能判断 三条最近 public int Num1(String a,String b){User start=new User();start=loadUser(a);User end=new User();end=loadUser(b);User Mid=new User();int num=0;if(start.getLine()==end.getLine()){num=Math.abs(start.getNum()-end.getNum());}if(start.getLine()==1&&end.getLine()==2){int N=0,M=0;N=Math.abs(start.getNum()-4)+Math.abs(end.getNum()-6);M=Math.abs(start.getNum()-20)+Math.abs(end.getNum()-20);if(N>M)num=M;else num=N;}if(start.getLine()==1&&end.getLine()==3){num=Math.abs(start.getNum()-23)+Math.abs(end.getNum()-13);}if(start.getLine()==1&&end.getLine()==4){num=Math.abs(start.getNum()-17)+Math.abs(end.getNum()-13);}if(start.getLine()==1&&end.getLine()==5){int N=0,M=0;N=Math.abs(start.getNum()-10)+Math.abs(end.getNum()-19);M=Math.abs(start.getNum()-25)+Math.abs(end.getNum()-7);if(N>M)num=M;else num=N;}if(start.getLine()==1&&end.getLine()==6){num=Math.abs(start.getNum()-13)+Math.abs(end.getNum()-14);}if(start.getLine()==2&&end.getLine()==1){int N=0,M=0;N=Math.abs(start.getNum()-6)+Math.abs(end.getNum()-4);M=Math.abs(start.getNum()-20)+Math.abs(end.getNum()-20);if(N>M)num=M;else num=N;}if(start.getLine()==2&&end.getLine()==3){num=Math.abs(start.getNum()-25)+Math.abs(end.getNum()-17);}if(start.getLine()==2&&end.getLine()==4){num=Math.abs(start.getNum()-27)+Math.abs(end.getNum()-5);}if(start.getLine()==2&&end.getLine()==5){num=Math.abs(start.getNum()-18)+Math.abs(end.getNum()-13);}if(start.getLine()==2&&end.getLine()==6){num=Math.abs(start.getNum()-22)+Math.abs(end.getNum()-8);}if(start.getLine()==3&&end.getLine()==1){num=Math.abs(start.getNum()-13)+Math.abs(end.getNum()-23);}if(start.getLine()==3&&end.getLine()==2){num=Math.abs(start.getNum()-17)+Math.abs(end.getNum()-25);}if(start.getLine()==3&&end.getLine()==4){num=Math.abs(start.getNum()-22)+Math.abs(end.getNum()-9);}if(start.getLine()==3&&end.getLine()==5){num=Math.abs(start.getNum()-11)+Math.abs(end.getNum()-11);}if(start.getLine()==3&&end.getLine()==6){int N=0,M=0;N=Math.abs(start.getNum()-26)+Math.abs(end.getNum()-16);M=Math.abs(start.getNum()-15)+Math.abs(end.getNum()-5);if(N>M)num=M;else num=N;}if(start.getLine()==4&&end.getLine()==1){num=Math.abs(start.getNum()-13)+Math.abs(end.getNum()-17);}if(start.getLine()==4&&end.getLine()==2){num=Math.abs(start.getNum()-5)+Math.abs(end.getNum()-27);}if(start.getLine()==4&&end.getLine()==3){num=Math.abs(start.getNum()-9)+Math.abs(end.getNum()-22);}if(start.getLine()==4&&end.getLine()==5){int N=0,M=0;N=Math.abs(start.getNum()-15)+Math.abs(end.getNum()-15);M=Math.abs(start.getNum()-3)+Math.abs(end.getNum()-2);if(N>M)num=M;else num=N;}if(start.getLine()==4&&end.getLine()==6){num=Math.abs(start.getNum()-11)+Math.abs(end.getNum()-11);}if(start.getLine()==5&&end.getLine()==1){int N=0,M=0;N=Math.abs(start.getNum()-19)+Math.abs(end.getNum()-10);M=Math.abs(start.getNum()-25)+Math.abs(end.getNum()-7);if(N>M)num=M;else num=N;}if(start.getLine()==5&&end.getLine()==2){num=Math.abs(start.getNum()-13)+Math.abs(end.getNum()-18);}if(start.getLine()==5&&end.getLine()==3){num=Math.abs(start.getNum()-11)+Math.abs(end.getNum()-11);}if(start.getLine()==5&&end.getLine()==4  ){int N=0,M=0;N=Math.abs(start.getNum()-19)+Math.abs(end.getNum()-10);M=Math.abs(start.getNum()-25)+Math.abs(end.getNum()-7);if(N>M)num=M;else num=N;}if(start.getLine()==5&&end.getLine()==6){num=Math.abs(start.getNum()-4)+Math.abs(end.getNum()-3);}if(start.getLine()==6&&end.getLine()==1){num=Math.abs(start.getNum()-14)+Math.abs(end.getNum()-13);}if(start.getLine()==6&&end.getLine()==2){num=Math.abs(start.getNum()-8)+Math.abs(end.getNum()-22);}if(start.getLine()==6&&end.getLine()==3  ){int N=0,M=0;N=Math.abs(start.getNum()-16)+Math.abs(end.getNum()-26);M=Math.abs(start.getNum()-5)+Math.abs(end.getNum()-15);if(N>M)num=M;else num=N;}if(start.getLine()==6&&end.getLine()==4){num=Math.abs(start.getNum()-11)+Math.abs(end.getNum()-11);}if(start.getLine()==6&&end.getLine()==5){num=Math.abs(start.getNum()-3)+Math.abs(end.getNum()-4);}System.out.println(num);return num;}//只能返回站名,不能判断两个转战口,同时不能判断三条最近public List<User> Num2(String a,String b){User start=new User();User end=new User();start=loadUser(a);end=loadUser(b);conn=ut.getConn();ps=null;ResultSet rs=null;String id;sql="select * from station where Id between ? and ? order by Id";List<User> users=new ArrayList<User>();User user=null;if(start.getLine()==end.getLine())//一条线
    {if(start.getId()<=end.getId()){try {ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}else{try {sql="select * from station where Id between ? and ? order by Id desc";ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}}if(start.getLine()!=end.getLine())//不在一条线
    {System.out.println(start.getLine()+end.getLine());int mid=0;try {sql="select * from station where Line=? and Exchange=?";ps=conn.prepareStatement(sql);ps.setInt(1, start.getLine());ps.setInt(2, end.getLine());rs=ps.executeQuery();User Mid=new User();//找到中间值(在始发站那条线路上)if(rs.next()){Mid.setName(rs.getString("Name"));Mid.setId(rs.getInt("Id"));Mid.setLine(rs.getInt("Line")) ;Mid.setNum(rs.getInt("Num"));Mid.setExchange(rs.getInt("Exchange"));}sql="select * from station where Line=? and Exchange=?";  //找到在终点站那条线路上ps=conn.prepareStatement(sql);ps.setInt(2, start.getLine());ps.setInt(1, end.getLine());rs=ps.executeQuery();User Mid2=new User();if(rs.next()){Mid2.setName(rs.getString("Name"));Mid2.setId(rs.getInt("Id"));Mid2.setLine(rs.getInt("Line")) ;Mid2.setNum(rs.getInt("Num"));Mid2.setExchange(rs.getInt("Exchange"));}if(Mid.getId()>start.getId())//始发站->中转站
            {    sql="select * from station where Id between ? and ? order by Id";ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, Mid.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(Mid2.getId()>end.getId())//始发站->中转站    终点站->中转站
                    {System.out.println("");sql="select * from station where Id between ? and ? order by Id desc";ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, Mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//始发站->中转站->终点站
                 {sql="select * from station where Id between ? and ? order by Id ";ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, Mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}else//中转站<-始发站
            {    sql="select * from station where Id between ? and ? order by Id desc";ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, Mid.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(Mid2.getId()>end.getId())//中转站<-始发站    终点站->中转站
                    {sql="select * from station where Id between ? and ? order by Id desc";ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, Mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//中转站<-始发站
                 {sql="select * from station where Id between ? and ? order by Id ";ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, Mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}}catch(SQLException e) {e.printStackTrace();}}return users;
}//能返回站名,同时实现两个转战口,但是不能三条最近public List<User> Num3(String a,String b){User start=new User();User end=new User();start=loadUser(a);end=loadUser(b);conn=ut.getConn();ps=null;ResultSet rs=null;String id;sql="select * from station where Id between ? and ? order by Id";List<User> users=new ArrayList<User>();List<User>    Mid1s=new ArrayList<User>();//做出一个始发站中转站点集List<User>    Mid2s=new ArrayList<User>();//做出一个终点站中转站点集User user=null;User Mid1=null;User Mid2=null;if(start.getLine()==end.getLine())//一条线
    {if(start.getId()<=end.getId()){try {conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}else{try {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}}if(start.getLine()!=end.getLine())//不在一条线
    {int mid=0;try {sql="select * from station where Line=? and Exchange=?";//始发站一条线conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getLine());ps.setInt(2, end.getLine());rs=ps.executeQuery();while(rs.next()){Mid1=new User();Mid1.setName(rs.getString("Name"));Mid1.setId(rs.getInt("Id"));Mid1.setLine(rs.getInt("Line")) ;Mid1.setNum(rs.getInt("Num"));Mid1.setExchange(rs.getInt("Exchange"));Mid1s.add(Mid1);}sql="select * from station where Line=? and Exchange=?";  //找到在终点站那条线路上conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getLine());ps.setInt(1, end.getLine());rs=ps.executeQuery();while(rs.next()){Mid2=new User();Mid2.setName(rs.getString("Name"));Mid2.setId(rs.getInt("Id"));Mid2.setLine(rs.getInt("Line")) ;Mid2.setNum(rs.getInt("Num"));Mid2.setExchange(rs.getInt("Exchange"));Mid2s.add(Mid2);}int min=100;//选出最近转战口int Min1=Mid1.getId();//最近转战口ID 与始发站相同int Min2=Mid2.getId();//与终点站相同for(User mid1:Mid1s){for(User mid2:Mid2s){if(mid1.getName().equals(mid2.getName())){int n=Math.abs(mid1.getId()-start.getId())+Math.abs(mid2.getId()-end.getId());if(min>n){min=n;Min1=mid1.getId();Min2=mid2.getId();}}}}System.out.println(Min1);User mid1=Select_Id(Min1);User mid2=Select_Id(Min2);System.out.println(mid2.getName()+"asdfasdfasdgasdgasdf"+mid1.getName());
            if(mid1.getId()>start.getId())//始发站->中转站
            {    sql="select * from station where Id between ? and ? order by Id";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, mid1.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(mid2.getId()>end.getId())//始发站->中转站    终点站->中转站
                    {System.out.println("");sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//始发站->中转站->终点站
                 {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}else//中转站<-始发站
            {    sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, mid1.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(mid2.getId()>end.getId())//中转站<-始发站    终点站->中转站
                    {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//中转站<-始发站
                 {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}}catch(SQLException e) {e.printStackTrace();}}return users;
}public List<User>Num4(String a,String b){User start=new User();User end=new User();start=loadUser(a);end=loadUser(b);conn=ut.getConn();ps=null;ResultSet rs=null;String id;sql="select * from station where Id between ? and ? order by Id";List<User> users=new ArrayList<User>();List<User>    Mid1s=new ArrayList<User>();//做出一个始发站中转站点集List<User>    Mid2s=new ArrayList<User>();//做出一个终点站中转站点集List<User>    Mid3s=new ArrayList<User>();//1在转战线上的位置List<User>    Mid4s=new ArrayList<User>();//2在转战上的位置User user=null;User Mid1=null;User Mid2=null;User Mid3=null;User Mid4=null;int Zhuan;//最近的转战是第几条线if(start.getLine()==end.getLine())//一条线
        {if(start.getId()<=end.getId()){try {conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}else{try {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}}if(start.getLine()!=end.getLine())//不在一条线
        {int mid=0;try {sql="select * from station where Line=? and Exchange !=?";//始发站一条线conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getLine());ps.setInt(2, 0);rs=ps.executeQuery();while(rs.next()){Mid1=new User();Mid1.setName(rs.getString("Name"));Mid1.setId(rs.getInt("Id"));Mid1.setLine(rs.getInt("Line")) ;Mid1.setNum(rs.getInt("Num"));Mid1.setExchange(rs.getInt("Exchange"));Mid1s.add(Mid1);}for(User mid1:Mid1s){sql="select * from station where Name=?";//同名 但是Id 不一样conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setString(1, mid1.getName());rs=ps.executeQuery();while(rs.next()){Mid3=new User();Mid3.setName(rs.getString("Name"));Mid3.setId(rs.getInt("Id"));Mid3.setLine(rs.getInt("Line")) ;Mid3.setNum(rs.getInt("Num"));Mid3.setExchange(rs.getInt("Exchange"));if(Mid3.getId()!=mid1.getId()){Mid3s.add(Mid3);}}}sql="select * from station where Line=? and Exchange !=?";  //找到在终点站那条线路上conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getLine());ps.setInt(1, end.getLine());rs=ps.executeQuery();while(rs.next()){Mid2=new User();Mid2.setName(rs.getString("Name"));Mid2.setId(rs.getInt("Id"));Mid2.setLine(rs.getInt("Line")) ;Mid2.setNum(rs.getInt("Num"));Mid2.setExchange(rs.getInt("Exchange"));Mid2s.add(Mid2);}for(User mid2:Mid2s){sql="select * from station where Name=?";//同名 但是Id 不一样conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setString(1, mid2.getName());rs=ps.executeQuery();while(rs.next()){Mid4=new User();Mid4.setName(rs.getString("Name"));Mid4.setId(rs.getInt("Id"));Mid4.setLine(rs.getInt("Line")) ;Mid4.setNum(rs.getInt("Num"));Mid4.setExchange(rs.getInt("Exchange"));if(Mid4.getId()!=mid2.getId()){Mid4s.add(Mid4);}}}int min=100;//选出最近转战口int Min1=Mid1.getId();//最近转战口ID 与始发站相同int Min2=Mid2.getId();//与终点站相同int Min3=Mid3.getId();int Min4=Mid4.getId();for(User mid1:Mid1s){for(User mid3:Mid3s){for(User mid2:Mid2s){for(User mid4:Mid4s){if((mid1.getExchange()==mid2.getExchange())&&(mid3.getLine()==mid4.getLine())&&(mid1.getExchange()==mid3.getLine())){int n=Math.abs(mid1.getId()-start.getId())+Math.abs(mid2.getId()-end.getId())+Math.abs(mid3.getId()-mid4.getId());if(min>n){min=n;Min1=mid1.getId();Min2=mid2.getId();Min3=mid3.getId();Min4=mid4.getId();}}}}}}System.out.println(Min1);User mid1=Select_Id(Min1);User mid2=Select_Id(Min2);User mid3=Select_Id(Min3);User mid4=Select_Id(Min4);System.out.println(mid2.getName()+"asdfasdfasdgasdgasdf"+mid1.getName());
                if(mid1.getId()>start.getId())//始发站->中转站
                {    sql="select * from station where Id between ? and ? order by Id";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, mid1.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(mid3.getId()>mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid4.getId());ps.setInt(2, mid3.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid3.getId()<mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid3.getId());ps.setInt(2, mid4.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid2.getId()>end.getId())//始发站->中转站    终点站->中转站
                        {System.out.println("");sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//始发站->中转站->终点站
                     {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}else//中转站<-始发站
                {    sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, mid1.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(mid3.getId()>mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid4.getId());ps.setInt(2, mid3.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid3.getId()<mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid3.getId());ps.setInt(2, mid4.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid2.getId()>end.getId())//中转站<-始发站    终点站->中转站
                        {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//中转站<-始发站
                     {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}}catch(SQLException e) {e.printStackTrace();}}return users;}public List<User>Num5(String a,String b){int NN=0;User start=new User();User end=new User();start=loadUser(a);end=loadUser(b);conn=ut.getConn();ps=null;ResultSet rs=null;String id;sql="select * from station where Id between ? and ? order by Id";List<User> users=new ArrayList<User>();List<User>    Mid1s=new ArrayList<User>();//做出一个始发站中转站点集List<User>    Mid2s=new ArrayList<User>();//做出一个终点站中转站点集List<User>    Mid3s=new ArrayList<User>();//1在转战线上的位置List<User>    Mid4s=new ArrayList<User>();//2在转战上的位置User user=null;User Mid1=null;User Mid2=null;User Mid3=null;User Mid4=null;int Zhuan;//最近的转战是第几条线if(start.getLine()==end.getLine())//一条线
        {if(start.getId()<=end.getId()){try {conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}else{try {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, end.getId());rs=ps.executeQuery();while(rs.next()) {user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);}}catch(SQLException e) {e.printStackTrace();}}}if(start.getLine()!=end.getLine())//不在一条线
        {int mid=0;try {sql="select * from station where Line=? and Exchange !=?";//始发站一条线conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getLine());ps.setInt(2, 0);rs=ps.executeQuery();while(rs.next()){Mid1=new User();Mid1.setName(rs.getString("Name"));Mid1.setId(rs.getInt("Id"));Mid1.setLine(rs.getInt("Line")) ;Mid1.setNum(rs.getInt("Num"));Mid1.setExchange(rs.getInt("Exchange"));Mid1s.add(Mid1);}for(User mid1:Mid1s){sql="select * from station where Name=?";//同名 但是Id 不一样conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setString(1, mid1.getName());rs=ps.executeQuery();while(rs.next()){Mid3=new User();Mid3.setName(rs.getString("Name"));Mid3.setId(rs.getInt("Id"));Mid3.setLine(rs.getInt("Line")) ;Mid3.setNum(rs.getInt("Num"));Mid3.setExchange(rs.getInt("Exchange"));if(Mid3.getId()!=mid1.getId()){Mid3s.add(Mid3);}}}sql="select * from station where Line=? and Exchange !=?";  //找到在终点站那条线路上conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getLine());ps.setInt(1, end.getLine());rs=ps.executeQuery();while(rs.next()){Mid2=new User();Mid2.setName(rs.getString("Name"));Mid2.setId(rs.getInt("Id"));Mid2.setLine(rs.getInt("Line")) ;Mid2.setNum(rs.getInt("Num"));Mid2.setExchange(rs.getInt("Exchange"));Mid2s.add(Mid2);}for(User mid2:Mid2s){sql="select * from station where Name=?";//同名 但是Id 不一样conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setString(1, mid2.getName());rs=ps.executeQuery();while(rs.next()){Mid4=new User();Mid4.setName(rs.getString("Name"));Mid4.setId(rs.getInt("Id"));Mid4.setLine(rs.getInt("Line")) ;Mid4.setNum(rs.getInt("Num"));Mid4.setExchange(rs.getInt("Exchange"));if(Mid4.getId()!=mid2.getId()){Mid4s.add(Mid4);}}}int min=100;//选出最近转战口int Min1=Mid1.getId();//最近转战口ID 与始发站相同int Min2=Mid2.getId();//与终点站相同int Min3=Mid3.getId();int Min4=Mid4.getId();for(User mid1:Mid1s){for(User mid3:Mid3s){for(User mid2:Mid2s){for(User mid4:Mid4s){if((mid1.getExchange()==mid2.getExchange())&&(mid3.getLine()==mid4.getLine())&&(mid1.getExchange()==mid3.getLine())){int n=Math.abs(mid1.getId()-start.getId())+Math.abs(mid2.getId()-end.getId())+Math.abs(mid3.getId()-mid4.getId());if(min>n){min=n;Min1=mid1.getId();Min2=mid2.getId();Min3=mid3.getId();Min4=mid4.getId();}}}}}}System.out.println(Min1);User mid1=Select_Id(Min1);User mid2=Select_Id(Min2);User mid3=Select_Id(Min3);User mid4=Select_Id(Min4);System.out.println(mid2.getName()+"asdfasdfasdgasdgasdf"+mid1.getName());
                if(mid1.getId()>start.getId())//始发站->中转站
                {    sql="select * from station where Id between ? and ? order by Id";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, start.getId());ps.setInt(2, mid1.getId());rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(mid3.getId()>mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid4.getId());ps.setInt(2, mid3.getId()-1);/rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid3.getId()<mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid3.getId()+1);ps.setInt(2, mid4.getId());rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid2.getId()>end.getId())//始发站->中转站    终点站->中转站
                        {System.out.println("");sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//始发站->中转站->终点站
                     {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}else//中转站<-始发站
                {    sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, start.getId());ps.setInt(1, mid1.getId());rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }if(mid3.getId()>mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid4.getId());ps.setInt(2, mid3.getId()-1);rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid3.getId()<mid4.getId())//3->4
                    {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1,mid3.getId()+1);ps.setInt(2, mid4.getId());rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}if(mid2.getId()>end.getId())//中转站<-始发站    终点站->中转站
                        {sql="select * from station where Id between ? and ? order by Id desc";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(1, end.getId());ps.setInt(2, mid2.getId()-1);rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}else//中转站<-始发站
                     {sql="select * from station where Id between ? and ? order by Id ";conn=ut.getConn();ps=conn.prepareStatement(sql);ps.setInt(2, end.getId());ps.setInt(1, mid2.getId()+1);rs=ps.executeQuery();while(rs.next()) {NN=NN+1;user=new User();user.setName(rs.getString("Name"));user.setId(rs.getInt("Id"));user.setLine(rs.getInt("Line")) ;user.setNum(rs.getInt("Num"));user.setExchange(rs.getInt("Exchange"));users.add(user);       }}}}catch(SQLException e) {e.printStackTrace();}}System.out.println("aadfasdfsdaf"+NN+"adsfads"+Num1(a,b));if(NN>Num1(a,b)){return Num3(a,b);}else{return users;}}}

main.java

package com.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class main {public static void main(String[] args) {LoginerDaolmpl loginerDaoImpl=new LoginerDaolmpl();List<User> users = new ArrayList<User>();System.out.println("查询");
//        users=loginerDaoImpl.load();
//
//        for(User u:users) {
//            System.out.println(u.getName());
//        }Scanner scan=new Scanner(System.in);String a=scan.next();String b=scan.next();//        users=loginerDaoImpl.Num2(a, b);
//        users=loginerDaoImpl.Num3(a, b);
//        users=loginerDaoImpl.Num4(a, b);users=loginerDaoImpl.Num5(a, b);for(User u:users) {System.out.println(u.getId());System.out.println(u.getName());}System.out.println(loginerDaoImpl.Num1(a, b));}
}

User.java

package com.demo;
import java.sql.Connection;
public class User {private int Id;private int Line;private String Name;private int Num;private int Exchange;public int getId() {return Id;}public void setId(int id) {Id = id;}public int getLine() {return Line;}public void setLine(int line) {Line = line;}public String getName() {return Name;}public void setName(String name) {Name = name;}public int getNum() {return Num;}public void setNum(int num) {Num = num;}public int getExchange() {return Exchange;}public void setExchange(int exchange) {Exchange = exchange;}public User(int id,int line ,String name,int num,int exchange) {this.Name = name;this.Id=id;this.Line=line;this.Num=num;this.Exchange=exchange;}public User() {// TODO Auto-generated constructor stub
    }
}

DataBuilder.java

package DJSTL;
import util.util;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;public class DataBuilder {static Connection conn;static PreparedStatement ps = null;static ResultSet rs;static String sql = "select * from station";   //连接数据库static util ut= new util();static Scanner in = new Scanner(System.in);static String station_name;public static List<Station> line1 = new ArrayList<Station>();//1号线public static List<Station> line2 = new ArrayList<Station>();//2号线public static List<Station> line3 = new ArrayList<Station>();//3号线public static List<Station> line4 = new ArrayList<Station>();//10号线public static List<Station> line5 = new ArrayList<Station>();//s1号线public static List<Station> line6 = new ArrayList<Station>();//s8号线public static Set<List<Station>> lineSet = new HashSet<List<Station>>();//所有线集合public static int totalStaion = 0;//总的站点数量static {        String[] line1Arr=new String[29];String[] line2Arr=new String[37];String[] line3Arr=new String[34];String[] line4Arr=new String[18];String[] line5Arr=new String[21];String[] line6Arr=new String[19];//1号线try {conn=ut.getConn();ps=null;ResultSet rs=null;sql="select * from station where Line=?";ps=conn.prepareStatement(sql);ps.setInt(1, 1);rs=ps.executeQuery();int i=-1;while(rs.next()) {i++;    station_name=rs.getString("Name");line1Arr[i]=station_name;
//                    System.out.println(station_name);
                    }}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}try {conn=ut.getConn();ps=null;ResultSet rs=null;sql="select * from station where Line=?";ps=conn.prepareStatement(sql);ps.setInt(1, 2);rs=ps.executeQuery();int i=-1;while(rs.next()) {i++;    station_name=rs.getString("Name");line2Arr[i]=station_name;
//                    System.out.println(station_name);
                    }}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}try {conn=ut.getConn();ps=null;ResultSet rs=null;sql="select * from station where Line=?";ps=conn.prepareStatement(sql);ps.setInt(1,3);rs=ps.executeQuery();int i=-1;while(rs.next()) {i++;    station_name=rs.getString("Name");line3Arr[i]=station_name;
//                    System.out.println(station_name);
                    }}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}try {conn=ut.getConn();ps=null;ResultSet rs=null;sql="select * from station where Line=?";ps=conn.prepareStatement(sql);ps.setInt(1, 4);rs=ps.executeQuery();int i=-1;while(rs.next()) {i++;    station_name=rs.getString("Name");line4Arr[i]=station_name;
//                    System.out.println(station_name);
                    }}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}try {conn=ut.getConn();ps=null;ResultSet rs=null;sql="select * from station where Line=?";ps=conn.prepareStatement(sql);ps.setInt(1, 5);rs=ps.executeQuery();int i=-1;while(rs.next()) {i++;    station_name=rs.getString("Name");line5Arr[i]=station_name;
//                    System.out.println(station_name);
                    }}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}try {conn=ut.getConn();ps=null;ResultSet rs=null;sql="select * from station where Line=?";ps=conn.prepareStatement(sql);ps.setInt(1, 6);rs=ps.executeQuery();int i=-1;while(rs.next()) {i++;    station_name=rs.getString("Name");line6Arr[i]=station_name;
//                    System.out.println(station_name);
                    }}catch(SQLException e) {e.printStackTrace();}finally {try {if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e2) {e2.printStackTrace();}}for(String s : line1Arr){line1.add(new Station(s));}for(int i =0;i<line1.size();i++){if(i<line1.size()-1){line1.get(i).next = line1.get(i+1);line1.get(i+1).prev = line1.get(i);}}/*******************************************************************************///2号线for(String s : line2Arr){line2.add(new Station(s));}for(int i =0;i<line2.size();i++){if(i<line2.size()-1){line2.get(i).next = line2.get(i+1);line2.get(i+1).prev = line2.get(i);}}/*******************************************************************************///3号线for(String s : line3Arr){line3.add(new Station(s));}for(int i =0;i<line3.size();i++){if(i<line3.size()-1){line3.get(i).next = line3.get(i+1);line3.get(i+1).prev = line3.get(i);}}/*******************************************************************************/        //4号线for(String s : line4Arr){line4.add(new Station(s));}for(int i =0;i<line4.size();i++){if(i<line4.size()-1){line4.get(i).next = line4.get(i+1);line4.get(i+1).prev = line4.get(i);}}/*******************************************************************************/        //5号线for(String s : line5Arr){line5.add(new Station(s));}for(int i =0;i<line5.size();i++){if(i<line5.size()-1){line5.get(i).next = line5.get(i+1);line5.get(i+1).prev = line5.get(i);}}/*******************************************************************************/        //6号线for(String s : line6Arr){line6.add(new Station(s));}for(int i =0;i<line6.size();i++){if(i<line6.size()-1){line6.get(i).next = line6.get(i+1);line6.get(i+1).prev = line6.get(i);}}lineSet.add(line1);lineSet.add(line2);lineSet.add(line3);lineSet.add(line4);lineSet.add(line5);lineSet.add(line6);totalStaion  = line1.size() + line2.size() + line3.size() + line4.size() + line5.size() + line6.size();System.out.println("总的站点数量:"+totalStaion);}
}

Station.java

package DJSTL;import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
public class Station {private String name; //地铁站名称public Station prev; //本站在lineNo线上面的前一个站public Station next; //本站在lineNo线上面的后一个站//本站到某一个目标站(key)所经过的所有站集合(value),保持前后顺序private Map<Station,LinkedHashSet<Station>> orderSetMap = new HashMap<Station,LinkedHashSet<Station>>();public Station (String name){this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public LinkedHashSet<Station> getAllPassedStations(Station station) {if(orderSetMap.get(station) == null){LinkedHashSet<Station> set = new LinkedHashSet<Station>(); set.add(this);orderSetMap.put(station, set);}return orderSetMap.get(station);}public Map<Station, LinkedHashSet<Station>> getOrderSetMap() {return orderSetMap;}@Overridepublic boolean equals(Object obj) {if(this == obj){return true;} else if(obj instanceof Station){Station s = (Station) obj;if(s.getName().equals(this.getName())){return true;} else {return false;}} else {return false;}}@Overridepublic int hashCode() {return this.getName().hashCode();}
}

Subway.java

package DJSTL;import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Scanner;
public class Subway {private List<Station> outList = new ArrayList<Station>();//记录已经分析过的站点//计算从s1站到s2站的最短经过路径public void calculate(Station s1,Station s2){if(outList.size() == DataBuilder.totalStaion){System.out.println("找到目标站点:"+s2.getName()+",共经过"+(s1.getAllPassedStations(s2).size()-1)+"站");for(Station station : s1.getAllPassedStations(s2)){System.out.print(station.getName()+"->");}return;}if(!outList.contains(s1)){outList.add(s1);}//如果起点站的OrderSetMap为空,则第一次用起点站的前后站点初始化之if(s1.getOrderSetMap().isEmpty()){List<Station> Linkedstations = getAllLinkedStations(s1);for(Station s : Linkedstations){s1.getAllPassedStations(s).add(s);}}Station parent = getShortestPath(s1);//获取距离起点站s1最近的一个站(有多个的话,随意取一个)if(parent == s2){System.out.println("找到目标站点:"+s2+",共经过"+(s1.getAllPassedStations(s2).size()-1)+"站");for(Station station : s1.getAllPassedStations(s2)){System.out.print(station.getName()+"->");}return;}for(Station child : getAllLinkedStations(parent)){if(outList.contains(child)){continue;}int shortestPath = (s1.getAllPassedStations(parent).size()-1) + 1;//前面这个1表示计算路径需要去除自身站点,后面这个1表示增加了1站距离if(s1.getAllPassedStations(child).contains(child)){//如果s1已经计算过到此child的经过距离,那么比较出最小的距离if((s1.getAllPassedStations(child).size()-1) > shortestPath){//重置S1到周围各站的最小路径
                    s1.getAllPassedStations(child).clear();s1.getAllPassedStations(child).addAll(s1.getAllPassedStations(parent));s1.getAllPassedStations(child).add(child);}} else {//如果s1还没有计算过到此child的经过距离
                s1.getAllPassedStations(child).addAll(s1.getAllPassedStations(parent));s1.getAllPassedStations(child).add(child);}}outList.add(parent);calculate(s1,s2);//重复计算,往外面站点扩展
    }//取参数station到各个站的最短距离,相隔1站,距离为1,依次类推private Station getShortestPath(Station station){int minPatn = Integer.MAX_VALUE;Station rets = null;for(Station s :station.getOrderSetMap().keySet()){if(outList.contains(s)){continue;}LinkedHashSet<Station> set  = station.getAllPassedStations(s);//参数station到s所经过的所有站点的集合if(set.size() < minPatn){minPatn = set.size();rets = s;}}return rets;}//获取参数station直接相连的所有站,包括交叉线上面的站private List<Station> getAllLinkedStations(Station station){List<Station> linkedStaions = new ArrayList<Station>();for(List<Station> line : DataBuilder.lineSet){if(line.contains(station)){//如果某一条线包含了此站,注意由于重写了hashcode方法,只有name相同,即认为是同一个对象Station s = line.get(line.indexOf(station));if(s.prev != null){linkedStaions.add(s.prev);}if(s.next != null){linkedStaions.add(s.next);}}}return linkedStaions;}/*** desc: How to use the method* author chaisson* since 2015-5-31* version 1.0*/public static void main(String[] args) {long t1 = System.currentTimeMillis();Subway sw = new Subway();Scanner scan=new Scanner(System.in);String a=scan.next();String b=scan.next();sw.calculate(new Station(a), new Station(b));long t2 = System.currentTimeMillis();System.out.println();System.out.println("耗时:"+(t2-t1)+"ms");}
}

Util.java

package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class util {String user="sa";String password="zb753951";String url="jdbc:sqlserver://localhost:1433;DatabaseName=XVQIU";public  Connection getConn(){Connection conn=null;try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch (ClassNotFoundException e) {// TODO Auto-generated catch block
            e.printStackTrace();}try {conn=DriverManager.getConnection(url, user, password);} catch (Exception e) {// TODO Auto-generated catch block
                e.printStackTrace();}return conn;}public void close(ResultSet rs, Statement state, Connection conn) {if(rs!=null){try{rs.close();}catch(SQLException e){e.printStackTrace();}}if(state!=null){try{state.close();}catch(SQLException e){e.printStackTrace();}}if(conn!=null){try{conn.close();}catch(SQLException e){e.printStackTrace();}}}
}

实验截图:

转载于:https://www.cnblogs.com/jbwen/p/11071622.html

个人作业4 结对开发地铁相关推荐

  1. 课堂练习----结对开发地铁

    1.开发一套石家庄地铁线路查询系统. 2.功能设计 (1)数据库设计:将石家庄地铁线路图的各个线路,各个站点,换乘信息等用数据库的形式保存起来,应该保存的信息有 {线路号,线路的各个站名,车站的换乘信 ...

  2. 软件工程课堂作业(八)——结对开发(三)

    一.题目及要求: 题目:返回一个整数数组中最大子数组的和. 要求(新加):①要求程序必须能处理1000个元素:②每个元素都是int32类型的. 结对人员:焦燕   胡亚宝 二.设计思路: ①处理100 ...

  3. 结对开发--求二维数组的最大子数组

    小组成员:信1201-1班  黄亚萍 信1201-1班  袁亚姣 一.题目要求 程序要使用的数组放在一个叫 input.txt 的文件中,  文件格式是: 数组的行数, 数组的列数, 每一行的元素,  ...

  4. 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

    一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...

  5. 结对开发 随机产生数组并求最大子数组的和

    一.题目 返回一个整数数组中最大子数组的和. 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O( ...

  6. 结对开发——一维数组最大子数组判断溢出

    一 题目 求一维数组最大子数组和 要求:1000个数以上,整数 二.设计思路 最大子数组很好找到,但是子数组和的溢出问题很难解决. 经过不断的思考,我得出了结论: 溢出是程程序设计者设计时的不足所带来 ...

  7. 结对开发2(求二维数组的最大子数组和)

    一,题目要求: 输入一个二维数组,求出此二维数组的最大子数组和. 二,设计思路: 利用for循环进行遍历,求出数组中每一个子数组的和,最终求出这些子数组的最大的一个值.程序中利用了调用函数,被调函数分 ...

  8. 结对开发——返回一个整数数组中最大子数组的和

    一.题目要求 1.输入一个整型数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 ...

  9. 24HTML5期末大作业:XXX 网站设计——指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程 网页规

    HTML5期末大作业:XXX 网站设计--指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划 ...

  10. HTML5期末大作业:XXX 网站设计——指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规

    HTML5期末大作业:XXX 网站设计--指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划 ...

最新文章

  1. 搭建hbase1.2.5完全分布式集群
  2. 如何计算服务限流的配额
  3. 如何在Windows下编译OpenSSL?
  4. 分享一下字符串匹配BM算法学习心得。
  5. python写的购物车程序
  6. Visual Studio 2017 15.6版本预览,增加新功能
  7. [css] 你有用过table布局吗?说说你的感受
  8. Nanachi发布:基于 React 的多端小程序转译框架
  9. golang 指针总结(与C/C++区别不大,就是不可以p+1偏移)
  10. 通过安装扩展让 KDE Plasma 5 桌面看起来感觉就像 Windows 10 桌面
  11. 开发工具 codepen codepen vscode
  12. import pyart时报错 ValueError: numpy.ndarray has the wrong size, try recompiling.
  13. Shell脚本学习-阶段十二-在CentOS 7上给一个网卡分配多个IP地址
  14. 软件工程考试归纳知识点
  15. 电路串联和并联图解_串联电路和并联电路
  16. u检验中的查u界值表_u检验、t检验、F检验、X2检验
  17. User does not have the ‘LOCK TABLES‘ privilege required to obtain a consistent snapshot by preventin
  18. 模仿微信更改头像,图片局部放大
  19. 如何查询设备序列号?其实一条命令搞定!
  20. 我去扒了杜蕾斯的微博

热门文章

  1. Java生成随机数字10位数
  2. 将文件夹压缩成zip文件的php代码、实现批量下载
  3. seo网站关键词优化三大要素:技术 思路 执行力
  4. 计算机主机hs编码,电脑设备的进出口品名
  5. length()、size()、sizeof()三者的区别
  6. Ignite VS Redis
  7. Day434.订单库存服务分布式事务的最终解决 -谷粒商城
  8. WIN7 SP1 windbg安装符号文件
  9. Python黑客攻防(九)编写后门程序
  10. xss.haozi.me在线靶机挑战