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

📄 mainfrm.pas

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