accountunit.pas

来自「很好地delphi书籍源码」· PAS 代码 · 共 284 行

PAS
284
字号
unit AccountUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ValEdit, StdCtrls, Buttons, ComCtrls, DBGrids, ExtCtrls,
  DB, DBTables, Mask;

type
  TFrmAccount = class(TForm)
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    PrintSB: TSpeedButton;
    Splitter1: TSplitter;
    LookUpIDSB: TSpeedButton;
    GuestIDCB: TComboBox;
    Query1: TQuery;
    Panel2: TPanel;
    Panel3: TPanel;
    HotelDBGrid: TDBGrid;
    Panel4: TPanel;
    Panel5: TPanel;
    TitleL1: TLabel;
    TitleL2: TLabel;
    BedDBGrid: TDBGrid;
    Panel6: TPanel;
    Panel7: TPanel;
    TitleL3: TLabel;
    TotalDBGrid: TDBGrid;
    Label2: TLabel;
    StatusBar1: TStatusBar;
    StaticText1: TStaticText;
    PayModeCB: TComboBox;
    Label1: TLabel;
    OkSB: TSpeedButton;
    DTEdit: TEdit;
    Splitter2: TSplitter;
    procedure SpeedButton1Click(Sender: TObject);
    procedure PrintSBClick(Sender: TObject);
    procedure GuestIDCBChange(Sender: TObject);
    procedure LookUpIDSBClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure OkSBClick(Sender: TObject);
  private
    { Private declarations }
  public
     { Public declarations }
  end;

var
  FrmAccount: TFrmAccount;

implementation

uses DataModuleUnit, QRRoomFeeUnit, GetYourInputUnit, DecGRoomUnit,
  QRAccountUnit;
var
  ID,YourName:string;
  Sum:Currency;
  FBed,FOffice,FDinner,FPlay,FShop,FOther:string;
 {$R *.dfm}
procedure TFrmAccount.SpeedButton1Click(Sender: TObject);
begin
  Close;
end;

procedure TFrmAccount.GuestIDCBChange(Sender: TObject);
begin
  ID:=GuestIDCB.Text;
  if ID='' then Exit;
  with DataModule1.qGRoomFee do
  begin
    //检查是否存在还没有定停用时间的床位
    Close;
    SQL.Clear;
    SQL.Add('Select RoomID as 未退的房间号,BedID as 未退的床位号,');
    SQL.Add('BedStartDateTime as 启用时间,BedEndDateTime as 停用时间');
    SQL.Add(' From tbGRoomFee where GuestID='+ID);
    SQL.Add('AND BedStartDateTime>BedEndDateTime');
    Open;
    if not IsEmpty then
    begin
      if Application.MessageBox('该客户有些床位还没有退,现在退吗!','提示',
         MB_YesNo+MB_IconExclamation+MB_SystemModal)=IDYES then
      begin
        FrmDecGRoom:=TFrmDecGRoom.Create(Application);
        FrmDecGRoom.GuestIDCB.Text:=ID;
        FrmDecGRoom.GuestIDCB.OnChange(self);
        FrmDecGRoom.ShowModal;
        GuestIDCBChange(self);
      end else
        Exit;
    end;;
    Close;
    SQL.Clear;
    SQL.Add('select GuestID as 客户编号 ,GuestName as 客户姓名,');
    SQL.Add('RoomID as 房间号,BedID as 床位号,BedPrice as 床位价格,');
    SQL.Add('BedDays as 使用天数,');
    SQL.Add('BedStartDateTime as 启用时间,BedEndDateTime as 停用时间,');
    SQL.Add('BedDays*BedPrice as 床位费');
    SQL.Add('from tbGRoomFee where GuestID='+ID);
    Open;
    First;
    Sum:=0;
    while not eof do
    begin
      Sum:=Sum+FieldByName('床位费').AsCurrency;
      Next;
    end;
    FBed:=FloatToStr(Sum);
  end;
  with DataModule1.qGHotelFee do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select GuestID 客户编号, GuestName 客户姓名,CardID 证件号码,');
    SQL.Add('sum(FeeOffice) as 商务费, sum(FeeDinner) as 餐饮费,sum(FeePlay) as 娱乐费,');
    SQL.Add('sum(FeeShop) as 购物费, sum(FeeOther) as 其它费用');
    SQL.Add(' from tbGHotelFee where GuestID='+GuestIDCB.Text);
    SQL.Add(' GROUP BY GuestID,GuestName,CardID');
    Open;
    ID:=GuestIDCB.Text;
    if Not ISEmpty then
    begin
      YourName:=FieldByName('客户姓名').Value;
      FOffice:=FieldByName('商务费').Value;
      FDinner:=FieldByName('餐饮费').Value;
      FPlay:=  FieldByName('娱乐费').Value;
      FShop:=  FieldByName('购物费').Value;
      FOther:= FieldByName('其它费用').Value;
    end;
  end;
  TotalDBGrid.Columns.Clear;
  OkSB.Enabled:=true;
end;

procedure TFrmAccount.LookUpIDSBClick(Sender: TObject);
begin
  YourName:=GetYourString ;
  if  YourName='' then exit;
  with TQuery.Create(Application) do
  begin
    DatabaseName:=DataModule1.qGInfo.DatabaseName;
    Close;
    SQL.Clear;
    SQL.Add('select GuestID from tbGInfo');
    SQL.Add('where GuestName="'+YourName+'"');
    Open;
    if IsEmpty then
       ShowMessage(YourName+'这个用户不存在!')
    else
    begin
      GuestIDCB.Clear;
      First;
      while not eof do
      begin
        GuestIDCB.Items.Add(IntToStr(Fields[0].AsInteger));
        Next;
      end;
    end;
    if GuestIDCB.Items.Count=1 then
    begin
      GuestIDCB.ItemIndex:=0;
      GuestIDCBChange(self);
    end else
      GuestIDCB.ItemIndex:=-1;
    free;
  end;


