📄 mainfrm.pas
字号:
frmStartComputer := TfrmStartComputer.Create(Self);
try
frmStartComputer.SetEditModal;
if frmStartComputer.ShowModal = mrOK then
begin
frmStartComputer.EditComputer;
end;
finally
frmStartComputer.Free;
end;
end;
procedure TfrmMain.SetPanel8;
begin
Panel8.Top := Panel9.Top + 1;
Panel8.Height := Panel9.Height - 2;
Panel8.Width := Panel9.Width - 2;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
SetPanel8;
ReadConfig;
OpenNote;
end;
procedure TfrmMain.FormResize(Sender: TObject);
begin
SetPanel8;
end;
function TfrmMain.IsHuiyan(ID: string): Boolean;
var
strSQL: string;
begin
ID := Trim(ID);
strSQL := 'SELECT 状态 FROM 会员 WHERE 卡号=' + '"' + ID + '"';
with dmMain.qryCheckHy do
begin
Close;
SQL.Clear;
SQL.Add(strSQL);
Open;
end;
Result := dmMain.qryCheckHy.Fields[0].AsBoolean;
if dmMain.qryCheckHy.Eof then
Result := False
end;
function TfrmMain.IsHuiyan(ID, PassWord: string): Boolean;
var
strSQL: string;
begin
ID := Trim(ID);
strSQL := 'SELECT 密码 FROM 会员 WHERR HH 卡号=' + ID;
with dmMain.qryCheckHy do
begin
Close;
SQL.Clear;
SQL.Add(strSQL);
Open;
end;
if PassWord = dmMain.qryCheckHy.FieldByName('密码').Value then
Result := True
else
Result := False;
end;
procedure TfrmMain.BeginComputer(XianShi: TTime; YaJin: Double;
BeiZhu: string);
begin
with dmMain.tblMain do
begin
Edit;
FieldByName('上机时间').AsDateTime := Now;
FieldByName('限时').AsDateTime := XianShi;
FieldByName('压金').AsFloat := YaJin;
FieldByName('备注').AsString := BeiZhu;
Post;
end;
end;
procedure TfrmMain.BeginComputer(KaHao: string; XianShi: TTime;
YaJin: Double; BeiZhu: string);
begin
with dmMain.tblMain do
begin
Edit;
FieldByName('卡号').AsString := KaHao;
FieldByName('上机时间').AsDateTime := Now;
FieldByName('限时').AsDateTime := XianShi;
FieldByName('压金').AsFloat := YaJin;
FieldByName('备注').AsString := BeiZhu;
Post;
end;
end;
procedure TfrmMain.ShowHyForm(Sender: TObject);
begin
frmHy := TfrmHy.Create(Self);
frmHy.ShowModal;
end;
procedure TfrmMain.ShowSpForm(Sender: TObject);
begin
frmSp := TfrmSp.Create(Self);
frmSp.ShowModal;
end;
procedure TfrmMain.ShowConfigForm(Sender: TObject);
begin
frmConfig := TfrmConfig.Create(Self);
frmConfig.SetData;
frmConfig.ShowModal;
end;
function TfrmMain.NetMoney(BeginTime, EndTime: TDateTime;
TongXiao: Boolean): Double;
begin
Result := FeiLu * (EndTime - BeginTime);
end;
function TfrmMain.NetMoney(BeginTime, EndTime: TDateTime;
TongXiao: Boolean; UserID: string): Double;
begin
end;
procedure TfrmMain.Splitter2Moved(Sender: TObject);
begin
SetPanel8;
end;
function TfrmMain.BuildTimeSect(ATongXiao: Boolean): TTimeSectArray;
var
I, J: Integer;
begin
for I := 1 to 5 do
begin
TheTimeSectArray[I].Index := I;
TheTimeSectArray[I].BeginTime := YouHui[I * 2 - 1];
TheTimeSectArray[I].EndTime := YouHui[I * 2];
TheTimeSectArray[I].NetMoney := YouHui[10 + I];
TheTimeSectArray[I].TongXiao := False;
if I = 5 then //如果是通宵,则对其进行特殊的设置。
begin
TheTimeSectArray[I].TongXiao := True;
if not ATongXiao then
begin
TheTimeSectArray[I].BeginTime := 0; //如果不是通宵上机,则将通宵长度置为0
TheTimeSectArray[I].EndTime := 0;
end;
end;
end;
SetLength;
end;
procedure TfrmMain.SetTongxiao(var Youhui: TTimeSect; const Tongxiao: TTimeSect);
begin
if InTongxiao(Youhui.BeginTime, Tongxiao) and InTongxiao(Youhui.EndTime, Tongxiao) then
begin
Youhui.BeginTime := 0;
Youhui.EndTime := 0;
end; //开始、结束时间都在通宵内
if InTongxiao(Youhui.BeginTime, Tongxiao) and (not InTongxiao(Youhui.EndTime, Tongxiao)) then
begin
Youhui.BeginTime := Tongxiao.EndTime;
end; //只有开始时间在通宵内
if (not InTongxiao(Youhui.BeginTime, Tongxiao)) and InTongxiao(Youhui.EndTime, Tongxiao) then
begin
Youhui.EndTime := Tongxiao.BeginTime;
end; //只有结束时间在通宵内
if (Youhui.BeginTime = Tongxiao.BeginTime) and (Youhui.EndTime = Tongxiao.EndTime) then
begin
Youhui.BeginTime := 0;
Youhui.EndTime := 0;
end; //与通宵完全重叠
end;
function TfrmMain.InTongxiao(ATime: TDateTime;
ATongxiaoSect: TTimeSect): Boolean;
var
TxBeginTime, TxEndTime: TDateTime;
begin
Result := False;
TxBeginTime := ATongxiaoSect.BeginTime;
TxEndTime := ATongxiaoSect.EndTime;
if TxBeginTime < TxEndTime then
if (ATime > TxBeginTime) and (ATime < TxEndTime) then
Result := True;
if TxBeginTime > TxEndTime then
if not ((ATime >= TxEndTime) and (ATime <= TxBeginTime)) then
Result := True;
end;
procedure TfrmMain.SetLength;
var
I: Integer;
begin
for I := Low(TheTimeSectArray) to High(TheTimeSectArray) do
begin
if TheTimeSectArray[I].BeginTime > TheTimeSectArray[I].EndTime then
TheTimeSectArray[I].Length := 1 - (TheTimeSectArray[I].BeginTime - TheTimeSectArray[I].EndTime)
else
TheTimeSectArray[I].Length := TheTimeSectArray[I].EndTime - TheTimeSectArray[I].BeginTime
end; //此处不可倒置,否则开始、结束时间相等时会出现Length为1的情况。
end;
procedure TfrmMain.Taxis(var ATimeSect: TTimeSect; var BTimeSect: TTimeSect);
var
Temp: TTimeSect;
begin
if ((ATimeSect.Length = 0) and (BTimeSect.Length <> 0)) or
(((ATimeSect.Length <> 0) and (BTimeSect.Length <> 0)) and (ATimeSect.BeginTime > BTimeSect.BeginTime)) then
begin
Temp := ATimeSect;
ATimeSect := BTimeSect;
BTimeSect := Temp;
end;
end;
procedure TfrmMain.TaxisTheTimeSectArray;
var
I, J: Integer;
begin
for I := Low(TheTimeSectArray) to High(TheTimeSectArray) do
begin
for J := Low(TheTimeSectArray) to High(TheTimeSectArray) - 1 do
Taxis(TheTimeSectArray[J], TheTimeSectArray[J + 1]);
end;
end;
function TfrmMain.EachSectMoney(ABeginTime,
AEndTime: TDateTime): TEachSectMoney;
var
AllLength: Double;
BeginTime: TDateTime; //开始时间,不包括日期部分。
TheDays: Integer;
TheTimes: Double;
begin
AllLength := AEndTime - ABeginTime;
BeginTime := TimeOf(ABeginTime);
TheDays := Trunc(AllLength);
TheTimes := AllLength - TheDays;
end;
function TfrmMain.InSectTimes(ABeginTime, ATimeLength: Double;
ATimeSect: TTimeSect): TDateTime;
var
BeginTime, EndTime, SectBegin, SectEnd: TDateTime;
begin
BeginTime := ABeginTime;
EndTime := TimeOf(ABeginTime + ATimeLength);
SectBegin := ATimeSect.BeginTime;
SectEnd := ATimeSect.EndTime;
case InSectState(BeginTime, EndTime, ATimeSect) of
ssAllIn: Result := ATimeLength;
ssTwoPortIn: Result := ATimeLength + ATimeSect.Length - 1;
ssBeginIn: Result := GetTimes(BeginTime, SectEnd);
ssEndIn: Result := GetTimes(SectBegin, EndTime);
ssInclude: Result := ATimeSect.Length;
ssAllOut: Result := 0;
else
ShowMessage('错误!!!');
end;
end;
function TfrmMain.InSect(ATime, ASectBegin, ASectEnd: TDateTime): Boolean;
begin
Result := False;
if ASectBegin <= ASectEnd then
if (ATime >= ASectBegin) and (ATime <= ASectEnd) then
Result := True;
if ASectBegin > ASectEnd then
if not ((ATime > ASectEnd) and (ATime < ASectBegin)) then
Result := True;
//当SectBegin=SectEnd 时,Result肯定为false,所以不进行判断。
end;
function TfrmMain.GetMoney(ATimes, AFeilu: Double): Double;
var
Hours: Double;
begin
Hours := ATimes / (1 / 24);
Result := AFeilu * Hours;
end;
procedure TfrmMain.EndComputer;
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
dmMain.tblMain.Edit;
dmMain.tblMain.FieldByName('下机时间').AsDateTime := Now;
BeginDateTime := dmMain.tblMain.FieldByName('上机时间').AsDateTime;
EndDateTime := dmMain.tblMain.FieldByName('下机时间').AsDateTime;
TongXiao := dmMain.tblMain.FieldByName('通宵').AsBoolean;
BeginTime := TimeOf(BeginDateTime);
AllDateTime := EndDateTime - BeginDateTime;
//ShowMessage(FloatToStr(AllDateTime));
AllDateTime := Abs(AllDateTime);
//ShowMessage(FloatToStr(AllDateTime));
Times := TimeOf(AllDateTime);
Days := Trunc(AllDateTime);
//ShowMessage(IntToStr(Days));
BuildTimeSect(TongXiao);
//四(五)个优惠时段的总费用和时间。
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);
OneDayMoney := OneDayYhMoney + OneDayTxMoney + OneDayPtMoney;
AllDaysMoney := OneDayMoney * Days;
dmMain.tblMain.FieldByName('网费').AsFloat := YhMoney + TxMoney + PtMoney + AllDaysMoney;
frmJz.lblTimeAll.Caption := DateTimeToChinesStr(AllDateTime);
frmJz.ShowModal;
dmMain.tblMain.Post;
end;
function TfrmMain.InSectState(ABeginTime, AEndTime: TDateTime;
ATimeSect: TTimeSect): TInSectState;
var
SectBegin, SectEnd: TDateTime;
begin
SectBegin := ATimeSect.BeginTime;
SectEnd := ATimeSect.EndTime;
if InSect(ABeginTime, SectBegin, SectEnd) and InSect(AEndTime, SectBegin, SectEnd) then
if GetTimes(ABeginTime, AEndTime) > ATimeSect.Length then
Result := ssTwoPortIn
else
Result := ssAllIn;
if InSect(ABeginTime, SectBegin, SectEnd) and not (InSect(AEndTime, SectBegin, SectEnd)) then
Result := ssBeginIn;
if not (InSect(ABeginTime, SectBegin, SectEnd)) and InSect(AEndTime, SectBegin, SectEnd) then
Result := ssEndIn;
if not (InSect(ABeginTime, SectBegin, SectEnd)) and not (InSect(AEndTime, SectBegin, SectEnd)) then
if InSect(SectBegin, ABeginTime, AEndTime) and InSect(SectEnd, ABeginTime, AEndTime) then
Result := ssInclude
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -