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

📄 mainform.pas

📁 求是科技出版的《Delphi串口通信工程开发实例导航》所有的源代码。是一本很好的书。拿出来与大家共享。
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ComCtrls, ExtCtrls, StdCtrls, Buttons, ToolWin, ImgList, Abcexctl,
  DBCtrls,
  PlmsDM, CapFrame, OleCtrls, MSCommLib_TLB;

type
  TfrmMain = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    mmiLoginOut: TMenuItem;
    N3: TMenuItem;
    mmiTotalBuyBill: TMenuItem;
    mmiBuyBill: TMenuItem;
    N6: TMenuItem;
    mmiSystem: TMenuItem;
    N9: TMenuItem;
    N11: TMenuItem;
    Panel2: TPanel;
    Panel11: TPanel;
    Panel14: TPanel;
    mmiContent: TMenuItem;
    mmiAbout: TMenuItem;
    mmiBlocker: TMenuItem;
    mmiAsyTime: TMenuItem;
    tmrMain: TTimer;
    mmiDownLoadCardList: TMenuItem;
    iglMessage: TImageList;
    N4: TMenuItem;
    mmiCheckTicket: TMenuItem;
    mmiLoseTicket: TMenuItem;
    Panel15: TPanel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    edtOughtPay: TEdit;
    edtPayed: TEdit;
    edtChange: TEdit;
    pnlReadCard: TPanel;
    Panel1: TPanel;
    Panel3: TPanel;
    lvError: TListView;
    lblConnection: TLabel;
    lblEmployeeName: TLabel;
    lblLoginTime: TLabel;
    Panel5: TPanel;
    ToolBar1: TToolBar;
    tbnLockTicket: TToolButton;
    tbnFloodOn: TToolButton;
    tbnFloodOff: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton1: TToolButton;
    Panel12: TPanel;
    lblCard: TLabel;
    msmDisplay: TMSComm;
    ImageList1: TImageList;
    Panel6: TPanel;
    Panel4: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    lvFinacialState: TListView;
    pnlStart: TPanel;
    pnlGet: TPanel;
    pnlMaintain: TPanel;
    pnlNow: TPanel;
    procedure edtPayedKeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure mmiLoginOutClick(Sender: TObject);
    procedure mmiBuyBillClick(Sender: TObject);
    procedure mmiTotalBuyBillClick(Sender: TObject);
    procedure mmiAboutClick(Sender: TObject);
    procedure mmiSystemClick(Sender: TObject);
    procedure mmiBlockerClick(Sender: TObject);
    procedure mmiAsyTimeClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure tmrMainTimer(Sender: TObject);
    procedure mmiDownLoadCardListClick(Sender: TObject);
    procedure tbnFloodOnClick(Sender: TObject);
    procedure tbnFloodOffClick(Sender: TObject);
    procedure mmiLoseTicketClick(Sender: TObject);
    procedure mmiCheckTicketClick(Sender: TObject);
  private
    { Private declarations }

    //=========================================================
    //=========================== 成员变量     ================
    //=========================================================
    EnterAddr1,EnterAddr2: string;
    PreCardNum ,CardNum,PhyCardNum: string;                     //卡号
    EnterTime,LeaveTime: TDateTime;      //进入和出站的时间
    IsPayed : boolean;                   //是否已经收过费用
    EnterStation,LeaveStation: integer;  //进入和出站的号码
    FeeOughtPay,FeePayed: double;  //应付和实付费用
    GetFeeTime: TDateTime;         //收取费用的时间
    CardUserType: integer;         //卡用户类型USER_FIX 和USER_CASUAL

    //和显示相关的数据
    FixUserNum,CasualUserNum: integer;    //出站的固定用户和临时用户数量
    FixUserFee,CasualUserFee: double;     //出站的固定用户和临时用户所交的停车费用
    FeeStart,FeeGet,FeeMainTain: double;   //开户费用,收到费用和维护费用


    //收费站状态
    FeeStationState: integer;

    //主计时器的计数器
    MainTimerCounter: integer;

    Bmp : TBitmap;

    //=========================================================
    //=========================== 成员函数     ================
    //=========================================================


    //得到通常情况下的停车费用
    function GetFeeNormal():double;overload;
    //得到入口时的信息
    function GetEnterInfo(ACardNum: string;AEnterTime: TDateTime): integer;

    //=========远程表操作=================
    function SaveFixCardUse_remote(): integer;
    function SaveTempCardUse_remote(): integer;
    function InsertFixCardUse_remote(): integer;
    function InsertTempCardUse_remote(): integer;

    function InsertGetFee_remote(): integer;
    function InsertFeeStation_remote(): integer;
    function InsertShiftRecord_remote(): integer;

    function BuyBill_remote(AMaintain: double): integer;
    function BuyTotalBill_remote(AMaintain: double) : integer;

    //===================================================
    //=================高层函数==========================
    function DoGetFee(ACardNum: string;AEnterTime: TDateTime): integer;overload;
    function DoGetFee(): integer;overload;

    function DoReadCard(): integer;

  public
    { Public declarations }
    //==================填充界面函数======
    procedure FillLoginInfo();      //登录系统信息
    procedure FillFinacialState();   //财务状态

  end;

