📄 fangwen.java
字号:
import java.sql.*;
import java.io.*;
import java.lang.String;
import java.lang.Math.*;
class fangwen //fangwen是基于景点的搜索
//文件的执行顺序是:先远行jilu,再远行jingdian,然后远行fangwen,最后远行draw
{
public static void main(String args[]) throws Exception
{ FileOutputStream fileOut =new FileOutputStream("jieguo.txt");
String ff1="香洲";//旅客所在的景点 问题:为什么main函数中的参数不起作用?是不是直接通过构造函数传递参数?
jingdian jd1=new jingdian(ff1);
String ff2="拱北";//旅客想要到的景点
jingdian jd2=new jingdian(ff2);
String f1=jd1.f1;
String f2=jd2.f1;
//String f1="安平大厦";//出发站
//String f2="上冲检查站";//目的站
System.out.println(f2);
String g1="C0";//车次站点表
String ur1="jdbc:odbc:lv";
String query="SELECT * FROM "+g1+" WHERE "+g1+".站点='"+f1+"' ";
String query1="SELECT * FROM "+g1+" WHERE "+g1+".站点='"+f2+"' ";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e)
{
System.err.print("classNotFoundException:");
System.err.println(e.getMessage());
}
try
{
Connection con=DriverManager.getConnection(ur1);
Statement stmt=con.createStatement();
Statement stmt1=con.createStatement();
Statement stmt2=con.createStatement();
stmt1.executeUpdate("CREATE TABLE B1(id char(20),车次 char(20),站点 char(20));");
stmt2.executeUpdate("CREATE TABLE B2(id char(20),车次 char(20),站点 char(20));");
Statement stmt3=con.createStatement();
Statement stmt4=con.createStatement();
stmt3.executeUpdate("CREATE TABLE B3(id char(20),车次 char(20),站点 char(20));");
stmt1.executeUpdate("CREATE TABLE B33(id char(20),车次 char(20),站点 char(20));");
stmt4.executeUpdate("CREATE TABLE B4(id char(20),车次 char(20),站点 char(20));");
/* stmt3.executeUpdate("CREATE TABLE J0(id char(20),车次 char(20),k char(20));");
stmt1.executeUpdate("CREATE TABLE J1(id char(20),车次1 char(20),站点 char(20),车次2char(20),k char(20));");
stmt4.executeUpdate("CREATE TABLE J2(id char(20),车次1 char(20),站点1char(20),车次2char(20),站点2char(20),车次3char(20),k char(20);");*/
Statement stmt6=con.createStatement();
Statement stmt8=con.createStatement();
stmt6.executeUpdate("CREATE TABLE B5(id char(20),车次 char(20),站点 char(20));");
ResultSet r=stmt1.executeQuery(query);
ResultSet rr=stmt2.executeQuery(query1);
System.out.println("车次:"+" "+"站点:");
while(r.next())//用B1记录s(I):过出发站的所有车次
{ String r0=r.getString("id");
String r1=r.getString("车次");
String r2=r.getString("站点");
// System.out.println(r1+" "+r2);
stmt.executeUpdate("INSERT INTO B1(id,车次,站点) VALUES("+r0+","+r1+",'"+r2+"')");
}
while(rr.next())//用B2记录t(J):过终点站的所有车次
{ String r0=rr.getString("id");
String r1=rr.getString("车次");
String r2=rr.getString("站点");
stmt.executeUpdate("INSERT INTO B2(id,车次,站点) VALUES("+r0+","+r1+",'"+r2+"')");
}
String query2="SELECT * FROM B1 WHERE B1.车次 in (SELECT 车次 FROM B2)";//求s(I)和t(J)的交集
ResultSet rrr=stmt2.executeQuery(query2);
if(rrr.next())//s(I)和t(J)有交集即有直达的车
{ ResultSet c1=stmt4.executeQuery("SELECT * FROM J0");int q=0;
if(!c1.next())//J0表是空的
{
q=1;
}
do
{
int i=0,j=0,k=0;//t=0;
String r1=rrr.getString("车次");
//输出结果
ResultSet rr1=stmt1.executeQuery("SELECT * FROM "+g1+" WHERE 车次='"+r1+"' AND 站点='"+f1+"'");
rr1.next();
i=rr1.getInt("id");
ResultSet rr2=stmt1.executeQuery("SELECT * FROM "+g1+" WHERE 车次='"+r1+"' AND 站点='"+f2+"'");
rr2.next();
j=rr2.getInt("id");
k=k+Math.abs((i-j));
System.out.println(""+ff1+"和"+ff2+"之间有直达车:从景点"+ff1+"步行到"+f1+"再坐"+r1+"路车到达"+f2+"站再步行到达景点"+ff2+"总共经过了"+k+"个站点");
String bbt=""+f1+"和"+f2+"之间有直达车:"+r1+"总共经过了"+k+"个站点";
if(q==1)//J0是空的,将直达车的车次放在J0中
{stmt.executeUpdate("INSERT INTO J0(车次,k) VALUES("+r1+","+k+")");q=1;}
tofile.write(fileOut,bbt);
}while(rrr.next());
}
else //s(I)和t(J)没有交集,即没有直达的车
{System.out.println(""+f1+"和"+f2+"之间没有直达车");
String bbt=""+f1+"和"+f2+"之间没有直达车";
tofile.write(fileOut,bbt);
}
String query3="SELECT * FROM "+g1+" WHERE "+g1+".车次 in (SELECT 车次 FROM B1)";//过A的所有车次经过的站点集合E(I,U)
String query4="SELECT * FROM "+g1+" WHERE "+g1+".车次 in (SELECT 车次 FROM B2)";//过B的所有车次经过的站点集合F(J,V)
ResultSet r3=stmt3.executeQuery(query3);
while(r3.next())//用B3记录E(I,U)
{ String r0=r3.getString("id");
String r1=r3.getString("车次");
String r2=r3.getString("站点");
stmt.executeUpdate("INSERT INTO B3(id,车次,站点) VALUES("+r0+","+r1+",'"+r2+"')");
}
ResultSet r4=stmt4.executeQuery(query4);
while(r4.next())//用B4记录F(J,V)
{ String r0=r4.getString("id");
String r1=r4.getString("车次");
String r2=r4.getString("站点");
stmt.executeUpdate("INSERT INTO B4(id,车次,站点) VALUES("+r0+","+r1+",'"+r2+"')");
}
String query44="SELECT * FROM "+g1+" WHERE "+g1+".站点 in (SELECT 站点 FROM B3)";
ResultSet r66=stmt3.executeQuery(query44);
while(r66.next())//用B33记录t(k)
{ String r0=r66.getString("id");
String r1=r66.getString("车次");
String r2=r66.getString("站点");
stmt.executeUpdate("INSERT INTO B33(id,车次,站点) VALUES("+r0+","+r1+",'"+r2+"')");
}
String query5="SELECT * FROM B3 WHERE 站点 in (SELECT 站点 FROM B4)";//求E(I,U)和F(J,V)的交集
ResultSet r5=stmt2.executeQuery(query5);
if(r5.next())//E(I,U)和F(J,V)有交集即转一次车能够到达
{ //输出结果
int q2=0;
ResultSet c2=stmt4.executeQuery("SELECT * FROM J1");
if(!c2.next()) q2=1;
do{ int i=0,j=0,k=0,d=0;//t=0;
String r1=r5.getString("车次");
String r2=r5.getString("站点");
String query55="SELECT 车次 FROM B4 WHERE 站点='"+r2+"'";
ResultSet r55=stmt4.executeQuery(query55);
if(r55.next()){
String r11=r55.getString("车次");
//求经过的站点数
ResultSet rr3=stmt1.executeQuery("SELECT * FROM "+g1+" WHERE 车次='"+r1+"'AND 站点='"+f1+"'");
rr3.next();
i=rr3.getInt("id");
ResultSet rr4=stmt1.executeQuery("SELECT * FROM "+g1+" WHERE 车次='"+r1+"'AND 站点='"+r2+"'");
rr4.next();
j=rr4.getInt("id");
k=k+Math.abs((i-j));//System.out.println(""+k+"");
ResultSet rr5=stmt1.executeQuery("SELECT * FROM "+g1+" WHERE 车次='"+r11+"'AND 站点='"+f2+"'");
rr5.next();
i=rr5.getInt("id");
ResultSet rr12=stmt1.executeQuery("SELECT * FROM "+g1+" WHERE 车次='"+r11+"'AND 站点='"+r2+"'");
rr12.next();
j=rr12.getInt("id");
k=k+Math.abs((i-j));//System.out.println(""+k+"");
d=kongge.fh(r1);//去掉空格
r1=r1.substring(0,d);//取子串函数
d=kongge.fh(r2);
r2=r2.substring(0,d);
d=kongge.fh(r11);
r11=r11.substring(0,d);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -