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

📄 mainfrm.pas

📁 程序用Delphi6编写
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  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 + -