📄 trainchannel.java
字号:
import java.io.*;
import java.text.*;
import java.util.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TrainChannel extends Channel
{
TrainChannel()
{
channelName = "列车提醒";
}
public void makeChannel(Person p,TemplateList tempList,HtmlOut desHtml)
{
SingleTemplate st;
st = tempList.searchTemplate("频道右");
if(st==null)
return ;
int nKey = st.getKeyNum ();
String sKey ;
for(int i=0;i<nKey;i++){
desHtml.addString (st.getStringAt (i));
sKey = st.getKeyAt (i);
if( sKey .compareTo("cgi-path")==0 )
desHtml.addString (CommonMethods.sHostNameCGI);
if( sKey.compareTo("标题")==0 )
desHtml.addString ( channelName );
if( sKey.compareTo("EditCGI")==0 )
desHtml.addString ("EditChannel?channel=train");
if( sKey.compareTo("CloseCGI")==0 )
desHtml.addString ("CloseChannel?channel=train");
if( sKey.compareTo("内容")==0 )
makeChannelContents( p,tempList, desHtml);
}
desHtml.addString(st.getEndString());
}
public boolean editChannel(Person p,HtmlOut desHtml)
{
TemplateList tempList = CommonMethods.gettraintxTemplate();
SingleTemplate st;
st = tempList.searchTemplate("ROOT");
if(st==null){
desHtml.setErrorID (desHtml.SINGLE_TEMPLATE_NOTFIND ,
"","模板错误"
,"Login");
desHtml.outHtml ();
return false;
}
//关键字替换
int nKey = st.getKeyNum ();
String sKey ;
for(int i=0;i<nKey;i++){
desHtml.addString (st.getStringAt (i));
sKey = st.getKeyAt (i);
if( sKey .compareTo("cgi-path")==0 )
desHtml.addString (CommonMethods.sHostNameCGI);
if( sKey.compareTo("内容")==0 )
makeChannelContents(p,tempList,desHtml);
}
desHtml.addString(st.getEndString());
return true;
}
// 生成这个用户的提醒列表
public void makeChannelContents(Person p,TemplateList tempList,HtmlOut desHtml)
{
ResultSet rs;
String queryString;
String trainid,station,txdate,station_start,name,srdate,auto;
DBOperater DB = new DBOperater ("train");
queryString="select a.trainid,a.station,txdate,station_start,name,srdate,c.auto from traintx a,train_info c where username='"+p.username +"' and a.trainid=c.id and a.station=c.station order by txdate";
rs = DB.executeQuery (queryString);
if(rs!=null)
{
try{
SingleTemplate st0,st1;
st0 = tempList.searchTemplate("火车列表");
st1 = tempList.searchTemplate("单支火车");
int i1,i2;
for(i1=0;i1<st0.getKeyNum();i1++)
{
desHtml.addString(st0.getStringAt(i1));
if(st0.getKeyAt(i1).compareTo("cgi-path")==0){
desHtml.addString(CommonMethods.sHostNameCGI);
}
if(st0.getKeyAt(i1).compareTo("全部火车")==0)
{
while(rs.next())
{
trainid = rs.getString(1).trim ();
station = rs.getString(2).trim ();
txdate = rs.getString(3).trim ();
station_start = rs.getString(4).trim ();
try{
name = rs.getString(5).trim ();
}catch(Exception e){
name="";
}
srdate=rs.getString (6).trim ();
auto=rs.getString (7).trim ();
txdate=txdate.substring (0,16);
for(i2=0;i2<st1.getKeyNum();i2++)
{
desHtml.addString(st1.getStringAt(i2));
if(st1.getKeyAt(i2).compareTo("cgi-path")==0){
desHtml.addString(CommonMethods.sHostNameCGI);
}
if(st1.getKeyAt(i2).compareTo("车次")==0)
desHtml.addString("<a href=TrainResult1?auto="+auto+" target=_blank>"+trainid+"</a>");
if(st1.getKeyAt(i2).compareTo("乘车站")==0)
desHtml.addString(station_start);
if(st1.getKeyAt(i2).compareTo("到站")==0)
desHtml.addString(station);
if(st1.getKeyAt(i2).compareTo("接/送人")==0)
desHtml.addString(name);
if(st1.getKeyAt(i2).compareTo("提醒时间")==0)
desHtml.addString(txdate);
if(st1.getKeyAt(i2).compareTo("时间删除")==0)
desHtml.addString(srdate);
if(st1.getKeyAt(i2).compareTo("车次删除")==0)
desHtml.addString(trainid);
if(st1.getKeyAt(i2).compareTo("站名删除")==0)
desHtml.addString(station);
}
desHtml.addString(st1.getEndString());
}
}
}
desHtml.addString(st0.getEndString());
}catch(Exception e){
}
}
DB.close ();
}
// 增加提醒车次
boolean addTrain(String name,String trainid,String station,String station_start,String ccrq,String tqtx,Person p,HtmlOut desHtml)
{
if(trainid.compareTo ("")==0||station.compareTo ("")==0||station_start.compareTo ("")==0||ccrq.compareTo ("")==0||tqtx.compareTo ("")==0)
{
desHtml.setErrorID (desHtml.SHOW_SIMPLE_MESSAGE ,"",
"除了接送人外各项输入都不能为空!"
,"EditChannel?channel=train");
return false;
}
if(!checktrainid(trainid))
{
desHtml.setErrorID (desHtml.SHOW_SIMPLE_MESSAGE ,"",
"输入的车次不合法!"
,"EditChannel?channel=train");
return false;
}
if(!checkstation(station,station_start,trainid))
{
desHtml.setErrorID (desHtml.SHOW_SIMPLE_MESSAGE ,"",
"输入的站名不合法!"
,"EditChannel?channel=train");
return false;
}
if(checkusertrainid(ccrq,station,trainid,p))
{
desHtml.setErrorID (desHtml.SHOW_SIMPLE_MESSAGE ,"",
"该车次已经被定制!"
,"EditChannel?channel=train");
return false;
}
ResultSet rs;
DBOperater DB = new DBOperater ("train");
String queryString,tempdate="",tempstation="",txdate="",srdate="";
//保留乘车日期
srdate=ccrq;
boolean flag=false;
//查询train_info表获得该车次到站的详细信息
queryString="select station,on_time from train_info where id='"+trainid+"'";
rs=DB.executeQuery (queryString);
//定义日期和时间数组,日历对象
String riqi[];
riqi=new String[3];
String shijian[];
shijian=new String[2];
Calendar calendar;
calendar=Calendar.getInstance ();
int posi,i=0,start=0,nian,yue,ri,shi,fen,tqshijian,tempposi=0;
String s_shijian,s_riqi;
if(rs!=null)
{
try{
while(rs.next())
{
//从数据库里获得到站名和到站时间
tempstation=rs.getString (1).trim();
tempdate=rs.getString (2).trim ();
//生成当前到站的完整时间
tempdate=ccrq+" "+tempdate;
//若当前站和乘车站相同
if(tempstation.compareTo (station_start)==0)
{
//标识程序开始计时
flag=true;
txdate=tempdate;
//若到站和乘车站相同
if(station.compareTo (station_start)==0)
{
//分离时间和日期
i=0;
start=0;
posi=tempdate.indexOf (" ",0);
s_riqi=tempdate.substring (0,posi);
posi=posi+1;
s_shijian=tempdate.substring (posi,tempdate.length ());
//分离日期
while(true)
{
posi =s_riqi.indexOf("-",start);
if(posi==-1)
{
riqi[i]=s_riqi.substring (tempposi,s_riqi.length ());
break;
}
riqi[i]=s_riqi.substring (start,posi);
tempposi=posi+1;
start=start+riqi[i].length()+1;
i=i+1;
}
//分离时间
i=0;
start=0;
while(true)
{
//分两种情况
posi =s_shijian.indexOf(":",start);
if(posi==-1)
posi =s_shijian.indexOf(".",start);
if(posi==-1)
{
shijian[i]=s_shijian.substring (tempposi,s_shijian.length ());
break;
}
shijian[i]=s_shijian.substring (start,posi);
tempposi=posi+1;
start=start+riqi[i].length()+1 ;
i=i+1;
}
//分离出来的整型日期时间值
nian=Integer.valueOf(riqi[0]).intValue();
yue=Integer.valueOf(riqi[1]).intValue();
yue=yue-1;
ri=Integer.valueOf(riqi[2]).intValue();
shi=Integer.valueOf(shijian[0]).intValue();
fen=Integer.valueOf(shijian[1]).intValue();
tqshijian=Integer.valueOf(tqtx).intValue();
//设置当前日历
try{
calendar.set (nian,yue,ri,shi,fen);
}catch(Exception e){
desHtml.setErrorID (desHtml.SHOW_SIMPLE_MESSAGE ,"",
"输入的日期不合法!"
,"EditChannel?channel=train");
return false;
}
//计算提前后的日历
calendar.add (calendar.HOUR_OF_DAY,-tqshijian);
nian=calendar.get(Calendar.YEAR);
yue=calendar.get(Calendar.MONTH);
yue=yue+1;
ri=calendar.get(Calendar.DATE );
shi=calendar.get(Calendar.HOUR_OF_DAY);
fen=calendar.get(Calendar.MINUTE);
//类型调整
riqi[0]=String.valueOf (nian).toString ();
riqi[1]=String.valueOf (yue).toString ();
riqi[2]=String.valueOf (ri).toString ();
shijian[0]=String.valueOf (shi).toString ();
shijian[1]=String.valueOf (fen).toString ();
//格式调整
if(yue<10)
riqi[1]="0"+riqi[1];
if(ri<10)
riqi[2]="0"+riqi[2];
if(shi<10)
shijian[0]="0"+shijian[0];
if(fen<10)
shijian[1]="0"+shijian[1];
txdate=riqi[0]+"-"+riqi[1]+"-"+riqi[2]+" "+shijian[0]+":"+shijian[1];
//退出while循环
break;
}
continue;
}
if(flag==true)
{
//若当前到站时间要比上一站到站时间大,或相等
if(tempdate.compareTo(txdate)>=0)
{
//提醒时间则为当前到站时间
txdate=tempdate;
//若当前站为下车站
if(tempstation.compareTo(station)==0)
{
//分离日期时间
i=0;
start=0;
posi=tempdate.indexOf (" ",0);
s_riqi=tempdate.substring (0,posi);
posi=posi+1;
s_shijian=tempdate.substring (posi,tempdate.length ());
//分离日期
while(true)
{
posi =s_riqi.indexOf("-",start);
if(posi==-1)
{
riqi[i]=s_riqi.substring (tempposi,s_riqi.length ());
break;
}
riqi[i]=s_riqi.substring (start,posi);
tempposi=posi+1;
start=start+riqi[i].length()+1;
i=i+1;
}
//分离时间
i=0;
start=0;
while(true)
{
posi =s_shijian.indexOf(":",start);
if(posi==-1)
posi =s_shijian.indexOf(".",start);
if(posi==-1)
{
shijian[i]=s_shijian.substring (tempposi,s_shijian.length ());
break;
}
shijian[i]=s_shijian.substring (start,posi);
tempposi=posi+1;
start=start+riqi[i].length()+1 ;
i=i+1;
}
//分离出来的整型日期时间值
nian=Integer.valueOf(riqi[0]).intValue();
yue=Integer.valueOf(riqi[1]).intValue();
yue=yue-1;
ri=Integer.valueOf(riqi[2]).intValue();
shi=Integer.valueOf(shijian[0]).intValue();
fen=Integer.valueOf(shijian[1]).intValue();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -