c++面向?qū)ο蟪绦蛟O(shè)計MFC簡單計算器實驗報告_第1頁
c++面向?qū)ο蟪绦蛟O(shè)計MFC簡單計算器實驗報告_第2頁
c++面向?qū)ο蟪绦蛟O(shè)計MFC簡單計算器實驗報告_第3頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機與信息工程學(xué)院程序設(shè)計基礎(chǔ)課程設(shè)計報告題目名稱:60.編寫一個能實現(xiàn)簡單功能的計算器學(xué)生姓名:劉沛東學(xué)生學(xué)號:專業(yè)班級:電子信息工程(1)班指導(dǎo)教師:高攀1課程設(shè)計的題目編寫一個能實現(xiàn)簡單功能的計算器2題目要求1. 有一個計算器圖形。2. 能實現(xiàn)加、減、乘、除及乘方的運算。3. 當(dāng)輸入題目時,屏幕上要在指定位置上顯示出相應(yīng)的題目內(nèi)容,且相應(yīng)的數(shù) 字鍵要改變顏色例如:輸入數(shù)字1時,在計算器圖形上的1鍵變?yōu)榧t色。4. 屏幕、圖形顏色、形狀自定3總體設(shè)計3.1總體框架加法單調(diào)的圖1系統(tǒng)框架3.2 系統(tǒng)功能說明在VC+6.0中繪制計算器界面,各控件的設(shè)置對09控件設(shè)定相應(yīng)的ID和其他屬性:圖2

2、“1 ”控件設(shè)置對“ +、-、*、 ”控件設(shè)定相應(yīng)的ID和其他屬性:圖2“ +”控件設(shè)置對其它控件設(shè)定相應(yīng)的ID和其他屬性:圖3其它控件設(shè)置主要使用到Layout菜單中的Align功能對各個按鈕進行對其,使界面更加整潔。 拖出的控件有上面的一個 Edit控件用于顯示數(shù)字,Butt on控件用于處理鼠標(biāo)的 消息。4程序詳細設(shè)計4.1系統(tǒng)主調(diào)模塊圖5程序流程圖4.2各模塊詳細設(shè)計 421建立的變量,控件的命名,對應(yīng)的消息處理函數(shù)對應(yīng)表IDCAPTIONMessage Han dlerIDD CALC DIALOG簡易計算器N/AIDC NUM00OnNumOIDC NUM11On Num1IDC

3、NUM22OnNum2IDC NUM33On Num3IDC NUM44OnNum4IDC NUM55OnNum5IDC NUM66On Num6IDC NUM77OnNum7IDC NUM88On Num8IDC NUM99OnNum9IDC NEG+/-OnNegIDC PTOn PtIDC DIV/On DivIDC MUL*On MulIDC MIN-On MinIDC ADD+On AddIDC BACKSPACEBACKOnBackspaceIDC CECEOnCeIDC CLEARCOn ClearIDC EQU=On EquIDC DISN/AN/AOn Cal(double

4、num)變量定義:double poz; 保存小數(shù)點的位置,初始化為1,表示poz-1個小數(shù)點。double m_Dis; /Edit控件上需要顯示的數(shù)字BOOL poin t_flag; 小數(shù)點表示位,判定是否是小數(shù),是小數(shù)為1,不是小數(shù)為0。double numfirst; 保存計算過程中的前一個數(shù)字,double numseco nd;/保存計算過程中的第二個數(shù)字char op;/記錄當(dāng)前的計算符號,可以為+'-',; ' *' , ' /' , ' =' , ' c' , ' n' 變量初始

5、化:poz=1;m_Dis = 0.0;nu mfirst=0;nu msec on d=0;op=0;442設(shè)計思路a) 首先考慮對所有按鍵分為兩類,數(shù)字類和符號類,0,1,2,3,4,5,6,7,8,9為數(shù)字類,+,-,*,/,=為符號類。數(shù)字在計算的過程中最多需要保存兩個,所以定義了兩個double型變量numfirst和numsecond來進行存儲。符號需要一個 char op來存儲。b) 然后考慮在計算的過程中,numfirst和numsecond的存儲狀態(tài)有三種,一種是numfirst=0 && numseco nd=0也就是程序剛開始運行還沒有開始錄入數(shù)字的狀態(tài)。

6、二種是numfirst!=0 && numsecond=0 也就是第一個數(shù)字已經(jīng)錄入,符號也已經(jīng)錄入時候把m_Dis的值直接賦值給 numfirst,第三種是 numfirst!=0 &&numsecond!=0 ,表示可以 通過op來把兩數(shù)合并為一個數(shù)。c) 考慮到該計算器支持連續(xù)的計算,比如3.33+1.33*88/96= ?。所以必須在點符號Button也要計算岀之前的結(jié)果,通過判斷op,來計算,把兩個數(shù)字合并為一個數(shù)字,方便下一次運算,功能近似于點=,所以把=也劃分到符號類。d) 因為數(shù)字全部使用的是double,鍵入的數(shù)字必須通過一定的處理達到累加的效

7、果,加上小數(shù)和整數(shù)的處理差異性大,所以分別用point_flag來判斷,分別岀來小數(shù)和整數(shù)。成員函數(shù)及其釋義因為對OnNum0()到OnNum9()的處理函數(shù)差異僅在一個數(shù)字上,可以通過調(diào)用一個共 同的函數(shù)OnCal(double num)來簡化源代碼長度,增加模塊性。void CCalcDlg:OnCal( double num)/分三種狀態(tài)來處理if (numfirst!=0 && numsecond!=0)if (point_flag=TRUE)/判定為小數(shù)poz*=0.1; / 小數(shù)進位m_Dis=m_Dis+poz*num; 遞增UpdateData( false )

8、; /把結(jié)果從內(nèi)存?zhèn)鬟f到屏幕elsem_Dis=m_Dis*10+num; UpdateData( false );if (numfirst!=0 && numsecond=0)if (point_flag=TRUE)poz*=0.1;m_Dis=m_Dis+poz*num; UpdateData( false );else /判定為整數(shù)m_Dis=m_Dis*10+num;/ 遞增 UpdateData( false );if (numfirst=0 && numsecond=0)if (point_flag=TRUE)poz*=0.1;m_Dis=m_Dis

9、+poz*num;UpdateData( false );elsem_Dis=m_Dis*10+num; UpdateData( false );424以O(shè)nAdd()為例子講解符號的處理函數(shù),函數(shù)的功能是先判定之前按下字符時op的值,更具op的值來進行相應(yīng)的運算。void CCalcDlg:OnAdd()/根據(jù)numfirst和numsecond和op的值分為5種狀態(tài)。if (numfirst!=0 && numsecond=0&&op= '+')numsecond=m_Dis;numfirst=numfirst+numsecond; /之前按

10、的是加把兩個數(shù)賦值到前一個數(shù)m_Dis=numfirst;賦值給屏幕numsecond=0; /從新賦值為0,清空,不影響下一次判斷UpdateData(FALSE);m_Dis=0; /屏幕的值同時清空if (numfirst!=0 && numsecond=0&&op= '-')numsecond=m_Dis;numfirst=numfirst-numsecond;m_Dis=numfirst;numsecond=0;UpdateData(FALSE);m_Dis=0;if (numfirst!=0 && numsecond=

11、0&&op= '*')numsecond=m_Dis;numfirst=numfirst*numsecond;m_Dis=numfirst;numsecond=0;UpdateData(FALSE);m_Dis=0;if (numfirst!=0 && numsecond=0&&op= '/')numsecond=m_Dis;numfirst=numfirst/numsecond;m_Dis=numfirst;numsecond=0;UpdateData(FALSE);m_Dis=0;if (numfirst=0

12、&& numsecond=0) /該狀態(tài)為程序啟動還沒有開始錄入輸入的狀態(tài)numfirst=m_Dis; /屏幕的值賦值到 numfirstUpdateData(FALSE);m_Dis=0;op='+' ; / 最后記錄最后一個操作是+poz=1;小數(shù)點位置歸位point_flag=FALSE;默認(rèn)小數(shù)點標(biāo)志為整數(shù),也就是 0,也就是FALSE“ +/按鈕的處理函數(shù)void CCalcDlg:OnNeg()m_Dis=-m_Dis;/換個符號,其他都一樣UpdateData(FALSE);poz=1;point_flag=FALSE;'.'按鈕

