📄 ptop.java
字号:
import java.awt.*;
import java.applet.Applet;
import java.sql.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.lang.String;
import java.lang.Math.*;
public class ptop{ //保存所求路线的所有站点和坐标
String begin;
String end;
String che;
static double k;
static int px=0,py=0,x1,y1,x2,y2;
int width,height;
int zd,zd1,zd2,ix,jx,mmm;//mmm是直达和转一次的区分标志
int x,y,xx,yy,xxxx,yyyy;
int e,w1,hhhhh;
double cd=1;
static Point p[]=new Point[6];
String query1[]=new String[50];
ResultSet rr[]=new ResultSet[50];
Connection con;
int ii;
int zhongzhuanz;
Statement stmt;
Statement stmt1;
Statement stmt2;
Statement stmt4;
String ur1="jdbc:odbc:lv";
static String syou[]=new String[301];//用来保存所有的站点
String pt[]=new String[50];//用来存放直达路线经过的站点如果没有直达的就保存最佳的转一次的
Point pp[]=new Point[50]; //直达车经过的站点的坐标如果没有直达的就保存最佳的转一次的
String u[]=new String[2];
String v[]=new String[1];
String w[]=new String[1];
String z[]=new String[1];
String c[]=new String[1];
ptop(String b,String e,String c,int icc){ //icc为1时显示车次 为0时显示车次
begin=b;
end=e;
che=c;
ii=icc;
try
{
if(ii==0)
{fangwen1 fw1=new fangwen1(begin,end);}
}
catch (Exception eeee){}
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection(ur1);
stmt=con.createStatement();
Statement stmt66=con.createStatement();
}
catch(Exception ee)
{
System.err.print("classNotFoundException:");
System.err.println(ee.getMessage());
}
sjk();
}
public void sjk()
{
if(ii==0)//路线查询
{ try
{ System.out.println("sjk的第一个try");
stmt4=con.createStatement();
int i=0;
String query49="SELECT 站点 FROM C00";//将所有的站点保存在数组中
ResultSet r49=stmt.executeQuery(query49);//但是程序每次都要执行这个
while(r49.next())
{
syou[i]=r49.getString("站点");
//System.out.println("第i个站点"+syou[i]);
i++;
}
System.out.println("一共有"+i);
String query4="SELECT * FROM J0 ORDER BY k";//按k排序后第一条记录肯定是经过的站点数最少的
ResultSet r4=stmt.executeQuery(query4);//J0存放的是直达的
//System.out.println("r4.next()");
if(r4.next())//处理直达车次的显示沿途经过的站点用pt[]来保存
{ mmm=0;
int k,x=0;
String c[];
c=new String[5];//注意这种写法
c[x]=new String();
c[x]=r4.getString("车次");//用c[]保存直达车次
k=r4.getInt("k");//k是直达车经过的站点数:目的站和出发站之间的ID差
String query5="SELECT * FROM C0 WHERE 车次='"+c[x]+"' and 站点='"+begin+"'";//注意出发站和终点站的区别
ResultSet r5=stmt.executeQuery(query5);
int y=0;
r5.next();
//String bx=r5.getString("车次");
ix=r5.getInt("id");//直达车在出发站处的id号
System.out.println("出发站的id号"+ix+"");
String query6="SELECT * FROM C0 WHERE 车次='"+c[x]+"' and 站点='"+end+"'";//注意出发站和终点站的区别
ResultSet r6=stmt.executeQuery(query6);
//System.out.println("SELECT * FROM c0 WHERE 车次='"+c[x]+"' and 站点='"+f1+"'");
r6.next();
//String bx=r5.getString("车次");
jx=r6.getInt("id");
System.out.println("终点站的id号"+jx+"");
if(jx>ix)//始发站在目的站的前面
{ int s, m=jx-ix;int n=0;int v=0;
zd=jx-ix;//zd和m的初值相等都等于直达车经过的站点数
String query7="SELECT * FROM C0 WHERE 车次='"+c[x]+"'";//c[x]就是直达车的车次
ResultSet r7=stmt.executeQuery(query7);r7.next();
while(v==0)//移动到出发站 但是很可能有这个问题:结果集r7的第一条记录不是固定的 得加上处理代码
{
s=r7.getInt("id");
if(s==ix)break;
r7.next();
}
while(m>=0)
{
// pt[n]="";
pt[n]=r7.getString("站点");//将直达车次的站点放到pt[]中 而且pt[0]就是出发站
r7.next(); n++;
m--;
}//循环完后m的值为-1,n的值为 zd+1了
System.out.println("J0表中直达车沿途经过的站点有:");
for(m=0;m<n;m++)
{
System.out.println(pt[m]) ;
}
}
else//始发站在目的站的后面
{
int v=0,s,m=ix-jx;int n=m;
zd=ix-jx;
String query8="SELECT * FROM C0 WHERE 车次='"+c[0]+"'";
ResultSet r8=stmt.executeQuery(query8);
do //移动到目的站 但是很可能有这个问题:结果集r7的第一条记录不是固定的 得加上处理代码
{
r8.next();
s=r8.getInt("ID");
System.out.println("s 的值是:"+s+"") ;
if(s==(jx)){v=1;}
}while(v==0);
n=zd;//这条语句很重要:保证pt[]的第一个元素存放的是出发站
do
{
pt[n]=r8.getString("站点");//将直达车次的站点放到pt[]中 pt[0]和pt[n]分别是出发站和目的站
n--;
r8.next();
}while(n>=0);
System.out.println("沿途经过的站点有:");
for(m=0;m<=zd;m++)
{
System.out.println(pt[m]) ;
}
}//else
System.out.println(""+begin+"和"+end+"之间有直达车:"+c[x]+"总共经过了"+k+"个站点");
x++;
}//if(r4.next())
else//J0表里面没有记录 没有直达的车
{ mmm=1;
int ix1,jx1;//第二部分的id标式符
String c[];
c=new String[2];
stmt=con.createStatement();
String query="SELECT * FROM J1 ORDER BY k";
ResultSet r=stmt.executeQuery(query);
r.next();
c[0]="";c[1]="";
c[0]=r.getString("车次1");
c[1]=r.getString("车次2");
u[0]=r.getString("站点");
System.out.println("中转站是:"+u[0]+"");//最佳的转一车的方案
System.out.println(" 头次车是:"+c[0]+"");
System.out.println(" 尾次车是:"+c[1]+"");
stmt4=con.createStatement();
stmt=con.createStatement();
String query5="SELECT * FROM C0 WHERE 车次='"+c[0]+"' and 站点='"+begin+"'";
ResultSet r5=stmt.executeQuery(query5);
int y=0;
r5.next();
//String bx=r5.getString("车次");
ix=r5.getInt("ID");//转一次车 在出发站处的id号
System.out.println("契爷岭的id号:"+ix+"");
String query6="SELECT * FROM C0 WHERE 车次='"+c[0]+"' and 站点='"+u[0]+"'";
ResultSet r6=stmt.executeQuery(query6);
//System.out.println("SELECT * FROM c0 WHERE 车次='"+c[x]+"' and 站点='"+f1+"'");
r6.next();
//String bx=r5.getString("车次");
jx=r6.getInt("ID");
System.out.println(+ix+""+jx);
//先处理第一部分:
if(jx>ix)//始发站在中转站的前面
{ int s, m=jx-ix;int n=0;int v=0;
zd1=jx-ix;//zd和m的初值相等都等于直达车经过的站点数
zhongzhuanz=zd1;//中转站点的序号
String query7="SELECT * FROM C0 WHERE 车次='"+c[0]+"'";//注意记录集的个数
ResultSet r7=stmt.executeQuery(query7);
do
{
r7.next();
s=r7.getInt("ID");
}while(s!=ix);
while(m>=0)
{
// b[n]="";
pt[n]=r7.getString("站点");//将转一次车的第一部分站点放到pt[]中 而且pt[0]就是出发站
r7.next();
n++;
m--;
}//循环完后m的值为-1,n的值为 zd1+1了
System.out.println("J1表中转一次车沿途经过的第一部分站点有:");
for(m=0;m<n;m++)
{
System.out.println(pt[m]) ;
}
}
else//始发站在中转站的后面
{
int v=0,s,m=ix-jx;int n=m;
zd1=ix-jx;
zhongzhuanz=zd1;//中转站点的序号
String query8="SELECT * FROM C0 WHERE 车次='"+c[0]+"'";
ResultSet r8=stmt.executeQuery(query8);//先找到中转站
System.out.println("SELECT * FROM C0 WHERE 车次='"+c[0]+"'");
do
{
r8.next();
v=r8.getInt("ID");
}while(v!=jx);
n=zd1;//这条语句很重要:保证pt[]的第一个元素存放的是出发站
while(n>=0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -