石家庄地铁查询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主要是实现连接数据库及对数据查询,最短路径查询的功能

运行结果: 

 

 

 

  

posted on 2019-04-03 23:55  Halone  阅读(204)  评论(0编辑  收藏  举报