var
  frmMain: TfrmMain;

implementation

uses
    db,
    ADODB, //to support ADO
    GlobalUnit,ConstUnit,
    BuyBillForm, //结帐窗体
    MaintainForm,//结帐窗体
    BlockerForm, //输入开挡车器原因窗口
    SetFeeRateForm, //费率设置窗口
    LookDatabaseForm,  //查看数据表窗口
    ControlClass,     //控制器类 
    PrinterClass,
    SystemForm,    //系统设置
    AboutForm,  //关于窗体
    ConnectForm, //连接数据库
    GroupRateForm,
    ScreenClass,
    CountFeeDM,
    CheckCardForm,
    LoginForm, CaptureForm;   //登录窗口

{$R *.DFM}

{ TfrmMain }


//填充登录信息
procedure TfrmMain.FillLoginInfo;
begin
    if GetRemoteConnection() <> nil then
    begin
        lblConnection.Font.Color := clBlue;
        lblConnection.Caption := '已连接远程数据库' ;
    end
    else begin
        lblConnection.Font.Color := clRed;
        lblConnection.Caption := '连接远程数据库错误'
    end;
    lblEmployeeName.Caption := gEmployeeName;
    lblLoginTime.Caption := DateTimeToStr(gLoginTime);
end;

//填充财务状态
procedure TfrmMain.FillFinacialState();
var
    mConnection : TADOConnection;
    mFeeStart,mFeeGet,mFeeMaintain: double;
begin
    mConnection := GetRemoteConnection();
    if mConnection = nil then mConnection := GetLocalConnection();

    if mConnection = nil then
    begin
                  //
    end;

    with lvFinacialState do
    begin
        with DM.tblFeeStationDisplay do
        begin
            try
                if Active = False then
                begin
                    Connection := mConnection ;
                    TableName := 'fee_station';
                    Filter := 'fee_station_id = ' + IntToStr(gStationId);
                    Filtered := True;
                    Active := True;
                end
                else begin
                    Refresh();
                end;
                if RecordCount > 0 then
                begin

                    Items[0].SubItems[0] := FieldByName('leave_fix_num').AsString;  //固定用户人次
                    Items[0].SubItems[1] := FieldByName('leave_fix_money').AsString;  //固定用户费用
                    Items[1].SubItems[0] := FieldByName('leave_casual_num').AsString;  //临时用户人次
                    Items[1].SubItems[1] := FieldByName('leave_casual_money').AsString;  //临时用户费用

                    mFeeStart := FieldByName('start_fee').AsFloat;
                    mFeeGet := FieldByName('leave_casual_money').AsFloat;
                    mFeeMaintain := FieldByName('maintain_fee').AsFloat;

                    pnlStart.Caption := Format('%8.2f',[mFeeStart]);
                    pnlGet.Caption := Format('%8.2f',[mFeeGet]);
                    pnlMaintain.Caption := Format('%8.2f',[mFeeMaintain]);
                    pnlNow.Caption := Format('%8.2f',[mFeeStart+mFeeGet-mFeeMaintain]);//计算当前结余的停车费
                end;

            except

            end;

            //close dataset
            Close;
        end;
    end;
