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

📄 dlgpos.cpp

📁 本系统功能主要有两大块组成:前台销售管理功能和后台数据管理功能。 前台销售管理系统,包括:开单
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -