ChooseFood.cpp
上传用户:sunh8215
上传日期:2010-02-13
资源大小:1616k
文件大小:11k
源码类别:

酒店行业

开发平台:

Visual C++

  1. // ChooseFood.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "qq.h"
  5. #include "ChooseFood.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CChooseFood dialog
  13. CChooseFood::CChooseFood(CWnd* pParent /*=NULL*/)
  14. : CDialog(CChooseFood::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CChooseFood)
  17. m_PaidType = -1;
  18. //}}AFX_DATA_INIT
  19. m_DefaultSum=0.00f;
  20. bStriked=false;
  21. }
  22. void CChooseFood::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. //{{AFX_DATA_MAP(CChooseFood)
  26. DDX_Control(pDX, IDC_PAID, Paid);
  27. DDX_Control(pDX, IDC_SUM, Sum);
  28. DDX_Control(pDX, IDC_REBATE, Rebate);
  29. DDX_Control(pDX, IDC_FOODBILLLIST, FoodBillList);
  30. DDX_Control(pDX, IDC_FOODNUM, FoodNum);
  31. DDX_Control(pDX, IDC_FOODLIST, FoodList);
  32. DDX_Control(pDX, IDC_BILLCODE, BillCode);
  33. DDX_Control(pDX, IDC_HANDCODE, HandCode);
  34. DDX_Radio(pDX, IDC_RADIO1, m_PaidType);
  35. //}}AFX_DATA_MAP
  36. }
  37. BEGIN_MESSAGE_MAP(CChooseFood, CDialog)
  38. //{{AFX_MSG_MAP(CChooseFood)
  39. ON_BN_CLICKED(IDC_ADD, OnAdd)
  40. ON_BN_CLICKED(IDC_DELETE, OnDelete)
  41. ON_BN_CLICKED(IDC_UPDATEDATA, OnUpdatedata)
  42. ON_BN_CLICKED(IDC_RADIO1, OnRadio)
  43. ON_BN_CLICKED(IDC_RADIO2, OnRadio)
  44. //}}AFX_MSG_MAP
  45. END_MESSAGE_MAP()
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CChooseFood message handlers
  48. BOOL CChooseFood::OnInitDialog() 
  49. {
  50. CDialog::OnInitDialog();
  51. HICON m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME2);
  52. this->SetIcon(m_hIcon,true);//设置对话框图标
  53. // TODO: Add extra initialization here
  54. if(!m_FoodInfoSet.Open())
  55. {
  56. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  57. return false;
  58. }
  59. m_FoodInfoSet.MoveFirst();
  60. while (!m_FoodInfoSet.IsEOF())
  61. {
  62. CString strFoodList="",strFoodPrice="";
  63.         strFoodList=m_FoodInfoSet.m_FoodName;
  64. strFoodList=strFoodList+"  ";
  65. strFoodPrice.Format("%5.0f",m_FoodInfoSet.m_FoodPrice);
  66. strFoodList=strFoodList+strFoodPrice;
  67. FoodList.AddString(strFoodList);
  68. m_FoodInfoSet.MoveNext();
  69. }
  70. m_FoodInfoSet.Close();
  71. //产生帐单号码
  72. CCreateBillCode billcode;
  73. BillCode.SetWindowText(billcode.GenereBillCode());
  74. //将钱的总数设置为0
  75. Sum.SetWindowText("0");
  76. ///Paid无效话
  77. Paid.SetWindowText("0");
  78.     Paid.EnableWindow(FALSE);
  79. //设置缺省折扣率
  80. Rebate.SetWindowText("1");
  81. bStriked=false;
  82. return TRUE;  // return TRUE unless you set the focus to a control
  83.               // EXCEPTION: OCX Property Pages should return FALSE
  84. }
  85. void CChooseFood::OnAdd() 
  86. {
  87. // TODO: Add your control notification handler code here
  88.  ////////////////////////////////////////////////////////////////////
  89. //////////////////////////////////////////////////////////////////////////
  90. ///////////////////////添加一个项目模块
  91.     int nCurSel=FoodList.GetCurSel();
  92. if(nCurSel==-1)
  93. {
  94. MessageBox("请选择至少一种菜!","选择错误",MB_OK);
  95. return;
  96. }
  97. CString strFoodNum;
  98. FoodNum.GetWindowText(strFoodNum);
  99. if(strFoodNum==""||strFoodNum=="0")
  100. {
  101. MessageBox("数量至少要为一","选择错误",MB_OK);
  102. return;
  103. }
  104. CString strFoodName="";
  105. FoodList.GetText(nCurSel,strFoodName);//得到文本
  106. char* s=strFoodName.GetBuffer(strFoodName.GetLength());
  107. char* str=strtok(s," ");//得到菜的名字
  108. bool bSame=false;
  109. for(int i=0;i<FoodBillList.GetCount();i++)
  110. {
  111. CString strTemp="";
  112. FoodBillList.GetText(i,strTemp);//得到文本
  113. char* temp=strTemp.GetBuffer(strTemp.GetLength());//得到缓冲区字符
  114. char* bSameText=strtok(temp," ");
  115. if(*bSameText==*str)//找到一个相同的项目
  116. {
  117. bSame=true;
  118. MessageBox("你已经选了这个食品!","选择错误",MB_OK);
  119. return;
  120. }
  121. // strTemp.ReleaseBuffer(-1);
  122. }
  123. if(!bSame)//若没有相同的项目则添加新的记录
  124. {
  125.        strFoodName=str;//构造显示文本
  126.    strFoodName=strFoodName+"         "+strFoodNum;
  127.    FoodBillList.AddString(strFoodName);//添加字符窜
  128. }
  129.  /////////////////////添加一个项目完成
  130.  ////////////////////////////////////////////////////////////////////
  131. /*########################计算当前应付的总款#########################
  132. ####################################################################*/
  133. float MoneySum=0;//总钱数目
  134. for( i=0;i<FoodBillList.GetCount();i++)
  135. {
  136. //取得当前文本
  137. CString BillListText="";
  138. FoodBillList.GetText(i,BillListText);//取得文本
  139. //将取得的文本进行转换(char*)
  140. char* billlistText=BillListText.GetBuffer(BillListText.GetLength());
  141.         char* FoodNameInBillList,*FoodNumInBillList;
  142. //分别取得对应的数据
  143. FoodNameInBillList=strtok(billlistText," ");//食物名字
  144. FoodNumInBillList=strtok(NULL," "); //食物数量
  145. //根据菜单的名字查找相应的价钱
  146. CString SQLstr;
  147. SQLstr="select * from FoodInfo where FoodName='";
  148. SQLstr=SQLstr+FoodNameInBillList;
  149. SQLstr=SQLstr+"'";
  150. if(!m_FoodInfoSet.Open(AFX_DB_USE_DEFAULT_TYPE,SQLstr))
  151. {
  152.             MessageBox("打开数据库失败!","数据库错误",MB_OK);
  153. return;
  154. }
  155. float nMoney=m_FoodInfoSet.m_FoodPrice;//得到价钱
  156. m_FoodInfoSet.Close();//关闭数据库
  157.       //////////////////////////////////////////////////////////////////////////
  158.       ///计算总数
  159. long FoodNum=0;
  160. FoodNum=atoi(FoodNumInBillList);//食物数量
  161. MoneySum=MoneySum+nMoney*FoodNum;
  162. }
  163. ////将计算得到的总数再乘以折扣率
  164. m_DefaultSum=MoneySum;//设置缺省的总数
  165. float rebate=0.00f;
  166. CString strText;
  167. Rebate.UpdateData(true);
  168. Rebate.GetWindowText(strText);
  169. if(strText=="")
  170. {
  171. MessageBox("请输入折扣率!","数据为空错误",MB_OK);
  172. return;
  173. }
  174.     char* sTemp=strText.GetBuffer(strText.GetLength());
  175. rebate=atof(sTemp);
  176. MoneySum=m_DefaultSum*rebate;//乘以折扣率
  177.     CString strSum="";
  178. strSum.Format("%6.00f",MoneySum);
  179. Sum.SetWindowText(strSum);//显示总数
  180. //####################################################################
  181. }
  182. void CChooseFood::OnDelete() 
  183. {
  184. // TODO: Add your control notification handler code here
  185. int nCount=FoodBillList.GetCount();
  186. if(nCount==0)
  187. {//当前记录为空
  188. MessageBox("当前没有删除的项目!","记录为空错误",MB_OK);
  189. Sum.SetWindowText("0");
  190. return;
  191. }
  192. int nCurSel=FoodBillList.GetCurSel();
  193. if(nCurSel==-1)
  194. {//没有选择一种菜
  195.     MessageBox("你应该选择一种要删除的菜!","数据为空",MB_OK);
  196. return;
  197. }
  198. else
  199. {
  200. FoodBillList.DeleteString(nCurSel);
  201. }
  202. /////删除以后从新计算帐总数
  203. int nNum=FoodBillList.GetCount();
  204. float nMoney=0.00f;
  205. for(int i=0;i<nNum;i++)
  206. {
  207.         CString strItemText="";
  208. FoodBillList.GetText(i,strItemText);//得到项目文本
  209. char* str=strItemText.GetBuffer(strItemText.GetLength());
  210. char* strFoodName,*strFoodNum;
  211. strFoodName=strtok(str," ");//得到菜的名字
  212. strFoodNum=strtok(NULL," ");//得到菜的数目
  213. CString SQLstr;
  214. SQLstr="select * from FoodInfo where FoodName='";
  215. SQLstr=SQLstr+strFoodName;
  216. SQLstr=SQLstr+"'";
  217. if(!m_FoodInfoSet.Open(AFX_DB_USE_DEFAULT_TYPE,SQLstr))
  218. {
  219. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  220. return;
  221. }
  222. float nPrice=m_FoodInfoSet.m_FoodPrice;//得到价钱
  223. m_FoodInfoSet.Close();//关闭数据库
  224. //////计算总数
  225. long nFoodNum=atoi(strFoodNum);
  226.         nMoney=nMoney+nPrice*nFoodNum;
  227. }
  228. //显示更新后的总数
  229. m_DefaultSum=nMoney;//设置缺省的总数
  230. CString strShowText,strReabte;
  231. Rebate.GetWindowText(strReabte);
  232. char* s=strReabte.GetBuffer(strReabte.GetLength());
  233. double n=atof(s);
  234. strShowText.Format("%6.00f",m_DefaultSum*n);
  235. Sum.SetWindowText(strShowText);
  236. }
  237. void CChooseFood::OnUpdatedata() 
  238. {
  239. // TODO: Add your control notification handler code here
  240. ////将计算得到的总数再乘以折扣率
  241. float MoneySum=0.00f;
  242. float rebate=0.00f;
  243. CString strText;
  244. Rebate.GetWindowText(strText);//得到折扣率文本
  245. if(strText=="")
  246. {
  247. MessageBox("请输入折扣率!","数据为空错误",MB_OK);
  248. return;
  249. }
  250. char* sRebateTemp=strText.GetBuffer(strText.GetLength());
  251. rebate=atof(sRebateTemp);//转变折扣率
  252. MoneySum=m_DefaultSum*rebate;
  253. CString strSum="";
  254. strSum.Format("%6.00f",MoneySum);
  255. Sum.SetWindowText(strSum);//显示总数
  256. }
  257. void CChooseFood::OnRadio() 
  258. {
  259. // TODO: Add your control notification handler code here
  260. this->UpdateData(true);
  261. if(m_PaidType==0)
  262. {
  263. bStriked=true;
  264.         Paid.EnableWindow(true);
  265. }
  266. if(m_PaidType==1)
  267.     {
  268. bStriked=false;
  269.        Paid.EnableWindow(false);
  270.     }
  271. }
  272. void CChooseFood::OnOK() 
  273. {//保存数据到数据库中
  274. // TODO: Add extra validation here
  275. OnUpdatedata();//自动更新数据,防止因为忘记更新或者其他的原因产生误操作
  276. CString strHandCode;
  277. HandCode.GetWindowText(strHandCode);
  278.     if(strHandCode=="")
  279. {
  280.     MessageBox("请输入手牌号!","数据为空错误",MB_OK);
  281. return;
  282. }
  283. /////如果选择的是"现结"方式,而已经付的金额为<0则提示输入错误
  284. CString strPaidTemp="";
  285. Paid.GetWindowText(strPaidTemp);//得到已经付的款
  286. if(bStriked)
  287. {
  288. if(strPaidTemp==""||strPaidTemp=="0")
  289. {
  290. MessageBox("你可能输入错误,客人已经付的款应该大于0!!","输入错误",MB_OK);
  291. return;
  292. }
  293. }
  294. //查找客人数据库中是否存在这个手牌号
  295. if(!m_GuestInfoSet.Open(AFX_DB_USE_DEFAULT_TYPE))
  296. {
  297. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  298. return;
  299. }
  300. m_GuestInfoSet.MoveFirst();
  301. bool bhas=false;
  302. while(!m_GuestInfoSet.IsEOF())
  303. {
  304.         if(m_GuestInfoSet.m_HandCode==strHandCode)
  305. //////////////////////////////////////////////////////////////////////////
  306. //////////////////////////////////////////
  307. bhas=true;//存在这条记录 
  308. break;
  309. }
  310. m_GuestInfoSet.MoveNext();//移动到下一条记录
  311. }
  312. if(!bhas)
  313. {
  314. MessageBox("你输入的手牌号不正确!","输入消息错误",MB_OK);
  315. m_GuestInfoSet.Close();//关闭数据库 
  316. return;
  317. }
  318. m_GuestInfoSet.Close();//关闭数据库 
  319. ////////查询完毕
  320. //////////////////////////////////////////////////////////////////////////
  321. /////将数据保存到相应的数据库中
  322. /////写BillInfoSet表
  323. if(!m_BillInfoSet.Open())
  324. {//打开数据库失败处理异常
  325. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  326. return;
  327. }
  328.      /////新增加一条帐单的记录
  329. m_BillInfoSet.AddNew();
  330. /////数据填充
  331. CString strBillCode,strSum,strPaid,strRebate;
  332. BillCode.GetWindowText(strBillCode);
  333. m_BillInfoSet.m_BillCode=strBillCode;//帐单号码
  334.     m_BillInfoSet.m_HandCode=strHandCode;//客人手牌
  335. Sum.GetWindowText(strSum);
  336. char* s=strSum.GetBuffer(strSum.GetLength());
  337. long nSum=atol(s);
  338. m_BillInfoSet.m_Sum=nSum;//应付总数
  339. Paid.GetWindowText(strPaid);
  340. s=strPaid.GetBuffer(strPaid.GetLength());
  341. long nPaid=atol(s);
  342. m_BillInfoSet.m_Paid=nPaid;//实付总数
  343. Rebate.GetWindowText(strRebate);
  344. m_BillInfoSet.m_Rebate=strRebate;//折扣率
  345. m_BillInfoSet.m_Striked=bStriked;//是否已经付款
  346. m_BillInfoSet.Update();//数据更新
  347. m_BillInfoSet.Close(); //关闭数据库
  348.  //////////////////////////////////////////////////////////////////////////
  349.  //      开始写BillContentInfo表,记录这个帐单的具体消费情况
  350. if(!m_BillContentInfoSet.Open())
  351. {
  352. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  353. return;
  354. }
  355. m_BillContentInfoSet.AddNew();//新增一条记录
  356. CString strBillContent="";
  357. for(int i=0;i<FoodBillList.GetCount();i++)
  358. {
  359. CString strTemp="";
  360. FoodBillList.GetText(i,strTemp);
  361. strBillContent=strBillContent+strTemp+",";
  362. }
  363. CString strBillcode;
  364. BillCode.GetWindowText(strBillcode);
  365. m_BillContentInfoSet.m_BillCode=strBillcode;
  366. m_BillContentInfoSet.m_BillContent=strBillContent;
  367. m_BillContentInfoSet.Update();//更新数据库,将缓冲区的数据写入数据库中
  368. m_BillContentInfoSet.Close();//关闭数据库
  369. CDialog::OnOK();
  370. }
  371. void CChooseFood::OnCancel() 
  372. {
  373. // TODO: Add extra cleanup here
  374. CDialog::OnCancel();
  375. }