⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~pas

📁 一个简单的火车售票系统
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
                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 + -