北京地铁查询系统

先说一下半成品。按照老师的要求就是说实现了线路查询(即输入线路号返回该线路上的所有站点)和站点查询(即输入一个站点返回该站点的线路号),还有一个换乘查询(不会),经过我的一番查找和思考,只能实现一条线路上的起始点查询,考虑到地铁是来回往返的,所以就是说加了个方向(正向反向)。这个一条线路的我是这么弄的,就是返回起点和终点的id号,然后用sql语句between..and..存到数组里,因为它始终是从小到达这样存的,所以又设置了一个方向,正向的话就是正常输出,反向的话就是从后往前输出。

这是方法:

复制代码
public void showhc1(ArrayList<ditie> ditie, int n1,int n2) throws ClassNotFoundException, SQLException {//线路相同时的数组
        String sql ="select * from llines where id between ? and ? order by id";
        Connection connection = Util.getConnection();
        try {
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setInt(1, n1);
            ps.setInt(2, n2);
            ResultSet rs =  ps.executeQuery();
            while(rs.next()){
                ditie A = new ditie();
                A.setId(rs.getInt(1));
                A.setStation(rs.getString(2));
                A.setLine(rs.getString(3));
                ditie.add(A);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
复制代码

这个是servlet:

复制代码
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决中文乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        Selectline A=new Selectline();
        String s1=req.getParameter("sname1");
        String s2=req.getParameter("sname2");
        int flag=1;//1代表方向为正向
        ArrayList<ditie> ditie = new ArrayList<>();
        ArrayList<jhPoint> B = new ArrayList<>();//该线路上交换点的数组
        try{
            String a1=A.shows(s1);//a线路
            String b1=A.shows(s2);//b线路
            if(!A.isExist(s1)&&!A.isExist(s2)){//若两个站都不是交换点
                int a=A.showid(s1);//a站号
                int b=A.showid(s2);//b站号
                if(a1.equals(b1)){//若两站在同一线路上
                    if(a<=b){//a到b为正向
                        A.showhc1(ditie,a,b);
                    }else{//a到b为反向
                        A.showhc1(ditie,b,a);
                        flag=0;
                    }
                }else{//若两站不在同一线路
                    A.excPoint(B,a1);
                    for(int i=0;i<B.size();i++){

                    }
                }
            }
        }catch(ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        HttpSession session1=req.getSession();
        session1.setAttribute("flag", flag);//保存方向
        req.setAttribute("ditie",ditie);//保存地铁数组信息
        req.getRequestDispatcher("huancheng.jsp").forward(req, resp);
    }
复制代码

本来两条线路的我还专门给交换点建了一个表,然后想了一个很笨的办法,也实现不了,最后是参考大佬的方法,使用广度优先搜索的方法,不管在不在一个线路上都可以搞出来。虽然算法没看明白,但是了解到了java封装的一些集合框架,全部都封装在util的这个包里,像Hashmap,ArrayList这些 ,只是了解了,但是不会用。

posted @   KongLong_cm  阅读(569)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示