unitroomcheck.~pas

来自「自己做过的工程」· ~PAS 代码 · 共 1,283 行 · 第 1/3 页

~PAS
1,283
字号
   DMHotel.ADODataSet_itemnumber.Close;
        //获取房间号
        vroomid:=ed_roomid.Text;

        //获取入住时间
        vchecktime:=datetimetostr(date+time);
    //    showmessage(vchecktime);
      DMhotel.ADODataSet_roomin.Open;
vintime:=DMhotel.ADODataSet_roomin.FieldByName('intime').AsString;
   //     DMhotel.ADODataSet_roomin.Close;
//        showmessage(vintime);
//下面就执行添加记录的操作
DMHotel.ADODataSet_roomfee.Open;
with DMHotel.ADOQuery1 do
  begin
        close;//关闭以前的操作
        sql.Clear;
sql.Add('Insert into room_fee(code,roomid,roomtype,roomfee,'+
'roomthings,supsecond,discount,employeeid,totalfee,checktime,intime,'+
'kalaok,ballroom,commercecenter,hairdressing,username,remark,suproom)');

sql.Add('Values (:code,:roomid,:roomtype,:roomfee,'+
':roomthings,:supsecond,:discount,:employeeid,:totalfee,:checktime,:intime,'+
':kalaok,:ballroom,:commercecenter,:hairdressing,:username,:remark,:suproom)');
parameters.ParamByName('code').Value:=inttostr(coderoom);
//将这个主键存到一个变量中,准备后面打印用
vcodeid:=coderoom;
parameters.ParamByName('roomid').Value:=ed_roomid.Text;
//showmessage(ed_roomid.Text);
parameters.ParamByName('roomtype').Value:=cb_roomtype.Text;
parameters.ParamByName('roomfee').Value:=strtofloat(ed_roomfee.Text);
parameters.ParamByName('roomthings').Value:=strtofloat(ed_roomthings.Text);
parameters.ParamByName('supsecond').Value:=strtofloat(ed_supsecond.Text);
parameters.ParamByName('discount').Value:=strtofloat(ed_discount.Text);
parameters.ParamByName('employeeid').Value:=ed_employeeid.Text;

parameters.ParamByName('checktime').Value:=strtodatetime(vchecktime);
parameters.ParamByName('intime').Value:=strtodatetime(vintime);
parameters.ParamByName('totalfee').Value:=strtofloat(ed_totalfee.Text);
parameters.ParamByName('kalaok').Value:=strtofloat(ed_kalaok.Text);
parameters.ParamByName('ballroom').Value:=strtofloat(ed_ballroom.Text);
parameters.ParamByName('commercecenter').Value:=strtofloat(ed_commercecenter.Text);
parameters.ParamByName('hairdressing').Value:=strtofloat(ed_hairdressing.Text);
parameters.ParamByName('username').Value:=ed_username.Text;
parameters.ParamByName('remark').Value:=ed_remark.Text;
parameters.ParamByName('suproom').Value:=strtofloat(ed_suproom.Text);

  close;
  end;

//执行改变房间状态的操作
//将这个也写个函数的形式

      DMHotel.ADODataSet_roomstatus.Open;
      DMHotel.ADODataSet_roomstatus.Locate('roomid',vroomid,[]);
      DMHotel.ADODataSet_roomstatus.Edit;
      DMHotel.ADODataSet_roomstatus.FieldByName('statusid').AsString:='1'  ;
      DMHotel.ADODataSet_roomstatus.FieldByName('roomstatus').AsString:='空闲';
      DMHotel.ADODataSet_roomstatus.Post;
      DMHotel.ADODataSet_roomstatus.Close;


// 还要将room-in中的leftornot的值改变成yes
     DMHotel.ADODataSet_roomin.Open;
     DMHotel.ADODataSet_roomin.Locate('roomid;leftornot',vararrayof([vroomid,'no']),[]);
     DMHotel.ADODataSet_roomin.Edit;
     DMHotel.ADODataSet_roomin.FieldByName('leftornot').AsString:='yes';
      DMHotel.ADODataSet_roomin.Post;



