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

📄 c_zd.pas

📁 经典的酒店管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{立方酒店管理系统 v1.0
 Copyright by CubicSoft
 program by ls.
 Date:20020301-20020601
 20020627 加入注释
}
unit C_Zd;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, C_StdJd, DosMove, StdCtrls, Buttons, ExtCtrls, C_Define, Grids,
  DBGrids, DBTables, DB;

type
  TZdForm = class(TStdJdForm)
    Label1: TLabel;
    lblXfje: TLabel;
    Label3: TLabel;
    lblJsje: TLabel;
    Label5: TLabel;
    lblYjje: TLabel;
    Label7: TLabel;
    lblTfje: TLabel;
    Label9: TLabel;
    lblYfje: TLabel;
    Label11: TLabel;
    lblYhje: TLabel;
    dbgZd: TDBGrid;
    qryZd: TQuery;
    dsKrjz: TDataSource;
    Label2: TLabel;
    edtSjje: TEdit;
    tblKrjz: TTable;
    tblKrjzD_XFXM: TStringField;
    Label4: TLabel;
    lblJzfs: TLabel;
    Label8: TLabel;
    Label10: TLabel;
    lblJzrq: TLabel;
    lblJzsj: TLabel;
    Label6: TLabel;
    Bevel2: TBevel;
    qryKrzd: TQuery;
    qryGz: TQuery;
    tblKryj: TTable;
    tblYsk: TTable;
    btnPrint: TBitBtn;
    lblJzfh: TLabel;
    tblKrjzD_JZBH: TStringField;
    tblKrjzD_HH: TIntegerField;
    tblKrjzD_XMBH: TStringField;
    tblKrjzD_XFDJ: TFloatField;
    tblKrjzD_XFSL: TFloatField;
    tblKrjzD_XFGG: TStringField;
    tblKrjzD_XFJE: TFloatField;
    tblKrjzD_YJJE: TFloatField;
    tblKrjzD_YHJE: TFloatField;
    tblKrjzD_JZFS: TStringField;
    tblKrjzD_JZLX: TStringField;
    tblKrjzD_KHBH: TStringField;
    tblKrjzD_XYKBH: TStringField;
    tblKrjzD_JZRQ: TDateTimeField;
    tblKrjzD_JZSJ: TDateTimeField;
    tblKrjzD_CZYXM: TStringField;
    tblKrjzD_BZ: TStringField;
    tblKrjzD_YSRQ: TStringField;
    qryKrzdD_ZDBH: TStringField;
    qryKrzdD_HH: TIntegerField;
    qryKrzdD_ZDLB: TStringField;
    qryKrzdD_KRBH: TStringField;
    qryKrzdD_YJBH: TStringField;
    qryKrzdD_KFBH: TStringField;
    qryKrzdD_SJFJ: TFloatField;
    qryKrzdD_XMBH: TStringField;
    qryKrzdD_XFDJ: TFloatField;
    qryKrzdD_XFSL: TFloatField;
    qryKrzdD_XFJE: TFloatField;
    qryKrzdD_XFRQ: TDateTimeField;
    qryKrzdD_XFSJ: TDateTimeField;
    qryKrzdD_YHJE: TFloatField;
    qryKrzdD_JZRQ: TDateTimeField;
    qryKrzdD_JZSJ: TDateTimeField;
    qryKrzdD_JZBZ: TStringField;
    qryKrzdD_JSBZ: TStringField;
    qryKrzdD_DLR1: TStringField;
    qryKrzdD_DLR2: TStringField;
    qryKrzdD_DLR3: TStringField;
    qryKrzdD_DLR4: TStringField;
    qryKrzdD_CZYXM: TStringField;
    qryKrzdD_JZYXM: TStringField;
    qryKrzdD_TYR: TStringField;
    qryKrzdD_BZ: TStringField;
    qryKrzdD_YSRQ: TStringField;
    qryKrzdD_JZBH: TStringField;
    tblKrjzD_BMBH: TStringField;
    qryKrzdD_BMBH: TStringField;
    qryYsk: TQuery;
    procedure tblKrjzNewRecord(DataSet: TDataSet);
    procedure tblKrjzAfterPost(DataSet: TDataSet);
    procedure tblKrjzBeforeInsert(DataSet: TDataSet);
    procedure tblKrjzBeforeDelete(DataSet: TDataSet);
    procedure tblKrjzD_YHJEValidate(Sender: TField);
    procedure btnCancClick(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure edtSjjeExit(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
  private
    { Private declarations }
    FBmbh: string;
    FJzxx: TJZXX;
    FKfxx: TKfxxArray;
    FGzxx: TKFXX;
    FItemNo: Integer;
    FYfje: Currency;
    FXfje: Currency;
    FYjje: Currency;
    FYhje: Currency;
    FJsje: Currency;
    FTfje: Currency;
    FSjje: Currency;
    FDtfj: Currency;
    FDhf : Currency;
    FEwf : Currency;
    FJzbh: string;
    FHh: Integer;
    IsAppend: Boolean;
    FJzfhs: string;
    procedure GetKfxx;
    procedure GetKfxxWjz;
    procedure ShowJzxx;
    procedure UpdateKrzd(const ABz: string);
    procedure UpdateKfzt;
    procedure UpdateKrxx;
    procedure UpdateEwf;
    procedure UpdateBqj;
    procedure AddKrzd(AHh: Integer;const AXmbh: string;AXfje: Currency;AKfxx: TKFXX);
    procedure AddKrjz;
    procedure UpdateKrjz;
    procedure AddDtfj;
    procedure AddDhf;
    procedure AddEwf;
    procedure ShowJzfs;
    function SumYfje: Currency;
    function SumXfje: Currency;
    function SumYjje: Currency;
    function SumDtfj: Currency;
    function SumDhf : Currency;
    function SumEwf : Currency;
    procedure GetGzxx;
    procedure SumYhje;
    procedure BakKrxx;
    procedure BakKrzd;
    procedure EmptyKrxx;
    procedure EmptyKryj;
    procedure EmptyKrzd;
    procedure UpdateGz;
    procedure UpdateYsk;
    procedure CanYh;
    procedure AddYjk(AGbkJzxx: TGbkJzxx);
    procedure AddYsk(const AKhbh,AZdbh,AXmbh: string;AHh: Integer;AXfje: Currency);
    procedure UpdateXxdc;
  public
    { Public declarations }
  end;

var
  ZdForm: TZdForm;

procedure Zd(AJzxx: TJZXX);
procedure WjzZd(AJzxx: TJZXX);

implementation

uses C_HotelData, C_Sysprint, C_CardXf, C_Zdcx;

{$R *.dfm}

//散客结帐帐单
procedure Zd(AJzxx: TJZXX);
begin
  ZdForm := TZdForm.Create(Application);
  try
    with ZdForm do
    begin
      //获取部门编号
      FBmbh := HotelData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);

      //获取结帐信息
      FJzxx := AJzxx;
      //是否能优惠
      CanYh;
      //获取客房信息
      GetKfxx;
      //显示结帐方式
      ShowJzfs;
      //计算当天房价
      FDtfj := SumDtfj;
      //计算电话费
      FDhf  := SumDhf;
      //计算押金金额
      FYfje := SumYfje;
      //计算已结金额
      FYjje := SumYjje;
      //计算消费金额
      FXfje := SumXfje;
      if (FDtfj<>0)or(FDhf<>0) then
        FXfje := FXfje + FDtfj + FDhf;
      //显示结帐信息
      ShowJzxx;
      //显示帐单
      AddKrjz;
      ShowModal;
    end;
  finally
    ZdForm.Free;
  end;
end;

//未结帐结帐
procedure WjzZd(AJzxx: TJZXX);
begin
  ZdForm := TZdForm.Create(Application);
  try
    with ZdForm do
    begin
      FBmbh := HotelData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);

      FJzxx := AJzxx;
      //是否能优惠
      CanYh;
      //获取客房信息
      GetKfxxWjz;
      //显示结帐方式
      ShowJzfs;
      FJzfhs := FJzxx.AKfbh;
      lblJzfh.Caption := '结帐房号:' + FJzfhs;
      //计算当天房价
      FDtfj := 0;
      //计算电话费
      FDhf  := 0;
      //计算押金金额
      FYfje := SumYfje;
      //计算已结金额
      FYjje := SumYjje;
      //计算消费金额
      FXfje := SumXfje;
      {if (FDtfj<>0)or(FDhf<>0) then
        FXfje := FXfje + FDtfj + FDhf;}
      //显示结帐信息
      ShowJzxx;
      //显示帐单
      AddKrjz;
      ShowModal;
    end;
  finally
    ZdForm.Free;
  end;
