📄 mainfrm.pas
字号:
else
Result := ssAllOut;
end;
function TfrmMain.GetTimes(ABeginTime, AEndTime: TDateTime): TDateTime;
begin
if ABeginTime <= AEndTime then
Result := AEndTime - ABeginTime
else
Result := 1 - (ABeginTime - AEndTime);
end;
function TfrmMain.DateTimeToChinesStr(ADateTime: TDateTime): string;
var
Hours, Minutes, temp1, temp2: Word;
HourStr, TimeStr: string;
begin
DecodeTime(ADateTime, Hours, Minutes, temp1, temp2);
Hours := Trunc(ADateTime / (1 / 24));
HourStr := IntToStr(Hours);
TimeStr := IntToStr(Minutes);
Result := HourStr + '小时' + TimeStr + '分钟';
end;
procedure TfrmMain.DecodeMoney(ABeginTime, AEenTime: TDateTime; var APt,
AYh, ATx: Double; IsTx: Boolean);
var
BeginDateTime, EndDateTime, BeginTime, AllDateTime, Times: TDateTime;
YhMoney, TxMoney, PtMoney, AllYhMoney: Double;
OneDayYhMoney, OneDayTxMoney, OneDayPtMoney, OneDayMoney: Double; //一整天内,各部分所占钱数。
YhTime, TxTime, PtTime, AllYhTime: TDateTime;
OneDayYhTime, OneDayTxTime, OneDayPtTime: TDateTime; //一整天内,各部分所占时间。
AllDaysMoney: Double;
Days: Integer;
TongXiao: Boolean;
I: Integer;
begin
BeginDateTime := ABeginTime;
EndDateTime := AEenTime;
TongXiao := IsTx;
BeginTime := TimeOf(BeginDateTime);
AllDateTime := EndDateTime - BeginDateTime;
AllDateTime := Abs(AllDateTime);
Times := TimeOf(AllDateTime);
Days := Trunc(AllDateTime);
if EnableYHSD then
BuildTimeSect(TongXiao)
else
FillChar(TheTimeSectArray, SizeOf(TheTimeSectArray), 0); //如果不使用优惠时段则将TheTimeSectArray清零。
YhMoney := 0;
AllYhTime := 0;
for I := Low(TheTimeSectArray) to High(TheTimeSectArray) do
begin
if I = 5 then Continue;
YhTime := InSectTimes(BeginTime, Times, TheTimeSectArray[I]);
AllYhTime := AllYhTime + YhTime;
YhMoney := YhMoney + GetMoney(YhTime, TheTimeSectArray[I].NetMoney);
end;
//通宵的费用和时间。
TxMoney := 0;
TxTime := 0;
if TongXiao then
begin
TxTime := InSectTimes(BeginTime, Times, TheTimeSectArray[5]);
if TxTime > 0 then
TxMoney := TheTimeSectArray[5].NetMoney;
end;
//普通时段的费用
PtTime := Times - TxTime - AllYhTime;
PtMoney := GetMoney(PtTime, FeiLu);
//天数部分的费用。
OneDayYhMoney := 0; //包括通宵。
OneDayYhTime := 0; //包括通宵。
for I := Low(TheTimeSectArray) to High(TheTimeSectArray) do
begin
if I = 5 then Continue;
OneDayYhMoney := OneDayYhMoney + GetMoney(TheTimeSectArray[I].Length, TheTimeSectArray[I].NetMoney);
OneDayYhTime := OneDayYhTime + TheTimeSectArray[I].Length;
end;
OneDayTxMoney := 0;
OneDayTxTime := 0;
if TongXiao then
OneDayTxMoney := TheTimeSectArray[5].NetMoney;
OneDayTxTime := TheTimeSectArray[5].Length;
OneDayPtTime := 1 - OneDayYhTime - OneDayTxTime;
OneDayPtMoney := GetMoney(OneDayPtTime, FeiLu);
APt := OneDayPtMoney * Days + PtMoney;
AYh := OneDayYhMoney * Days + YhMoney;
ATx := OneDayTxMoney * Days + TxMoney;
end;
function TfrmMain.EncodeMoney(APt, AYh, ATx: Double;
IsHy: Boolean): Double;
var
EnablePt, EnableYh, EnableTx: Boolean;
theYHL: Double; //优惠率
begin
if IsHy then
begin
theYHL := YHL / 100;
if EnablePt then
APt := APt * theYHL;
if EnableYh then
AYh := AYh * theYHL;
if EnableTx then
ATx := ATx * theYHL;
end;
Result := APt + AYh + ATx;
end;
procedure TfrmMain.MyRound(var Money: Double);
var
temp: Double;
X: Integer;
Y: Double;
I: Integer; //几舍几入的界限
begin
temp := Money / ZXDW;
X := Trunc(temp);
Y := temp - X;
I := YECL + 2;
if Y >= (I / 10) then
Inc(X);
Money := ZXDW * X;
if Money < ZDSF then
Money := ZDSF
end;
procedure TfrmMain.GetFjMoney(const ComputerID: Integer; var SpMoney,
NetMoney: Double);
begin
with dmMain.tblSpBuy do
begin
DisableControls;
First;
while not Eof do
begin
if FieldByName('机号').Value = ComputerID then
if FieldByName('类型').AsBoolean = true then
SpMoney := SpMoney + FieldByName('合计').AsFloat
else
NetMoney := NetMoney + FieldByName('合计').AsFloat;
Next;
end;
EnableControls;
end;
end;
procedure TfrmMain.actFuJiaExecute(Sender: TObject);
begin
frmFuJia := TfrmFuJia.Create(Self);
frmFuJia.ShowModal;
end;
procedure TfrmMain.PutIntoAccount(ANetMoney, AFjMoney: Double;
ADate: TDate);
begin
with dmMain.tblMrjs do
begin
if CheckToday(ADate) then
begin
Edit;
FieldByName('网费').AsFloat := FieldByName('网费').AsFloat
+ ANetMoney;
FieldByName('商品').AsFloat := FieldByName('商品').AsFloat
+ AFjMoney;
Post;
end
else
AppendRecord([ADate, ANetMoney, AFjMoney]);
end;
end;
function TfrmMain.CheckToday(ADate: TDate): Boolean;
begin
result := false;
with dmMain.tblMrjs do begin
First;
repeat
if Int(FieldByName('日期').AsDateTime) <> ADate then
Next
else begin
result := true;
Break;
end;
until Eof;
end;
end;
procedure TfrmMain.N21Click(Sender: TObject);
begin
frmMrjs := TfrmMrjs.Create(Self);
frmMrjs.ShowModal;
end;
procedure TfrmMain.actClearExecute(Sender: TObject);
var
NetMoney: Double;
FjSpMoney, FjNetMoney: Double;
ComputerID: string;
begin
ClearRecord;
end;
procedure TfrmMain.ClearRecord;
var
ComputerID: Integer;
NetMoney: Double;
FjSpMoney, FjNetMoney, FjAllMoney: Double;
Today: TDate;
IsHy: Boolean;
CanPut: Boolean;
SQLstr: string;
HyCard: string;
begin
ComputerID := dmMain.tblMain.FieldByName('机号').AsInteger;
NetMoney := dmMain.tblMain.FieldByName('网费').AsFloat;
HyCard := dmMain.tblMain.FieldByName('卡号').AsString;
GetFjMoney(ComputerID, FjSpMoney, FjNetMoney);
case JsByDate of
0: Today := Trunc(dmMain.tblMain.FieldByName('上机时间').AsDateTime);
1: Today := Trunc(dmMain.tblMain.FieldByName('下机时间').AsDateTime);
end;
IsHy := dmMain.tblMain.FieldByName('卡号').AsString <> '';
CanPut := True;
if IsHy and (not AddHyMoney) then
CanPut := False;
if Today = 0 then
CanPut := False;
if CanPut then
PutIntoAccount(NetMoney, FjSpMoney, Today);
if IsHy then SetHyCardMoney(HyCard, NetMoney + FjSpMoney + FjNetMoney);
with dmMain.tblMain do
begin
Edit;
SetFields([nil, null, null, null, null, null, nil, null, False, null]);
Post
end;
SQLstr := 'DELETE * FROM 商品销售 WHERE 机号=' + IntToStr(ComputerID);
dmMain.tblSpBuy.Close;
with dmMain.qryForAll do
begin
Close;
SQL.Clear;
SQL.Add(SQLstr);
ExecSQL;
end;
dmMain.tblSpBuy.Open;
end;
function TfrmMain.GetHyCardMoney(const ID: string): Double;
var
SQLstr: string;
begin
SQLstr := 'SELECT 余额 FROM 会员 WHERE 卡号="' + ID + '"';
with dmMain.qryForAll do
begin
close;
SQL.Clear;
SQL.Add(SQLstr);
Open;
Result := Fields[0].AsFloat;
end;
end;
procedure TfrmMain.SetHyCardMoney(const ID: string; Money: Double);
var
XfMoney, CardMoney: Double;
SQLstr, MoneyStr: string;
begin
MoneyStr := FloatToStr(Money);
SQLstr := 'UPDATE 会员 SET 累计消费=累计消费+' + MoneyStr
+ ', 余额=余额-' + MoneyStr + ' WHERE 卡号="' + ID + '"';
//ShowMessage(SQLstr);
with dmMain.qryForAll do
begin
Close;
SQL.Clear;
SQL.Add(SQLstr);
ExecSQL;
end;
dmMain.tblHy.Refresh;
end;
procedure TfrmMain.SetInfoPanel;
const
RMB = '¥';
var
BeginTime, EndTime, AllTimes: TDateTime;
NetMoney, FjMoney, AllMoney: Double;
PtMoney, YhMoney, TxMoney: Double;
FjSpMoney, FjNetMoney: Double;
IsTx, IsHy: Boolean;
S1, S2, S3: string;
ComputerID: Integer;
label
SetLabel;
begin
S1 := '';
S2 := '';
S3 := '';
BeginTime := dmMain.tblMain.FieldByName('上机时间').AsDateTime; ;
if BeginTime = 0 then goto SetLabel;
if not dmMain.tblSpBuy.Active then goto SetLabel;
if dmMain.tblMain.FieldByName('下机时间').Value = null then
EndTime := Now
else
EndTime := dmMain.tblMain.FieldByName('下机时间').AsDateTime;
IsTx := dmMain.tblMain.FieldByName('通宵').AsBoolean;
IsHy := dmMain.tblMain.FieldByName('卡号').AsString <> '';
ComputerID := dmMain.tblMain.FieldByName('机号').AsInteger;
DecodeMoney(BeginTime, EndTime, PtMoney, YhMoney, TxMoney, isTx);
NetMoney := EncodeMoney(PtMoney, YhMoney, TxMoney, isHy);
MyRound(NetMoney);
GetFjMoney(ComputerID, FjSpMoney, FjNetMoney);
FjMoney := FjSpMoney + FjNetMoney;
AllTimes := EndTime - BeginTime;
S1 := DateTimeToChinesStr(AllTimes);
S2 := RMB + FormatFloat('0.00', NetMoney);
S3 := RMB + FormatFloat('0.00', FjMoney);
SetLabel:
Label4.Caption := S1;
Label5.Caption := S2;
Label6.Caption := S3;
end;
procedure TfrmMain.OpenNote;
var
S: string;
begin
GetDir(0, S);
S := S + '\note.txt';
if FileExists('note.txt') then
Memo1.Lines.LoadFromFile(S);
//ShowMessage(S);
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
S: string;
begin
GetDir(0, S);
S := S + '\note.txt';
Memo1.Lines.SaveToFile(S);
end;
procedure TfrmMain.actSwapComputerExecute(Sender: TObject);
begin
frmSpNum := TfrmSpNum.Create(Self);
try
frmSpNum.Caption := '换机';
frmSpNum.GroupBox1.Caption := '换到';
frmSpNum.SpinEdit1.MaxValue := dmMain.tblMain.RecordCount;
if frmSpNum.ShowModal = mrOk then
begin
end
finally
frmSpNum.Free;
end;
end;
procedure TfrmMain.N13Click(Sender: TObject);
begin
frmAbout := TfrmAbout.Create(Self);
frmAbout.ShowModal;
end;
procedure TfrmMain.Timer1Timer(Sender: TObject);
var
SQLstr: string;
ThisTime:TDateTime;
begin
ThisTime:=Now;
SQLstr := 'SELECT 机号 FROM 计费 WHERE (限时<>NULL) AND ('+FloatToStr(ThisTime)+'-上机时间>限时)';
with dmMain.qryTime do
begin
Close;
SQL.Clear;
SQL.Add(SQLstr);
Open;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -