📄 unit8.~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 + -