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

📄 unit8.~cpp

📁 餐厅结账管理程序提供中小型餐厅所需要的点菜结账功能
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit8.h"
#include "Unit7.h"
#include "Unit3.h"
#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormPay *FormPay;
//---------------------------------------------------------------------------

__fastcall TFormPay::TFormPay(TComponent* Owner)
        : TForm(Owner)
{
  TablePay->Open();
}
//---------------------------------------------------------------------------

void __fastcall TFormPay::RefreshComboBox(void)
{
  TTable * tmpTable=FormTableMan->TableTable;
  AnsiString info_str;
  //从FormTableMan中读取所有的餐桌信息,写入下拉菜单中
  ComboBoxTableInuse->Items->Clear();
  tmpTable->First();
  for(int i=0;i<tmpTable->RecordCount;i++)
  { //只显示使用中的餐桌桌号
    if(tmpTable->FieldByName("TableStatus")->AsString == "使用")
    {
      info_str=tmpTable->FieldByName("TableNum")->AsString;
      info_str+="-";
      info_str+=tmpTable->FieldByName("TableType")->AsString;
      info_str+="-";
      info_str+=tmpTable->FieldByName("TableStatus")->AsString;
      ComboBoxTableInuse->Items->Add(info_str);
    }
    tmpTable->Next();
  }
}
//---------------------------------------------------------------------------

void __fastcall TFormPay::FormShow(TObject *Sender)
{
  RefreshComboBox();
  ListView1->Items->Clear();
  EditShouldPay->Text="";
  EditActuallyPay->Text="";
  EditCharge->Text="";
  MemoDescription->Text="";
  BitBtnOK->Enabled=false;
  BitBtnCancel->Enabled=false;
  EditActuallyPay->Enabled=false;
  TableChoose=-1;
}
//---------------------------------------------------------------------------

void __fastcall TFormPay::ComboBoxTableInuseChange(TObject *Sender)
{
  int pos;
  if(ComboBoxTableInuse->Text == "")
  {
    return;
  }
  else
  {
    pos=ComboBoxTableInuse->Text.Pos("-");
    TableChoose=ComboBoxTableInuse->Text.SubString(1,pos-1).ToInt();
    //根据餐桌号对TableOrdered进行过滤
    FormOrder->TableOrdered->Filter=AnsiString("TableNum = ")+AnsiString(TableChoose)
       +" AND Status = '未结帐'";
    FormOrder->TableOrdered->Filtered = true;
    //将已经有的菜单填入ListView中
    ListView1->Items->Clear();
    TListItem *NewItem;
    int dishnum;
    float Money=0.0;
    FormOrder->TableOrdered->First();
    for(int i=0;i<FormOrder->TableOrdered->RecordCount;i++)
    {
      dishnum=FormOrder->TableOrdered->FieldByName("DishNum")->AsInteger;
      //根据菜谱编号dishnum在FormClassDishMan->TableDish中查找对应纪录
      FormClassDishMan->TableDish->IndexFieldNames = "DishNum";
      FormClassDishMan->TableDish->SetKey();
      if(FormClassDishMan->TableDish->FindKey(ARRAYOFCONST((dishnum))))
      {
        TTable *tmpTable=FormClassDishMan->TableDish;
        NewItem=ListView1->Items->Add();
        //菜名
        NewItem->Caption=tmpTable->FieldByName("DishName")->AsString;
        NewItem->SubItems->Add(FormOrder->TableOrdered->FieldByName("Amount")->AsString);
        NewItem->SubItems->Add(tmpTable->FieldByName("DishPrice")->AsString);
        NewItem->SubItems->Add(tmpTable->FieldByName("DisCount")->AsString);
        //累计需要付的金额
        Money+=FormOrder->TableOrdered->FieldByName("Amount")->AsFloat *
               tmpTable->FieldByName("DishPrice")->AsFloat *
               tmpTable->FieldByName("DisCount")->AsFloat /100 ;
      }
      else
      {
        MessageDlg("找不到该纪录!",mtError, TMsgDlgButtons() << mbOK, 0);
      }
      FormOrder->TableOrdered->Next();
    }
    //将Money显示出来 ,保留两位小数
    EditShouldPay->Text=FormatFloat("0.00",Money);
    BitBtnOK->Enabled=true;
    BitBtnCancel->Enabled=true;
    EditActuallyPay->Enabled=true;
  }
}
//---------------------------------------------------------------------------

void __fastcall TFormPay::BitBtnOKClick(TObject *Sender)
{
  //判断EditActuallyPay的内容
  if(EditActuallyPay->Text == "")
  {
    MessageDlg("请填写【实付金额】!",mtError, TMsgDlgButtons() << mbOK, 0);
    EditActuallyPay->SetFocus();
    return;
  }
  if(EditActuallyPay->Text.ToDouble() < EditShouldPay->Text.ToDouble())
  {
    MessageDlg("【实付金额】不能小于【应付金额】!",mtError, TMsgDlgButtons() << mbOK, 0);
    EditActuallyPay->SetFocus();
    return;
  }
  //向TablePay中写记录
  TablePay->Append();
  TablePay->FieldByName("TableNum")->AsInteger=TableChoose;
  TablePay->FieldByName("ShouldPay")->AsFloat=EditShouldPay->Text.ToDouble();
  TablePay->FieldByName("ActuallyPay")->AsFloat=EditActuallyPay->Text.ToDouble();
  TablePay->FieldByName("Charge")->AsFloat=EditCharge->Text.ToDouble();
  //时间日期
  DateSeparator = '-';
  ShortDateFormat = "yyyy/m/d";
  TablePay->FieldByName("Date")->AsString=DateToStr(Date());
  TablePay->FieldByName("Time")->AsString=TimeToStr(Time());
  TablePay->FieldByName("Description")->AsString = MemoDescription->Text;
  TablePay->FieldByName("UserID")->AsInteger=FormMain->UserID;
  TablePay->Post();
  //将菜单中的各个菜的状态设为"已结帐"
  int dishnum;
  FormOrder->TableOrdered->Filter=AnsiString("TableNum = ")+AnsiString(TableChoose)
                                  +" AND Status = '未结帐'";
  FormOrder->TableOrdered->Filtered = true;
  FormOrder->TableOrdered->First();
  //因为TableOrdered用了过滤属性,所以更改Status之后的记录将不显示
  //所以TableOrdered->RecordCount会逐渐减小,故,循环中的方法比较特殊
  int j=FormOrder->TableOrdered->RecordCount;
  for(int i=0;i<j;i++)
  {
    FormOrder->TableOrdered->Edit();
    FormOrder->TableOrdered->FieldByName("Status")->AsString="已结帐";
    FormOrder->TableOrdered->Post();
  }
  //设餐桌的状态为"空闲"
  FormTableMan->TableTable->IndexFieldNames="TableNum";
  FormTableMan->TableTable->SetKey();
  if(FormTableMan->TableTable->FindKey(ARRAYOFCONST((TableChoose))))
  {
    FormTableMan->TableTable->Edit();
    FormTableMan->TableTable->FieldByName("TableStatus")->AsString="空闲";
    FormTableMan->TableTable->Post();
  }
  else
  {
    MessageDlg("找不到该纪录!",mtError, TMsgDlgButtons() << mbOK, 0);
  }
  FormShow(this); //刷新
}
//---------------------------------------------------------------------------

void __fastcall TFormPay::BitBtnCancelClick(TObject *Sender)
{
  FormShow(this); //刷新
}
//---------------------------------------------------------------------------

void __fastcall TFormPay::BitBtnExitClick(TObject *Sender)
{
  Close();        
}
//---------------------------------------------------------------------------

void __fastcall TFormPay::EditActuallyPayChange(TObject *Sender)
{
  if(EditActuallyPay->Text != "")
  {
    EditCharge->Text=EditActuallyPay->Text.ToDouble() - EditShouldPay->Text.ToDouble();
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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