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

酒店行业

开发平台:

Visual C++

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