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

📄 mainform.~pas

📁 停车场收费系统停车场收费系统停车场收费系统停车场收费系统
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
            Filtered := true;
            Open;
            if RecordCount < 1 then
            begin
                Close;
                Result := -1;
                Exit;
            end;
            Edit;
            FieldByName('leave_time').AsDateTime := GetFeeTime;          //
            FieldByName('fee_station_id').AsInteger := gStationId;
            FieldByName('description').AsString := ' ';
            //写入费用信息
            FieldByName('fee').AsFloat := 0;
            Post;
        except
            Close;
            Result := -2;
            Exit;
        end;   //end try

        //execute well.
        Close;
        Result := 1;
    end;
end;

//插入远程临时用户使用表
function TfrmMain.InsertTempCardUse_Remote(): integer;
var
    mField : TField;
begin
    with DM.tblTempCardUse do
    begin
        try
            //
            Close;
            Connection := GetRemoteConnection();
            TableName := 'temp_card_use';
            Open;
            Append;      //插入一条记录
            FieldByName('card_num').AsString := CardNum;
            FieldByName('leave_time').AsDateTime := GetFeeTime;          //
            FieldByName('leave_station_id').AsInteger := gStationId;
            FieldByName('description').AsString := ' ';
            //写入费用信息
            FieldByName('fee').AsFloat := 0;
            Post;
        except
            Close;
            Result := -1;
            Exit;
        end;   //end try

        //execute well.
        Close;
        Result := 1;
    end;
end;

//收费记录表
function TfrmMain.InsertGetFee_remote(): integer;
begin
    with DM.tblGetFee do
    begin
        try
            //
            Close;
            Connection := GetRemoteConnection();
            TableName := 'get_fee';
            Open;
            Append;
            FieldByName('fee_station_id').AsInteger := gStationId;
            FieldByName('employee_id').AsInteger := gEmployeeId;
            FieldByName('get_fee_time').AsDateTime := GetFeeTime;
            //应付费用
            FieldByName('fee_ought').AsFloat := FeeOughtPay;
            //实付费用
            FieldByName('fee_pay').AsFloat := FeePayed;
            FieldByName('card_type').AsInteger := CardUserType;
            Post;
        except
            Close;
            Result := -1;
            Exit;
        end;   //end try

        //execute well.
        Close;
        Result := 1;
    end;
end;

function TfrmMain.InsertFeeStation_remote(): integer;
begin
    with DM.tblFeeStation do
    begin
        try
            //
            Close;
            Connection := GetRemoteConnection();
            TableName := 'fee_station';
            Filter := 'fee_station_id = ' + IntToStr(gStationId);
            Filtered := True;
            Open;
            if RecordCount <> 1 then
            begin
                Close;
                Result := -1;
                Exit;
            end;
            Edit;
            if CardUserType = USER_FIX then  //固定用户
            begin
                FieldByName('leave_fix_num').AsInteger := FieldByName('leave_fix_num').AsInteger + 1;
            end
            else begin                   //临时用户
                FieldByName('leave_casual_num').AsInteger := FieldByName('leave_casual_num').AsInteger + 1;
                FieldByName('leave_casual_money').AsFloat := FieldByName('leave_casual_money').AsFloat + FeeOughtPay;
            end;
            Post;
        except
            Close;
            Result := -1;
            Exit;
        end;   //end try

        //execute well.
        Close;
        Result := 1;
    end;
end;

function TfrmMain.InsertShiftRecord_remote(): integer;
begin
    with DM.tblShiftRecord do
    begin
        try
            //
            Close;
            Connection := GetRemoteConnection();
            TableName := 'shift_record';
            Open;
            Post;
        except
            Close;
            Result := -1;
            Exit;
        end;   //end try

        //execute well.
        Close;
        Result := 1;
    end;
end;


//==============================================
//======================高层函数===============
//==============================================

function TfrmMain.DoGetFee(ACardNum: string;
  AEnterTime: TDateTime): integer;
begin
    Self.CardNum := ACardNum;
    Self.EnterTime := AEnterTime;
    //call anther function
    Result := DoGetFee();
end;

{
返回值
-1 //不能连接本地数据库

}
function TfrmMain.DoGetFee: integer;
var
    mConn : TAdoConnection;
    mSuccess: boolean;
    mRet: integer;
label
    lblError;
begin

    mSuccess := false; //远程操作不成功
    mConn := GetRemoteConnection();
    if mConn <> nil then        //能够连接远程的服务器
    begin
        //开始事务
        mConn.BeginTrans;
        //============================================
        //----卡使用表--
        //=============================================
        if (CardUserType = USER_CASUAL) or (CardUserType = USER_LOSE) then //临时用户
        begin
            mRet := SaveTempCardUse_remote();
            if mRet > 0 then //和远程的数据记录匹配成功
            begin

            end
            else if mRet = -1 then //匹配不成功.
            begin
                //插入新的卡使用记录
                mRet := InsertTempCardUse_remote();
                if mRet < 0 then   //插入不成功
                begin
                    mConn.RollbackTrans;
                    goto lblError;
                end;

            end
            else if mRet = -2 then //数据库错误
            begin
                mConn.RollbackTrans ;
                goto lblError;//
            end;
        end
        else begin     //固定用户
            mRet := SaveFixCardUse_remote();
            if mRet > 0 then //和远程的数据记录匹配成功
            begin

            end
            else if mRet = -1 then //匹配不成功.
            begin
                //插入新的卡使用记录
                mRet := InsertFixCardUse_remote();
                if mRet < 0 then
                begin
                    mConn.RollbackTrans;
                    goto lblError;
                end;
            end
            else if mRet = -2 then //数据库错误
            begin
                mConn.RollbackTrans;
                goto lblError;//
            end;
        end;
        //======处理表Get_Fee=========
        if InsertGetFee_remote() < 0 then
        begin
            mConn.RollbackTrans ;
            goto lblError;
        end;
        //======处理表Fee_station=====
        if InsertFeeStation_remote()< 0 then
        begin
            mConn.RollbackTrans ;
            goto lblError;
        end;
        //提交事务,置
        mConn.CommitTrans;
        mSuccess := true;
        Exit;
    end;
lblError:
    Result := -1;

end;

//执行刷卡后的操作
function TfrmMain.DoReadCard: integer;
var
    mScreen:TUserScreen;
begin
    //for debug
    pnlReadCard.Caption := CardNum;

    //显示停车费用
    if CardUserType = USER_FIX then
    begin
        FeeOughtPay := 0.0;
        edtOughtPay.Text := FloatToStr(FeeOughtPay);
        lblCard.Caption := '月卡用户';
        //清除找零显示
        edtPayed.Text := '';
        edtChange.Text := '';
    end
    else if CardUserType = USER_CASUAL then
    begin
        FeeOughtPay := GetFeeNormal();
        edtOughtPay.Text := FloatToStr(FeeOughtPay);
        lblCard.Caption := '临时用户';
        //清除找零显示
        edtPayed.Text := '';
        edtPayed.SetFocus();
        edtChange.Text := '';
        //在客户显示屏上显示
        if CardUserType = USER_CASUAL then
        begin
            mScreen := TUserScreen.Create(gConfig.ScreenPort);
            try
                mScreen.DisplayTotal(FeeOughtPay);
            finally
                mScreen.Free;
            end;
        end;
    end
    else if CardUserType = USER_LOSE then
    begin
        FeeOughtPay := 10.0;
        edtOughtPay.Text := FloatToStr(FeeOughtPay);
        lblCard.Caption := '票丢失';
        //清除找零显示
        edtPayed.Text := '';
        edtPayed.SetFocus();
        edtChange.Text := '';
        //在客户显示屏上显示
        if CardUserType = USER_CASUAL then
        begin
            mScreen := TUserScreen.Create(gConfig.ScreenPort);
            try
                mScreen.DisplayTotal(FeeOughtPay);
            finally
                mScreen.Free;
            end;
        end;
    end;

    Result := 1;
end;


procedure TfrmMain.edtPayedKeyPress(Sender: TObject; var Key: Char);
var
    mFee: double ;
    mPter : TPter;
    mScreen: TUserScreen;
    mReader : TCardReader;
    mRet : integer;
begin
    //===============固定用户不用交停车费========
    if CardUserType = USER_FIX then
    begin
        Key := #0;
        Exit;
    end;

    if Key <> #13 then Exit;

    if FeeStationState = STATE_WAIT_CARD then //没有刷卡
    begin
        //
    end;
    //数据转换处理
    try
        mFee := StrToFloat(edtPayed.Text);
    except
        ShowMessage('费用输入错误!');
        Exit;
    end;
    if mFee < FeeOughtPay then //所付金额小于应付金额
    begin
        ShowMessage('费用不足!');
        Exit;
    end;

    FeePayed := mFee;
    //显示找零
    edtChange.Text := FloatToStr(FeePayed - FeeOughtPay);
    edtChange.Repaint();

    //=========向卡中写入离开时间和离开地址====
    if CardUserType = USER_CASUAL then
    begin
        mReader := TCardReader.Create(gConfig.ReaderPort);
        mRet := mReader.WriteAddr(EnterAddr1,EnterAddr2,
                     Copy(gConfig.ControlAddr,1,2),Copy(gConfig.ControlAddr,3,2) );
        if mRet < 0 then
        begin
            gErrorRecord.Append(1,'写入离开地址错误!');
            gErrorRecord.ToListView(lvError);
        end;
        mRet := mReader.WriteLeaveTime(Self.LeaveTime);
        if mRet < 0 then
        begin
            gErrorRecord.Append(1,'写入离开时间错误!');
            gErrorRecord.ToListView(lvError);
        end;
        mReader.Free;
    end;

    //**************在客户显示屏中显示*************
    mScreen := TUserScreen.Create(gConfig.ScreenPort);
    try
        mScreen.DisplayChange(FeePayed - FeeOughtPay);
    finally
        mScreen.Free;
    end;
    //****************打印时间和费用***************
    mPter := TPter.CreateParented(Handle);
    mPter.EnterTime := EnterTime;
    mPter.LeaveTime := LeaveTime;
    mPter.TotalFee := FeeOughtPay;
    mPter.PrintMoney;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -