地铁线路管理系统

合作人:李琼

目标:设计一套地铁开发系统,输入任意两个地方,给出最短路线

方案设计:

第一步做到点击地铁线路显示地铁站点

第二步做到输入起始站,终点站,输出最短路线

源代码:

package Metro;

public class Calculat {
    public String[] judge(int site1, String[][] route, int site2, String[][] route2) {
        String [] route3;
        if(route[0][0].equals(route2[0][0])) {
            route3= Setroute(site1,route,site2);
        }
        else {
            route3= Setroute(site1,route,site2,route2);
        }
        return route3;
    }
    private String[] Setroute(int site1, String[][] route, int site2) {
        String [] route3=new String [30];
        if(site1>site2) {
            
            for(int i=site1,j=0;i>=site2;i--,j++) {
                route3[j]=route[i-1][2];
            }
        }
        else {
            for(int i=site1,j=0;i<=site2;i++,j++) {
                route3[j]=route[i-1][2];
            }
        }
        return route3;
    }
    private String[] Setroute(int site1, String[][] route, int site2, String[][] route2) {
        String [] route3=new String [100];
        String [] route4=new String [30];
        int line2=0,site0;
        System.out.println(site2);
        line2=Integer.parseInt(route2[0][0]);
        site0=Find(route,line2,site1);
        route3=Setroute(site1,route,site0);
        site0=Find(route,route2,site0);
        route4=Setroute(site0,route2,site2);
        route3=Combine(route3,route4);
        return route3;
    }
    private int Find(String[][] route, String[][] route2, int site0) {
        int i=0;
        for(;route2[i][0]!=null;i++) {
            if(route2[i][2].equals(route[site0-1][2]))break;
        }
        return i;
    }
    private String[] Combine(String[] route3, String[] route4) {
        int i=0;
        String [] route=new String [100];
        for(;route3[i]!=null;i++) {
            route[i]=route3[i];
        }
        for(int j=0;route4[j]!=null;i++,j++) {
            route[i]=route4[j];
        }
        return route;
    }
    private int Find(String[][] route, int line2, int site1) {
        int [] site=new int [2];
        for(int i=0,j=0;route[i][0]!=null&&j<2;i++) {
            if(route[i][3]!=null&&route[i][3].equals(""+line2)) {site[j]=Integer.parseInt(route[i][1]);j++;}
        }
        if(site[1]!=0)site[0]=judge_site(site,site1);
        return site[0];
    }
    private int judge_site(int[] site, int site1) {
        int diff1,diff2;
        diff1=site[0]-site1;
        diff2=site[1]-site1;
        if(diff1<0)diff1=0-diff1;
        if(diff2<0)diff2=0-diff2;
        if(diff1<diff2)    return site[0];
        else return site[1];
    }

}package Metro;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Dao {
    public String GetSite(int num,String name) {                    //查找节点
        String sql = "select * from  site"+num+" where sitename='"+name+"'";
        String result=null;
        Connection conn = DBUtil.getConn();
        Statement state=null;
        ResultSet rs = null;
        System.out.println(sql);
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while(rs.next()) {
            result=rs.getString("id");
            }
        }catch(SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(rs, state, conn);
        }
        
        return result;
    }

    public String[][] GetRote(String res) {            //获取某个表整条路线
        String sql = "select * from  "+res+" ";
        String [][] result=new String [50][4];
        int i=0;
        Connection conn = DBUtil.getConn();
        Statement state=null;
        ResultSet rs = null;
        System.out.println(sql);
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while(rs.next()) {
                result[i][0]=res.substring(4, 5);
                result[i][1]=rs.getString("id");
                result[i][2]=rs.getString("sitename");
                result[i][3]=rs.getString("transfer");
                i++;
                }
            }catch(SQLException e) {
                e.printStackTrace();
            } finally {
                DBUtil.close(rs, state, conn);
            }
            
        return result;
    }

    public String search(String strname) {
        String num=null;
        int i=1;
        for(;i<=6;i++) {
            num=GetSite(i,strname);
            if(num!=null)break;
        }
        return i+" "+num;
    }
}
package Metro;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil {
    
    public static String db_url = "jdbc:mysql://localhost:3306/subway?useSSL=false&serverTimezone=GMT";
    public static String db_user = "root";
    public static String db_pass = "1234567";
    
    public static Connection getConn () {
        Connection conn = null;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(db_url, db_user, db_pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return conn;
    }
    
    /**
     * 关闭连接
     * @param state
     * @param conn
     */
    public static void close (Statement state, Connection conn) {
        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static 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();
            }
        }
    }

}
package Metro;

public class Main {

    public static void main(String[] args) {
        //Samerote();
        
        Different();
        
}

    private static void Different() {
        Dao service=new Dao();
        Calculat cal=new Calculat();
        String Strname="南王";
        String Endname="碧海云天";
        String site1=null,site2=null;
        int line1,line2;                                                    //开始节点,结束节点所在的线路号
        String [][] route=new String [50][4];
        String [][] route2=new String [50][4];
        String [] route3=new String [100];
        line1=Integer.parseInt(service.search(Strname).substring(0, 1));
        line2=Integer.parseInt(service.search(Endname).substring(0, 1));
        site1=service.search(Strname).substring(2, service.search(Strname).length());
        site2=service.search(Endname).substring(2, service.search(Endname).length());
        route=service.GetRote("site"+line1);
        route2=service.GetRote("site"+line2);
        System.out.println(line1+"  "+site1);
        System.out.println(line2+"  "+site2);
        show(route);
        show(route2);
        route3=cal.judge(Integer.parseInt(site1),route,Integer.parseInt(site2),route2);
        show(route3);
    }

    private static void Samerote() {
        Dao service=new Dao();
        Calculat cal=new Calculat();
        String [][] route=new String [30][4];            //开始节点所在的线路,(线路号,结点序号,结点名称,换乘线路号)
        String [][] route2=new String [30][4];            //结束节点所在的线路
        String [] route3=new String [50];                //所需要的线路
        String site1=null,site2=null;                    //开始节点,结束节点所在的线路的次序号
        String Strname="南王";
        String Endname="华医学院";
        int num=4;
        site1=service.GetSite(num,Strname);
        route=service.GetRote("site"+num);
        site2=service.GetSite(num,Endname);
        route2=service.GetRote("site"+num);
        System.out.println(site1);
        System.out.println(site2);
        show(route);
        show(route2);
        route3=cal.judge(Integer.parseInt(site1),route,Integer.parseInt(site2),route2);
        show(route3);
    }

    private static void show(String[][] route) {
        System.out.println(route[0][0]);
        System.out.println(route[0][1]);
        for(int i=0;route[i][0]!=null;i++) 
        {
            System.out.print(route[i][2]+"->");
        }
        System.out.println();
    }

    private static void show(String[] route) {
        System.out.println("线路");
        for(int i=0;route[i]!=null;i++) 
        {
            System.out.print(route[i]);
            if(route[i+1]!=null)System.out.print("->");
            else System.out.println();
        }
    }
        
    }

  

开发过程中的时间记录日志:

 

计划

预估耗时

实际开始时间

实际结束时间

实际耗时

任务估计时间

3.5小时

3:30pm

9:25pm

大约5个小时

· 需求分析

0.5小时

3:30pm

4:.15pm

0.75小时

· 代码设计说明

0.5小时

4:25pm

5:15pm

40分钟

· 具体编码

1.5小时

6:00pm

8:00pm

2小时

· 测试并完善代码

0.5小时

8:pm

8:45pm

0.75小时

· 过程总结

0.5小时

8:50pm

9:20pm

0.5小时

合计

3.5小时

---

---

4小时40分钟

截图:

 

 

总结分析:
一个是我们的地铁外观不好看,没有调用百度开源报表
另一方面是算法不够简洁,实现时间较长
posted @ 2019-04-03 19:49  云破月来花弄影  阅读(1091)  评论(0编辑  收藏  举报