基于MFC編程的計(jì)算器開(kāi)發(fā)與實(shí)現(xiàn)_第1頁(yè)
基于MFC編程的計(jì)算器開(kāi)發(fā)與實(shí)現(xiàn)_第2頁(yè)
基于MFC編程的計(jì)算器開(kāi)發(fā)與實(shí)現(xiàn)_第3頁(yè)
基于MFC編程的計(jì)算器開(kāi)發(fā)與實(shí)現(xiàn)_第4頁(yè)
基于MFC編程的計(jì)算器開(kāi)發(fā)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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、提供全套,各專業(yè)畢業(yè)設(shè)計(jì) PINGDINGSHAN UNIVERSITY 實(shí)訓(xùn)論文(設(shè)計(jì)) 題 目: 基于MFC編程的計(jì)算器 開(kāi)發(fā)與實(shí)現(xiàn) 院(系): 軟件學(xué)院 專業(yè)年級(jí): 13級(jí)網(wǎng)絡(luò)工程師 姓 名: 姚龍龍 學(xué) 號(hào): 指導(dǎo)教師: 徐向藝 2014年 11月 2 日基于MFC編程的計(jì)算器開(kāi)發(fā)與實(shí)現(xiàn)摘 要關(guān)鍵詞:Vc+6.0 MFC 代碼編輯器 結(jié)構(gòu)功能圖 程序流程圖 類向?qū)?目 錄(采用系統(tǒng)自動(dòng)生成目錄)1 緒論11.1 項(xiàng)目設(shè)計(jì)的目的11.2 項(xiàng)目設(shè)計(jì)的意義11.3 項(xiàng)目的主要內(nèi)容和基本結(jié)構(gòu)11.4 本章小結(jié)12 工具及核心功能介紹22.1 開(kāi)發(fā)工具2 2.1. 1 Visual C+的概述2

2、 2.1.2 Visual C+的特點(diǎn)2 2.1.3 項(xiàng)目和項(xiàng)目工作區(qū)2 2.1.4 代碼編輯器22.2 項(xiàng)目結(jié)構(gòu)和程序流程22.2.1 結(jié)構(gòu)功能圖32.2.2 程序流程圖32.3 核心模塊功能實(shí)現(xiàn)4 2.3.1 四則運(yùn)算模塊實(shí)現(xiàn)4 2.3.2 特殊運(yùn)算模塊實(shí)現(xiàn)5 2.3.3 刪除整個(gè)字符串模塊實(shí)現(xiàn)63 系統(tǒng)運(yùn)行環(huán)境及截圖73.1 窗口數(shù)字和元素按鈕的類向?qū)Ы?3.2按鈕響應(yīng)函數(shù)73.3運(yùn)行函數(shù)10附 錄10心 得16參考文獻(xiàn)161 緒論1.1 項(xiàng)目設(shè)計(jì)的目的 1、鞏固并加深學(xué)生對(duì)C+語(yǔ)言程序設(shè)計(jì)知識(shí)的理解;2、培養(yǎng)學(xué)生面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,使學(xué)生認(rèn)識(shí)面向過(guò)程和面向?qū)ο髢煞N設(shè)計(jì)方法的區(qū)別;

3、3、靈活應(yīng)用類庫(kù)模式下編寫程序的技巧。4、能夠熟練掌握MFC中的各個(gè)控件,消息的添加和處理,能夠獨(dú)立完成一些簡(jiǎn)單的算法,并且能夠具體實(shí)現(xiàn)一些功能。 5、掌握書寫程序設(shè)計(jì)開(kāi)發(fā)文檔的能力。 6、掌握將具體問(wèn)題抽象為類與對(duì)象的方法。 1.2 項(xiàng)目設(shè)計(jì)的意義 通過(guò)這次實(shí)訓(xùn)使我們掌握基本軟件開(kāi)發(fā)的能力,增強(qiáng)對(duì)相關(guān)專業(yè)知識(shí)的感性認(rèn)識(shí),提高應(yīng)用所學(xué)知識(shí)在實(shí)踐中發(fā)現(xiàn)問(wèn)題,分析問(wèn)題,解決問(wèn)題的能力。1.3 項(xiàng)目的主要內(nèi)容和基本結(jié)構(gòu)課題名稱:計(jì)算器的實(shí)現(xiàn)說(shuō)明:利用MFC實(shí)現(xiàn)一個(gè)計(jì)算器基本的功能,能執(zhí)行簡(jiǎn)單的運(yùn)算。要求: (1)用“計(jì)算器”的標(biāo)準(zhǔn)視圖執(zhí)行簡(jiǎn)單的計(jì)算?;窘Y(jié)構(gòu):(1)組成:簡(jiǎn)易計(jì)算器由編輯框,數(shù)字按鈕

4、,功能按鈕組成。1.4 本章小結(jié)在前面已經(jīng)基本明確了本課程報(bào)告制作的目的,要求,以及簡(jiǎn)易計(jì)算器的功能,外形的要求,為后期的制作,明確了努力方向。2 工具及核心功能介紹2.1 開(kāi)發(fā)工具2.1.1 Visual C+的概述 Microsoft Visual C+是Microsoft公司推出的開(kāi)發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作、可開(kāi)發(fā)多種程序等優(yōu)點(diǎn),而且通過(guò)簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫(kù)接口、OLE2,WinSock網(wǎng)絡(luò)、3D控制界面。它以擁有“語(yǔ)法高亮”,IntelliSense(自動(dòng)完成功

5、能)以及高級(jí)除錯(cuò)功能而著稱。比如,它允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加連結(jié)著稱。這些特征明顯縮短程式編輯、編譯及連結(jié)花費(fèi)的時(shí)間,在大型軟件計(jì)劃上尤其顯著。2.1.2 Visual C+的特點(diǎn) (1)VC+6.0作為一個(gè)主流的開(kāi)發(fā)平臺(tái)一直深受編程愛(ài)好者的喜愛(ài),是當(dāng)下主流的Windows平臺(tái)上的編程環(huán)境。(2)VC+6.0必須具備良好的C/C+的基礎(chǔ),必要的英語(yǔ)閱讀能力也是必不可少的,因?yàn)榇罅康募夹g(shù)文檔多以英文形式發(fā)布。2.1.3 項(xiàng)目和項(xiàng)目工作區(qū) (1)項(xiàng)目截圖 (2)項(xiàng)目

6、工作區(qū) Visual C+ 6.0有自己的項(xiàng)目工作管理區(qū),方便用戶在進(jìn)行項(xiàng)目開(kāi)發(fā)時(shí)的對(duì)項(xiàng)目的管理和操作。項(xiàng)目管理區(qū)提供三種視圖供用戶選擇,分別是Class view,Resource view ,和File view。在實(shí)際的操作中給用戶提供了很大的方便。2.1.4 代碼編輯器V C+6.0的代碼編輯器使用起來(lái)也是十分的方便。用戶可以同時(shí)打開(kāi)多個(gè)文檔,這適用于用戶在進(jìn)行多文件操作,可以對(duì)多個(gè)文件內(nèi)的代碼進(jìn)行編輯。當(dāng)然用戶也可以最大化當(dāng)前正在瀏覽的文件,這樣只能對(duì)當(dāng)前文件內(nèi)的代碼進(jìn)行編輯操作。2.2 項(xiàng)目結(jié)構(gòu)和程序流圖2.2.1 結(jié)構(gòu)功能圖 序號(hào)文件名主要功能備注1+加法求和兩個(gè)操作數(shù)2-減法求

7、差兩個(gè)操作數(shù)3*乘法求積兩個(gè)操作數(shù)4/除法求商兩個(gè)操作數(shù)5%求模兩個(gè)操作數(shù)6Sqrt求平方根一個(gè)操作數(shù)71/x求導(dǎo)數(shù) 一個(gè)操作數(shù) 8 Back退格一個(gè)操作數(shù) 9 +/-轉(zhuǎn)換正負(fù) 一個(gè)操作數(shù) 10C/CE寄存器清零 11 = 等于 開(kāi)始2.2.2 程序流程圖輸入操作數(shù) 選擇功能鍵 開(kāi)方,求倒,求百分清零加,減,乘,除運(yùn)算運(yùn)算結(jié)果 2.3 核心模塊功能實(shí)現(xiàn)2.3.1 四則運(yùn)算模塊實(shí)現(xiàn)1. 加法void CCalcDlg:OnBnClickedAdd()if (!b_Start) return; if (en_LastSignl=en_none) en_LastSignl=en_add; RunOp

8、eration(en_LastSignl); en_LastSignl=en_add;2. 減法void CCalcDlg:OnBnClickedAdd()if (!b_Start) return; if (en_LastSignl=en_none) en_LastSignl=en_add; RunOperation(en_LastSignl); en_LastSignl=en_add;3. 乘法void CCalcDlg:OnBnClickedMul()if (!b_Start) return; if (en_LastSignl=en_none) cs_Num1=1; en_LastSign

9、l=en_mul; RunOperation(en_LastSignl); en_LastSignl=en_mul;4. 除法void CCalcDlg:OnBnClickedDivide()if (!b_Start) return; if (en_LastSignl=en_none) cs_Num1=1; en_LastSignl=en_div; RunOperation(en_LastSignl); en_LastSignl=en_div;2.3.2 特殊運(yùn)算模塊void CCalcDlg:RunOperation(eum_signl e_signl) double sum=0;doubl

10、e nAdd1; double nAdd2; nAdd1=atof(cs_Num0); nAdd2=atof(cs_Num1); switch(e_signl) case en_add: sum=nAdd1+nAdd2; break; case en_sub: sum=nAdd1-nAdd2; break; case en_mul: sum=nAdd1*nAdd2; break; case en_div: sum=nAdd1/nAdd2; break;case en_none:sum=nAdd1;break; cs_Num0.Format(%.3lf,sum); SetDlgItemText(

11、IDC_EDIT_SHOW,cs_Num0); if (!b_Hasport & -1=cs_Num0.Find(.) CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp); m_i = 1; b_Hasport=FALSE; b_Start=FALSE; cs_Numm_i=0;void CCalcDlg:PutIntoNum(int n) CString tem_i; tem_i.Format(%d,n); CString temp; if (!b_Star

12、t) cs_Numm_i=tem_i; b_Start=TRUE; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp); return; cs_Numm_i+=tem_i; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.;

13、SetDlgItemText(IDC_EDIT_SHOW,temp); 2.3.3 刪除整個(gè)字符串模塊實(shí)現(xiàn)void CCalcDlg:InitAllDate() en_LastSignl=en_none; b_Hasport=FALSE; b_Start=FALSE; b_Hasmul=FALSE; b_Hasdiv=FALSE; cs_Num0=0; cs_Num1=0; m_i=0; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i+.); 3 系統(tǒng)運(yùn)行環(huán)境及截圖3.1 窗口數(shù)字和元素按鈕類向?qū)У慕?.1.1 窗口數(shù)字 在窗口輸入數(shù)字后,編輯框內(nèi)會(huì)顯示操作者輸

14、入的操作數(shù),即可實(shí)現(xiàn)基本的算數(shù)要求。3.1.2 元素按鈕的類向?qū)Ы?1)元素按鈕建立在中Controls的“Button”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出Push Button屬性對(duì)話框,在該對(duì)話框中輸入控件的ID值和標(biāo)題屬性,如下圖所示。按照上面的操作過(guò)程編輯其他按鈕和編輯框等對(duì)象的屬性。表3-1各按鈕和編輯框等對(duì)象的屬性對(duì)象ID標(biāo)題或說(shuō)明編輯框IDC_EDIT1結(jié)果顯示按鈕IDC_BUTTON00按鈕IDC_BUTTON11按鈕IDC_BUTTON22按鈕IDC

15、_BUTTON33按鈕IDC_BUTTON44按鈕IDC_BUTTON55按鈕IDC_BUTTON66按鈕IDC_BUTTON77按鈕IDC_BUTTON88按鈕IDC_BUTTON99按鈕IDC_zhengfuhao+/-按鈕IDC_BUTTONPoint.按鈕IDC_BTN_ADD+按鈕IDC_BTN_SUB-按鈕IDC_BTN_MUL*按鈕IDC_BTN_DIV/按鈕IDC_Sqrtsqrt按鈕IDC_daoshu1/x按鈕IDC_equal=按鈕IDC_BackBackspace按鈕IDC_CECE按鈕IDC_CC完成后界面如下圖所示: 2) 元素類向?qū)У慕ⅲ?在中Controls的

16、“Button”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出Push Button類向?qū)?duì)話框,在該對(duì)話框中設(shè)置單擊函數(shù),如下圖所示: 依次將每個(gè)按鈕按照上面的方法創(chuàng)建類向?qū)?,建立單擊函?shù)即可。3.2 按鈕響應(yīng)函數(shù) 控件消息函數(shù)功能IDC_zhengfuhaoBN_CLICKED處理正負(fù)號(hào)單擊按鈕IDC_BUTTONPointBN_CLICKED處理小數(shù)點(diǎn)單擊按鈕IDC_equalBN_CLICKED處理等于單擊按鈕IDC_daoshuBN_CLICKED處理倒數(shù)單擊按鈕IDC_