//也要同时改变主界面上的房间标识的颜色 ,用自己定义的函数来实现
 forminroom.fun_roomcolorchange(strtoint(vroomid),clCaptionText) ;

    try
         DMHotel.ADOQuery1.ExecSQL;
         but_print.Enabled:=true;
         showmessage('已经成功的完成了收银操作,记录已存到收银数据库中!');
    except
         showmessage('操作失败!');
         DMHotel.ADOConnection1.RollbackTrans;
         exit;
    end;
    //在这里就清空所有的控件中的信息
ed_roomid.Clear;
ed_username.Clear;
ed_intime.Clear;
ed_checktime.Clear;
//ed_employeeid.Clear;
ed_roomthings.Clear;
ed_roomfee.Clear;
ed_kalaok.Clear;
ed_ballroom.Clear;
ed_commercecenter.Clear;
ed_suproom.Clear;
ed_supsecond.Clear;
ed_hairdressing.Clear;
ed_discount.Text:= '10';
ed_totalfee.Clear;
ed_remark.Clear;
//房间号为可用
ed_roomid.ReadOnly:=false;

//将计算按钮重新设置为不可用
but_compute.Enabled:=false;

    DMHotel.ADOConnection1.CommitTrans;
     DMHotel.ADODataSet_roomin.Requery;
   DMHotel.ADODataSet_roomfee.Requery;
   DMHotel.ADODataSet_roomfee.Close;
    DMHotel.ADODataSet_roomin.Close;
end;



    
procedure Tformroomcheck.but_debtClick(Sender: TObject);

//其实挂帐的实际就是要和收银一样。只不过两个之间的区别就是要存入的数据库不
//一样。一个是 room_fee 另外一个是 room_debt 。而其他的操作是一样的!

var
itemtype:string;
coderoom:integer;
vroomid:string;
vintime:string;
vchecktime:string;
judgeid:string;
judgestatus:string;
begin
  if MessageDlg('您确定要进行挂帐操作吗?',mtConfirmation,[mbYes,mbNo],0)= mrNO then
         exit;

  vroomid:=ed_roomid.Text;
    //房间号判断
   formroomcheck.fun_roomidjudge(vroomid,judgeid);
 // showmessage(judgeid);
   if   judgeid='pause' then
  exit;
   //房间状态判断
  formroomcheck.fun_roomstatusjudge(vroomid,'停用','预定','空闲','使用',judgestatus);
  if judgestatus='pause' then
  exit;

//收银的过程其实就是将这个数据写到数据库的过程。以为了以后的查找
//先要判断一下这个总的费用是否为0或为空
if (ed_totalfee.Text='') or (ed_totalfee.Text=inttostr(0)) then
begin
    showmessage('请认真确定是否住宿费用为零!');
    exit;
end;

// 开始对数据库的一个事件
Dmhotel.ADOConnection1.BeginTrans;

      DMHotel.ADODataSet_roomin.Open;
     // DMHotel.ADODataSet_roomstatus.Open;
//这个也可以写成一个函数的形式
   itemtype:='roomcheckmanagecode';
   DMHotel.ADODataSet_itemnumber.Open;
   DMHotel.ADODataSet_itemnumber.Locate('itemtype',itemtype,[]);
   coderoom:=DMHotel.ADODataSet_itemnumber.FieldValues['itemno'];
   coderoom:=coderoom+1;
   DMHotel.ADODataSet_itemnumber.Edit;
   DMHotel.ADODataSet_itemnumber.FieldValues['itemno']:=coderoom;
   DMHotel.ADODataSet_itemnumber.Post;
   //showmessage(inttostr(coderoom));
   DMHotel.ADODataSet_itemnumber.Close;
        //获取房间号
   vroomid:=ed_roomid.Text;

        //获取入住时间
   vchecktime:=datetimetostr(date+time);
 //  showmessage(vchecktime);
 //  DMHotel.ADODataSet_roomstatus.Open;
 //  DMhotel.ADODataSet_roomin.Open;
   vintime:=DMhotel.ADODataSet_roomin.FieldByName('intime').AsString;
   DMhotel.ADODataSet_roomin.Close;
  // showmessage(vintime);
//下面就执行添加记录的操作
  // DMhotel.ADODataSet_roomin.Open;
with DMHotel.ADOQuery1 do
  begin
        close;//关闭以前的操作
        sql.Clear;
sql.Add('Insert into room_debt(code,roomid,roomtype,roomfee,'+
'roomthings,supsecond,discount,employeeid,totalfee,checktime,intime,'+
'kalaok,ballroom,commercecenter,hairdressing,username,remark,suproom,checkornot)');

sql.Add('Values (:code,:roomid,:roomtype,:roomfee,'+
':roomthings,:supsecond,:discount,:employeeid,:totalfee,:checktime,:intime,'+
':kalaok,:ballroom,:commercecenter,:hairdressing,:username,:remark,:suproom,:checkornot)');
parameters.ParamByName('code').Value:=inttostr(coderoom);
parameters.ParamByName('roomid').Value:=ed_roomid.Text;
//showmessage(ed_roomid.Text);
parameters.ParamByName('roomtype').Value:=cb_roomtype.Text;
parameters.ParamByName('roomfee').Value:=strtofloat(ed_roomfee.Text);
parameters.ParamByName('roomthings').Value:=strtofloat(ed_roomthings.Text);
parameters.ParamByName('supsecond').Value:=strtofloat(ed_supsecond.Text);
//showmessage('dd')  ;
parameters.ParamByName('discount').Value:=strtofloat(ed_discount.Text);
parameters.ParamByName('employeeid').Value:=ed_employeeid.Text;
parameters.ParamByName('suproom').Value:=ed_suproom.Text;
parameters.ParamByName('checktime').Value:=strtodatetime(vchecktime);
parameters.ParamByName('intime').Value:=strtodatetime(vintime);
parameters.ParamByName('totalfee').Value:=strtofloat(ed_totalfee.Text);
parameters.ParamByName('kalaok').Value:=strtofloat(ed_kalaok.Text);
parameters.ParamByName('ballroom').Value:=strtofloat(ed_ballroom.Text);
parameters.ParamByName('commercecenter').Value:=strtofloat(ed_commercecenter.Text);
parameters.ParamByName('hairdressing').Value:=strtofloat(ed_hairdressing.Text);
parameters.ParamByName('username').Value:=ed_username.Text;
parameters.ParamByName('remark').Value:=ed_remark.Text;
parameters.ParamByName('checkornot').Value:='欠账';
  close;
  end;

//执行改变房间状态的操作
//将这个也写个函数的形式
     DMHotel.ADODataSet_roomin.Open;
   DMHotel.ADODataSet_roomstatus.Open;
      DMHotel.ADODataSet_roomstatus.Locate('roomid',vroomid,[]);
      DMHotel.ADODataSet_roomstatus.Edit;
      DMHotel.ADODataSet_roomstatus.FieldByName('statusid').AsString:='1'  ;
      DMHotel.ADODataSet_roomstatus.FieldByName('roomstatus').AsString:='空闲';
      DMHotel.ADODataSet_roomstatus.Post;
  //    DMHotel.ADODataSet_roomstatus.Close;
     //将room_in中的leftornot字段的值该为yes

     DMHotel.ADODataSet_roomin.Locate('roomid;leftornot',vararrayof([vroomid,'no']),[]);
     DMHotel.ADODataSet_roomin.Edit;
     DMHotel.ADODataSet_roomin.FieldByName('leftornot').AsString:='yes';
      DMHotel.ADODataSet_roomin.Post;

