📄 dlgpos.cpp
字号:
// DlgPos.cpp : implementation file
//
#include "stdafx.h"
#include "Lhj_cyglxt.h"
#include "DlgPos.h"
#include "Lhj_cyglxtDlg.h"
#include "DlgFoodDetail.h"
#include "DlgAddVip.h"
#include "Dlgcheckout.h"
#include "Dlgfindcard.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgPos dialog
extern CDatabase m_db;
extern BOOL billisnew;
extern CString GetBillId;
extern CString TableNo;
CString ShowFoodId;
extern CString cookfoodid[50];//作为 点菜 添加 删除 foodid 的中间容器 结帐或挂单时 一次性写入数据库
int foodtotalnumber;//点的菜数
float sumprice;//总价
CDlgPos::CDlgPos(CWnd* pParent /*=NULL*/)
: CDialog(CDlgPos::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgPos)
m_billid = _T("");
m_paystate = _T("");
m_begintime = _T("");
m_EndTime = _T("");
m_PersonNum = _T("");
m_TableNo = _T("");
m_vipcard = _T("");
m_ToCookFoodId = _T("");
m_totalnumber = _T("");
m_totalprice = _T("");
//}}AFX_DATA_INIT
}
void CDlgPos::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgPos)
DDX_Control(pDX, IDC_EDIT_table_no, m_oTableNo);
DDX_Control(pDX, IDC_EDIT_vip_card, m_cardedit);
DDX_Control(pDX, IDC_COMBO_food_class, m_foodclass);
DDX_Control(pDX, IDC_LIST_cook_menu, m_cookmenulist);
DDX_Control(pDX, IDC_LIST_menu, m_menulist);
DDX_Text(pDX, IDC_EDIT_bill_id, m_billid);
DDX_Text(pDX, IDC_EDIT_pay_state, m_paystate);
DDV_MaxChars(pDX, m_paystate, 4);
DDX_Text(pDX, IDC_EDIT_begin_time, m_begintime);
DDX_Text(pDX, IDC_EDIT_end_time, m_EndTime);
DDX_Text(pDX, IDC_EDIT_person_num, m_PersonNum);
DDV_MaxChars(pDX, m_PersonNum, 2);
DDX_Text(pDX, IDC_EDIT_table_no, m_TableNo);
DDV_MaxChars(pDX, m_TableNo, 2);
DDX_Text(pDX, IDC_EDIT_vip_card, m_vipcard);
DDV_MaxChars(pDX, m_vipcard, 6);
DDX_Text(pDX, IDC_EDIT_tocookfoodid, m_ToCookFoodId);
DDV_MaxChars(pDX, m_ToCookFoodId, 6);
DDX_Text(pDX, IDC_EDIT_totalnumber, m_totalnumber);
DDX_Text(pDX, IDC_EDIT_totalprice, m_totalprice);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgPos, CDialog)
//{{AFX_MSG_MAP(CDlgPos)
ON_BN_CLICKED(IDC_BUTTON_select_food, OnBUTTONselectfood)
ON_BN_CLICKED(IDC_BUTTON_addvip, OnBUTTONaddvip)
ON_BN_CLICKED(IDC_BUTTON_selectvipcard, OnBUTTONselectvipcard)
ON_BN_CLICKED(IDC_BUTTON_pay, OnBUTTONpay)
ON_NOTIFY(NM_CLICK, IDC_LIST_menu, OnClickLISTmenu)
ON_NOTIFY(NM_CLICK, IDC_LIST_cook_menu, OnClickLISTcookmenu)
ON_BN_CLICKED(IDC_BUTTON_tempstore, OnBUTTONtempstore)
ON_CBN_EDITCHANGE(IDC_COMBO_food_class, OnEditchangeCOMBOfoodclass)
ON_BN_CLICKED(IDC_BUTTON_addtocook, OnBUTTONaddtocook)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgPos message handlers
void CDlgPos::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
BOOL CDlgPos::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
if(!UpdateData())
return 0;
if(!m_db.IsOpen())
{
MessageBox("数据库未打开");
return 0;
}
TRY
{
foodtotalnumber=0;//容器清空
sumprice=0.0;
CRecordset rs(&m_db);
CString sql="select class_name from food_class ";
rs.Open(CRecordset::dynaset, sql);
CString class_name;
while (!rs.IsEOF())
{
rs.GetFieldValue((short)0,class_name);
m_foodclass.AddString(class_name);
rs.MoveNext();
}
rs.Close();
sql="select class_name from food_class where food_class='0008'";
rs.Open(CRecordset::dynaset, sql);
rs.GetFieldValue((short)0,class_name);
m_foodclass.SetWindowText(class_name);
rs.Close();
//初始化menulist 头
CString c;
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
m_menulist.SetExtendedStyle(dwExStyle);
m_menulist.InsertColumn(0,"菜类别",LVCFMT_CENTER,90);
m_menulist.InsertColumn(1,"菜编号",LVCFMT_CENTER,100);
m_menulist.InsertColumn(2,"菜名",LVCFMT_CENTER,120);
m_menulist.InsertColumn(3,"价格",LVCFMT_CENTER,60);
//初始化menulist
sql="select class_name,food_id,food_name,food_price from menu_infor,food_class where food_class.food_class='0008' and food_class.food_class=menu_infor.food_class ";
rs.Open(CRecordset::dynaset, sql);
m_cookmenulist.SetExtendedStyle(dwExStyle);
CString classname,foodid,foodname,price;int i=0;
while (!rs.IsEOF())
{
rs.GetFieldValue((short)0,classname);
m_menulist.InsertItem(i,classname);
rs.GetFieldValue(1,foodid);
m_menulist.SetItemText(i,1,foodid);
rs.GetFieldValue(2,foodname);
m_menulist.SetItemText(i,2,foodname);
rs.GetFieldValue(3,price);
m_menulist.SetItemText(i,3,price);
rs.MoveNext();
}
rs.Close();
//初始化cookmenulist 头
m_cookmenulist.SetExtendedStyle(dwExStyle);
m_cookmenulist.InsertColumn(0,"菜类别",LVCFMT_CENTER,90);
m_cookmenulist.InsertColumn(1,"菜编号",LVCFMT_CENTER,100);
m_cookmenulist.InsertColumn(2,"菜名",LVCFMT_CENTER,110);
m_cookmenulist.InsertColumn(3,"价格",LVCFMT_CENTER,60);
//记录从 点击menulist 获得
if(billisnew)//新单
{
if (TableNo!="null")//桌号指定
{
m_TableNo=TableNo;
m_oTableNo.EnableWindow(FALSE);//不能修改桌号
}
int bill_id;
sql.Format("select MAX(bill_id) from bill");//取
rs.Open(CRecordset::dynaset, sql);
if(rs.IsEOF())//空数据库
{ bill_id=1; }
if(!rs.IsEOF())//有最大bill
{
//设置默认会员卡号
m_vipcard="100000";
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
bill_id= var.m_lVal+1; // 新的bill=最大bill 号 +1
m_billid.Format("%d",bill_id);
//SetDlgItemText(IDC_EDIT_bill_id,m_billid);//有 updatedata()代替完成 一次性更新
var.Clear();
}
rs.Close();
m_paystate="未付";
CTime currenttime=CTime::GetCurrentTime();//得到系统时间
CString nowtime=currenttime.Format("%H:%M:%S/%#Y/%#m/%#d");
m_begintime=nowtime;
}
else//调出未结帐的账单
{
int get_bill_id=atoi(GetBillId);//从 CLhj_cyglxtDlg 下拉框 得到的账单号
//显示未结帐的账单信息
sql.Format("select bill_id,vip_card,person_num,table_no,get_money_person,pay_state,begin_time,end_time from bill where bill_id=%d",get_bill_id);
rs.Open(CRecordset::dynaset, sql);
int temp;CDBVariant var;
if (rs.IsEOF())
{
return 0;
}
rs.GetFieldValue((short)0, var, SQL_C_SLONG);// bill_id
if (var.m_dwType != DBVT_NULL) //或 m_billid=GetBillId;
temp= var.m_lVal;
m_billid.Format("%d",temp);
var.Clear();
rs.GetFieldValue((short)1,m_vipcard);// vip_card
rs.GetFieldValue((short)2, var, SQL_C_SLONG);// person_num
if (var.m_dwType != DBVT_NULL)
temp= var.m_lVal;
m_PersonNum.Format("%d",temp);
var.Clear();
rs.GetFieldValue((short)3, var, SQL_C_SLONG);// table_no,,,,
if (var.m_dwType != DBVT_NULL)
temp= var.m_lVal;
m_TableNo.Format("%d",temp);
var.Clear();
// 4, get_name_person 用不着
rs.GetFieldValue((short)5,m_paystate);// pay_state
rs.GetFieldValue((short)6,m_begintime);// begin_time
rs.GetFieldValue((short)7,m_EndTime);// end_time
rs.Close();
//拿出已点的菜 显示 并放入 cookfoodid[] foodtotalnumber
sql.Format("select class_name,bill_menu.food_id,food_name,food_price from menu_infor,food_class,bill_menu where bill_menu.food_id=menu_infor.food_id and food_class.food_class=menu_infor.food_class and bill_id=%d",get_bill_id);
rs.Open(CRecordset::dynaset, sql);
int i=0;
while (!rs.IsEOF())
{
rs.GetFieldValue((short)0,classname);
m_cookmenulist.InsertItem(i,classname);
rs.GetFieldValue(1,foodid);
m_cookmenulist.SetItemText(i,1,foodid);
rs.GetFieldValue(2,foodname);
m_cookmenulist.SetItemText(i,2,foodname);
rs.GetFieldValue(3,price);
m_cookmenulist.SetItemText(i,3,price);
cookfoodid[foodtotalnumber]=foodid;
foodtotalnumber++;
sumprice=sumprice+atof(price);
rs.MoveNext();
}
m_totalnumber.Format("%d",foodtotalnumber);
m_totalprice.Format("%f",sumprice);
rs.Close();
m_cardedit.EnableWindow(FALSE);//调出来的账单 不能修改会员卡
}
UpdateData(FALSE);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgPos::OnBUTTONselectfood()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
TRY{
CString foodnameget,sql;
m_foodclass.GetWindowText(foodnameget);
CRecordset rs(&m_db);
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
sql.Format("select class_name,food_id,food_name,food_price from menu_infor,food_class where food_class.class_name='%s' and food_class.food_class=menu_infor.food_class ",foodnameget);
rs.Open(CRecordset::dynaset, sql);
m_cookmenulist.SetExtendedStyle(dwExStyle);
CString classname,foodid,foodname,price;int i=0;
m_menulist.DeleteAllItems();//去除所以记录
while (!rs.IsEOF())
{
rs.GetFieldValue((short)0,classname);
m_menulist.InsertItem(i,classname);
rs.GetFieldValue(1,foodid);
m_menulist.SetItemText(i,1,foodid);
rs.GetFieldValue(2,foodname);
m_menulist.SetItemText(i,2,foodname);
rs.GetFieldValue(3,price);
m_menulist.SetItemText(i,3,price);
rs.MoveNext();
}
rs.Close();
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
UpdateData(FALSE);
}
void CDlgPos::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
TRY
{ //查看菜详细信息
CRecordset rs(&m_db);CString sql;
sql.Format("select food_id from menu_infor where food_id='%s'",m_ToCookFoodId);
rs.Open(CRecordset::dynaset, sql);
if (rs.IsEOF())
{
AfxMessageBox("您输入的菜的编号不存在,无法查看该菜信息!");
rs.Close();
}
else
{
ShowFoodId=m_ToCookFoodId;
CDlgFoodDetail fooddetailDlg;
fooddetailDlg.DoModal();
}
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
UpdateData(FALSE);
//CDialog::OnOK();
}
void CDlgPos::OnBUTTONaddvip()
{
// TODO: Add your control notification handler code here
CDlgAddVip addvipDlg;
addvipDlg.DoModal();
}
void CDlgPos::OnBUTTONselectvipcard()
{
// TODO: Add your control notification handler code here
CDlgfindcard findcard;
findcard.DoModal();
}
void CDlgPos::OnBUTTONpay()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
//先把点菜信息放入数据库 为了结帐对话框 可以分别给 未结帐 和已经结帐账单用(主对话框里)
TRY
{ //判断 会员卡是否有效
CRecordset rs(&m_db);CString sql;
sql.Format("select vip_card from vip_infor where vip_card='%s'",m_vipcard);
rs.Open(CRecordset::dynaset, sql);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -