📄 fangwen1.java
字号:
import java.sql.*;
import java.io.*;
import java.lang.String;
import java.lang.Math.*;
class fangwen1//fangwen1是站点之间的搜索
{ public static String f1,f2;
public fangwen1(String t1,String t2)throws Exception
{
f1=t1;f2=t2;
//}
//public static void main(String args[])
// {
FileOutputStream fileOut =new FileOutputStream("jieguo.txt");
//String f1="明珠北";//出发站
// String 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+"' ";
dropbiao db=new dropbiao();
db.ddb();
jilu jl=new jilu();
jl.jjl();
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();
//创建表B1,B2,B3,B33,B4,B5
stmt1.executeUpdate("CREATE TABLE B1(id char(20),车次 char(20),站点 char(20));");
//用B1记录s(I):过出发站的所有车次
stmt2.executeUpdate("CREATE TABLE B2(id char(20),车次 char(20),站点 char(20));");
//用B2记录t(J):过终点站的所有车次
Statement stmt3=con.createStatement();
Statement stmt4=con.createStatement();
stmt3.executeUpdate("CREATE TABLE B3(id char(20),车次 char(20),站点 char(20));");
//用B3记录E(I,U)
stmt1.executeUpdate("CREATE TABLE B33(id char(20),车次 char(20),站点 char(20));");//用B33记录t(k)
stmt4.executeUpdate("CREATE TABLE B4(id char(20),车次 char(20),站点 char(20));");//用B4记录F(J,V)
/* 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(""+f1+"和"+f2+"之间有直达车:"+r1+"总共经过了"+k+"个站点");
String bbt=""+f1+"和"+f2+"之间有直达车:"+r1+"总共经过了"+k+"个站点";
if(q==1)//若J0表是空的话就将结果保存在J0中
{stmt.executeUpdate("INSERT INTO J0(车次,k) VALUES("+r1+","+k+")");q=1;}//直达的乘车方案保存在J0中
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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -