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

📄 checkin.~cpp

📁 全面剖析酒店管理的内容
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "CheckIn.h"
#include "RoomStatus.h"
#include "PreOrder.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Parent"
#pragma resource "*.dfm"
TfmCheckIn *TfmCheckIn;
//---------------------------------------------------------------------------
__fastcall TfmCheckIn::TfmCheckIn(TComponent* Owner)
    : TfmParent(Owner)
{
    this->szCondition1 = "入住单号";
    this->szCondition2 = "抵店时间";
    // 设置查询条件
    this->SetSeekEditStatus();
    Table1->Active = true;
    Table2->Active = true;
    lblCount->Caption = "记录数: " + IntToStr(Table1->RecordCount) ;
    // 非弹出选择窗体
    m_nSelect = 1;
}
//---------------------------------------------------------------------------
void __fastcall TfmCheckIn::dtPickerInDateChange(TObject *Sender)
{
    // 选择抵店日期,赋给数据库绑定控件
    EditDBEdit4->Text = dtPickerInDate->Date.DateString();
}
//---------------------------------------------------------------------------
void __fastcall TfmCheckIn::dtPickerOutDateChange(TObject *Sender)
{
    // 选择离店日期,赋给数据库绑定控件
    EditDBEdit5->Text = dtPickerOutDate->Date.DateString();
}
//---------------------------------------------------------------------------
void __fastcall TfmCheckIn::EditDBEdit4Change(TObject *Sender)
{
    // 记录变化,选择日期控件更新
    if(EditDBEdit4->Text.Length()==0)
        dtPickerInDate->Date = dtPickerInDate->Date.CurrentDate();
    else
        dtPickerInDate->Date = EditDBEdit4->Text;
}
//---------------------------------------------------------------------------
void __fastcall TfmCheckIn::EditDBEdit5Change(TObject *Sender)
{
    // 记录变化,选择日期控件更新
    if(EditDBEdit5->Text.Length()==0)
        dtPickerOutDate->Date = dtPickerOutDate->Date.CurrentDate();
    else
        dtPickerOutDate->Date = EditDBEdit5->Text;
}
//---------------------------------------------------------------------------
void __fastcall TfmCheckIn::btNewClick(TObject *Sender)
{
    // 注意如何调用父类窗体的方法
    TfmParent::btNewClick(NULL);
    dtPickerInDate->Date = dtPickerInDate->Date.CurrentDate();
    dtPickerOutDate->Date = dtPickerOutDate->Date.CurrentDate();
    dtPickerInDateChange(NULL);
    dtPickerOutDateChange(NULL);
    // 计算预定编号(Primary key);
    // 从预定单历史和预定单中选择最大编号加1
    AnsiString szID,szID1;
    TQuery *pQuery = new TQuery(NULL);
    pQuery->DatabaseName = "db";
    // 选择最大编号
    pQuery->SQL->Clear();
    pQuery->SQL->Add("select max(入住单号) as 编号 from 入住单历史");
    pQuery->Open();
    TField* pField = pQuery->FieldByName("编号");
    if(pField->IsNull)
        szID = "RZ00000001";
    else
    {
        AnsiString szT = "00000000";
        szID = StrToInt(pField->AsString.SubString(3,8)) + 1;
        szID = szT.SubString(1,8-szID.Length()) + szID;
        szID = "RZ" + szID;
    }
    pQuery->SQL->Clear();
    pQuery->SQL->Add("select max(入住单号) as 编号 from 入住单");
    pQuery->Open();
    pField = pQuery->FieldByName("编号");
    if(pField->IsNull)
        szID1 = "RZ00000001";
    else
    {
        AnsiString szT = "00000000";
        szID1 = StrToInt(pField->AsString.SubString(3,8)) + 1;
        szID1 = szT.SubString(1,8-szID1.Length()) + szID1;
        szID1 = "RZ" + szID1;
    }
    // 取最大值作为新凭证的ID
    if(szID < szID1)
        szID = szID1;
    EditDBEdit->Text = szID;
    // 设置单据状态
    EditDBEdit6->Text = "入住";
    // 释放空间
    delete pQuery;
}
//---------------------------------------------------------------------------
// 弹出房态图,选择客房
void __fastcall TfmCheckIn::btSelectRoomClick(TObject *Sender)
{
    if(dbcRoomType->Text.Length()<=0)
    {
        Application->MessageBox("请选择客房类型!","提示",MB_OK);
        return;
    }
    TfmRoomStatus* pForm = new TfmRoomStatus(Application);
    // 作为普通窗口
    pForm->FormStyle = fsNormal;
    pForm->Hide();
    // 不可以编辑房态
    pForm->SetSelect(0);
    // 设置客房的类型,房态图只显示该类型的客房
    pForm->m_RoomType = dbcRoomType->KeyValue;
    pForm->ShowModal();
    if(pForm->m_RoomCode.Length()>0)
        EditDBEdit8->Text = pForm->m_RoomCode;
    delete pForm;
}
//---------------------------------------------------------------------------

void __fastcall TfmCheckIn::btSaveClick(TObject *Sender)
{
    AnsiString sql = "select 状态 from 客房信息 where 客房编号='";
    sql += EditDBEdit8->Text + "'";
    TQuery* pQueryRoom = new TQuery(NULL);
    pQueryRoom->DatabaseName = "db";
    pQueryRoom->SQL->Add(sql);
    pQueryRoom->Open();
    if(pQueryRoom->FieldByName("状态")->AsString != "空房"
        && pQueryRoom->FieldByName("状态")->AsString != "将到")
    {
        Application->MessageBox("选择的客房不是空房!","提示",MB_OK);
        delete pQueryRoom;
        return;
    }
    // 将原来的客房设置为空房
    sql = "update 客房信息 set 状态='空房' from 客房信息 as a,";
    sql += "入住单 as b where a.客房编号=b.客房编号 and b.入住单号='";
    sql += EditDBEdit->Text + "'";
    pQueryRoom->SQL->Clear();
    pQueryRoom->SQL->Add(sql);
    pQueryRoom->ExecSQL();
    // 注意如何调用父类窗体的方法,保存数据
    TfmParent::btSaveClick(NULL);
    // 修改房间状态
    sql = "exec sf_保存入住单 '";
    sql += EditDBEdit->Text + "'";
    pQueryRoom->SQL->Clear();
    pQueryRoom->SQL->Add(sql);
    pQueryRoom->ExecSQL();
    delete pQueryRoom;
}
//---------------------------------------------------------------------------
//从预定单选择,倒入数据
void __fastcall TfmCheckIn::btSelectOrderClick(TObject *Sender)
{
    TfmPreOrder* pForm = new TfmPreOrder(Application);
    // 作为普通窗口
    pForm->FormStyle = fsNormal;
    pForm->Hide();
    // 不可以编辑房态
    pForm->m_nSelect = 0;
    // 数据不可以在这里编辑,设置按钮的Enable属性为false
    pForm->btNew->Enabled = false;
    pForm->btEdit->Enabled = false;
    pForm->btDelete->Enabled = false;
    pForm->btNew->Enabled = false;
    pForm->ShowModal();
    if(!pForm->Table1->FieldByName("预定单号")->IsNull )
    {
        dbcRoomType->KeyValue =
            pForm->Table1->FieldByName("客房类型")->AsString;
        EditDBEdit1->Text= pForm->Table1->
            FieldByName("预定单号")->AsString;
        EditDBEdit2->Text= pForm->Table1->FieldByName("会员编号")->AsString;
        EditDBEdit4->Text= pForm->Table1->FieldByName("抵店时间")->AsString;
        EditDBEdit5->Text= pForm->Table1->FieldByName("离店时间")->AsString;
        EditDBEdit7->Text= pForm->Table1->FieldByName("入住人数")->AsString;
        EditDBEdit8->Text= pForm->Table1->FieldByName("客房编号")->AsString;
        EditDBEdit9->Text= pForm->Table1->FieldByName("客房价格")->AsString;
        EditDBEdit10->Text= pForm->Table1->FieldByName("入住价格")->AsString;
        EditDBEdit11->Text= pForm->Table1->FieldByName("折扣")->AsString;
        EditDBEdit12->Text= pForm->Table1->FieldByName("折扣原因")->AsString;
        DBCheckBox1->Checked =
            pForm->Table1->FieldByName("是否加床")->AsBoolean;
        EditDBEdit14->Text= pForm->Table1->FieldByName("加床价格")->AsString;
        EditDBEdit15->Text= pForm->Table1->FieldByName("预收款")->AsString;
        EditDBEdit16->Text= pForm->Table1->FieldByName("预定人")->AsString;
        EditDBEdit17->Text= pForm->Table1->FieldByName("联系电话")->AsString;
        EditDBEdit18->Text= pForm->Table1->FieldByName("预定公司")->AsString;
        EditDBEdit21->Text= pForm->Table1->FieldByName("业务员")->AsString;
    }
    delete pForm;
}
//---------------------------------------------------------------------------
void __fastcall TfmCheckIn::DBGrid1DblClick(TObject *Sender)
{
    // 双击,如果是选择窗体,选择记录并关闭窗体
    if(m_nSelect == 0)
    {
        Close();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmCheckIn::dbcRoomTypeClick(TObject *Sender)
{
    // 更新房价
    TQuery* pQueryRoom = new TQuery(NULL);
    pQueryRoom->DatabaseName = "db";
    AnsiString sql;
    sql = "select 价格 from 客房类型 where 类型编号 = '";
    sql += (AnsiString)dbcRoomType->KeyValue + "'";
    pQueryRoom->SQL->Add(sql);
    pQueryRoom->Open();
    EditDBEdit9->Text = pQueryRoom->FieldByName("价格")->AsString;
    EditDBEdit10->Text = pQueryRoom->FieldByName("价格")->AsString;
    delete pQueryRoom;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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