📄 unit7.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit7.h"
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormOrder *FormOrder;
//---------------------------------------------------------------------------
__fastcall TFormOrder::TFormOrder(TComponent* Owner)
: TForm(Owner)
{
//---
TableOrdered->Open();
RefreshTreeView();
TreeViewOrder->OnClick=FormClassDishMan->TreeView1->OnClick;
}
//---------------------------------------------------------------------------
void __fastcall TFormOrder::FormShow(TObject *Sender)
{
TableChoose=-1;
RefreshComboBox();
}
//---------------------------------------------------------------------------
void __fastcall TFormOrder::RefreshComboBox(void)
{
TTable * tmpTable=FormTableMan->TableTable;
AnsiString info_str;
//从FormTableMan中读取所有的餐桌信息,写入下拉菜单中
ComboBoxTable->Items->Clear();
tmpTable->First();
for(int i=0;i<tmpTable->RecordCount;i++)
{
info_str=tmpTable->FieldByName("TableNum")->AsString;
info_str+="-";
info_str+=tmpTable->FieldByName("TableType")->AsString;
info_str+="-";
info_str+=tmpTable->FieldByName("TableStatus")->AsString;
ComboBoxTable->Items->Add(info_str);
tmpTable->Next();
}
}
//---------------------------------------------------------------------------
void __fastcall TFormOrder::RefreshTreeView(void)
{
TMemoryStream * tmpTreeStream = new TMemoryStream();
FormClassDishMan->TreeView1->SaveToStream(tmpTreeStream);
tmpTreeStream->Position=0;
TreeViewOrder->LoadFromStream(tmpTreeStream);
TreeViewOrder->Items->GetFirstNode()->Expand(false);
delete tmpTreeStream;
}
//---------------------------------------------------------------------------
void __fastcall TFormOrder::ComboBoxTableChange(TObject *Sender)
{
int pos;
if(ComboBoxTable->Text == "")
{
return;
}
else
{
pos=ComboBoxTable->Text.Pos("-");
TableChoose=ComboBoxTable->Text.SubString(1,pos-1).ToInt();
//查看选择的餐桌的状态
FormTableMan->TableTable->IndexFieldNames="TableNum";
FormTableMan->TableTable->SetKey();
if(FormTableMan->TableTable->FindKey(ARRAYOFCONST((TableChoose))))
{
if(FormTableMan->TableTable->FieldByName("TableStatus")->AsString
== "空闲" )
{//询问是否启用该餐桌
if(MessageDlg("该餐桌尚未启用,现在起用吗?",
mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0)
==mrYes)
{
FormTableMan->TableTable->Edit();
FormTableMan->TableTable->FieldByName("TableStatus")->AsString="使用";
FormTableMan->TableTable->Post();
RefreshComboBox(); //刷新下拉菜单
//找到TableChoose所在的选项
for(int i=0;i<ComboBoxTable->Items->Count;i++)
{
if(ComboBoxTable->Items->Strings[i].SubString(1,1).ToInt() == TableChoose)
{
ComboBoxTable->ItemIndex=i;
//这里会触发ComboBoxTable的OnChange事件,所以不用再调用ComboBoxTableChange(this);
break;
}
}
}
else
{
ComboBoxTable->ItemIndex=-1;
TableChoose=-1;
return;
}
}
}
else
{
MessageDlg("找不到该纪录!",mtError, TMsgDlgButtons() << mbOK, 0);
}
//根据餐桌号对TableOrdered进行过滤
TableOrdered->Filter=AnsiString("TableNum = ")+AnsiString(TableChoose)
+" AND Status = '未结帐'";
TableOrdered->Filtered = true;
//将已经有的菜单填入ListView中
ListView1->Items->Clear();
TListItem *NewItem;
int dishnum;
TableOrdered->First();
for(int i=0;i<TableOrdered->RecordCount;i++)
{
dishnum=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(TableOrdered->FieldByName("Amount")->AsString);
NewItem->SubItems->Add(tmpTable->FieldByName("DishPrice")->AsString);
NewItem->SubItems->Add(AnsiString(dishnum)); //这一列隐藏的,在视图中看不到
NewItem->SubItems->Add(tmpTable->FieldByName("DisCount")->AsString);
}
else
{
MessageDlg("找不到该纪录!",mtError, TMsgDlgButtons() << mbOK, 0);
}
TableOrdered->Next();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TFormOrder::BitBtnAddClick(TObject *Sender)
{
if(TableChoose == -1)
{
MessageDlg("请先选择餐桌号!",
mtInformation, TMsgDlgButtons() << mbOK, 0);
return;
}
if(TreeViewOrder->Selected->Level != 2)
{
MessageDlg("请选定一个菜谱名!",
mtInformation, TMsgDlgButtons() << mbOK, 0);
return;
}
//根据选择的菜谱名,查找以经点的菜中有没有该菜,如果有,将其数量增一,
//如果没有,新增纪录
bool havedish=false;
int seldish=FormClassDishMan->TableDish->FieldByName("DishNum")->AsInteger;
TableOrdered->First();
for(int i=0;i<TableOrdered->RecordCount;i++)
{
if(TableOrdered->FieldByName("DishNum")->AsInteger == seldish)
{
//数量增一
TableOrdered->Edit(); //设置为可编辑模式
TableOrdered->FieldByName("Amount")->AsInteger +=1;
TableOrdered->Post();
ComboBoxTableChange(this); //刷新列表视图的显示
havedish=true;
break;
}
TableOrdered->Next();
}
if(!havedish) //需要增加的菜谱名不再已选菜单中
{
TableOrdered->Append();
TableOrdered->FieldByName("DishNum")->AsInteger=seldish;
TableOrdered->FieldByName("TableNum")->AsInteger=TableChoose;
TableOrdered->FieldByName("Amount")->AsFloat=1.0;
TableOrdered->FieldByName("Status")->AsString="未结帐";
//记录日期、时间
DateSeparator = '-';
ShortDateFormat = "yyyy/m/d";
TableOrdered->FieldByName("Date")->AsString=DateToStr(Date());
TableOrdered->FieldByName("Time")->AsString=TimeToStr(Time());
TableOrdered->FieldByName("UserID")->AsInteger= FormMain->UserID;
TableOrdered->Post();
ComboBoxTableChange(this); //刷新列表视图的显示
}
}
//---------------------------------------------------------------------------
void __fastcall TFormOrder::BitBtnDelClick(TObject *Sender)
{
//ListView1->MultiSelect = false;
if(ListView1->SelCount != 1 ) //选中一个需要退点的菜名
{
MessageDlg("请先从右边选择要退点的菜谱名称!",
mtInformation, TMsgDlgButtons() << mbOK, 0);
return;
}
//菜谱编号
int seldish=ListView1->Selected->SubItems->Strings[2].ToInt();
//在TableOrdered中查找要退的菜谱编号,
//因为TableOrdered没有索引,没有key,所以只能通过循环判断
TableOrdered->First();
for(int i=0;i<TableOrdered->RecordCount;i++)
{
if(TableOrdered->FieldByName("DishNum")->AsInteger == seldish)
{
//如果数量大于1,则减一,如果数量等于1,则删除数据库中该条记录
if(TableOrdered->FieldByName("Amount")->AsInteger > 1)
{
TableOrdered->Edit();
TableOrdered->FieldByName("Amount")->AsInteger -= 1;
TableOrdered->Post();
//ComboBoxTableChange(this);
ListView1->Selected->SubItems->Strings[0]=
ListView1->Selected->SubItems->Strings[0].ToInt() - 1;
}
else //Amount == 1
{
TableOrdered->Delete();
ComboBoxTableChange(this);
}
break; //跳出循环
}
TableOrdered->Next();
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -