地铁线路查询的总结分析
设计思想:
站点查询为数据库查询操作,通过输入站点名称,输出线路
线路查询为数据库list查询操作,通过输入线路名称。输出当前输入线路所有站点
最短路线为BFS广度优先遍历,输入起点终点,输出经过线路,转站次数,转站点。
界面添加当前时间,添加跳转链接,将三个查询总结到同一个界面,输出在查询下方。
全国地图为高德地图,在已有的北京、石家庄有marker点,点击可以跳转到所在城市的地铁图。
下面是代码:
package result;
import java.io.IOException;
import java.util.List;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/Servse")
public class Servse extends HttpServlet{
Dao d=new Dao();
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String method=request.getParameter("method");
if (method==null){
method="findAll";
}
switch (method){
case "find":
String nol=request.getParameter("nol");
List<String> l=d.find(nol);
request.setAttribute("test", l);
request.getRequestDispatcher("xian.jsp").forward(request, response);
break;
case "findd":
String name=request.getParameter("name");
List<String> li=d.findd(name);
request.setAttribute("test", li);
request.getRequestDispatcher("zhan.jsp").forward(request, response);
break;
case "min":
String start=request.getParameter("start");
String end=request.getParameter("end");
List<String> lis=d.result(start,end);
request.setAttribute("test", lis);
request.getRequestDispatcher("zui.jsp").forward(request, response);
break;
}
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
doPost(request,response);
}
}
package result;
import line.Tool;
import java.util.*;
import Contrl.BFS;
import Contrl.Read;
import Model.Route;
import Model.Station;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Dao {
// 获取该线路的所有站点
public List<String> find(String nol) {
List<String> list = new ArrayList<>();
Connection conn = Tool.getConnection();
PreparedStatement pre = null;
ResultSet res = null;
String sql = "SELECT *FROM ditie1 where xianlu=? ";
try {
pre = conn.prepareStatement(sql);
pre.setString(1, nol);
res = pre.executeQuery();
while (res.next()) {
String num1 = res.getString("zhandian");
list.add(num1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
Tool.release(conn, pre, res);
}
return list;
}
//获取站点所在的线路
public List<String> findd(String name) {
List<String> list = new ArrayList<>();
Connection conn = Tool.getConnection();
PreparedStatement pre = null;
ResultSet res = null;
String sql = "SELECT *FROM ditie1 where zhandian=? ";
try {
pre = conn.prepareStatement(sql);
pre.setString(1, name);
res = pre.executeQuery();
while (res.next()) {
String hao = res.getString("xianlu");
list.add(hao);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
Tool.release(conn, pre, res);
}
return list;
}
public ArrayList<String> result(String name1, String name2) {
BFS bfs = new BFS();
String start = name1;
Read re = new Read();
ArrayList<Station> station = re.getStation();
ArrayList<Route> route = re.getRoute();
station = bfs.FindMin(start, station);
String end = name2;
ArrayList<String> str = new ArrayList<>();
str = bfs.shortPath(end, station, str);
return str;
}
}
package line;
import java.sql.*;
public class Tool {
private static Connection connection;
private static String url="jdbc:mysql://localhost:3306/jiaqi?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
private static String user="roots";
private static String pass="123456";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
connection=DriverManager.getConnection(url,user,pass);
}catch(SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void release(Connection connection,Statement statement,ResultSet resultSet) {
try {
if(connection!=null) {
connection.close();
}
if(statement!=null) {
statement.close();
}
if(resultSet!=null) {
resultSet.close();
}
}
catch(SQLException e) {
e.printStackTrace();
}
}
}
package Model;
import java.util.*;
public class Route {
private String rname;
private ArrayList<String> route = new ArrayList<>();
public String getRname() {
return rname;
}
public void setRname(String rname) {
this.rname = rname;
}
public void addRoute(String sname) {
this.route.add(sname);
}
public String allRoute() {
String result="";
for(int i=0;i<route.size();i++) {
result+=route.get(i)+" ";
}
return result.trim();
}
public ArrayList<String> getRoute() {
return this.route;
}
}
package Model;
import java.util.*;
public class Station {
public final static int MaxDist = 65535;
private String sname;//站名
private ArrayList<String> bTR = new ArrayList<>();//线路名
private ArrayList<String> bs = new ArrayList<>();//邻站(距离为1的站)
//执行算法后更改
private Station ps;//前一个站点
private int dist;//距离(距起始站)
private int transNum;//换乘数
private int visited;//保存是否访问
public Station() {
this.dist=MaxDist;
this.transNum=0;
this.visited=0;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
//站所属路线(可能有多个)
public void setBTR(String belongToRname) {
this.bTR.add(belongToRname);
}
//所属路线输出(用于算法)
public ArrayList<String> getBTR() {
return this.bTR;
}
//相邻站录入
public void setBs(String sname) {
for(int i=0;i<this.bs.size();i++) {
if(this.bs.get(i).equals(sname)) {
return;
}
}
this.bs.add(sname);
}
//相邻站输出(用于算法)
public ArrayList<Station> getBs(ArrayList<Station> station){
ArrayList<Station> result = new ArrayList<>();
for(int i=0;i<this.bs.size();i++) {
String tmp = this.bs.get(i);
for(int j=0;j<station.size();j++) {
if(station.get(j).getSname().equals(tmp)) {
result.add(station.get(j));
break;
}
}
}
return result;
}
public int getVisited() {
return visited;
}
public void setVisited(int visited) {
this.visited = visited;
}
//执行算法后更改
public Station getPs() {
return ps;
}
public void setPs(Station ps) {
this.ps = ps;
}
public int getDist() {
return dist;
}
public void setDist(int dist) {
this.dist = dist;
}
public int getTransNum() {
return transNum;
}
public void setTransNum(int transNum) {
this.transNum = transNum;
}
}



总结分析:需要在网上学习不会的。需要研究许多的代码。


浙公网安备 33010602011771号