17、baifenbiBN_CLICKED處理百分比單擊按鈕IDC_SqrtBN_CLICKED處理開(kāi)平方單擊按鈕IDC_BTN_ADDBN_CLICKED處理加號(hào)單擊按鈕IDC_BTN_SUBBN_CLICKED處理減號(hào)單擊按鈕IDC_BTN_MULBN_CLICKED處理乘號(hào)單擊按鈕IDC_BTN_DIVBN_CLICKED處理除號(hào)單擊按鈕IDC_BackBN_CLICKED處理退格鍵單擊按鈕IDC_CEBN_CLICKED處理清零單擊按鈕IDC_CBN_CLICKED處理歸零單擊按鈕3.3 運(yùn)行函數(shù) virtual BOOL OnInitDialog();afx_msg void OnSysC

18、ommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButton5();afx_msg void OnButton7();afx_msg void Onzhengfuhao();afx_msg void OnBUTTONPoint();afx_msg void OnButton1();afx_msg void OnButton0();afx_msg void OnButton2();afx_msg void OnButton3();afx_

19、msg void OnBack();afx_msg void Onbaifenbi();afx_msg void OnButton4();afx_msg void OnButton6();afx_msg void OnButton8();afx_msg void OnButton9();afx_msg void OnC();afx_msg void OnCe();afx_msg void Ondaoshu();afx_msg void Onequal();afx_msg void OnSqrt();afx_msg void OnBtnDiv();afx_msg void OnBtnMul();

20、afx_msg void OnBtnSub();afx_msg void OnBtnAdd();附 錄計(jì)算器所在類的核心代碼:void CJisuan3Dlg:OnButton5() / TODO: Add your control notification handler code herePutIntoNum(5);void CJisuan3Dlg:OnButton7() / TODO: Add your control notification handler code herePutIntoNum(7);/-+void CJisuan3Dlg:Onzhengfuhao() / TODO

21、: Add your control notification handler code here if (!b_Start) return; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=0-num;temp.Format(%lf,num); SetDlgItemText(IDC_EDIT_SHOW ,temp);cs_Numm_i=temp;void CJisuan3Dlg:OnBUTTONPoint() / TODO: Add your control notification handler

22、code here /已有小數(shù)點(diǎn)時(shí) if (b_Hasport) return; /無(wú)小數(shù)點(diǎn) cs_Numm_i+=.; b_Hasport=TRUE; b_Start=TRUE; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i);void CJisuan3Dlg:OnButton1() / TODO: Add your control notification handler code herePutIntoNum(1);void CJisuan3Dlg:OnButton0() / TODO: Add your control notification hand

23、ler code hereif(cs_Numm_i=0) return ;cs_Numm_i+=0; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i);if(!b_Hasport)CString temp;GetDlgItemText(IDC_EDIT_SHOW,temp);temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp);void CJisuan3Dlg:OnButton2() / TODO: Add your control notification handler code herePutIntoNum(2);void

24、CJisuan3Dlg:OnButton3() / TODO: Add your control notification handler code herePutIntoNum(3);/ 退格鍵void CJisuan3Dlg:OnBack() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; int len; CHAR temp_ch32; GetDlgItemText(IDC_EDIT_SHOW,temp); /AfxMessageB

25、ox(temp); num=atof(temp); sprintf(temp_ch,%g,num); num=0; /AfxMessageBox(temp_ch); len=strlen(temp_ch); int te_i=len-1; if(temp_chte_i=.) te_i-=1,b_Hasport=FALSE; temp_chte_i=0; / /AfxMessageBox(temp_ch); if (strlen(temp_ch)=0) temp_ch0=0; temp_ch1=0; / sscanf(temp_ch,%lf,&num); temp.Format(%g,num);

26、 /AfxMessageBox(temp); SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+.); cs_Numm_i=temp;/ %void CJisuan3Dlg:Onbaifenbi() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num/=100; temp.Format

27、(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp);void CJisuan3Dlg:OnButton4() / TODO: Add your control notification handler code herePutIntoNum(4);void CJisuan3Dlg:OnButton6() / TODO: Add your control notification handler code herePutIntoN

28、um(6);void CJisuan3Dlg:OnButton8() / TODO: Add your control notification handler code herePutIntoNum(8);void CJisuan3Dlg:OnButton9() / TODO: Add your control notification handler code herePutIntoNum(9);void CJisuan3Dlg:OnC() / TODO: Add your control notification handler code hereInitAllDate();void C

29、Jisuan3Dlg:OnCe() / TODO: Add your control notification handler code here InitAllDate();/ 1/xvoid CJisuan3Dlg:Ondaoshu() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=1/num; temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDl

溫馨提示

  • 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)論