13、的處理函數(shù)void CCalcDlg:OnPt()point_flag=TRUE; / 把標(biāo)志位改為"小數(shù)點”狀態(tài)“ Backspace ”按鈕的處理void CCalcDlg:OnBackspace()/主要通過_gcvt()和strtod()函數(shù)進行字符串和浮點數(shù)之間的轉(zhuǎn)換char buffer30; / 定義個裝字符的數(shù)組_gcvt(m_Dis, sizeof (m_Dis),buffer); /把m_Dis存的數(shù)字轉(zhuǎn)換為 stringfor (int_i=0;i<30;i+)-if (bufferi= '.' && bufferi+1=0

14、 )/ 判斷是否為整數(shù)point_flag=FALSE; /標(biāo)志位設(shè)置為"整數(shù)位” break ;if (point_flag=TRUE) / 如果是小數(shù)for (int j=0;j<30;j+)if (bufferj=0) bufferj-1=0; /把'0之前的字符賦值為0 ',就相當(dāng)于剪掉最后一位break;else /如果是整數(shù)bufferi-1=0; / 剪掉'.'之前那位m_Dis=strtod(buffer,NULL); 再用 strtod 弄成浮點數(shù) UpdateData(FALSE);poz=1;'CE'按鈕處理

15、函數(shù)void CCalcDlg:OnCe()if (numfirst!=0 && numsecond=0)/CE只能修改第二個數(shù)字m_Dis=0; /把屏幕的值賦值為0UpdateData(FALSE);/ 并顯示出來'C'按鈕處理函數(shù)void CCalcDlg:OnClear()op=NULL; /清空符號numfirst=0;/清空第一個數(shù)字numsecond=0;/清空第二個數(shù)字point_flag=FALSE;/ 改為默認(rèn)整數(shù)位poz=1;小數(shù)點歸位m_Dis=0;UpdateData(FALSE); / 屏幕顯示歸 0鍵盤響應(yīng):void CCalcDl

16、g:O nKeyDow n( UINT n Char, UINT nRepC nt, UINT n Flags) switch( nChar)case VK_NUMPAD0:On NumO();break;case VK_NUMPAD1:On Num1();break;case VK_NUMPAD2:On Num2();break;case VK_NUMPAD3:On Num3();break;case VK_NUMPAD4:On Num4();break;case VK_NUMPAD5:On Num5();break;case VK_NUMPAD6:On Num6();break;case

17、VK_NUMPAD7:On Num7();break;case VK_NUMPAD8:On Num8();break;case VK_NUMPAD9:On Num9();break;case VK_ADD:OnAdd();break;case VK_SUBTRACT:OnMi n( );break;case VK_MULTIPLY:OnMul();break;case VK_DIVIDE:OnDiv();break;case VK_BACK:OnBackspace();break;case VK_DECIMAL:On Pt();break;case VK_DELETE: OnBackspace

18、();break;case VK_RETURN: OnEqu();break;CDialog:O nKeyDow n(n Char, nRepC nt, nF lags);BOOL CCalcDlg:PreTra nslateMessage(MSG* pMsg)Sen dMessage(pMsg->message,pMsg->wParam,pMsg->lParam); return CDialog:PreTra nslateMessage(pMsg);5程序運行結(jié)果6課程設(shè)計總結(jié)通過這次課程設(shè)計,我又收獲到很多,平時的在做作業(yè)時,因為題 形與結(jié)構(gòu)都是很簡單的,并且每一章的內(nèi)容都是有相應(yīng)的例題可以參 考,所以在做題時沒有遇到過很麻煩的問題,而這次不同了,一個課題 拿到手時,給我的感覺是無從下手,而且要求很多,使得題目要求更大 了。我將整個程序分塊完成的將整個大的程序的實現(xiàn)分8個功能,每 個功能都通過一個相應(yīng)的函數(shù)來實現(xiàn).在調(diào)試時

溫馨提示

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

評論

0/150

提交評論