//也要同时改变主界面上的房间标识的颜色 ,用自己定义的函数来实现
 forminroom.fun_roomcolorchange(strtoint(vroomid),clCaptionText) ;

    try
         DMHotel.ADODataSet_roomdebt.Open;
         DMHotel.ADOQuery1.ExecSQL;
     //    but_print.Enabled:=true;
         showmessage('已经成功的完成了记帐操作,记录已存到记帐数据库!');
    except
         showmessage('记帐操作失败!');
         DMHotel.ADOConnection1.RollbackTrans;
         exit;
    end;

        //在这里就清空所有的控件中的信息
ed_roomid.Clear;
ed_username.Clear;
ed_intime.Clear;
ed_checktime.Clear;
//ed_employeeid.Clear;
ed_roomthings.Clear;
ed_roomfee.Clear;
ed_kalaok.Clear;
ed_ballroom.Clear;
ed_commercecenter.Clear;
ed_suproom.Clear;
ed_supsecond.Clear;
ed_hairdressing.Clear;
ed_discount.Text:='10';
ed_totalfee.Clear;
ed_remark.Clear;

ed_roomid.ReadOnly:=false;
//将计算按钮重新设置为不可用
   but_compute.Enabled:=false;

   DMHotel.ADODataSet_roomin.Requery;
   DMHotel.ADODataSet_roomdebt.Requery;
   DMHotel.ADODataSet_roomstatus.Requery;
   DMHotel.ADODataSet_roomstatus.Close;
   DMHotel.ADODataSet_roomdebt.Close;
   DMHotel.ADODataSet_roomin.Close;
   DMHotel.ADOConnection1.CommitTrans;
end;


procedure Tformroomcheck.but_cancelClick(Sender: TObject);
begin
   if MessageDlg('您确定要重新填写吗?',mtConfirmation,[mbYes,mbNo],0)= mrNO then
         exit;

ed_roomid.Clear;
ed_roomid.ReadOnly:=false;
ed_username.Clear;
ed_intime.Clear;
ed_checktime.Clear;
//ed_employeeid.Clear;
ed_roomthings.Clear;
ed_roomfee.Clear;
ed_kalaok.Clear;
ed_ballroom.Clear;
ed_commercecenter.Clear;
ed_suproom.Clear;
ed_supsecond.Clear;
ed_hairdressing.Clear;
ed_discount.Text:='10';
ed_totalfee.Clear;
ed_remark.Clear;

//费用计算要设置为不可用
but_compute.Enabled:=false;

end;
  //房客帐单查询
procedure Tformroomcheck.but_roomselectClick(Sender: TObject);
var
oldtotalfee:extended;
begin
if    ed_oldusername.Text='' then
begin
showmessage('你输入的要查询的人的姓名为空,请重新输入!');
exit;
end;

    DMHotel.SetDebtView1(ed_oldusername.Text,oldtotalfee);
    //showmessage(floattostr(oldtotalfee));
    ed_oldtotalfee.Text:=floattostr(oldtotalfee);
    button9.Enabled:=true;
   but_printdebt.Enabled:=false;
    cb_judge.Enabled:=true;
    cb_judge.Checked:=false;
end;

procedure Tformroomcheck.Button10Click(Sender: TObject);
// var
// oldusername:string;
begin
   if MessageDlg('您确定要重新填写吗?',mtConfirmation,[mbYes,mbNo],0)= mrNO then
         exit;
//  oldusername:=ed_oldusername.Text;

  DMHotel.ADODataSet_roomdebt.Close;
  DMHotel.ADODataSet_roomdebt.Prepared:=false;
  //这个地方不能用变量 .一定要用这种查询的形式!
  //首先要进行条件判断     >=:N1 and username<=:N2  username like   and
  DMHotel.ADODataSet_roomdebt.CommandText:='select * from room_debt where '+
     ' checkornot=:yesornot' ;
  //DMHotel.ADODataSet_roomdebt.Parameters.ParamByName('oldusername').Value:=oldusername;
  DMHotel.ADODataSet_roomdebt.Parameters.ParamByName('yesornot').Value:='欠账';


  //在这里进行统一的结算所有的帐单
  DMHotel.ADODataSet_roomdebt.Prepared:=true;
  DMHotel.ADODataSet_roomdebt.Open;

