版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> VC++課程設(shè)計報告</p><p> 設(shè)計題目: 餐飲管理系統(tǒng) </p><p> 院 系: </p><p> 班 級: </p><p> 學 號:
2、 </p><p> 設(shè) 計 者: </p><p><b> 課程設(shè)計任務書</b></p><p> VC++課程設(shè)計報告</p><p><b> 軟硬件運行環(huán)境</b></p><p
3、><b> 開發(fā)環(huán)境</b></p><p> AMD Athlon?ⅡNeo Processor K125,2GB內(nèi)存,250GB硬盤</p><p> Microsoft® Windows? XP Professional</p><p> Microsoft® Visual C++ 6.0</p&g
4、t;<p> Microsoft Office Access 2003</p><p><b> 運行環(huán)境</b></p><p> Intel® Pentium® 2及以上處理器,32M以上內(nèi)存,4G以上硬盤</p><p> Microsoft® Windows? XP操作系統(tǒng),</
5、p><p> Microsoft® Windows 7操作系統(tǒng)</p><p><b> 問題及難點所在</b></p><p><b> 1.數(shù)據(jù)庫操作。</b></p><p> 包括ACCESS數(shù)據(jù)庫中數(shù)據(jù)表的制作,在程序中利用ADO技術(shù)進行數(shù)據(jù)的查詢,檢索,增加刪除等操作,以及
6、數(shù)據(jù)庫。</p><p> 2.模塊之間的連接問題。</p><p> 模塊之間相互聯(lián)系,進行數(shù)據(jù)交換,必須兼顧數(shù)據(jù)安全性和各個類之間的連接性的問題。</p><p> 3.系統(tǒng)安全性問題,由于數(shù)據(jù)庫中存在金額等重要數(shù)據(jù),必須對每個用戶的訪問權(quán)限加以限制,并可以修改用戶權(quán)限。 </p><p><b> 需求分析&
7、lt;/b></p><p> 隨著現(xiàn)代社會的發(fā)展,餐飲行業(yè)作為服務業(yè)的龍頭企業(yè)規(guī)模不斷擴大,一個大型酒店的餐飲服務部門往往服務許多客人,而一個企業(yè)的經(jīng)營管理人員往往分工明確,一個人或幾個人無法完成如此繁雜的賬目統(tǒng)計和餐飲結(jié)賬等工作,傳統(tǒng)的算賬、記賬等人工操作系統(tǒng)已經(jīng)不能再適應現(xiàn)代企業(yè)的發(fā)展。為了使餐飲系統(tǒng)可以得到高效運轉(zhuǎn),伴隨著計算機的普及,因此需要專業(yè)的餐飲管理系統(tǒng)來完成工作。</p>
8、<p> 我的課程設(shè)計就是在此背景下完成的,本套餐飲管理系統(tǒng)有著完整的客人消費流程,餐館的經(jīng)理和營業(yè)員均可已使用該系統(tǒng),該系統(tǒng)解決了人工計算餐飲費用的各種不利因素,實現(xiàn)科學的點菜和結(jié)賬管理,省時省力,適合大多數(shù)中小型餐館使用,市場前景廣闊。</p><p><b> 概要設(shè)計</b></p><p> 首先,要實現(xiàn)餐飲管理的功能,需要設(shè)計五個功能模塊,
9、分別為開臺,點菜,加減菜,結(jié)賬,數(shù)量選擇等模塊。然后先進行對話框的設(shè)計,分別設(shè)計IDD_diancai,IDD_jiacai,IDD_jiezhangdlg,IDD_kaitai,IDD_SHULIANG這五個對話框,在對話框上擺放控件,給控件修改ID號碼,同時給各個對話框建立一個類,分別為CDiancaidlg,CJiacaidlg,CJiezhangdlg,CKaitaidlg,CSLdlg,并根據(jù)需要利用類向?qū)榭丶P(guān)聯(lián)成員變量,
10、建立成員函數(shù)和消息響應函數(shù)。</p><p> 其次,要增加系統(tǒng)的安全性能,實現(xiàn)管理員的登錄功能,為管理員設(shè)置權(quán)限,分為經(jīng)理和營業(yè)員兩種,分別對不同權(quán)限的人開放不同的模塊,在登錄之前將所有功能都屏蔽。設(shè)計登錄、注冊和賬戶權(quán)限管理對話框,并為每個對話框設(shè)置類,給控件添加成員變量,編寫代碼。</p><p> 本系統(tǒng)使用ACCESS數(shù)據(jù)庫對數(shù)據(jù)進行存儲,利用ADO技術(shù)訪問數(shù)據(jù)庫,實現(xiàn)數(shù)據(jù)的
11、檢索,查詢,插入,刪除,更改等功能。在數(shù)據(jù)庫中設(shè)計了四張數(shù)據(jù)表,分別為caishiinfo存放菜式信息,Login存放用戶名和密碼信息,paybill存放賬單信息,TableUSE存放桌子使用情況的信息。然后再MFC程序中可以通過ADO語句來訪問和操作數(shù)據(jù)庫實現(xiàn)功能。</p><p> 對界面進行美化,使用MFC皮膚給應用程序添加自己喜歡的皮膚,給對話框添加FALSH插件進行美化。</p><
12、;p> 框圖如下: </p><p><b> 數(shù)據(jù)庫設(shè)計</b></p><p> 1.使用ACCESS2003建立canyin.mdb的數(shù)據(jù)庫,在其中添加四張數(shù)據(jù)表,分別用來存放菜式信息,用戶信息,賬單信息,桌號信息。</p><p> 2.在CMyApp類中添加_ConnectionPtr 類型的變量m_pCon用于
13、連接數(shù)據(jù)庫。在窗口初始化函數(shù)中添加如下代碼,用于連接和訪問數(shù)據(jù)庫。</p><p> ::CoInitialize(NULL); //訪問COM庫</p><p> HRESULT hr; //函數(shù)返回值,如果這個函數(shù)執(zhí)行完返回時將有包含實際意義的數(shù)字,如果立即返回將包含狀態(tài)信息</p><p> try /*try關(guān)鍵字用來表示一個
14、代碼塊,在可能發(fā)生的異常。</p><p> 對于每一個try語句,必須有至少有一個相應的catch子句。如果出現(xiàn)異常,c</p><p> atch子句參數(shù)進行評估,以確定它是否是能夠處理特殊情況。特殊條件下,</p><p> 如果不能處理任何相應的try語句的catch子句,然后控制權(quán)轉(zhuǎn)移的方法調(diào)用鏈和以前的所有異常類型進行評估,</p>
15、<p> 直到找到一個能夠處理的條件。*/</p><p><b> {</b></p><p> hr=m_pCon.CreateInstance("ADODB.Connection"); //創(chuàng)建連接。CreateInstance是智能指針本身的函數(shù)</p><p> if(SUCCEEDED(hr
16、))</p><p><b> {</b></p><p> m_pCon->ConnectionTimeout=3;</p><p> hr=m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=canyin.mdb",""
17、;,"",adModeUnknown);</p><p> //打開到數(shù)據(jù)庫的連接,同步打開連接</p><p><b> }</b></p><p><b> }</b></p><p> catch(_com_error e)</p><p>
18、<b> {</b></p><p> CString temp;</p><p> temp.Format("連接數(shù)據(jù)庫錯誤信息:%s",e.ErrorMessage()); //格式化輸出信息</p><p> ::MessageBox(NULL,temp,"提示信息",NULL);
19、 //彈出消息提醒框</p><p> return false;</p><p><b> }</b></p><p> 連接數(shù)據(jù)庫后即可在每個類中添加_ConnectionPtr類型的變量操作數(shù)據(jù)庫。</p><p><b> 詳細設(shè)計</b></p>&
20、lt;p> 下面對各個類的設(shè)計做詳細介紹。</p><p><b> 1、用戶登錄模塊</b></p><p><b> 流程圖:</b></p><p> 左側(cè)插入了一個Flash插件,右側(cè)添加控件,ID號和相應變量如下:</p><p> ID號和相應函數(shù)為: &
21、lt;/p><p> IDOK OnOK</p><p> IDCANCEL OnCancle</p><p> 用語句extern CMyApp theApp;引入全局變量,然后建立_RecordsetPtr 的變量m_pRs用于操作數(shù)據(jù)庫,設(shè)置全局變量i用于計算登錄輸入的次數(shù),當?shù)卿洺^三次還未輸入正確用戶名和密碼的話就自動退出程序。
22、</p><p> (2)登錄按鈕的實現(xiàn)</p><p> 首先判斷編輯框是否出現(xiàn)輸入異常的情況,然后檢索數(shù)據(jù)庫確定該用戶名和密碼是否正確,如果連接數(shù)據(jù)庫成功則在login數(shù)據(jù)表中按照關(guān)鍵字進行用戶名和密碼的匹配,如果匹配成功,則登錄成功,可以進行下一步操作。如果用戶名和密碼輸入有誤,則彈出消息框進行提示,然后初始化編輯框,再次接受用戶名密碼。如果連接數(shù)據(jù)庫沒有成功,則彈出消息框進行提
23、示。</p><p> 在其中全局變量進行計數(shù),如果輸入超過三次則推出程序。登錄成功之后,將用戶名和密碼存入到theApp的成員變量中以備在theApp對所登錄的用戶權(quán)限進行管理。</p><p> 下面為具體實現(xiàn)的代碼:</p><p> void CLogindlg::OnOK() //登陸按鈕的操
24、作</p><p><b> {</b></p><p> // TODO: Add extra validation here</p><p> UpdateData(); //調(diào)用函數(shù)進行數(shù)據(jù)交換</p><p> if(!m_Uname.IsEm
25、pty()||!m_Upasswd.IsEmpty()) //判斷用戶名和密碼編輯框是否為空</p><p><b> {</b></p><p> CString sql="SELECT * FROM Login WHERE Uname='"+m_Uname+"' and Upasswd='"
26、+m_Upasswd+"'";</p><p> //在數(shù)據(jù)表中查詢是否存在該用戶名和密碼</p><p><b> try</b></p><p><b> {</b></p><p> m_pRs.CreateInstance("ADODB.Reco
27、rdset");</p><p> m_pRs->Open((_variant_t)sql,theApp.m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);</p><p> if(m_pRs->adoEOF)</p><p><b> {<
28、;/b></p><p> AfxMessageBox("用戶名或密碼錯誤!");</p><p> m_Uname="";</p><p> m_Upasswd=""; //初始化編輯框</p><p> i++;
29、 //用全局變量i控制輸入錯誤次數(shù)</p><p> UpdateData(false);</p><p> if(i==3) </p><p><b> {</b></p><p> OnCancel(); //如果輸入信息超過三次就退出系統(tǒng)&l
30、t;/p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> theApp.name=m_Uname;<
31、/p><p> theApp.pwd=m_Upasswd; //登陸成功后將用戶名和密碼保存</p><p> CDialog::OnOK(); </p><p><b> return;</b></p><p><b> }</b></p><p&g
32、t;<b> }</b></p><p> catch(_com_error e) //無法連接數(shù)據(jù)庫</p><p><b> {</b></p><p> CString temp;</p><p> temp.Format("連接數(shù)據(jù)庫錯誤信息:%s"
33、,e.ErrorMessage());</p><p> AfxMessageBox(temp); </p><p> return;</p><p><b> }</b></p><p><b> }</b></p><p><b&
34、gt; else</b></p><p><b> {</b></p><p> AfxMessageBox("用戶名密碼不能為空"); //編輯框為空</p><p><b> }</b></p><p><b> }</b>
35、;</p><p> 退出模塊直接調(diào)用 CDialog::OnCancel() 函數(shù)退出即可。</p><p><b> 2.開臺模塊實現(xiàn)</b></p><p><b> 流程圖:</b></p><p> ?。?)用語句extern CMyApp theApp;引入全局變量,然后建立_
36、RecordsetPtr 的變量m_pRs用于操作數(shù)據(jù)庫。開臺模塊中在上方顯示一個列表框,列表框內(nèi)顯示所有桌子的信息,第一欄是桌號,第二欄是“有人”或者“沒人”的顯示。選擇有人的桌子會自動報錯,選中一個沒有人的桌子,雙擊則會在下方的編輯框中顯示選中的桌號,選擇確定鍵則完成選擇。選擇完成之后數(shù)據(jù)庫中對桌號信息進行更改,按取消按鈕取消操作。</p><p> 具體的ID號和對應的函數(shù)和變量如下:
37、 </p><p> 為確定鍵設(shè)置了OnButtonOk函數(shù),為列表框相應雙擊消息設(shè)置OnDblclkList1函數(shù),實現(xiàn)雙擊桌號能將信息存入編輯框中。 </p><p> ?。?)列表框控件初始化。</p><p> 在相應該類的OnInitDialog函數(shù)中,先為列表框設(shè)置風格,然后添加兩列并命名,在桌號的tableu
38、seid數(shù)據(jù)表中查詢桌子的使用情況,將桌號和使用情況分別存入兩個變量中,根據(jù)信息的不同將信息分別顯示到列表框的兩列中,查詢該數(shù)據(jù)表中的所有數(shù)據(jù)得到列表框,以供用戶進行桌子的選擇。</p><p><b> 核心代碼如下:</b></p><p> m_Zhuolist.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSEL
39、ECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);</p><p> //為列表控件設(shè)置風格</p><p> m_Zhuolist.InsertColumn(0,"桌號",LVCFMT_LEFT,140,0); //為列表控件添加第一列并命名</p><p
40、> m_Zhuolist.InsertColumn(1,"狀態(tài)",LVCFMT_LEFT,140,1); //為列表控件添加第二列并命名</p><p> CString sql="select * from tableuse"; </p><p> m_pRs=theApp.m_pCon->Execute((_bstr_
41、t)sql,NULL,adCmdText);</p><p> //數(shù)據(jù)庫操作,查詢餐臺號信息</p><p> int i=0; //定義變量控制列表控件中的顯示順序</p><p> while(m_pRs->adoEOF==0) //如果數(shù)據(jù)不為空則查詢數(shù)據(jù)表并將結(jié)果添加到列表控件中</p&g
42、t;<p><b> {</b></p><p> CString str=(char*)(_bstr_t)m_pRs->GetCollect("桌號"); //將餐臺號信息存入str變量中</p><p> int tableuseid=atoi((char*)(_bstr_t)m_pRs->GetCollec
43、t("tableuseid")); </p><p> //將使用信息轉(zhuǎn)換為整型變量后存入tableuseid中</p><p> m_Zhuolist.InsertItem(i,""); //在控件列表中插入一行</p><p> m_Zhuolist.SetItemText(i,0,str); //將餐臺號
44、信息添加至第一列</p><p> //對tableuseid變量的值進行判斷</p><p> if(tableuseid==0) </p><p> m_Zhuolist.SetItemText(i,1,"空閑"); //如果為真表示空閑,在第二列將信息填入</p>&l
45、t;p> if(tableuseid==1)</p><p> m_Zhuolist.SetItemText(i,1,"有人"); //如果為假表示有人,在第二列將信息填入</p><p> i++; //控制行的變量自增</p><p> m_pRs->
46、MoveNext(); //數(shù)據(jù)庫操作:移向下一行記錄</p><p><b> }</b></p><p> ?。?)編輯框控件顯示選擇的桌號</p><p> 相應鼠標雙擊的消息響應函數(shù),當營業(yè)員鼠標雙擊選擇桌號后,用編輯框關(guān)聯(lián)的成員變量的GetItemText函數(shù)獲得單擊列表位置所在行的第一列,然
47、后存入變量中進行顯示。</p><p><b> 具體代碼如下:</b></p><p> void CKaitaidlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) </p><p><b> {</b></p><p> CString
48、 str;</p><p> str=m_Zhuolist.GetItemText(m_Zhuolist.GetSelectionMark(),0);</p><p> //獲取當前列表控件中鼠標單擊位置所在行的第一列文本</p><p> m_ZhuoHao=str; //將文本添加到編輯框中</p><p>
49、 UpdateData(false); </p><p> *pResult = 0;</p><p><b> }</b></p><p> ?。?)開臺成功的“確定”按鈕的操作</p><p> 首先判斷編輯框不為空,然后查詢該餐臺號是否正在被使用,如果正在被使用的話就提示有人了,并初始化編輯
50、框。如果不被使用的話,則在數(shù)據(jù)庫中檢索這張桌子,找到后將使用情況進行更改,然后調(diào)用點菜模塊,彈出點菜對話框進行點菜。</p><p> void CKaitaidlg::OnButtonOk() </p><p><b> {</b></p><p> UpdateData(); //數(shù)據(jù)交換</p><p&g
51、t; if(m_ZhuoHao.IsEmpty()) //如果填入編輯框中的數(shù)據(jù)為空</p><p> AfxMessageBox("桌號不能為空");</p><p> else //對編輯框中的數(shù)據(jù)進行處理</p><p><b> {</b></p>&l
52、t;p> CString Str="select * from TableUSE where TableUSEID=1"; //如果不為空則查詢哪些餐臺正在使用</p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)Str,NULL,adCmdText);</p><p> while(!m_pRs->a
53、doEOF) //當記錄不為空的時候</p><p><b> {</b></p><p> Value=(char*)(_bstr_t)m_pRs->GetCollect("桌號"); //用全局變量保存正在使用的餐臺號</p><p> if(m_ZhuoHao==Value) /
54、/如果編輯框中的值與該變量相等</p><p><b> {</b></p><p> AfxMessageBox("有人了"); //提示有人了</p><p> m_ZhuoHao="";</p><p> UpdateData(false);</p&g
55、t;<p><b> return;</b></p><p><b> }</b></p><p> m_pRs->MoveNext(); //繼續(xù)下一條記錄</p><p><b> }</b></p><p> m_pRs=
56、NULL; //初始化指針</p><p> CString Str1="select * from TableUSE where 桌號="+m_ZhuoHao+""; </p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)Str1,NULL,adCmdTe
57、xt);</p><p> if(m_pRs->adoEOF) //當記錄為空時</p><p><b> {</b></p><p> AfxMessageBox("沒有這種桌子"); //輸出信息</p><p> m_ZhuoHao="&quo
58、t;; //編輯框初始化顯示</p><p> UpdateData(false); </p><p><b> return;</b></p><p><b> }</b></p><p> m_pRs=NULL;
59、 //初始化指針</p><p> CDiancaidlg dlg; //定義一個點菜窗體實例</p><p> dlg.m_ZhuoHao = m_ZhuoHao; </p><p> dlg.DoModal(); //彈出點菜窗體</p><p> CDi
60、alog::OnOK(); </p><p><b> }</b></p><p><b> }</b></p><p><b> 3.點菜模塊實現(xiàn)</b></p><p><b> 流程圖:</b></p>&l
61、t;p> 用語句extern CMyApp theApp;引入全局變量,然后建立_RecordsetPtr 的變量m_pRs用于操作數(shù)據(jù)庫。上面的桌號自動進行填充,下面列表的左側(cè)是所有菜式的信息列表,包括菜名的菜價。用戶鼠標單擊選擇的菜品,中間有兩個按鈕,“>>”用于實現(xiàn)將用戶選中的菜式放入到右側(cè)的列表框中。“<<”按鈕實現(xiàn)當用戶在右側(cè)列表框中選中一個菜后,單擊該按鈕可以將該菜式從本桌已點的菜式中去掉。單
62、擊確定按鈕完成點菜的操作,同時將右側(cè)列表框的菜式信息存入caishiinfo數(shù)據(jù)表中。</p><p> 本對話框的控件關(guān)聯(lián)的變量如下:</p><p> 對話框具體設(shè)計如下:</p><p> ?。?)窗口初始化函數(shù)</p><p> 首先在caishiinfo數(shù)據(jù)表中檢索數(shù)據(jù),然后用SetExtendedStyle函數(shù)為列表框添加樣
63、式,然后插入兩列,在數(shù)據(jù)庫中找到所有的菜式信息,提取信息并把信息放入到左側(cè)的列表框中,完成IDC_LIST2列表框的初始化。然后在左側(cè)列表框中添加兩列信息,完成對IDC_LIST3函數(shù)的初始化。</p><p><b> 具體實現(xiàn)代碼如下:</b></p><p> BOOL CDiancaidlg::OnInitDialog()</p><p
64、><b> {</b></p><p> CDialog::OnInitDialog();</p><p> CString Sql="select * from caishiinfo"; //從caishiinfo數(shù)據(jù)表中提取數(shù)據(jù)</p><p> m_CaidanLis
65、t.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);</p><p> //為菜單列表進行樣式設(shè)置</p><p> m_CaidanList.InsertColumn(0,"菜名",
66、LVCFMT_LEFT,100,0);</p><p> m_CaidanList.InsertColumn(1,"菜價(元)",LVCFMT_LEFT,100,1);</p><p> //為菜單列表添加兩列并命名</p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)Sql,NULL,adC
67、mdText);</p><p> while(!m_pRs->adoEOF) //當指針記錄不為空</p><p><b> {</b></p><p> CString TheValue,TheValue1;</p><p> TheVa
68、lue=(char*)(_bstr_t)m_pRs->GetCollect("菜名"); //將“菜名”信息存入TheValue</p><p> TheValue1=(char*)(_bstr_t)m_pRs->GetCollect("菜價"); //將“菜價”信息存入TheValue1</p><p>
69、m_CaidanList.InsertItem(0,""); //為列表框插入一行</p><p> m_CaidanList.SetItemText(0,0,TheValue); //設(shè)置該行的第一列</p><p> m_CaidanList.SetItemText(0
70、,1,TheValue1); //設(shè)置該行第二列</p><p> m_pRs->MoveNext(); //繼續(xù)下一條記錄</p><p><b> }</b></p><p> m_CaidanCheck.Inse
71、rtColumn(0,"菜名",LVCFMT_LEFT,100,0);</p><p> m_CaidanCheck.InsertColumn(1,"數(shù)量(盤)",LVCFMT_LEFT,100,1); //為菜單列表添加兩列并命名</p><p> return TRUE;</p><p><b> }<
72、;/b></p><p><b> “>>”按鈕的實現(xiàn)</b></p><p> 該按鈕負責將用戶選中的菜式添加到右側(cè)列表框中。首先實例化一個數(shù)量選擇的對象,該對話框建立之后,后的菜單中所選項的序號,然后后的選擇想的文本,然后將菜式名稱和數(shù)量寫入右側(cè)點菜列表框中。</p><p><b> 實現(xiàn)代碼如下:<
73、;/b></p><p> void CDiancaidlg::OnButtonadd() </p><p><b> {</b></p><p> CSLdlg Sldlg; //數(shù)量類實例化一個對象</p><p> if(Sldlg.DoModal()==IDOK) //創(chuàng)建“點菜
74、數(shù)量”窗口的模態(tài)對話框</p><p><b> {</b></p><p> int i = m_CaidanList.GetSelectionMark(); //獲取菜單中所選擇的項的序號</p><p> CString str = m_CaidanList.GetItemText(i,0);
75、 //獲取選擇項的文本</p><p> m_CaidanCheck.InsertItem(0,"");</p><p> m_CaidanCheck.SetItemText(0,0,str); //將文本寫入點菜欄</p><p> m_CaidanCheck.SetItemText(0,1,Sldlg.m
76、_ShuLiang);//將數(shù)量寫入點菜欄</p><p><b> }</b></p><p><b> }</b></p><p><b> “>>”按鈕的實現(xiàn)</b></p><p> 代碼為: m_CaidanCheck.DeleteItem(m
77、_CaidanCheck.GetSelectionMark());</p><p> 即將選中的菜式從右側(cè)列表框中刪除掉 </p><p><b> “確定”按鈕的操作</b></p><p> 首次按確定按鈕修改TableUSE 中的信息,如果點菜不為空的話就將該桌定義為有人,然后通過菜名的檢索在數(shù)據(jù)表中查詢菜價信息,然后將總價算出存
78、入全局變量中,并存入數(shù)據(jù)表中,完成點菜操作。</p><p><b> 實現(xiàn)代碼如下:</b></p><p> void CDiancaidlg::OnButtonOk() </p><p><b> {</b></p><p> UpdateData();</p><
79、p> CString Sql;</p><p> int i = m_CaidanCheck.GetItemCount(); //獲取點菜列表項的總數(shù)</p><p> if(i==0) //如果點菜個數(shù)為零</p><p><b> {</b></p><p> AfxMessageBox(&
80、quot;請點菜"); //彈出對話框</p><p><b> return;</b></p><p><b> }</b></p><p> Sql="update TableUSE set TableUSEID=1 where 桌號="+m_ZhuoHao+" &q
81、uot;;</p><p> theApp.m_pCon->Execute((_bstr_t)Sql,NULL,adCmdText); //點菜成功就將該餐廳號的使用狀態(tài)改變</p><p> CString Sql1,Str,Str1,Value,TotleValue;</p><p> double Totle=0;</
82、p><p> for(int n=0;n<i;n++) //遍歷點菜列表將數(shù)據(jù)存入數(shù)據(jù)表</p><p><b> {</b></p><p> Str=m_CaidanCheck.GetItemText(n,0); //獲取第N行第一列的數(shù)據(jù)信息</p><p> Str1=m_CaidanChe
83、ck.GetItemText(n,1); //獲取第N行第二列的數(shù)據(jù)信息</p><p> Sql1="select * from caishiinfo where 菜名='"+Str+"'"; //獲取菜價信息</p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)Sql1,
84、NULL,adCmdText);</p><p> Value=(char*)(_bstr_t)m_pRs->GetCollect("菜價"); //將菜價信息存入變量</p><p> Totle=atof(Value)*atof(Str1); //獲得消費總額存入變量</p><p> TotleValue=(char*)(
85、_bstr_t)Totle; //格式轉(zhuǎn)換</p><p> Sql1="insert into paybill(桌號,菜名,數(shù)量,消費) values("+m_ZhuoHao+",'"+Str+"',"+Str1+","+TotleValue+")";</p><p>
86、 theApp.m_pCon->Execute((_bstr_t)Sql1,NULL,adCmdText); //將此桌的點菜信息和消費明細寫入數(shù)據(jù)表</p><p><b> }</b></p><p> AfxMessageBox("點菜成功"); //彈出對話框</p><p> CDialog::O
87、nOK();</p><p><b> }</b></p><p> 4.數(shù)量選擇模塊的實現(xiàn)</p><p> 當單擊“>>”按鈕時會自動彈出選菜的對話框,用戶在選菜對話框中輸入要選擇的份數(shù),將該份數(shù)保存后存入變量中,然后可供點菜對話框使用。</p><p> 控件的ID號及變量名如下:</p
88、><p><b> 對話框設(shè)計如下:</b></p><p><b> 確定鍵的代碼如下:</b></p><p> void CSLdlg::OnButtonok() //響應點菜數(shù)量對話框的確定按鈕</p><p><b> {</b></p>
89、<p> UpdateData();</p><p> if(m_ShuLiang.IsEmpty()||m_ShuLiang=="0") //判斷數(shù)量</p><p><b> {</b></p><p> AfxMessageBox("數(shù)量至少為1");</p>
90、;<p><b> return;</b></p><p><b> }</b></p><p> CDialog::OnOK();</p><p><b> }</b></p><p><b> 5.加減菜模塊實現(xiàn)</b><
91、/p><p><b> 流程圖:</b></p><p> (1)加減菜模塊完成功能為在進餐中要對所點的菜式進行修改,有加菜和減菜操作。用語句extern CMyApp theApp;引入全局變量,然后建立_RecordsetPtr 的變量m_pRs用于操作數(shù)據(jù)庫。在上方的下拉列表框中選擇桌號,選擇之后右側(cè)列表框中顯示該桌的菜式信息,左側(cè)列表框顯示所有的菜式信息。然后
92、可以通過“>>”“<<”按鈕對菜式進行修改,同時在后臺完成總金額的修改,單擊確定修改成功。</p><p><b> 控件及變量如下:</b></p><p><b> 對話框如下:</b></p><p><b> 窗口初始化</b></p><p&
93、gt; 首先在菜式信息表中查詢菜式信息,變成列表樣式填入到左側(cè)的列表框中,然后paybill數(shù)據(jù)表中查詢賬單信息,為下拉列表控件添加正在使用的餐臺號信息。</p><p><b> 以下為具體代碼:</b></p><p> BOOL CJiacaidlg::OnInitDialog() </p><p><b> {<
94、/b></p><p> CDialog::OnInitDialog();</p><p> CString Sql="select * from caishiinfo"; //查詢數(shù)據(jù)</p><p> m_CaidanList.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|
95、LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);</p><p> //對菜單樣式進行設(shè)置</p><p> m_CaidanList.InsertColumn(0,"菜名",LVCFMT_LEFT,100,0); //為菜單列表添加兩列并命名</p><p&
96、gt; m_CaidanList.InsertColumn(1,"菜價(元)",LVCFMT_LEFT,100,1);</p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)Sql,NULL,adCmdText); //將數(shù)據(jù)表中的菜單信息讀入菜單列表中</p><p> while(!m_pRs->adoEO
97、F) //如果不為空</p><p><b> {</b></p><p> CString TheValue,TheValue1;</p><p> TheValue=(char*)(_bstr_t)m_pRs->GetCollect("菜名");</p><p> TheV
98、alue1=(char*)(_bstr_t)m_pRs->GetCollect("菜價"); //分別將菜名和菜價信息存入變量</p><p> m_CaidanList.InsertItem(0,""); //插入一行</p><p> m_CaidanList.SetItemText(0,0,TheValue);
99、 //將菜名添加到第一行</p><p> m_CaidanList.SetItemText(0,1,TheValue1); //將菜價添加到第二行</p><p> m_pRs->MoveNext(); //繼續(xù)下一條記錄</p><p><b> }</b></p><p> //為點菜列表進
100、行樣式設(shè)置</p><p> m_CaidanCheck.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);</p><p> m_CaidanCheck.InsertColumn(0,"菜名&q
101、uot;,LVCFMT_LEFT,100,0);</p><p> m_CaidanCheck.InsertColumn(1,"數(shù)量(盤)",LVCFMT_LEFT,100,1); //為點菜列表添加兩列并分別命名</p><p> Sql="select distinct 桌號 from paybill";
102、 //去除重復的餐臺號信息</p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)Sql,NULL,adCmdText); //向下拉控件中添加數(shù)據(jù)</p><p> while(m_pRs->adoEOF==0) /
103、/如果為空</p><p><b> {</b></p><p> CString zhuohao=(char*)(_bstr_t)m_pRs->GetCollect("桌號"); //將餐臺號信息存入變量</p><p> m_ZhuohaoCombo.AddString(zhuohao);
104、 //為下拉列表添加餐臺號信息</p><p> m_pRs->MoveNext(); //繼續(xù)下一條記錄</p><p><b> }</b></p><p> return TRUE; </p><p>
105、;<b> }</b></p><p> 對IDC_LIST3進行初始化操作</p><p> 相應下拉列表控件IDC_COMBO1控件的Selchange消息,獲取桌號信息,根據(jù)桌號在賬單列表中將菜式和數(shù)量信息提取出來并存入IDC_LIST3列表框中。</p><p><b> 具體代碼如下:</b><
106、/p><p> void CJiacaidlg::OnSelchangeCombo1() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> CString str;</p&
107、gt;<p> m_ZhuohaoCombo.GetLBText(m_ZhuohaoCombo.GetCurSel(),str); //獲取所選選項的信息</p><p> CString sql="select * from paybill where 桌號="+str+""; </p><p> //到數(shù)據(jù)表中查詢
108、相關(guān)餐臺號的信息</p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)sql,NULL,adCmdText);</p><p> m_CaidanCheck.DeleteAllItems(); //菜單選擇列表框初始化清空</p><p> //將查到的信息寫入點菜列表中</p><
109、p> while(!m_pRs->adoEOF) //如果不為空</p><p><b> {</b></p><p> CString valuename=(char*)(_bstr_t)m_pRs->GetCollect("菜名");</p><p> CString valuenum=(ch
110、ar*)(_bstr_t)m_pRs->GetCollect("數(shù)量"); //將菜名和數(shù)量信息分別存入變量</p><p> m_CaidanCheck.InsertItem(0,""); //為菜單列表添加一行</p><p> m_CaidanCheck.SetItemText(0,0,valuenam
111、e); //將菜名添加到該行第一列</p><p> m_CaidanCheck.SetItemText(0,1,valuenum); //將數(shù)量添加到該行第二列</p><p> m_pRs->MoveNext(); //下一條記錄</p><p><b> }</
112、b></p><p><b> }</b></p><p><b> ">>"按鈕的操作</b></p><p> 選中一項,點擊按鈕之后,彈出添加數(shù)量信息的對話框,獲得當前選中項的序號,在右側(cè)列表框中將該菜式的菜名和數(shù)量信息寫入。</p><p> v
113、oid CJiacaidlg::OnButtonadd() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> CSLdlg Sldlg; </p><p>
114、 if(Sldlg.DoModal()==IDOK) //添加數(shù)量信息</p><p><b> {</b></p><p> int i = m_CaidanList.GetSelectionMark(); //獲取當前選中項的序號</p><p> CString str = m_CaidanList.GetI
115、temText(i,0);</p><p> m_CaidanCheck.InsertItem(0,""); //插入一行</p><p> m_CaidanCheck.SetItemText(0,0,str);//將選中項信息添加到點菜列表中</p><p> m_CaidanCheck.SetItemText(0,1,Sldlg.m
116、_ShuLiang); //將數(shù)量信息添加到點菜列表</p><p><b> }</b></p><p><b> }</b></p><p><b> "<<"按鈕的操作</b></p><p><b> 代碼為: &l
117、t;/b></p><p> m_CaidanCheck.DeleteItem(m_CaidanCheck.GetSelectionMark());</p><p><b> 作用為刪除選中項。</b></p><p><b> “確定”按鈕的操作</b></p><p> 首先確認所
118、選擇的桌號,然后獲取點菜列表框內(nèi)的菜式總數(shù),確認不為空時執(zhí)行操作。刪去該桌的原有賬單信息,再將現(xiàn)在的賬單按項目存入paybill 數(shù)據(jù)表中,并計算總價。</p><p><b> 具體代碼如下:</b></p><p> void CJiacaidlg::OnButtonOK() </p><p><b> {</b>
119、;</p><p> // TODO: Add your control notification handler code here</p><p> UpdateData();</p><p> CString Sql;</p><p> CString zhuohao;</p><p> if(m_Zh
120、uohaoCombo.GetCurSel()==-1) //如果沒有選擇數(shù)據(jù)則要求選擇</p><p><b> {</b></p><p> AfxMessageBox("請選擇要加菜的桌號");</p><p><b> return;</b></p>&l
121、t;p><b> }</b></p><p> m_ZhuohaoCombo.GetLBText(m_ZhuohaoCombo.GetCurSel(),zhuohao); //獲取所選擇的信息</p><p> int i = m_CaidanCheck.GetItemCount(); //獲取點菜列表的項目總數(shù)</p><
122、;p> if(i==0) //如果為0則提示請點菜</p><p><b> {</b></p><p> AfxMessageBox("請點菜");</p><p><b> return;</b></p><p><b> }</b&
123、gt;</p><p> CString Sql1,Str,Str1,Value,TotleValue;</p><p> Sql1="delete from paybill where 桌號="+zhuohao+""; //刪去此帳臺號原有的賬單信息</p><p> theApp.m_pCon->
124、Execute((_bstr_t)Sql1,NULL,adCmdText); </p><p> double Totle=0; //記錄總消費</p><p> for(int n=0;n<i;n++)</p><p><b> {</b></p><p> Str=m_C
125、aidanCheck.GetItemText(n,0); //獲取第N行第一列的文本</p><p> Str1=m_CaidanCheck.GetItemText(n,1); //獲取第N行第二列的文本</p><p> Sql1="select * from caishiinfo where 菜名='"+Str+"'"
126、;; </p><p> m_pRs=theApp.m_pCon->Execute((_bstr_t)Sql1,NULL,adCmdText); //在菜單表中獲取菜名一致的信息</p><p> Value=(char*)(_bstr_t)m_pRs->GetCollect("菜價"); //獲取該菜名的菜價信息</p
127、><p> Totle=atof(Value)*atof(Str1); //將數(shù)量與菜價轉(zhuǎn)換為整形數(shù)相乘得到總消費額</p><p> TotleValue=(char*)(_bstr_t)Totle; //將總消費轉(zhuǎn)換為CString類型</p><p> Sql1="insert into paybill(桌號,菜名,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- vc++課程設(shè)計報告---球員管理系統(tǒng)
- vc++課程設(shè)計--工資管理
- vc++課程設(shè)計--工資管理
- vc++課程設(shè)計報告
- vc++課程設(shè)計報告--圖書館管理系統(tǒng)
- VC++課程設(shè)計--工資管理.doc
- vc++軟件課程設(shè)計報告
- 同學錄系統(tǒng)vc++課程設(shè)計
- vc++庫函數(shù)課程設(shè)計
- vc++課程設(shè)計報告-小型超市商品管理系統(tǒng)
- vc++課程設(shè)計報告-小型超市商品管理系統(tǒng)
- vc++課程設(shè)計報告----對抗游戲
- vc++課程設(shè)計報告--對抗游戲
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計
- vc++火車票信息管理系統(tǒng)課程設(shè)計報告
- vc++課設(shè)課程設(shè)計報告
- 【vc++課程設(shè)計】學生成績管理系統(tǒng)的設(shè)計與實現(xiàn)
- [vc++畢設(shè)]c++課程設(shè)計報告(人事管理系統(tǒng))
- vc++課程設(shè)計----用winsock實現(xiàn)聊天
- vc++課程設(shè)計《算術(shù)表達式》
評論
0/150
提交評論