可視化編程課程設(shè)計(jì)(含源碼)計(jì)算器系統(tǒng)實(shí)現(xiàn)_第1頁(yè)
可視化編程課程設(shè)計(jì)(含源碼)計(jì)算器系統(tǒng)實(shí)現(xiàn)_第2頁(yè)
可視化編程課程設(shè)計(jì)(含源碼)計(jì)算器系統(tǒng)實(shí)現(xiàn)_第3頁(yè)
可視化編程課程設(shè)計(jì)(含源碼)計(jì)算器系統(tǒng)實(shí)現(xiàn)_第4頁(yè)
可視化編程課程設(shè)計(jì)(含源碼)計(jì)算器系統(tǒng)實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、可視化編程課程設(shè)計(jì)(含源碼)計(jì)算器系統(tǒng)實(shí)現(xiàn) 設(shè)計(jì)題目:計(jì)算器系統(tǒng)實(shí)現(xiàn)分別用API與MFC編程來(lái)實(shí)現(xiàn)計(jì)算器的以下功能。實(shí)現(xiàn)計(jì)算器的基本功能:連續(xù)數(shù)據(jù)的無(wú)優(yōu)先級(jí)混合運(yùn)算(加減乘除)可以實(shí)現(xiàn)其他附加功能:優(yōu)先級(jí)運(yùn)算,加入括號(hào),加入其他函數(shù)運(yùn)算功能等。(不在要求范圍之內(nèi))要求界面良好,功能完整。 打開MFC應(yīng)用操作界面,布局計(jì)算器界面,利用組框?qū)⒂?jì)算器界面分為三個(gè)部分,一個(gè)是編輯輸入,一個(gè)是數(shù)字界面,一個(gè)是功能鍵部分。利用布局參考線對(duì)齊按鈕,使界面美觀。然后就是對(duì)各個(gè)按鈕進(jìn)行屬性設(shè)置,關(guān)聯(lián)類設(shè)置,接著對(duì)各個(gè)按鈕進(jìn)行源代碼編程。最后,調(diào)試找出問(wèn)題,解決問(wèn)題,運(yùn)行MFC成品計(jì)算器。簡(jiǎn)單操作以及功能說(shuō)明 由

2、于本人技術(shù)有限,所以本程序只能按照正確的計(jì)算運(yùn)算順序進(jìn)行,該簡(jiǎn)單計(jì)算器能進(jìn)行四則混合運(yùn)算,除了加減乘除外,添加了一個(gè)括號(hào),對(duì)于有些未知的錯(cuò)誤,由于時(shí)間有限,并未來(lái)得及全面測(cè)試使用。該簡(jiǎn)單計(jì)算器能實(shí)現(xiàn)四則運(yùn)算,退格運(yùn)算,清零運(yùn)算,并且支持輸出的結(jié)果保留給直接的下一個(gè)運(yùn)算。系統(tǒng)實(shí)現(xiàn)的各個(gè)模塊編輯框模塊由于編輯框模塊需要連續(xù)輸入字符串,所以在給編輯框建立類向?qū)r(shí),給編輯框定義的成員變量應(yīng)該是字符串(String)變量。編輯框模塊用于運(yùn)算算式的輸入,以及結(jié)果的輸出。數(shù)字鍵模塊數(shù)字鍵模塊比較簡(jiǎn)單,該簡(jiǎn)單計(jì)算器數(shù)字鍵模塊設(shè)置有09數(shù)字,還設(shè)置有小數(shù)點(diǎn),以及正負(fù)數(shù)轉(zhuǎn)換實(shí)現(xiàn)按鈕。數(shù)字鍵模塊按鈕在建立類向?qū)r(shí)無(wú)

3、需定義成員變量,但是需要定義按鈕響應(yīng)鏈接,用于實(shí)現(xiàn)點(diǎn)擊按鈕,在編輯框上顯示點(diǎn)擊按鈕信息。功能鍵模塊功能鍵模塊包括加減乘除基本按鈕,以及一個(gè)輸入錯(cuò)誤是后能用于退格功能的退格鍵按鈕,還有一個(gè)用于區(qū)別優(yōu)先級(jí)運(yùn)算的括號(hào)功能,當(dāng)然有最重要的計(jì)算結(jié)果輸入按鈕,等于號(hào)按鈕。在編輯框附近還有一個(gè)功能鍵,就是清除功能鍵,用于清除編輯框,以便實(shí)現(xiàn)下一輪輸入。設(shè)計(jì)過(guò)程設(shè)計(jì)總流程圖 界面的設(shè)計(jì) 建立的變量,控件的命名,對(duì)應(yīng)的消息處理函數(shù)對(duì)應(yīng)表IDCAPTIONMessageHandlerIDD_JISUANQI_DIALOG簡(jiǎn)易計(jì)算器N/AIDC_NUM00OnNum0IDC_NUM11OnNum1IDC_NUM22

4、OnNum2IDC_NUM33OnNum3IDC_NUM44OnNum4IDC_NUM55OnNum5IDC_NUM66OnNum6IDC_NUM77OnNum7IDC_NUM88OnNum8IDC_NUM99OnNum9IDC_OPER_ADD+OnOperAddIDC_OPER_SUB-OnOperSubIDC_OPER_MULTI*OnOperMultiIDC_OPER_DIV/OnOperDivIDC_ADD_SUB+/-OnAddSubIDC_POINTOnPointIDC_EQUALOnEqualIDC_LBRACKETOnLbracketIDC_RBRACKETOnRbracke

5、tIDC_BACKSPEACEOnBackspaceIDC_CLEARCOnClear各模塊源程序數(shù)字鍵模塊 void CJiSuanQiDlg:OnNum0 ifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符 return;UpdateDataTRUE;/刷新編輯框界面calcutateString + 0;/存儲(chǔ)輸入的數(shù)字m_data + 0;/顯示輸入的數(shù)字UpdateDataFALSE; 功能鍵模塊加法功能鍵源程序 void CJiSuanQiDlg:OnOperAdd ifcalculated TRUE/其前一步按了 號(hào)calculated FALSE;m_data

6、 oldResult;double temp atofoldResult;/定義臨時(shí)變量存儲(chǔ)上一步結(jié)果iftemp 0calcutateString 0 + oldResult;elsecalcutateString oldResult;calcutateString + +;/存儲(chǔ)做完該功能后的結(jié)果m_data + +;/顯示該步驟完成的結(jié)果UpdateDataFALSE;else /前一步不是 UpdateDataTRUE;calcutateString + +;/直接存儲(chǔ)此步操作m_data + +;/直接顯示此步操作UpdateDataFALSE;退格功能鍵源程序 void CJiSu

7、anQiDlg:OnBackspeace ifcalculated FALSEUpdateDataTRUE;ifcount 1/判斷是否能執(zhí)行退格操作m_data m_data.Leftcount -1;count calcutateString.GetLength;calcutateString calcutateString.Leftcount -1;UpdateDataFALSE;清除功能鍵源程序 void CJiSuanQiDlg:OnClear / TODO: Add your control notification handler code herem_data ;oldResu

8、lt ;calcutateString ;calculated FALSE;UpdateDataFALSE;括號(hào)功能鍵源程序 void CJiSuanQiDlg:OnLbracket / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + ;m_data + ;UpdateDataFALSE;正負(fù)轉(zhuǎn)換功能鍵源程序 void CJiSuanQiDlg:OnAddSub / TODO: Add yo

9、ur control notification handler code hereifcalculated FALSEUpdateDataTRUE;calcutateString calcutateString + 0 + -;m_data + -;UpdateDataFALSE;運(yùn)行結(jié)果界面截圖 制作過(guò)程中所遇問(wèn)題以及解決方法過(guò)程源代碼編寫錯(cuò)誤通過(guò)查閱資料,請(qǐng)教同學(xué),逐步一一解決。成員變量定義錯(cuò)誤例如,編輯框成員變量應(yīng)該定義為String,應(yīng)為編輯框輸入的是一串字符,一開始定義為Float,以為只是簡(jiǎn)單的數(shù)字輸入計(jì)算,發(fā)現(xiàn)錯(cuò)誤后,經(jīng)查閱資料,請(qǐng)教同學(xué),順利解決。出現(xiàn)部分成員函數(shù)、堆棧函數(shù)未定

10、義通過(guò)編譯發(fā)現(xiàn)部分成員變量未定義,通過(guò)在源代碼中添加相應(yīng)代碼依然不能解決,仔細(xì)查閱,發(fā)現(xiàn)是此項(xiàng)成員未在工程中定義,也就是說(shuō)頭文件中沒(méi)有此類成員函數(shù),故而出現(xiàn)錯(cuò)誤,找到問(wèn)題,又經(jīng)過(guò)多次的編譯、改碼、編譯、改碼,最終終于調(diào)試成功。此過(guò)程比較艱辛。工程設(shè)置錯(cuò)誤對(duì)于工程的設(shè)置,這是一個(gè)比較難以發(fā)現(xiàn)問(wèn)題的地方,我不清楚其他同學(xué)是否出現(xiàn)此類問(wèn)題,對(duì)于我來(lái)說(shuō),印象最深刻的是就是常規(guī)設(shè)置項(xiàng)中輸出路徑不能是Debug,而應(yīng)該是Release。個(gè)人能力問(wèn)題這方面的問(wèn)題,應(yīng)該可以提高,不過(guò)暫時(shí)性的在這項(xiàng)工程中暴露了很多,比如,不能實(shí)現(xiàn)計(jì)算器的其他更為復(fù)雜的科學(xué)計(jì)算,該簡(jiǎn)單計(jì)算器必須按照正確的輸入順序進(jìn)行輸入,出現(xiàn)錯(cuò)

11、誤時(shí),計(jì)算器直接不能運(yùn)行,相信以后會(huì)有提高。小結(jié) 經(jīng)過(guò)多番測(cè)試,得出結(jié)論為設(shè)計(jì)的計(jì)算器能夠完成功能描述內(nèi)容中的全部功能。 正所謂“紙上談兵終覺(jué)淺,覺(jué)知此事要躬行?!彼栽诒緦W(xué)期課程設(shè)計(jì)是很及時(shí)、很必要的。這樣不僅能加深我們對(duì)MFC程序設(shè)計(jì)的掌握,而且還及時(shí)、真正的做到了學(xué)以致用。主要是以下幾點(diǎn)。 基本功要過(guò)硬。不能馬虎經(jīng)常犯犯小錯(cuò)誤。提高自己找錯(cuò)糾錯(cuò)能力,通常錯(cuò)誤總是那幾種,多練習(xí)就熟練了。 要善于查找資料提高自己的資料查詢能力,要善于利用網(wǎng)絡(luò)來(lái)獲得知識(shí),獲得幫助。開始著手程序設(shè)計(jì)時(shí),有些功能感覺(jué)無(wú)從下手,都不知道要干什么。這些問(wèn)題只要找到相關(guān)的資料就會(huì)得到提示從而理解所要解決問(wèn)題的大致方向。

12、有了明確的目的,就可以發(fā)揮自己的頭腦來(lái)完成它了。 要善于思考。程序中有些實(shí)現(xiàn)難點(diǎn)和最初完成程序時(shí)免不了的許多不足就需要自己根據(jù)代碼認(rèn)真思考來(lái)解決。只有這樣才能糾正程序的不足并使其更加人性化。二、基于API的簡(jiǎn)單計(jì)算器設(shè)計(jì)思路 打開VC6.0,創(chuàng)建一個(gè)計(jì)數(shù)器工程,進(jìn)入源碼編寫,設(shè)計(jì)計(jì)算器界面,考慮數(shù)字鍵與功能鍵按下的實(shí)現(xiàn)函數(shù),進(jìn)行編程,調(diào)試,運(yùn)行程序。簡(jiǎn)單操作以及功能說(shuō)明 該API計(jì)算器可以實(shí)現(xiàn)四則混合運(yùn)算,并且支持運(yùn)算結(jié)果繼續(xù)用于下次運(yùn)算,還支持一個(gè)單目運(yùn)算符開方,運(yùn)算結(jié)果被gcvt函數(shù)將雙精度結(jié)果轉(zhuǎn)換成字符串,實(shí)現(xiàn)了精度的要求,通過(guò)工程還添加了簡(jiǎn)單的功能菜單。由于本人技術(shù)水平有限,該API計(jì)

13、算器不能實(shí)現(xiàn)輸入窗口顯示完整的輸入字符串,相信通過(guò)以后的努力,能夠?qū)崿F(xiàn)改進(jìn)。系統(tǒng)實(shí)現(xiàn)的各個(gè)模塊 1)頭文件以及主函數(shù)模塊 頭文件模塊定義各種程序中需要使用的頭文件,定義程序中需要使用的數(shù) 字鍵、功能鍵處理函數(shù),申明程序中需要使用的各種變量。主函數(shù)模塊主 要用于初始化窗口函數(shù),布局窗口界面大小。 2)數(shù)字鍵以及功能鍵定義模塊 該模塊定義數(shù)字鍵以及功能鍵的消息處理,包括創(chuàng)建數(shù)字鍵以及功能鍵, 建立數(shù)字鍵以及功能鍵對(duì)于鼠標(biāo)的響應(yīng),并且將響應(yīng)結(jié)果輸出顯示于文本 編輯框中。 3)數(shù)字鍵以及功能鍵處理模塊 該模塊定義兩個(gè)函數(shù)EquResult和NumResut,前者用于處理功能鍵對(duì)于 消息的運(yùn)算處理,后者

14、用于處理數(shù)字鍵的響應(yīng)并用于存儲(chǔ)進(jìn)行計(jì)算。設(shè)計(jì)過(guò)程 1)設(shè)計(jì)總流程 2)界面布局 各模塊源程序 1)數(shù)字鍵以及功能鍵定義模塊 數(shù)字鍵源程序數(shù)字鍵“0”鍵(其余參考“0”鍵)hButtonOptSum0CreateWindowBUTTON, /建立按鈕0 0,WS_CHILD | WS_VISIBLE,12,185, /按鈕位置78,36,/按鈕大小hwnd,HMENU IDB_NUM0,/按鈕句柄hInst,NULL; 功能鍵源程序功能鍵“+”鍵(其余參考“+”鍵)hButtonOptAddCreateWindowBUTTON, /建立按鈕+ +,WS_CHILD | WS_VISIBLE,15

15、6,50,36,36,hwnd,HMENUIDB_OPTADD,hInst,NULL; 2)數(shù)字鍵以及功能鍵處理模塊 數(shù)字鍵處理源程序void NumResultchar *NumData if nOptF0SetWindowTexthEditResult,;nGetWindowTextLengthhEditResult+1;/定義中間緩存n GetWindowTexthEditResult,lpszAddItem,n;/將按下的鍵拷貝 至緩存區(qū) StrcatlpszAddItem,NumData; /字符串加該數(shù)字鍵的字符if strcmplpszOpt,N0strcpylpszResult

16、1,lpszAddItem; SetWindowTexthEditResult,lpszResult1;elsestrcpylpszResult2,lpszAddItem; SetWindowTexthEditResult,lpszResult2; /顯示hEditResult為 lpszResult2nOptF1; /按下了數(shù)字鍵 功能鍵處理源程序void EquResultif strcmplpszOpt,N0 /如果按下了等于號(hào),存儲(chǔ)后留于下次nResult1strtodlpszResult1,&stop;elseswitch*lpszOpt /比較上一次按的操作符后所得的結(jié)果case

17、+:nResult1strtodlpszResult1,&stop;nResult2strtodlpszResult2,&stop;nResult1nResult1+nResult2;break;case -:nResult1strtodlpszResult1,&stop;nResult2strtodlpszResult2,&stop;nResult1nResult1-nResult2;break;case *:nResult1strtodlpszResult1,&stop;nResult2strtodlpszResult2,&stop;nResult1nResult1*nResult2;br

18、eak;case /:nResult1strtodlpszResult1,&stop;nResult2strtodlpszResult2,&stop;if nResult20MessageBoxhWndhWnd,除數(shù)不能為零!,功能,MB_OK; break;nResult1nResult1/nResult2;break;case %:nResult1strtodlpszResult1,&stop;nResult1nResult1/100;break;case S:nResult1strtodlpszResult1,&stop;if nResult10MessageBoxhWndhWnd,負(fù)數(shù)

19、沒(méi)有平方根!,沒(méi)意義,MB_OK; break;nResultsqrt nResult1 ;nResult1nResult;break;nResult1nResult1*1.0;gcvtnResult1,15,lpszResult1;/雙精度轉(zhuǎn)化為字符串 SetWindowTexthEditResult,lpszResult1;nOptF0;bDecfalse; 運(yùn)行結(jié)果界面截圖 , 制作過(guò)程中所遇問(wèn)題以及解決方法過(guò)程 1)界面的設(shè)計(jì) 由于API編程不像MFC那樣按鈕的創(chuàng)建直觀,按鈕的擺放簡(jiǎn)單,API編 程設(shè)置的按鈕大小以及位置都需要通過(guò)參數(shù)進(jìn)行設(shè)置,因此為求把界面整 理得美觀,簡(jiǎn)潔,對(duì)于按鈕

20、位置參數(shù)進(jìn)行了多次設(shè)置,多番努力,終于完 成簡(jiǎn)潔界面的設(shè)置,如上圖給出,給人以端正,美觀的感受。 2)功能鍵的顯示 由于前期考慮不充分,第一次運(yùn)行程序時(shí)發(fā)現(xiàn),當(dāng)按下功能鍵時(shí),界面無(wú) 反應(yīng),這就不容易讓人識(shí)別是否按鍵成功,于是在每個(gè)功能鍵源碼之中添 加如下代碼“SetWindowTexthEditResult,lpszOpt”,在按下功能鍵時(shí)實(shí)時(shí)顯示所按 鍵鈕,給人以直觀操作感受。 3)代碼重復(fù) 由于本人技術(shù)力量不過(guò)硬,導(dǎo)致有些代碼重復(fù),代碼不精簡(jiǎn),但暫時(shí)憑我的能力只 能做到這,相信通過(guò)以后的繼續(xù)努力,能有所改進(jìn)。小結(jié) 通過(guò)這次對(duì)API實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的課程設(shè)計(jì),我明白功夫是練出來(lái)的,也許對(duì)于其他

21、人來(lái)說(shuō)這不算是什么,但對(duì)于我來(lái)說(shuō),我覺(jué)得能做出來(lái)很了不起,這其中需要縝密的思維,仔細(xì)的閱讀,以及持續(xù)不放棄的恒心,遇到錯(cuò)誤,盡己所能查閱書籍,求助同學(xué)老師,去圖書館或者上網(wǎng)查閱資料,當(dāng)程序運(yùn)行的那一刻,心里滿滿的是喜悅以及成就感。 對(duì)于此次總體的MFC以及API課程設(shè)計(jì),讓我意識(shí)到,本身編程技能十分低下,應(yīng)該更加努力的學(xué)習(xí)有關(guān)編程的以及計(jì)算機(jī)的各方面的知識(shí),以期能在未來(lái)的日子里,做到流暢完成各方面的任務(wù),提高自己的能力,做到游刃有余。革命尚未成功,同志仍需努力。MFC源碼:/ JiSuanQiDlg.cpp : implementation file/#include stdafx.h#inc

22、lude JiSuanQi.h#include JiSuanQiDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg;/ Dialog Data/AFX_DATACAboutDlgenum IDD IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtu

23、al function overrides/AFX_VIRTUALCAboutDlgprotected:virtual void DoDataExchangeCDataExchange* pDX; / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSGCAboutDlg/AFX_MSGDECLARE_MESSAGE_MAP;CAboutDlg:CAboutDlg : CDialogCAboutDlg:IDD/AFX_DATA_INITCAboutDlg/AFX_DATA_INITvoid CAboutDlg:DoDataE

24、xchangeCDataExchange* pDXCDialog:DoDataExchangepDX;/AFX_DATA_MAPCAboutDlg/AFX_DATA_MAPBEGIN_MESSAGE_MAPCAboutDlg, CDialog/AFX_MSG_MAPCAboutDlg/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP/ CJiSuanQiDlg dialogCJiSuanQiDlg:CJiSuanQiDlgCWnd* pParent /*NULL*/: CDialogCJiSuanQiDlg:IDD, pParent/AFX_DAT

25、A_INITCJiSuanQiDlgm_data _T;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon AfxGetApp-LoadIconIDR_MAINFRAME;void CJiSuanQiDlg:DoDataExchangeCDataExchange* pDXCDialog:DoDataExchangepDX;/AFX_DATA_MAPCJiSuanQiDlgDDX_TextpDX, IDC_DATA, m_data;/AFX_DATA_MAPBEG

26、IN_MESSAGE_MAPCJiSuanQiDlg, CDialog/AFX_MSG_MAPCJiSuanQiDlgON_WM_SYSCOMMANDON_WM_PAINTON_WM_QUERYDRAGICONON_BN_CLICKEDIDC_ADD_SUB, OnAddSubON_BN_CLICKEDIDC_BACKSPEACE, OnBackspeaceON_BN_CLICKEDIDC_CLEAR, OnClearON_EN_CHANGEIDC_DATA, OnChangeDataON_BN_CLICKEDIDC_EQUAL, OnEqualON_BN_CLICKEDIDC_LBRACKE

27、T, OnLbracketON_BN_CLICKEDIDC_NUM0, OnNum0ON_BN_CLICKEDIDC_NUM1, OnNum1ON_BN_CLICKEDIDC_NUM2, OnNum2ON_BN_CLICKEDIDC_NUM3, OnNum3ON_BN_CLICKEDIDC_NUM4, OnNum4ON_BN_CLICKEDIDC_NUM5, OnNum5ON_BN_CLICKEDIDC_NUM6, OnNum6ON_BN_CLICKEDIDC_NUM7, OnNum7ON_BN_CLICKEDIDC_NUM8, OnNum8ON_BN_CLICKEDIDC_NUM9, OnN

28、um9ON_BN_CLICKEDIDC_OPER_ADD, OnOperAddON_BN_CLICKEDIDC_OPER_DIV, OnOperDivON_BN_CLICKEDIDC_OPER_MULTI, OnOperMultiON_BN_CLICKEDIDC_OPER_SUB, OnOperSubON_BN_CLICKEDIDC_POINT, OnPointON_BN_CLICKEDIDC_RBRACKET, OnRbracketON_BN_CLICKEDIDC_SHUOMING, OnShuoming/AFX_MSG_MAPEND_MESSAGE_MAP/ CJiSuanQiDlg me

29、ssage handlersBOOL CJiSuanQiDlg:OnInitDialogCDialog:OnInitDialog;/ Add About menu item to system menu/ IDM_ABOUTBOX must be in the system command rangeASSERTIDM_ABOUTBOX & 0xFFF0 IDM_ABOUTBOX;ASSERTIDM_ABOUTBOX 0xF000;CMenu* pSysMenu GetSystemMenuFALSE;if pSysMenu ! NULLCString strAboutMenu;strAbout

30、Menu.LoadStringIDS_ABOUTBOX;pSysMenu-AppendMenuMF_SEPARATOR;pSysMenu-AppendMenuMF_STRING, IDM_ABOUTBOX, strAboutMenu;/ Set the icon for this dialogThe framework does this automatically/ when the applications main window is not a dialogSetIconm_hIcon, TRUE;/ Set big iconSetIconm_hIcon, FALSE;/ Set sm

31、all icon/ TODO: Add extra initialization herecalculated FALSE;calcutateString ;oldResult ;return TRUE; / return TRUE unless you set the focus to a controlvoid CJiSuanQiDlg:OnSysCommandUINT nID, LPARAM lParamif nID & 0xFFF0 IDM_ABOUTBOXCAboutDlg dlgAbout;dlgAbout.DoModal;elseCDialog:OnSysCommandnID,

32、lParam;/ If you add a minimize button to your dialog, you will need the code below/ to draw the iconFor MFC applications using the document/view model,/ this is automatically done for you by the framework.void CJiSuanQiDlg:OnPaint if IsIconicCPaintDC dcthis; / device context for paintingSendMessageW

33、M_ICONERASEBKGND, WPARAM dc.GetSafeHdc, 0;/ Center icon in client rectangleint cxIcon GetSystemMetricsSM_CXICON;int cyIcon GetSystemMetricsSM_CYICON;CRect rect;GetClientRect▭int x rect.Width - cxIcon + 1 / 2;int y rect.Height - cyIcon + 1 / 2;/ Draw the icondc.DrawIconx, y, m_hIcon;elseCDialog:

34、OnPaint;/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CJiSuanQiDlg:OnQueryDragIconreturn HCURSOR m_hIcon;void CJiSuanQiDlg:OnAddSub / TODO: Add your control notification handler code hereifcalculated FALSEUpdateDataTRUE;calcutateString cal

35、cutateString + 0 + -;m_data + -;UpdateDataFALSE;void CJiSuanQiDlg:OnClear / TODO: Add your control notification handler code herem_data ;oldResult ;calcutateString ;calculated FALSE;UpdateDataFALSE;void CJiSuanQiDlg:OnLbracket / TODO: Add your control notification handler code hereifcalculated TRUE

36、/已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + ;m_data + ;UpdateDataFALSE;void CJiSuanQiDlg:OnNum0 / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + 0;m_data + 0;UpdateDataFALSE;void CJiSuanQiDlg:OnNum1 / TODO: A

37、dd your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + 1;m_data + 1;UpdateDataFALSE;void CJiSuanQiDlg:OnNum2 / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString

38、 + 2;m_data + 2;UpdateDataFALSE;void CJiSuanQiDlg:OnNum3 / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;m_data + 3;calcutateString + 3;UpdateDataFALSE;void CJiSuanQiDlg:OnNum4 / TODO: Add your control notification handler code hereifcal

39、culated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;m_data + 4;calcutateString + 4;UpdateDataFALSE;void CJiSuanQiDlg:OnNum5 / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + 5;m_data + 5;UpdateDataFALSE;void CJiSuanQiDlg:O

40、nNum6 / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + 6;m_data + 6;UpdateDataFALSE;void CJiSuanQiDlg:OnNum7 / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;

41、calcutateString + 7;m_data + 7;UpdateDataFALSE;void CJiSuanQiDlg:OnNum8 / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + 8;m_data + 8;UpdateDataFALSE;void CJiSuanQiDlg:OnNum9 / TODO: Add your control notification handler

42、 code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + 9;m_data + 9;UpdateDataFALSE;void CJiSuanQiDlg:OnOperAdd / TODO: Add your control notification handler code hereifcalculated TRUE/其前一步按了 號(hào)calculated FALSE;m_data oldResult;double temp atofoldResult;iftemp 0calcutateS

43、tring 0 + oldResult;elsecalcutateString oldResult;calcutateString + +;m_data + +;UpdateDataFALSE;else /前一步不是 UpdateDataTRUE;calcutateString + +;m_data + +;UpdateDataFALSE;void CJiSuanQiDlg:OnOperDiv / TODO: Add your control notification handler code hereifcalculated TRUE/其前一步按了 號(hào)calculated FALSE;m_d

44、ata oldResult; double temp atofoldResult;iftemp 0calcutateString 0 + oldResult;elsecalcutateString oldResult;calcutateString + /;m_data + /;UpdateDataFALSE;else /前一步不是 UpdateDataTRUE;calcutateString + /;m_data + /;UpdateDataFALSE;void CJiSuanQiDlg:OnOperMulti / TODO: Add your control notification ha

45、ndler code hereifcalculated TRUE/其前一步按了 號(hào)calculated FALSE;m_data oldResult;double temp atofoldResult;iftemp 0calcutateString 0 + oldResult;elsecalcutateString oldResult;calcutateString + *;m_data + *;UpdateDataFALSE;else /前一步不是 UpdateDataTRUE;calcutateString + *;m_data + *;UpdateDataFALSE;void CJiSu

46、anQiDlg:OnOperSub / TODO: Add your control notification handler code hereifcalculated TRUE/其前一步按了 號(hào)calculated FALSE;m_data oldResult; double temp atofoldResult;iftemp 0calcutateString 0 + oldResult;elsecalcutateString oldResult;calcutateString + -;m_data + -;UpdateDataFALSE;else /前一步不是 UpdateDataTRU

47、E;calcutateString + -;m_data + -;UpdateDataFALSE;void CJiSuanQiDlg:OnPoint / TODO: Add your control notification handler code hereifcalculated TRUE /已經(jīng)按了等號(hào),不讓其再接受字符return;UpdateDataTRUE;calcutateString + .;m_data + .;UpdateDataFALSE;void CJiSuanQiDlg:OnRbracket / TODO: Add your control notification

48、handler code hereUpdateDataTRUE;calcutateString + ;m_data + ;UpdateDataFALSE;bool CJiSuanQiDlg:InfixToSuffixCString infixExpressionsuffixExpression.clear; /清空stack stackOperators; /存儲(chǔ)操作符的堆棧int length infixExpression.GetLength;ifinfixExpression.Find ! length -1 | infixExpression.Right1 ! /查找輸入的等號(hào)的個(gè)數(shù)和

49、位置是否正確return 0;stackOperators.push#;bool store 0;char bit;CString tempOperand ; /存放數(shù)forint i 0;iinfixExpression.GetLength;i+bit infixExpression.GetAti; /當(dāng)前讀到的字符ifbit 0 & bit 9 | bit . /說(shuō)明正在讀的是數(shù)tempOperand + bit;store 1;else /此位不是數(shù)字位ifstore /防止連著有操作符和括號(hào)時(shí)重存suffixExpression.push_backtempOperand;/存入數(shù)組store 0;tempOperand ;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論