end;

//得到平时的停车费用
function TfrmMain.GetFeeNormal(): double;
begin
    Result := 10.0;
end;


//得到进入停车场的信息
function TfrmMain.GetEnterInfo(ACardNum: string;AEnterTime: TDateTime): integer;
begin
    with DM do
    begin
        //固定用户
        if CardUserType = USER_FIX then
        begin
            tblFixCardUse.Close;
            tblFixCardUse.Connection := GetRemoteConnection();
            tblFixCardUse.TableName := 'fix_card_use';
            tblFixCardUse.Filter := 'card_num = ' + '''' + ACardNum + ''''
                                  + ' and '
                                  + 'enter_time = '
                                  + '''' + DateTimeToStr(AEnterTime) + '''';
            tblFixCardUse.Filtered := true;
            tblFixCardUse.Open;
            if tblFixCardUse.RecordCount >= 1 then
            begin
                tblFixCardUse.Last;
                Result := 2;
            end
            else Result := -1;
            dsCardUse.DataSet := tblFixCardUse;
        end
        else begin //临时用户
            tblTempCardUse.Close;
            tblTempCardUse.Connection := GetRemoteConnection();
            tblTempCardUse.TableName := 'temp_card_use';
            tblTempCardUse.Filter := 'card_num = ' + '''' + ACardNum + ''''
                                    + ' and '
                                    +'enter_time = '+ '''' + DateTimeToStr(AEnterTime) + '''';
            tblTempCardUse.Filtered := true;
            tblTempCardUse.Open;
            if tblTempCardUse.RecordCount >= 1 then
            begin
                tblTempCardUse.Last;
                Result := 2;
            end
            else Result := -2;
            dsCardUse.DataSet := tblTempCardUse;
        end;
    end;
end;

//更新远程固定用户表
function TfrmMain.SaveFixCardUse_Remote(): integer;
begin
    with DM.tblFixCardUse do
    begin
        try
            //
            Close;
            Connection := GetRemoteConnection();
            TableName := 'fix_card_use';
            Filter := 'card_num = ' + '''' + CardNum + '''' + ' and ';
            Filter := Filter + 'enter_time = '
                     + '''' + DateTimeToStr(EnterTime) + '''';
            Filtered := true;
            Open;
            if RecordCount <> 1  then
            begin
                Close;
                Result := -1;
                Exit;
            end;
            Edit;
            FieldByName('leave_time').AsDateTime := LeaveTime;          //
            FieldByName('leave_station_id').AsInteger := gStationId;
            FieldByName('description').AsString := ' ';
            Post;
        except
            Close;
            Result := -2;
            Exit;
        end;   //end try

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

//插入远程固定用户表
function TfrmMain.InsertFixCardUse_Remote(): integer;
begin
    with DM.tblFixCardUse do
    begin
        try
            //
            Close;
            Connection := GetRemoteConnection();
            TableName := 'fix_card_use';
            Open;
            Append;
            FieldByName('leave_time').AsDateTime := LeaveTime;          //
            FieldByName('leave_station_id').AsInteger := gStationId;
            FieldByName('description').AsString := ' ';
            Post;
        except
            Close;
            Result := -1;
            Exit;
        end;   //end try

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

//更新远程临时用户表
function TfrmMain.SaveTempCardUse_Remote(): integer;
var
    mField : TField;
begin
    with DM.tblTempCardUse do
    begin
        try
            //
            Close;
            Connection := GetRemoteConnection();
            TableName := 'temp_card_use';

            Filter := 'card_num = ' + '''' + CardNum + '''' + ' and ';
            Filter := Filter + 'enter_time = '
                     + '''' + DateTimeToStr(EnterTime) + '''';

⌨️ 快捷键说明

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