ed_oldusername.Clear;
ed_oldtotalfee.Clear;
end;

procedure Tformroomcheck.Button11Click(Sender: TObject);
begin
close;
end;
//房客还帐
procedure Tformroomcheck.Button9Click(Sender: TObject);
//var
//oldtotalfee:extended;
begin
     if MessageDlg('您确定要进行'+ed_oldusername.text+'的结帐操作吗吗?',mtConfirmation,[mbYes,mbNo],0)= mrNO then
         exit;
    //  DMHotel.SetDebtView1(ed_oldusername.Text,oldtotalfee);
              // DMHotel.ADODataSet_roomdebt.Open;
      DMHotel.ADODataSet_roomdebt.First;
  while not  DMHotel.ADODataSet_roomdebt.Eof do
 // showmessage('aaa');
    begin
               //这个地方收银实际上就是要将room_debt 中的checkornot字段的值改变 ’欠帐 ‘该为’已还‘
               //还要将还帐的时间记在里面
               //这个地方有个问题,但是不暂时不知道应该怎么解决?
     {  if DMHotel.ADODataSet_roomdebt.FieldByName('username').AsString=ed_oldusername.Text then
       showmessage('aaa');  }
       begin
        DMHotel.ADODataSet_roomdebt.Edit;
        DMHotel.ADODataSet_roomdebt.FieldByName('redebttime').Value:=date+time;
        DMHotel.ADODataSet_roomdebt.FieldByName('checkornot').AsString:='帐务已还清';
        DMHotel.ADODataSet_roomdebt.Post;
        showmessage('  '+ed_oldusername.Text+'  房客的帐单已经还清,记录已写入数据库中!');
       end;
        DMHotel.ADODataSet_roomdebt.Next;
       // showmessage('  '+ed_oldusername.Text+'  房客的帐单已经还清,记录已写入数据库中!');
     end;
      //showmessage('  '+ed_oldusername.Text+'  房客的帐单已经还清,记录已写入数据库中!');
      button9.Enabled:=false;
      ed_oldusername.Clear;
      ed_oldtotalfee.Clear;
      DMHotel.ADODataSet_roomdebt.Requery;
    DMHotel.ADODataSet_roomdebt.Close;
  DMHotel.ADODataSet_roomdebt.Prepared:=false;
  DMHotel.ADODataSet_roomdebt.CommandText:='select * from room_debt where '+
  ' checkornot=:yesornot' ;
  // DMHotel.ADODataSet_roomdebt.Parameters.ParamByName('oldusername').Value:=oldusername;
  DMHotel.ADODataSet_roomdebt.Parameters.ParamByName('yesornot').Value:='欠帐' ;
  DMHotel.ADODataSet_roomdebt.Prepared:=true;
  DMHotel.ADODataSet_roomdebt.Open;    
  but_printdebt.Enabled:=true;
end;

procedure Tformroomcheck.Button2Click(Sender: TObject);
var
vtest:extended;
begin
if  ed_customername.Text='' then
  begin
    showmessage('你的顾客姓名为空,请重新输入!' );
    exit;
  end;

 //判断各个控件是否为空,要是空就要将值设置为零
 if  ed_debtkalaok.Text='' then
      ed_debtkalaok.Text:=inttostr(0);

  if  ed_debtballroom.Text='' then
      ed_debtballroom.Text:=inttostr(0);

   if  ed_debtcommerce.Text='' then
      ed_debtcommerce.Text:=inttostr(0);

     if  ed_debtsuproom.Text='' then
      ed_debtsuproom.Text:=inttostr(0);

  if  ed_debtsupsecond.Text='' then
      ed_debtsupsecond.Text:=inttostr(0);

    if  ed_debthairdressing.Text='' then
      ed_debthairdressing.Text:=inttostr(0);

⌨️ 快捷键说明

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