end;

//判断是否能够优惠 只有人民币、信用卡、支票才可以优惠
procedure TZdForm.CanYh;
begin
  dbgZd.Columns[2].ReadOnly := not((FJzxx.AJzfs=JZFS_RMB)
                                 or(FJzxx.AJzfs= JZFS_ZP)
                                 or(FJzxx.AJzfs=JZFS_XYK));
end;

//获得客房信息
procedure TZdForm.GetKfxx;
var
  I: Integer;
begin
  FItemNo := High(FJzxx.AJzfh);
  SetLength(FKfxx,FItemNo+1);
  for I:=0 to FItemNo do
    FKfxx[i] := HotelData.GetKfxx(FJzxx.AJzfh[i]);
end;

//获得未结帐客房信息
procedure TZdForm.GetKfxxWjz;
begin
  FItemNo := 0;
  SetLength(FKfxx,FItemNo+1);
  FKfxx[0].AKfbh := FJzxx.AKfbh;
  FKfxx[0].AKrxm := FJzxx.AKfbh;
  FKfxx[0].AZdbh := FJzxx.AJzfh[0];
  FKfxx[0].AKrbh := FJzxx.AKrbh;
  FKfxx[0].AYjbh := FJzxx.AYjbh;
  FKfxx[0].ADtfj := 0;
  FKfxx[0].ADhf  := 0;
  FKfxx[0].AZdhh := 9999;//?
end;

//显示结帐方式
procedure TZdForm.ShowJzfs;
var
  I : Integer;
begin
  FJzfhs := '';
  for i := 0 to FItemNo do
    FJzfhs := FJzfhs + FJzxx.AJzfh[i] + ' ';
  lblJzfh.Caption := '结帐房号 ' + FJzfhs;
  //edit by ls. 2002/09/02
  if FJzxx.AJzfs = JZFS_JZ then
    lblJzfs.Caption := FJzxx.AJzfs+'('+FJzxx.AKhbh+')'
  else if FJzxx.AJzfs = JZFS_XYK then
    lblJzfs.Caption := FJzxx.AJzfs+'('+HotelData.FindMc('XYK','D_XYKBH','D_XYKMC',FJzxx.AXykbh)+')'
  else if FJzxx.AJzfs = JZFS_GSK then
    lblJzfs.Caption := FJzxx.AJzfs+'('+FJzxx.AKfbh+')'
  else if FJzxx.AJzfs = JZFS_GTD then
    lblJzfs.Caption := FJzxx.AJzfs+'('+HotelData.FindMc('KRXX','D_KRBH','D_KRXM',FJzxx.AKrbh)+')'
  else
    lblJzfs.Caption := FJzxx.AJzfs;
  lblJzrq.Caption := FormatDateTime('yyyy-mm-dd',FJzxx.AJzrq);
  lblJzsj.Caption := FormatDateTime('hh:mm',FJzxx.AJzsj);
end;

//获得额外费
function TZdForm.SumEwf: Currency;
begin
  Result := FSjje-FJsje;
end;

//获得电话费
function TZdForm.SumDhf: Currency;
var
  I: Integer;
begin
  Result := 0;
  for I:=0 to FItemNo do
  begin
    FKfxx[i].ADhf := HotelData.GetDhf(FKfxx[i].AKfbh,FKfxx[i].ADdrq,FKfxx[i].ADdsj);
    Result := Result + FKfxx[i].ADhf;
  end;
end;

//更新半全价
procedure TZdForm.UpdateBqj;
var
 i: Integer;
begin
  for i:=0 to FItemNo do
  if FKfxx[i].ABqj<>BQJ_ZC then
    HotelData.UpdateBqj(FKfxx[i].AKfbh,FKfxx[i].ABqj,0,FKfxx[i].ADtfj)
  else
    HotelData.UpdateBqj(FKfxx[i].AKfbh,FKfxx[i].ABqj,0,0);
end;
//获得当天房价
function TZdForm.SumDtfj: Currency;
var
  I,ABqj: Integer;
begin
  Result := 0;
  for I:=0 to FItemNo do
  begin
    FKfxx[i].ADtfj := GetDtfj(FKfxx[i].ADdsj,FJzxx.AJzsj,FKfxx[i].AKfbz,FKfxx[i].ASjfj);
    ABqj           := CheckLdsj(FKfxx[i].ADdsj,FJzxx.AJzsj,FKfxx[i].AKfbz);
    FKfxx[i].ABqj  := ABqj;

    {if ABqj<>BQJ_ZC then
      HotelData.UpdateBqj(FKfxx[i].AKfbh,ABqj,0,FKfxx[i].ADtfj)
    else
      HotelData.UpdateBqj(FKfxx[i].AKfbh,ABqj,0,0);}
    Result := Result + FKfxx[i].ADtfj;
  end;
end;

//累计优惠金额
procedure TZdForm.SumYhje;
var
  PrevRecord: TBookMark;
begin
  PrevRecord := tblKrjz.GetBookmark;
  try
    tblKrjz.DisableControls;
    FYhje := 0;
    tblKrjz.First;
    while not tblKrjz.Eof do
    begin
      FYhje := FYhje + tblKrjzD_YHJE.Value;
      tblKrjz.Next;
    end;
  finally
    tblKrjz.EnableControls;
    if PrevRecord<>nil then
    begin
      tblKrjz.GotoBookmark(PrevRecord);
      tblKrjz.FreeBookmark(PrevRecord);
    end;
    ShowJzxx;
  end;
end;

//获得预付金额
function TZdForm.SumYfje: Currency;
var
  I: Integer;
  SqlStr: string;
begin
  SqlStr := '';

  for I:= 0 to FItemNo do
  begin
    if I>0 then SqlStr := SqlStr + 'or';
    SqlStr := SqlStr + '(D_YJBH="'+FKfxx[i].AYjbh+'")';
  end;

  SqlStr := 'select sum(D_YFJE) from KRYJ where (D_FKFS="'
            +FKFS_RMB+'")and('+SqlStr+')';
  Result := HotelData.SumJe(SqlStr);
end;

//获得已结金额
function TZdForm.SumYjje: Currency;
var
  I: Integer;
  SqlStr: string;
begin
  SqlStr := '';
  for I:= 0 to FItemNo do
  begin
    if I>0 then SqlStr := SqlStr + 'or';
    SqlStr := SqlStr + '(D_ZDBH="'+FKfxx[i].AZdbh+'")';
  end;
  //SqlStr := 'select sum(D_XFJE) from KRZD where (D_JZBZ="'
    //        +JZ_YX+'")and('+SqlStr+')';
  SqlStr := 'select sum(D_XFJE) from KRZD where ((D_XMBH="'
            +XMBH_YJK+'")or(D_JZBZ="'+JZ_YX+'"))and('+SqlStr+')';

  Result := 0-HotelData.SumJe(SqlStr);
end;

//获得消费金额
function TZdForm.SumXfje: Currency;
var
  I: Integer;
  SqlStr: string;
begin
  SqlStr := '';
  
  for I:= 0 to FItemNo do
  begin
    if I>0 then SqlStr := SqlStr + 'or';
    SqlStr := SqlStr + '(D_ZDBH="'+FKfxx[i].AZdbh+'")';
  end;

  //edit by ls. 20020729
  {SqlStr := 'select sum(D_XFJE) from KRZD where (D_HH=0)'
            +'and('+SqlStr+')';}
  SqlStr := 'select sum(D_XFJE) from KRZD where (D_HH<>0)and(D_XMBH<>"'+XMBH_YJK+'")'
            +'and(D_JZBZ<>"'+JZ_YX+'")and('+SqlStr+')';

  Result := HotelData.SumJe(SqlStr);
end;

//更新信息导出
procedure TZdForm.UpdateXxdc;
var
  I: Integer;
begin
  try
    try
      HotelData.tblXxdc.Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;

    for I:=0 to FItemNo do
    begin
      if HotelData.tblXxdc.FindKey([FKfxx[i].AKrbh]) then
      begin
        HotelData.tblXxdc.Edit;
        HotelData.tblXxdc.FieldByName('D_LDRQ').AsString := FormatDateTime('yyyymmdd',Date);
        HotelData.tblXxdc.Post;
      end;
    end;
  finally
    HotelData.tblXxdc.Close;
  end;
end;

//显示结帐信息
procedure TZdForm.ShowJzxx;
begin
  FJsje := FXfje-FYjje-FYhje;

  if FJsje>=0 then
    FSjje := Trunc(FJsje+0.99)
  else
    FSjje := Trunc(FJsje-0.99);

  //20020627 edit by ls. 如果不是人民币结帐 退还全部押金  
  if FJzxx.AJzfs = JZFS_RMB then
  begin
    if FYfje>0 then

⌨️ 快捷键说明

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