end;

procedure TFrmAccount.FormCreate(Sender: TObject);
begin
  TitleL1.Caption:='宾'+#13#10+'馆'+#13#10+'内'+#13#10+'消'+#13#10+'费';
  TitleL2.Caption:='宾'+#13#10+'馆'+#13#10+'住'+#13#10+'宿'+#13#10+'费';
  TitleL3.Caption:='合'+#13#10+'计';
  GuestIDCB.Items:=FindGuestID;
  DTEdit.Text:=DateTimeToStr(Now);
  HotelDBGrid.Columns.Clear;
  BedDBGrid.Columns.Clear;
  TotalDBGrid.Columns.Clear;
end;

procedure TFrmAccount.OkSBClick(Sender: TObject);
var
  SQLStr:TStrings;
begin
  SQLStr:=TStringList.Create;
  SQLStr.Add('BEGIN TRAN MyTran');
  SQLStr.Add('INSERT INTO tbHGuestInCome VALUES');
  SQLStr.Add('('+ID+',"'+YourName+'",'); //客户编号,姓名
  SQLStr.Add(FBed+','+FOffice+','+FDinner+','+FPlay+','+ FShop+','+FOther);
  SQLStr.Add(',"'+PayModeCB.Text +'","'+DTEdit.Text+'")'); //娱乐费
  SQLStr.Add('Update tbGInfo Set LeaveDateTime="'+ DTEdit.Text+'"');
  SQLStr.Add('where GuestID='+GuestIDCB.Text);
  SQLStr.Add('COMMIT TRAN');
  with DataModule1.qGInfo do
  begin
    Close;
    SQL.Clear;
    SQL.AddStrings(SQLStr);
    try
      ExecSQL;
      Showmessage('客户住宿结算完成,该客户已经结算,详细结算信息见"合计"一栏!');
    except On E:Exception do
      Application.MessageBox(PChar('该客户结算时出现错误!'),'提示:',MB_ICONERROR);
    end;
  end;
  SQLStr.Clear;
  SQLStr.Add('Select a.GuestID 客户编号, a.GuestName 客户姓名,');
  SQLStr.Add('a.FeeBed 床位费,a.FeeOffice 商务费,a.FeeDinner 餐饮费,a.FeePlay 娱乐费,');
  SQLStr.Add('a.FeeShop 购物费,a.FeeOther 其它费用,');
  SQLStr.Add('a.FeeBed+a.FeeOffice+a.FeeDinner+a.FeePlay+a.FeeShop 合计费用,');
  SQLStr.Add('a.LeaveDateTime 结算时间,b.Foregift 预付押金,');
  SQLStr.Add('a.FeeBed+a.FeeOffice+a.FeeDinner+a.FeePlay+a.FeeShop-b.Foregift 实际应付');
  SQLStr.Add('from tbHGuestInCome a ,tbGInfo b where a.GuestID=b.GuestID');
  SQLStr.Add('and a.GuestID='+GuestIDCB.Text); //娱乐费
  with DataModule1.qHGuestInCome  do
  begin
    Close;
    SQL.Clear;
    SQL.AddStrings(SQLStr);
    Open;
  end;
  with QReport3 do
  begin
    DataSet:=TotalDBGrid.DataSource.DataSet;
    GuestName.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeeBed.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeeOffice.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeeDinner.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeePlay.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeeShop.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeeOther.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeeSum.DataSet:=TotalDBGrid.DataSource.DataSet;
    FeeFore.DataSet:=TotalDBGrid.DataSource.DataSet;
    ActualPay.DataSet:=TotalDBGrid.DataSource.DataSet;

    GuestName.DataField :='客户姓名';
    FeeBed.DataField:='床位费';
    FeeOffice.DataField:='商务费';
    FeeDinner.DataField:='餐饮费';
    FeePlay.DataField:='娱乐费';
    FeeShop.DataField:='购物费';
    FeeOther.DataField:='其它费用';
    FeeSum.DataField:='合计费用';
    FeeFore.DataField:='预付押金';
    ActualPay.DataField:='实际应付';
  end;
  SQLStr.Clear;
  SQLStr.Add('BEGIN TRAN MyTran');
  SQLStr.Add('INSERT  tbOldGInfo SELECT * FROM tbGInfo where GuestID='+ID );
  SQLStr.Add('DELETE  tbGInfo where GuestID='+GuestIDCB.Text );
  SQLStr.Add('DELETE  tbGHotelFee where GuestID='+GuestIDCB.Text );
  SQLStr.Add('DELETE  tbGRoomFee where GuestID='+GuestIDCB.Text );
  SQLStr.Add('COMMIT TRAN');
  with DataModule1.qGInfo  do
  begin
    Close;
    SQL.Clear;
    SQL.AddStrings(SQLStr);
    try
      ExecSQL;
      Showmessage('该客户已经结束所有费用,不能再在宾馆内记帐消费!');
    except On E:Exception do
      Application.MessageBox(PChar('清除该客户信息时出错,请与供应商联系!'),'提示:',MB_ICONERROR);
    end;
  end;
  SQLStr.Free;
  GuestIDCB.Items:=FindGuestID;
  DTEdit.Text:=DateTimeToStr(Now);
  OkSB.Enabled:=false;
  PrintSB.Enabled:=true;
end;

procedure TFrmAccount.PrintSBClick(Sender: TObject);
begin
  QReport3.Preview;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?