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 + -
显示快捷键?