zoukankan      html  css  js  c++  java
  • 石家庄地铁查询PSP0级

    一、需求   :地铁(石家庄地铁)线路查询                                         

     

     二、       学生:洪鼎淇

        合作对象:宋子健

         时间记录日志:  

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    2019/3/30

    10:00

    14:00

     13:00

    3.5小时

    web界面

    地铁地图绘制

    2019/4/2

    7:00

    13:00

     12:00

    4.5小时

    优化界面

    构建数据库

    实现基本线路查询

    2019/4/3

    18:00

    23:00

     20:40

    3小时

    优化查询功能

                  三、程序:

                  

    行中代码如下:

    //数据处理层
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
      <%@ page language="java" import="java.util.*"%>
      <%@ page language="java" import="com.hdq.service.ClassService"%>
      <%@ page language="java" import="com.hdq.entity.LineInfo"%>
      <%@ page language="java" import="com.hdq.entity.Linenum" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>数据处理层</title>
     
    </head>
    <body>
    <%
        request.setCharacterEncoding("utf-8");
        //--------------------------------
        String start=request.getParameter("start");
        String end=request.getParameter("end");
        ClassService service=new ClassService();
        @SuppressWarnings("unchecked")
        List<Linenum> ln=(List<Linenum>)service.list("linenum", new String[]{"linenum"},new Linenum().getClass());
        int g_slinenum=-1,g_elinenum=-1;
        int g_snum=-1,g_enum=-1;
        List<LineInfo> pathInfo=new ArrayList<LineInfo>();
        c:for(Linenum it:ln)
        {
            int g_count=0;
            @SuppressWarnings("unchecked")
            List<LineInfo> info=(List<LineInfo>)service.list("line"+it.getLinenum(), new String[]{"linenum","name"},new LineInfo().getClass());
             
            for(LineInfo it1:info)
            {
                 
                if(it1.getName().equals(start))
                {
                     
                    //找到相应的节点
                    g_slinenum=it.getLinenum();
                    g_snum=g_count;
                }
                if(it1.getName().equals(end))
                {
                    g_elinenum=it.getLinenum();
                    g_enum=g_count;
                }
                if(g_elinenum!=-1&&g_slinenum!=-1)
                    break c;
                g_count++;
            }
             
        }
        if(g_slinenum!=-1&&g_elinenum!=-1)
        {
            if(g_elinenum!=g_slinenum)
            {
                @SuppressWarnings("unchecked")
                List<LineInfo> einfo=(List<LineInfo>)service.list("line"+g_elinenum, new String[]{"linenum","name"},new LineInfo().getClass());
                @SuppressWarnings("unchecked")
                List<LineInfo> sinfo=(List<LineInfo>)service.list("line"+g_slinenum, new String[]{"linenum","name"},new LineInfo().getClass());
                int g_center=-1,g_ecenter=-1;
                boolean fOutside=false,feOutside=false;
                for(int i=0;i<sinfo.size();i++)
                {
                    if(i==g_snum)
                        fOutside=true;
                    if(sinfo.get(i).getLinenum()==g_elinenum)
                    {
                        g_center=i;
                    }
                    if(g_center!=-1&&fOutside)
                        break;
                }
                 
                if(g_center<g_snum)
                {
                    pathInfo=sinfo.subList(g_center, g_snum+1);
                    Collections.reverse(pathInfo);
                }
                else
                {
                     
                    pathInfo=sinfo.subList(g_snum, g_center+1);
                }
                List<LineInfo> subPathInfo=new ArrayList<LineInfo>();
                for(int i=0;i<einfo.size();i++)
                {
                     
                    if(i==g_enum)
                        feOutside=true;
                    if(g_center<g_snum)
                    {
                        if(einfo.get(i).getName().equals(sinfo.get(g_snum).getName()))
                        {
                            g_ecenter=i;
                        }
                    }
                    else
                    {
                        if(einfo.get(i).getName().equals(sinfo.get(g_center).getName()))
                        {
                            g_ecenter=i;
                        }
                    }
                    if(g_ecenter!=-1&&feOutside)
                        break;
                }
                 
                if(g_ecenter<g_enum)
                {
                    subPathInfo=einfo.subList(g_ecenter, g_enum+1);
                }
                else
                {
                    subPathInfo=einfo.subList(g_enum, g_ecenter+1);
                    Collections.reverse(subPathInfo);
                }
                LineInfo pointInfo=new LineInfo();
                pointInfo.setName("换乘"+g_elinenum+"号线路");
                pathInfo.add(pointInfo);
                pathInfo.addAll(subPathInfo);
                 
            }
            else
            {
                @SuppressWarnings("unchecked")
                List<LineInfo> sinfo=(List<LineInfo>)service.list("line"+g_slinenum, new String[]{"linenum","name"},new LineInfo().getClass());
                 
                if(g_snum>g_enum)
                {
                    pathInfo=sinfo.subList(g_enum,g_snum+1);
                    Collections.reverse(pathInfo);
                }
                else pathInfo=sinfo.subList(g_snum,g_enum+1);
            }
            String info=new String("查询的信息如下:");
            for(LineInfo it:pathInfo)
            {
                info+=it.getName();
                if(!it.getName().equals(pathInfo.get(pathInfo.size()-1).getName()))
                {
                    info+="-";
                }
            }
            request.setAttribute("message",info);
        }
        else
        {
            request.setAttribute("message","查无信息,请确定你输入的起点和终点的名称正确");
        }
        request.getRequestDispatcher("subway.jsp").forward(request,response);
    %>
    </body>
    </html><br>//具体代码省略<br> 

    上述的函数是该数据的数据处理层,主要是对里面路径进行查询,目前并不是对最短路径进行查询,现在正在利用迷宫算法修改,已经快完善了,并且目前支持换乘两次之后最短路径的查询,目前卡在了循环的中间没有办法出来。

    对于该系统实现的分析,首先是实现界面,界面的实现需要对矢量图进行放大缩小移动等操作,里面的代码由html中的代码实现,矢量图是在实验期间根据图片画出来的,因此在放大和缩小的时候清晰度还是挺高的

    subway.jsp的代码实现了界面的操作功能(主要是在javascript中),handleSql.jsp主要是实现连接数据库及对数据查询,最短路径查询的功能

    运行结果: 

     

     

     

      

  • 相关阅读:
    算法笔记_187:历届试题 网络寻路(Java)
    算法笔记_186:历届试题 高僧斗法(Java)
    算法笔记_185:历届试题 格子刷油漆(Java)
    Tomcat,JBoss与JBoss Web
    JBoss Web和Tomcat的区别
    tomcat与jboss等容器的区别
    dubbo
    ZooKeeper学习第一期---Zookeeper简单介绍
    Java GC系列
    Tomcat中JVM内存溢出及合理配置
  • 原文地址:https://www.cnblogs.com/halone/p/10652527.html
Copyright © 2011-2022 走看看