2023.3.20课后作业
地铁系统JavaWeb开发内容
设计思想:本次项目具体思路为
1.首先是实现常规功能,即输入线路显示出对应站点和输入站点显示出经过该站点的线路
这两个功能相对来说比较简单,只是在数据库中进行查询,使用对应的sql语句进行查询即可
2.对于核心功能:查询两站中的最短线路,使用了一个比较暴力的方法,即查询出所有输入的站点的中转站,把他们放入另一个表单中,对于同一条线路上的直接顺序输出站点即可,对于可以直接中转的,获取他们两个的线路,再经过中转站即可,对于不能直接中转的,从第一个站点遍历通往另一条线路的站点,再次遍历
源程序代码:
Line.java
copy
package Bean; import java.util.ArrayList; /* * */ public class Line { private String startstopname;//起始站站名 private String endstopname;//结束站站名 private int startstopID;// 起始站站编号 private int endstopID;//结束站站编号 private String startline1=null;//起始点的第一条线 private String startline2=null;//起始点第二条线 private String endline1=null;//结束点的第一条线 private String endline2=null;//结束点的第二条线 private ArrayList<String> array = new ArrayList<String>();//存放过程站点 private int originline;//起始站所在线路 private int finishline;//结束点所在线路 private String middlestop;//中转站站名 private String temporarystartstopname;//临时起始站点名称 private String temporaryendstopname;//临时终点站点名称 private int temporaryline=0;//临时线路 public Line() { } public int getTemporaryline() { return temporaryline; } public void setTemporaryline(int temporaryline) { this.temporaryline = temporaryline; } public String getTemporarystartstopname() { return temporarystartstopname; } public void setTemporarystartstopname(String temporarystartstopname) { this.temporarystartstopname = temporarystartstopname; } public String getTemporaryendstopname() { return temporaryendstopname; } public void setTemporaryendstopname(String temporaryendstopname) { this.temporaryendstopname = temporaryendstopname; } public String getMiddlestop() { return middlestop; } public void setMiddlestop(String middlestop) { this.middlestop = middlestop; } public int getOriginline() { return originline; } public void setOriginline(int originline) { this.originline = originline; } public int getFinishline() { return finishline; } public void setFinishline(int finishline) { this.finishline = finishline; } public ArrayList<String> getArray() { return array; } public void setArray(ArrayList<String> array) { this.array = array; } public String getStartline1() { return startline1; } public void setStartline1(String startline1) { this.startline1 = startline1; } public String getStartline2() { return startline2; } public void setStartline2(String startline2) { this.startline2 = startline2; } public String getEndline1() { return endline1; } public void setEndline1(String endline1) { this.endline1 = endline1; } public String getEndline2() { return endline2; } public void setEndline2(String endline2) { this.endline2 = endline2; } public String getStartstopname() { return startstopname; } public void setStartstopname(String startstopname) { this.startstopname = startstopname; } public String getEndstopname() { return endstopname; } public void setEndstopname(String endstopname) { this.endstopname = endstopname; } public int getStartstopID() { return startstopID; } public void setStartstopID(int startstopID) { this.startstopID = startstopID; } public int getEndstopID() { return endstopID; } public void setEndstopID(int endstopID) { this.endstopID = endstopID; } }
copy
package Dao; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; /* * 加载连接数据库 */ import java.sql.*; public class JdbcUtils { private static Connection connection = null; private static String url = "jdbc:mysql://localhost:3306/subway2"; private static String usrname = "root"; private static String password = "arzia20021209"; static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() { try { connection = DriverManager.getConnection(url, usrname, password); } 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(); } } }
copy
package Dao; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.concurrent.RunnableScheduledFuture; import Bean.Line; public class UserDao { int demostartid=0,demoendid=0; ArrayList<String> array=new ArrayList<String>(); /* * 起始点与终点在一条线上且非换乘站 */ public List<String> find1(String line){ List<String>list=new ArrayList<>(); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = JdbcUtils.getConnection(); String sql = "select * from firstline where Line=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, line); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { String s=resultSet.getString(2); list.add(s); } } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.release(connection, preparedStatement, resultSet); } return list; } public List<String> find3(String linepoint){ List<String>list=new ArrayList<>(); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = JdbcUtils.getConnection(); String sql = "select * from firstline where StopName=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, linepoint); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { String s=resultSet.getString(3); list.add(s+"号线 "); } } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.release(connection, preparedStatement, resultSet); } return list; } public ArrayList<String> Connectonlyoneline(Line line) throws ClassNotFoundException { ArrayList<String> array1=new ArrayList<String>(); int c=0; try { //连接数据库 Connection con = JdbcUtils.getConnection(); Statement statement = con.createStatement(); //是否成功连接 if(!con.isClosed()) System.out.println("Succeeded connecting to the Database!"); String sql="SELECT * FROM firstline f1 JOIN firstline f2 on f1.Line=f2.Line WHERE f1.StopName='"+line.getStartstopname()+"' AND f2.StopName='"+line.getEndstopname()+"'"; //保证起始站(同时有可能是中转站)与终点站(同时有可能是中转站)在同一条线路上 ResultSet rs=statement.executeQuery(sql); while(rs.next()) { line.setTemporaryline(rs.getInt("Line")); } //准备数据库查询:将起始站和终点站的中间站 System.out.println(line.getTemporaryline()); array.add("乘坐"+line.getTemporaryline()+"号线"); c=select(line); //得到起始站与终点站的顺序 System.out.println(c); if(c==1) {//起始站编号小于终点站,即起始站在前,终点站在后 String sql1="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 找到这样的一些站:它们的ID号大于起始站的ID号, * 它们的ID号小于结束站的ID号,并且它们都是同一条线上的站点 */ ResultSet rs1 = statement.executeQuery(sql1); while(rs1.next()) {//遍历结果集 array.add(rs1.getString(2)); } rs1.close(); } else if(c==2) {//起始站编号大于终点站,即起始站在后,终点站在前 String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 同上 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) { array1.add(rs2.getString("StopName")); } for(int i=0;i<array1.size();i++) {//测试是否有值 System.out.print(array1.get(i)+" "); } for(int j=array1.size()-1;j>=0;j--) {//将站名倒序传入 array.add(array1.get(j)); } rs2.close(); } con.close(); statement.close(); }catch(SQLException e) { e.printStackTrace(); }finally { line.setArray(array);//似乎无意义,在下面已经传回array for(int i=0;i<array.size();i++) { System.out.println(array.get(i)+" "); } } return array; } /* * 先不着急,起始站/终点站是换乘站的情况最后考虑 * 首先判断起始站或结束站是否为中转站 */ public void JudgeChangeStop(Line line) throws ClassNotFoundException { try { Connection con=JdbcUtils.getConnection(); Statement statement=con.createStatement(); String sql="select * from changeline"; ResultSet rs = statement.executeQuery(sql); while(rs.next()) { if(line.getStartstopname().equals(rs.getString("ChangeStopName"))) { line.setStartline1(rs.getString("ID1")); line.setStartline2(rs.getString("ID2")); } if(line.getEndstopname().equals(rs.getString("ChangeStopName"))) { line.setEndline1(rs.getString("ID1")); line.setEndline2(rs.getString("ID2")); } } con.close(); statement.close(); rs.close(); }catch(SQLException e) { throw new RuntimeException(e); }finally { if(line.getStartline1()==null) { } } } /* * 看站点顺序 */ public int select(Line line) throws ClassNotFoundException { int i=0;//返回值,1为顺序(数据库中),2为逆序(数据库中) try { Connection con = JdbcUtils.getConnection(); Statement statement=con.createStatement(); String sql="select * from firstline where StopName='"+line.getStartstopname()+"'and Line='"+line.getTemporaryline()+"' or StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"'"; /* * 找到与起始站名称相同,结束站名称相同,且同时属于同一条线的两个站 */ ResultSet rs = statement.executeQuery(sql); while(rs.next()) { if(line.getStartstopname().equals(rs.getString("StopName"))) { line.setStartstopID(rs.getInt("StopID")); } if(line.getEndstopname().equals(rs.getString("StopName"))) { line.setEndstopID(rs.getInt("StopID")); } } con.close(); statement.close(); rs.close(); }catch(SQLException e) { throw new RuntimeException(e); } System.out.println(line.getStartstopID()+" "+line.getEndstopID()); if(line.getStartstopID()<line.getEndstopID()) { i=1; return i; } else { i=2; return i; } } /* * 判断是否为同一条线 */ public int same(Line line) throws ClassNotFoundException { int checksameline=0;//同一条线 try { Connection con = JdbcUtils.getConnection(); Statement statement = con.createStatement(); String sql="select * from firstline where StopName='"+line.getStartstopname()+"' or StopName='"+line.getEndstopname()+"'"; /* * 同上,但用不着判断是否属于同一线路(本判断只存在于起始点与结束点是普通点) */ ResultSet rs = statement.executeQuery(sql); while(rs.next()) { if(line.getStartstopname().equals(rs.getString("StopName"))) { line.setOriginline(rs.getInt("Line")); } if(line.getEndstopname().equals(rs.getString("StopName"))) { line.setFinishline(rs.getInt("Line")); } } }catch(SQLException e) { throw new RuntimeException(e); } if(line.getFinishline()==line.getOriginline()) {//是同一条线 checksameline=1; return checksameline; } else {//不是同一条线 checksameline=2; return checksameline; } } /* * 两条不同的、有交点的线路 */ public ArrayList<String> Connecttwoline(Line line) throws SQLException, ClassNotFoundException{ int c=0; Connection con = JdbcUtils.getConnection(); Statement statement = con.createStatement(); same(line); String sql="select * from changeline where ID1='"+line.getOriginline()+"' and ID2='"+line.getFinishline()+"'"; //根据交点线路查询中转站 ResultSet rs = statement.executeQuery(sql); while(rs.next()) { line.setMiddlestop(rs.getString("ChangeStopName")); } rs.close(); line.setTemporarystartstopname(line.getStartstopname()); //记录当前起始点与结束点 line.setTemporaryendstopname(line.getEndstopname()); //同上 String sql1="select * from firstline where Line='"+line.getOriginline()+"' and StopName='"+line.getMiddlestop()+"'"; //根据起始线路和中转站名称标出中转站位置 ResultSet rs1 = statement.executeQuery(sql1); while(rs1.next()) { line.setEndstopname(rs1.getString("StopName")); //起始点不变,结束点设置为中转点 } rs1.close(); line.setStartstopname(line.getTemporarystartstopname()); line.setTemporaryline(line.getOriginline()); //将起始点和中转点所在线路一致的放入临时站线路 /* * * * * */ array.add("乘坐"+line.getOriginline()+"号线"); c=select(line); //得到起始站与终点站的顺序 if(c==1) {//起始站编号小于终点站,即起始站在前,终点站在后 String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 找到这样的一些站:它们的ID号大于起始站的ID号, * 它们的ID号小于结束站的ID号,并且它们都是同一条线上的站点 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) {//遍历结果集 array.add(rs2.getString("StopName")); } rs2.close(); } else if(c==2) {//起始站编号大于终点站,即起始站在后,终点站在前 ArrayList<String> array1=new ArrayList<String>(); String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 同上 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) { array1.add(rs2.getString("StopName")); } for(int i=0;i<array1.size();i++) {//测试是否有值 System.out.print(array1.get(i)+" "); } for(int j=array1.size()-1;j>=0;j--) {//将站名倒序传入 array.add(array1.get(j)); } rs2.close(); } array.add("转乘"+line.getFinishline()+"号线"); /* * * * * */ line.setStartstopname(line.getMiddlestop()); //将起始点设为中转点 line.setEndstopname(line.getTemporaryendstopname()); //将结束点回归 line.setTemporaryline(line.getFinishline()); //将中转点和结束点所在线路一致的放入临时站线路 /* * * * */ c=select(line); //得到起始站与终点站的顺序 if(c==1) {//起始站编号小于终点站,即起始站在前,终点站在后 String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 找到这样的一些站:它们的ID号大于起始站的ID号, * 它们的ID号小于结束站的ID号,并且它们都是同一条线上的站点 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) {//遍历结果集 array.add(rs2.getString("StopName")); } rs2.close(); } else if(c==2) {//起始站编号大于终点站,即起始站在后,终点站在前 ArrayList<String> array1=new ArrayList<String>(); String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 同上 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) { array1.add(rs2.getString("StopName")); } for(int i=0;i<array1.size();i++) {//测试是否有值 System.out.print(array1.get(i)+" "); } for(int j=array1.size()-1;j>=0;j--) {//将站名倒序传入 array.add(array1.get(j)); } rs2.close(); } /* * * * * */ //由于array是全局变量,所以继续直接接受数据即可 return array; } /* * 判断有无交点 */ public int checklink(Line line) throws ClassNotFoundException { int c=0; Connection con; try { same(line); con = JdbcUtils.getConnection(); Statement statement = con.createStatement(); String sql="select * from changeline where ID1='"+line.getOriginline()+"' and ID2='"+line.getFinishline()+"'"; ResultSet rs=statement.executeQuery(sql); while(rs.next()) { if(rs.getString("ChangeStopName").equals("")) { } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return c; } /* * 解决两条线之间没有换乘站,只能通过第三条线换乘 * 即A(普通站)->B(中转站)->C(中转站)->D(普通站) * */ public ArrayList<String> Connectthreeline(Line line) throws ClassNotFoundException { ArrayList<Integer> array1=new ArrayList<Integer>(); int c=0; int min=0; try { same(line); Connection con = JdbcUtils.getConnection(); Statement statement = con.createStatement(); String sql="SELECT * FROM changeline c1 JOIN changeline c2 ON c1.ID2 = c2.ID1 WHERE trim(c1.ChangeStopName) != '' AND trim(c2.ChangeStopName) != '' AND c1.ID1 = '"+line.getOriginline()+"' AND c2.ID2 = '"+line.getFinishline()+"'"; ResultSet rs = statement.executeQuery(sql); while(rs.next()) { if(line.getOriginline()==rs.getInt("ID1")) { array1.add(rs.getInt("ID2")); } } rs.close(); line.setTemporarystartstopname(line.getStartstopname()); line.setTemporaryendstopname(line.getEndstopname()); /* * * 第一次转乘 * A(普通站)->B(中转站) * */ for(int j=0;j<array1.size();j++) { ArrayList<String> array3=new ArrayList<String>(); System.out.println("也许这是我想要的起始站"+line.getTemporarystartstopname()); String sql1="select * from changeline where ID1='"+line.getOriginline()+"' and ID2='"+array1.get(j)+"'"; ResultSet rs1 = statement.executeQuery(sql1); while(rs1.next()) { line.setEndstopname(rs1.getString("ChangeStopName")); } rs1.close(); array3.add("乘坐"+line.getOriginline()+"号线"); array3.add(line.getTemporarystartstopname()); String sql4="SELECT * FROM firstline f1 JOIN firstline f2 on f1.Line=f2.Line WHERE f1.StopName='"+line.getStartstopname()+"' AND f2.StopName='"+line.getEndstopname()+"'"; //保证两个中转站在同一条线路上 ResultSet rs4=statement.executeQuery(sql4); while(rs4.next()) { line.setTemporaryline(rs4.getInt("Line")); } rs.close(); c=select(line); if(c==1) {//起始站编号小于终点站,即起始站在前,终点站在后 String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 找到这样的一些站:它们的ID号大于起始站的ID号, * 它们的ID号小于结束站的ID号,并且它们都是同一条线上的站点 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) {//遍历结果集 array3.add(rs2.getString("StopName")); } rs2.close(); } else if(c==2) {//起始站编号大于终点站,即起始站在后,终点站在前 ArrayList<String> array2=new ArrayList<String>(); String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 同上 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) { array2.add(rs2.getString("StopName")); } for(int i=0;i<array2.size();i++) {//测试是否有值 System.out.print(array2.get(i)+" "); } for(int i=array2.size()-1;i>=0;i--) {//将站名倒序传入 array3.add(array2.get(i)); } rs2.close(); } /* * 第二次换乘 * B(中转站)->C(中转站) * */ line.setStartstopname(line.getEndstopname()); String sql3="select * from changeline where ID1='"+array1.get(j)+"' and ID2='"+line.getFinishline()+"'"; ResultSet rs3 = statement.executeQuery(sql3); while(rs3.next()) { line.setEndstopname(rs3.getString("ChangeStopName")); } String sql5="SELECT * FROM firstline f1 JOIN firstline f2 on f1.Line=f2.Line WHERE f1.StopName='"+line.getStartstopname()+"' AND f2.StopName='"+line.getEndstopname()+"'"; //保证两个中转站在同一条线路上 ResultSet rs5=statement.executeQuery(sql5); while(rs5.next()) { line.setTemporaryline(rs5.getInt("Line")); } rs5.close(); array3.add("转乘"+line.getTemporaryline()+"号线"); c=select(line); if(c==1) {//起始站编号小于终点站,即起始站在前,终点站在后 String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 找到这样的一些站:它们的ID号大于起始站的ID号, * 它们的ID号小于结束站的ID号,并且它们都是同一条线上的站点 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) {//遍历结果集 array3.add(rs2.getString("StopName")); } rs2.close(); } else if(c==2) {//起始站编号大于终点站,即起始站在后,终点站在前 ArrayList<String> array2=new ArrayList<String>(); String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 同上 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) { array2.add(rs2.getString("StopName")); } for(int i=0;i<array2.size();i++) {//测试是否有值 System.out.print(array2.get(i)+" "); } for(int i=array2.size()-1;i>=0;i--) {//将站名倒序传入 array3.add(array2.get(i)); } rs2.close(); } /* * * 最后一次换乘 * 即C(中转站)->D(普通站) */ line.setStartstopname(line.getEndstopname()); line.setEndstopname(line.getTemporaryendstopname()); String sql6="SELECT * FROM firstline f1 JOIN firstline f2 on f1.Line=f2.Line WHERE f1.StopName='"+line.getStartstopname()+"' AND f2.StopName='"+line.getEndstopname()+"'"; //保证两个中转站在同一条线路上 ResultSet rs6=statement.executeQuery(sql6); while(rs6.next()) { line.setTemporaryline(rs6.getInt("Line")); } rs.close(); array3.add("转乘"+line.getTemporaryline()+"号线"); c=select(line); if(c==1) {//起始站编号小于终点站,即起始站在前,终点站在后 String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 找到这样的一些站:它们的ID号大于起始站的ID号, * 它们的ID号小于结束站的ID号,并且它们都是同一条线上的站点 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) {//遍历结果集 array3.add(rs2.getString("StopName")); } rs2.close(); } else if(c==2) {//起始站编号大于终点站,即起始站在后,终点站在前 ArrayList<String> array2=new ArrayList<String>(); String sql2="select * from firstline where StopID>=(select StopID from firstline where StopName='"+line.getEndstopname()+"' and Line='"+line.getTemporaryline()+"') and StopID<=(select StopID from firstline where StopName='"+line.getStartstopname()+"' and Line='"+line.getTemporaryline()+"')"; /* * 同上 */ ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) { array2.add(rs2.getString("StopName")); } for(int i=0;i<array2.size();i++) {//测试是否有值 System.out.print(array2.get(i)+" "); } for(int i=array2.size()-1;i>=0;i--) {//将站名倒序传入 array3.add(array2.get(i)); } rs2.close(); } if(j==0) { min=array3.size(); } /* * 第一次:5 min=5 array.size=5 * 第二次:3 array.size=3 min=5 * 第三次:7 array.size=7 min=3 */ //输出array3测试 System.out.println(); System.out.println(); for(int x=0;x<array3.size();x++) { System.out.print(array3.get(x)+" "); } System.out.println(); System.out.println(min); if(min>=array3.size()) { min=array3.size(); for(int x=0;x<array3.size();x++) { System.out.print(array3.get(x)+" "); } array=array3; } } statement.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return array; } public int CheckAll(Line line) throws SQLException { int checkall=0; Connection con=JdbcUtils.getConnection(); Statement statement = con.createStatement(); String sql="SELECT * FROM firstline f1 JOIN firstline f2 on f1.Line=f2.Line WHERE f1.StopName='"+line.getStartstopname()+"' AND f2.StopName='"+line.getEndstopname()+"'"; ResultSet rs = statement.executeQuery(sql); while(rs.next()){ line.setTemporaryline(rs.getInt("Line")); } rs.close(); if(line.getTemporaryline()!=0) { checkall=1; return checkall; } else if(line.getTemporaryline()==0){ String sql1="select * from firstline where StopName='"+line.getStartstopname()+"' or StopName='"+line.getEndstopname()+"'"; /* * 同上,但用不着判断是否属于同一线路(本判断只存在于起始点与结束点是普通点) */ ResultSet rs1 = statement.executeQuery(sql1); while(rs1.next()) { if(line.getStartstopname().equals(rs1.getString("StopName"))) { line.setOriginline(rs1.getInt("Line")); } if(line.getEndstopname().equals(rs1.getString("StopName"))) { line.setFinishline(rs1.getInt("Line")); } } rs1.close(); if(line.getOriginline()==0||line.getFinishline()==0) { checkall=4; return checkall; } System.out.println("这不合理!所以线一为"+line.getOriginline()+",线二为"+line.getFinishline()); String sql2="select * from changeline where ID1='"+line.getOriginline()+"' and ID2='"+line.getFinishline()+"'"; ResultSet rs2 = statement.executeQuery(sql2); while(rs2.next()) { line.setMiddlestop(rs2.getString("ChangeStopName")); } System.out.println(line.getMiddlestop()+"也许不是我想要的"); if(line.getMiddlestop().equals("")) { checkall=3; return checkall; } else { checkall=2; return checkall; } } return checkall; } }
copy
package service; import Dao.UserDao; public class UserService { private UserDao userdao=new UserDao(); }
copy
package Servlet; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import Bean.Line; import Dao.UserDao; import service.UserService; /** * Servlet implementation class servlet */ @WebServlet("/servlet") public class servlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public servlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); //1 response.setContentType("text/html;charset=utf-8"); //2 response.setCharacterEncoding("utf-8"); //3 UserDao dao = new UserDao(); String method = request.getParameter("method"); if (method.equals("find1")) { List<String> list=new ArrayList<>(); String line=request.getParameter("line"); System.out.println("您查询的为"+line+"号线"); list=dao.find1(line); request.setAttribute("stop",list); request.getRequestDispatcher("result.jsp").forward(request,response); } else if(method.equals("find2")){ Line line = new Line(); ArrayList<String> array = new ArrayList<String>(); String startstopname = request.getParameter("startstopname"); String endstopname = request.getParameter("endstopname"); line.setStartstopname(startstopname); line.setEndstopname(endstopname); try { int x = dao.CheckAll(line); System.out.println("实际上传过来的值是" + x); if (x == 1) { array = dao.Connectonlyoneline(line); } else if (x == 2) { array = dao.Connecttwoline(line); } else if (x == 3) { array = dao.Connectthreeline(line); } else { request.setAttribute("message", "请输入正确的站名!"); request.getRequestDispatcher("find2.jsp").forward(request, response); return; } //array=dao.Connectthreeline(line); request.setAttribute("stop", array); /* if(array.equals(null)) { }*/ } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { request.getRequestDispatcher("result.jsp").forward(request, response); } } else { List<String> list=new ArrayList<>(); String linepoint=request.getParameter("linepoint"); list=dao.find3(linepoint); request.setAttribute("stop",list); request.getRequestDispatcher("result.jsp").forward(request,response); } } }
运行结果截图
编程总结分析,总体来说本次开发对我来说难度还是蛮大的,尤其是对于换乘内容,和搭档一再讨论,具体可以见之前的博客,加上界面的绘制,主要自己的html不是特别精通,绘制界面就很痛苦,希望能进一步提升自己的能力吧
需求描述:完成一个能自动输出换乘路线的地铁系统
估计开发时间:7天。
项目计划数据:填写完成。
时间记录日志:填写完成。
缺陷记录日志:填写完成。
姓名:胡硕阳
日期:2023.3.13-2023.3.20
七天中,前五天进行后端开发,最后两天进行前端优化
5、时间记录日志:
学生:胡硕阳
日期:2023.3.13-2023.3.20
教师:王建民
6、缺陷记录日志:
学生:胡硕阳
日期:2023.3.21
教师:王建民
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)