📄 main.~pas
字号:
begin
query.recNo:=i;
trains.warray[i]:=query.Fields.Fields[0].AsVariant;
end;
end
else
getStart:=2;//no solution
except
//showmessage('');
getStart:=1;//error
end;}
end;
procedure Ctrain.setQuery(queryname:Tquery);
begin
query:=queryName;
end;
function Cstation.getName(stationNo:word):string;
var
sqlStr:string;
begin
sqlStr:='select SName from station.db where SNo='+inttostr(stationNo);
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.Open;
if query.RecordCount=1 then
begin
getName:=query.Fields.Fields[0].AsString;
end
else
begin
showmessage('查无此站,或数据库出错!');
getName:='';
end;
except
showmessage('查询站点名称时出错!');
getName:='';
end
end;
function Cstation.getNo(stationName:string):word;
var
sqlStr:string;
begin
sqlStr:='select SNo from station.db where SName='+''''+stationName+'''';
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.Open;
if query.RecordCount=1 then
begin
getNo:=query.Fields.Fields[0].AsVariant;
end
else
begin
showmessage('查无此站,或数据库出错!');
getNo:=0;
end;
except
showmessage('查询站点号码时出错!');
getNo:=0;
end
end;
procedure Cstation.setQuery(queryname:Tquery);
begin
query:=queryName;
end;
function Cticket.getTicket(SNo,DNo,trainNo:word;var ticketNo:word):word;
var
sqlStr:string;
tSNo,tDNo:word;
stations:Carrayword;
begin
stations:=Carrayword.Create;
ticketNo:=0;
tSNo:=MyCtrain.getRoute(trainNo,stations);
tSNo:=stations.getOrder(SNo);
tDNo:=stations.getOrder(DNo);
sqlStr:='SELECT * FROM '+tableName+' where trainNo='+inttostr(trainNo);
sqlStr:=sqlStr+' and flag=true and (SNo<= '+inttostr(tSNo)+') and (DNor>= '+inttostr(tDNo);
sqlStr:=sqlStr+') order by SNo desc , DNor asc';
//showmessage(sqlStr);
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.Open;
if(query.RecordCount>=1) then//at least one ticket
begin
query.RecNo:=1;
tSNo:=query.Fields.Fields[1].AsVariant;
tDNo:=query.Fields.Fields[2].AsVariant;
ticketNo:=query.Fields.Fields[0].AsVariant;
sqlStr:='UPDATE '+tableName+' SET FLAG=false WHERE ';
sqlStr:=sqlStr+'trainNo='+inttostr(trainNo)+' and ticketNo='+inttostr(ticketNo);
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.ExecSQL;
getTicket:=localstation;//give the ackticket parameter
except
showmessage('无法获得票据!');
getTicket:=0;
end;
end
else if(localstation<>stations.warray[1])then//call other station for a ticket
//if not the first station
begin
//we use stations.warray[1]--the first station
//of the train to get tickets
case stations.warray[1] of
1:getticket:=untchengdu.ticketclass.getticket(SNo,DNo,trainNo,ticketNo);
2:getticket:=untchongqing.ticketclass.getticket(SNo,DNo,trainNo,ticketNo);
3:getticket:=untbeijing.ticketclass.getticket(SNo,DNo,trainNo,ticketNo);
4:getticket:=untwuhan.ticketclass.getticket(SNo,DNo,trainNo,ticketNo);
5:getticket:=untchangsha.ticketclass.getticket(SNo,DNo,trainNo,ticketNo);
6:getticket:=untzhuzhou.ticketclass.getticket(SNo,DNo,trainNo,ticketNo);
7:getticket:=untguangzhou.ticketclass.getticket(SNo,DNo,trainNo,ticketNo);
else getticket:=0;
end;
end
else//there is no station now
begin
getTicket:=0;//no result
end;
except
showmessage('数据操作出错!');
getticket:=0;
end;
stations.Free;
end;
function Cticket.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo:word;Flag:boolean):word;
var
sqlStr:string;
stations:Carrayword;
tSNo,tDNo:word;
begin
stations:=Carrayword.Create;
myCtrain.getRoute(trainNo,stations);
//get the train route in stations
if (ackNo=localstation)then
if(Flag=true)then
begin
sqlStr:='SELECT * FROM '+tableName+' WHERE trainNo='+inttostr(trainNo);
sqlStr:=sqlStr+' and ticketNo='+inttostr(ticketNo)+' and flag=false';
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.Open;
if(query.RecordCount=1)then
begin
tSNo:=query.Fields.Fields[1].AsVariant;
tDNo:=query.Fields.Fields[2].AsVariant;
//order of station for the train
//tSNo:=stations.getOrder(tSNo);
//tDNo:=stations.getOrder(tDNo);
//use stations.warray[1] and stations.getSuc to add tickets
addticket(stations.warray[tSNo],SNo,trainNo,ticketNo);
addticket(DNo,stations.warray[tDNo],trainNo,ticketNo);
//now del the tickets
sqlStr:='DELETE FROM '+tableName+' WHERE trainNo='+inttostr(trainNo);
sqlStr:=sqlStr+' and ticketNo='+inttostr(ticketNo)+' and flag=false';
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.ExecSQL;
except
showmessage('内部出错!');
ackTicket:=1;
end;
end
else
begin
showmessage('确认出错!');
ackTicket:=1;
end;
except
showmessage('ERROR');
ackTicket:=1;
end;
end
else//flag=false
begin
sqlStr:='UPDATE '+tablename+' set flag=true where trainNo='+inttostr(trainNo);
sqlStr:=sqlStr+' and Flag=false and ticketNo='+inttostr(ticketNo);
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.ExecSQL;
ackticket:=0;
except
ackticket:=1;//error
end;
end
else//not local station
begin//call ackNo station to ack the ticket
case ackNo of
1:ackTicket:=untchengdu.ticketclass.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo,Flag);
2:ackTicket:=untchongqing.ticketclass.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo,Flag);
3:ackTicket:=untbeijing.ticketclass.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo,Flag);
4:ackTicket:=untwuhan.ticketclass.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo,Flag);
5:ackTicket:=untchangsha.ticketclass.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo,Flag);
6:ackTicket:=untzhuzhou.ticketclass.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo,Flag);
7:ackTicket:=untguangzhou.ticketclass.ackTicket(SNo,DNo,trainNo,ticketNo,ackNo,Flag);
else ackTicket:=1;//error
end;
end;
stations.Free;
end;
function Cticket.addTicket(SNo,DNo,trainNo,ticketNo:word):word;
var
sqlStr:string;
stations:Carrayword;
tSor,tDor:word;
begin
if(SNo=localstation)then
if((SNo<>DNo) and (DNo>0) and (SNo>0) )then
begin
stations:=Carrayword.Create;
MyCtrain.getRoute(trainNo,stations);
tSor:=stations.getOrder(SNo);
tDor:=stations.getOrder(DNo);
sqlStr:='INSERT INTO '+tableName+' (ticketNo,SNo,DNor,Flag,trainNo)';
sqlStr:=sqlStr+' VALUES('+inttostr(ticketNo)+','+inttostr(tSor)+',';
sqlStr:=sqlStr+inttostr(tDor)+',(True),'+inttostr(trainNo)+')';
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.ExecSQL;
//sqlStr:='UPDATE '
addticket:=0;//OK
except
showmessage('插入票据出错!');
addticket:=1;//error
end;
stations.Free;
end
else
addticket:=0
else//not local station
begin
case SNo of
1:addticket:=untchengdu.ticketclass.addTicket(SNo,DNo,trainNo,ticketNo);
2:addticket:=untchongqing.ticketclass.addTicket(SNo,DNo,trainNo,ticketNo);
3:addticket:=untbeijing.ticketclass.addTicket(SNo,DNo,trainNo,ticketNo);
4:addticket:=untwuhan.ticketclass.addTicket(SNo,DNo,trainNo,ticketNo);
5:addticket:=untchangsha.ticketclass.addTicket(SNo,DNo,trainNo,ticketNo);
6:addticket:=untzhuzhou.ticketclass.addTicket(SNo,DNo,trainNo,ticketNo);
7:addticket:=untguangzhou.ticketclass.addTicket(SNo,DNo,trainNo,ticketNo);
end;
end;
end;
function Cticket.delTicket(trainNo,ticketNo:word):word;
var
sqlStr:string;
begin
sqlStr:='DELETE FROM '+tableName+' WHERE trainNo='+inttostr(trainNo);
sqlStr:=sqlStr+' and ticketNo='+inttostr(ticketNo)+' and flag=false';
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.ExecSQL;
delticket:=0; //OK
except
showmessage('删除票据出错!');
delticket:=1;
end;
end;
function Cticket.addfull(StationNo,trainNo:word;ticketNo:word;Num:word):word;
var
sqlStr:string;
stations:Carrayword;
i:integer;
begin
if(StationNo=localstation)then
begin
stations:=Carrayword.Create;
MyCtrain.getRoute(trainNo,stations);
for i:=1 to Num do
begin
sqlStr:='INSERT INTO '+tableName+' (ticketNo,SNo,DNor,Flag,trainNo)';
sqlStr:=sqlStr+' VALUES('+inttostr(ticketNo+i-1)+',1,';
sqlStr:=sqlStr+inttostr(stations.Num)+',True,'+inttostr(trainNo)+')';
try
query.Close;
query.SQL.Clear;
query.SQL.Add(sqlStr);
query.Prepare;
query.ExecSQL;
//sqlStr:='UPDATE '
addfull:=0;//OK
except
showmessage('插入票据出错!');
addfull:=1;//error
exit;//do not execute any more
end;
end;
stations.Free;
end
else//not local station
begin
case StationNo of
1:addfull:=untchengdu.ticketclass.addfull(StationNo,trainNo,ticketNo,Num);
2:addfull:=untchongqing.ticketclass.addfull(StationNo,trainNo,ticketNo,Num);
3:addfull:=untbeijing.ticketclass.addfull(StationNo,trainNo,ticketNo,Num);
4:addfull:=untwuhan.ticketclass.addfull(StationNo,trainNo,ticketNo,Num);
5:addfull:=untchangsha.ticketclass.addfull(StationNo,trainNo,ticketNo,Num);
6:addfull:=untzhuzhou.ticketclass.addfull(StationNo,trainNo,ticketNo,Num);
7:addfull:=untguangzhou.ticketclass.addfull(StationNo,trainNo,ticketNo,Num);
else:addfull:=1;
end;
//addfull:=0;
end;
end;
procedure Cticket.setQuery(queryname:Tquery);
begin
query:=queryname;
end;
procedure Cticket.settable(name:string);
begin
tablename:=name;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
frmChangsha:=TfrmChangsha.Create(form1);
frmchangsha.Visible:=true;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
frmBeijing:=TfrmBeijing.Create(form1);
frmBeijing.Visible:=true;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
frmGuangzhou:=Tfrmguangzhou.create(form1);
frmguangzhou.Visible:=true;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
frmzhuzhou:=Tfrmzhuzhou.create(form1);
frmzhuzhou.Visible:=true;
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
frmchengdu:=Tfrmchengdu.create(form1);
frmchengdu.Visible:=true;
end;
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
frmwuhan:=Tfrmwuhan.create(form1);
frmwuhan.Visible:=true;
end;
procedure TForm1.BitBtn7Click(Sender: TObject);
begin
frmchongqing:=Tfrmchongqing.create(form1);
frmchongqing.Visible:=true;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -