石家庄地铁系统开发实例
合作人 周博
实现功能:可以进行不同路线之间的换乘,查找最短路程;
缺点:功能并不完善,代码过于冗余;界面不够美观。
实现功能相关代码
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; } }