📄 mainform.pas
字号:
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 + -