unitchangeroom.pas

来自「自己做过的工程」· PAS 代码 · 共 290 行

PAS
290
字号
unit unitchangeroom;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type
  Tformchangeroom = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Panel1: TPanel;
    cb_roomtype: TComboBox;
    ed_username: TEdit;
    cb_certificatetpye: TComboBox;
    ed_certificateid: TEdit;
    ed_nativeplace: TEdit;
    ed_userno: TEdit;
    ed_usersex: TComboBox;
    ed_employeeid: TEdit;
    ed_intime: TEdit;
    ed_bookmoney: TEdit;
    ed_remark: TEdit;
    StaticText12: TStaticText;
    StaticText7: TStaticText;
    StaticText4: TStaticText;
    StaticText1: TStaticText;
    ed_roomid: TEdit;
    StaticText2: TStaticText;
    StaticText5: TStaticText;
    StaticText3: TStaticText;
    StaticText15: TStaticText;
    StaticText10: TStaticText;
    StaticText8: TStaticText;
    StaticText6: TStaticText;
    StaticText11: TStaticText;
    but_changeroom: TButton;
    but_exit: TButton;
    procedure but_exitClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure but_changeroomClick(Sender: TObject);
  private
   public
    { Public declarations }
  end;

var
  formchangeroom: Tformchangeroom;

implementation
  uses unitroomcheck, unitDMHotel, unitinroom,unitlogging;
{$R *.dfm}

procedure Tformchangeroom.but_exitClick(Sender: TObject);
begin
close;
end;

procedure Tformchangeroom.FormShow(Sender: TObject);
var
vitemtype:string;
vcoderoom:integer;
  totalfee:extended;
begin
ed_employeeid.Text:=username;
//在这里显示所有的信息
 //首先打开这个数据库,可以同时定义两个不同的参数选择
 //对这个总的记录进行操作

//   DMHOtel.ADODataSet_roomin.Open;
//   DMHotel.ADODataSet_roomstatus.Open;
//以下是对 ADODataSet_itemnumber中roomincodemanamge记录的操作,加1
//   vitemtype:='roominmanagecode';
 //  DMHotel.ADODataSet_itemnumber.Close;
 //  DMHotel.ADODataSet_itemnumber.Open;
 //  DMHotel.ADODataSet_itemnumber.Locate('itemtype',vitemtype,[]);
//   vcoderoom:=strtoint(DMHotel.ADODataSet_itemnumber.FieldByName('itemno').AsString);
//   showmessage(inttostr(vcoderoom));
//   vcoderoom:=vcoderoom+1;
//   DMHotel.ADODataSet_itemnumber.Edit;
//   DMHotel.ADODataSet_itemnumber.FieldByName('itemno').AsString:=inttostr(vcoderoom);
 //  DMHotel.ADODataSet_itemnumber.Post;
//   showmessage(inttostr(vcoderoom));
   DMHotel.ADODataSet_itemnumber.Close;
    //去入住数据库中的信息
     DMHOtel.ADODataSet_roomin.Open;
     DMHotel.ADODataSet_roomin.Locate('roomid;leftornot', VarArrayOf([roomid, 'no']), []);

//定位后取出需要的信息
     ed_username.Text:=DMHotel.ADODataSet_roomin.FieldByName('username').AsString;
     cb_roomtype.Text:=DMHotel.ADODataSet_roomin.FieldByName('roomtype').AsString;
     ed_intime.Text:=datetimetostr(date+time);
   //   cb_certificatetpye.Text:=DMHotel.ADODataSet_roomin.FieldByName('certificatetpye').AsString;
     ed_certificateid.Text:=DMHotel.ADODataSet_roomin.FieldByName('certificateid').AsString;
     ed_nativeplace.Text:=DMHotel.ADODataSet_roomin.FieldByName('nativeplace').AsString;
     ed_userno.text:=DMHotel.ADODataSet_roomin.FieldByName('userno').AsString;
     ed_usersex.Text:= DMHotel.ADODataSet_roomin.FieldByName('usersex').AsString;
     ed_bookmoney.Text:=  DMHotel.ADODataSet_roomin.FieldByName('bookmoney').AsString;
     totalfee:=roomfee+roomthings;
     ed_remark.Text:='换房前住宿费用 '+floattostr(roomfee)+' 元和房内消费 '+floattostr(roomthings)+' 元,合计 '+floattostr(totalfee)+' 元!!!' ;


     //由于房间的状态已经改变就要进行一些相应的状态改变
     //room_in表的改变
  //   DMHotel.ADODataSet_roomin.Edit;
  //    DMHotel.ADODataSet_roomin.FieldByName('leftornot').AsString:='yes';
   //   DMHotel.ADODataSet_roomin.Post;
      DMHOtel.ADODataSet_roomin.Close;
      //表面状态的改变   应该在点击完换房后再改变
     //  forminroom.fun_roomcolorchange(roomid,clCaptionText) ;
end;

procedure Tformchangeroom.but_changeroomClick(Sender: TObject);
var
vroomid:string;
vcolorroomid:integer;
vtest:integer;
vroomstatus:string;
vitemtype:string;
vcoderoom:integer;
begin
//其本质就是要将这些数据写到数据库中去

  vroomid:=ed_roomid.Text;

    if ed_roomid.Text='' then
        begin
           showmessage('你的输入的房间号为空,请重新输入!');
           exit;   //exit跳出本次事件!:)
        end;


    if not  trystrtoint(ed_roomid.Text,vtest)     then
        begin
           messagebox(handle,'你输入的房间号不是个整数,请重新输入','错误',MB_OK OR MB_ICONERROR);
           EXIT;
        end;


    //这个必须放到这个地方,要进行转换就必须要这个不能为空
     vcolorroomid:=strtoint(ed_roomid.Text);
     if  ed_username.Text='' then
     begin
     showmessage('你的输入的房客姓名为空,请重新输入!');
     exit;
     end;

        DMHotel.ADODataSetroomstatus.Open;
    if  not DMHotel.ADODataSetroomstatus.Locate('roomid',vroomid,[])then
        begin
            showmessage('房间编号'+vroomid+'不存在!');
            exit;
        end
  else
     begin
//要判断要入住的房间状态是否可以入住
        DMHotel.ADODataSet_roomstatus.Open;
        DMHotel.ADODataSet_roomstatus.Locate('roomid',vroomid,[]);
        vroomstatus:=DMHotel.ADODataSet_roomstatus.FieldByName('roomstatus').AsString;
        DMHotel.ADODataSet_roomstatus.Close;
        if vroomstatus='停用' then
        begin
        showmessage(vroomid+'房间处于停用状态,请换个房间,或确认该房间是否已经可用!');
        exit;
        end;
        if vroomstatus='使用' then
        begin
        showmessage(vroomid+'房间处于使用中,请换个房间并确定其状态');
        exit;
        end;
        //如果是在预定状态就要将这个预定表中的记录删除
        if vroomstatus='预定' then
        begin
            //  showmessage('d');

        DMHotel.ADODataSet_roombook.Open;
         with DMHotel.ADOQuery1 do
         begin
             close;
             sql.Clear;
             sql.Add('Delete from room_book');
             sql.Add('Where roomid=:roomid');
             Parameters.ParamByName('roomid').Value:=vroomid;
         end;
         try
         DMHotel.ADOQuery1.ExecSQL;
         except
         showmessage('删除失败!');
        // DMHotel.ADOConnection1.RollbackTrans;
         exit;
         end;
          DMhotel.ADODataSet_roombook.Requery;
        end;
      end;
//满足入住条件后就要进行入住的登记  ,这个和预定中的处理是一样的
//一要将数据加入room_in表中,然后要改变相应的room_status表中的房间状态
//两个字段一个是状态一个是状态表示数字   ,vroomid 是整形的


DMHotel.ADOConnection1.BeginTrans;
//房间的状态也要改变
      DMHotel.ADODataSet_roomstatus.Open;
      DMHotel.ADODataSet_roomstatus.Locate('roomid',roomid,[]);
      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;

// //表面状态的改变   应该在点击完换房后再改变
       forminroom.fun_roomcolorchange(roomid,clCaptionText) ;
     //room_in表的改变
   DMHOtel.ADODataSet_roomin.Open;
     DMHotel.ADODataSet_roomin.Edit;
     DMHotel.ADODataSet_roomin.FieldByName('leftornot').AsString:='yes';
     DMHotel.ADODataSet_roomin.Post;


   DMHotel.ADODataSet_roomstatus.Open;
//以下是对 ADODataSet_itemnumber中roomincodemanamge记录的操作,加1
   vitemtype:='roominmanagecode';
   DMHotel.ADODataSet_itemnumber.Close;
   DMHotel.ADODataSet_itemnumber.Open;
   DMHotel.ADODataSet_itemnumber.Locate('itemtype',vitemtype,[]);
   vcoderoom:=strtoint(DMHotel.ADODataSet_itemnumber.FieldByName('itemno').AsString);
//   showmessage(inttostr(vcoderoom));
   vcoderoom:=vcoderoom+1;
   DMHotel.ADODataSet_itemnumber.Edit;
   DMHotel.ADODataSet_itemnumber.FieldByName('itemno').AsString:=inttostr(vcoderoom);
   DMHotel.ADODataSet_itemnumber.Post;
//   showmessage(inttostr(vcoderoom));
   DMHotel.ADODataSet_itemnumber.Close;

  //以下是对数据的添加操作不仅要添加还要改变房间的状态
   with DMHotel.ADOQuery1 do
     begin
       close;//关闭以前的查询
       sql.Clear;
        sql.Add('Insert into room_in(code,roomid,roomtype,username,certificatetype,certificateid,nativeplace,userno,usersex,employeeid,intime,leftornot,remark,realintime,bookmoney)');
        sql.Add('Values (:code,:roomid,:roomtype,:username,:certificatetype,:certificateid,:nativeplace,:userno,:usersex,:employeeid,:intime,:leftornot,:remark,:realintime,:bookmoney)');

        //以下是各个字段分别的进行赋值操作
        parameters.ParamByName('code').Value:=vcoderoom;
        parameters.ParamByName('roomid').Value:=ed_roomid.Text;
        Parameters.ParamByName('roomtype').Value:=cb_roomtype.Text;
        Parameters.ParamByName('username').Value:=ed_username.Text;
        Parameters.ParamByName('certificatetype').Value:=cb_certificatetpye.Text;
        Parameters.ParamByName('certificateid').Value:=ed_certificateid.Text;
        Parameters.ParamByName('nativeplace').Value:=ed_nativeplace.Text;
        Parameters.ParamByName('userno').Value:=ed_userno.Text;
        Parameters.ParamByName('usersex').Value:=ed_usersex.Text;
        Parameters.ParamByName('employeeid').Value:=ed_employeeid.Text;
        Parameters.ParamByName('intime').Value:=date+time;
        Parameters.ParamByName('leftornot').Value:='no';
        Parameters.ParamByName('remark').Value:= ed_remark.Text;
        Parameters.ParamByName('realintime').Value:=date+time;
        Parameters.ParamByName('bookmoney').Value:=ed_bookmoney.Text;
        close;
   end;
 //  DMHOtel.ADODataSet_roomin.Requery;
   //下面是要对room-status表的改变。即要改变其状态表,两个参数
  // DMHotel.ADODataSet_roomstatus.Open;
   DMHotel.ADODataSet_roomstatus.Locate('roomid',vroomid,[]);
   DMHotel.ADODataSet_roomstatus.Edit;//使处于编辑状态
   DMHotel.ADODataSet_roomstatus.FieldByName('roomstatus').AsString:='使用';
   DMHotel.ADODataSet_roomstatus.FieldByName('statusid').AsString:=inttostr(3);
   DMHOtel.ADODataSet_roomstatus.Post;

  //下面是对主界面上房间标识颜色的改变
 forminroom.fun_roomcolorchange(vcolorroomid,clAqua) ;


   try
        DMHotel.ADOQuery1.ExecSQL;
        showmessage('这次换房的操作记录已经成功的添加!');
   except
        DMHotel.ADOConnection1.RollbackTrans;
        showmessage('入录失败');
        exit;
   end;
  DMHotel.ADOConnection1.CommitTrans;
  DMHotel.ADODataSet_roomstatus.Requery;
  DMHotel.ADODataSet_roomin.Requery;
  DMHOtel.ADODataSet_roomstatus.Close;

end;

end.

⌨️ 快捷键说明

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