計算器程序設(shè)計C++_第1頁
計算器程序設(shè)計C++_第2頁
計算器程序設(shè)計C++_第3頁
計算器程序設(shè)計C++_第4頁
計算器程序設(shè)計C++_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C+程序設(shè)計(MFC)課程設(shè)計報告設(shè)計題目:簡易計算器班 級:姓 名:學(xué) 號:指導(dǎo)教師:時 間:2010年6月30日目 錄1.設(shè)計目標(biāo)2.設(shè)計內(nèi)容3.設(shè)計思想4.設(shè)計說明5.設(shè)計步驟6.主要成員函數(shù)關(guān)系圖7.程序主要代碼8.難點分析9.總結(jié)簡易計算器(MFC)1設(shè)計目標(biāo)了解Windows應(yīng)用程序的結(jié)構(gòu)與DOS程序的不同,掌握應(yīng)用MFC類庫編寫Windows應(yīng)用程序的基本模式。2設(shè)計內(nèi)容以簡易計算器為例,通過對簡單應(yīng)用軟件計算器的設(shè)計,編制、調(diào)試,實現(xiàn)簡單的加,減,乘,除等運算,以學(xué)習(xí)應(yīng)用MFC庫類編寫對話框的原理,加深對C+類的學(xué)習(xí)及應(yīng)用。3. 設(shè)計思想基于MFC庫類對對話框界面的設(shè)計,通過創(chuàng)

2、建類成員函數(shù)成員變量,編輯控件創(chuàng)建消息映射,調(diào)用消息函數(shù)完成數(shù)據(jù)的輸入輸出,實現(xiàn)計算功能。生成簡單的應(yīng)用軟件。4.設(shè)計說明(1)包含的功能有:加、減、乘、除運算,開方、平方等功能。(2)計算器上數(shù)字09為一個控件數(shù)組,加、減、乘、除為一個控件數(shù)組,其余為單一的控件。(3)輸入的原始數(shù)據(jù)、運算中間數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個標(biāo)簽中。(4)計算功能基本上是用系統(tǒng)內(nèi)部函數(shù)。(5)程序可以能自動判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個小數(shù)點、以0開頭等不正?,F(xiàn)象。(6)“CE”按鈕可以清除所有已輸入的數(shù)據(jù)從頭計算5.設(shè)計步驟(1)選擇FileNewlProject命令,選擇MFC AppWiza

3、rd(exe)創(chuàng)建Project名為Caa,按確定。在彈出界面選擇創(chuàng)建對話框,單擊Finish按鈕(2)在生成的設(shè)計界面中加入控件,得到計算器應(yīng)用界面。如圖:(3)為控件編輯框編輯ID,如圖:按鈕名稱ID用途0IDC_0按鍵01IDC_1按鍵12IDC_2按鍵23IDC_3按鍵34IDC_4按鍵45IDC_5按鍵56IDC_6按鍵67IDC_7按鍵78IDC_8按鍵89IDC_9按鍵9.IDC_dian按鍵.+/-IDC_zhengfu正負(fù)+IDC_jia加-IDC_jian減*IDC_cheng乘/IDC_chu除CEIDC_qinglin清零sqrtIDC_sqrt開方x*xIDC_pin

4、gfang平方=IDC_dengyu等于編輯框IDC_E1顯示數(shù)據(jù)輸入輸出(4)進(jìn)入ClassWizard界面選擇Message Maps為控件插入消息映射,插入消息函數(shù),實現(xiàn)控件命令功能。如圖:(5) 進(jìn)入ClassWizard界面Message Varibles為編輯框添加成員變量m_result用以顯示結(jié)果。如圖:(6)在CaaDlg.h中加入在主要成員函數(shù)和成員變量的申明在CaaDlg.cpp中加入主要成員函數(shù)實現(xiàn)過程和成員變量的初始化(代碼片段將于后面介紹)。6.主要成員函數(shù)關(guān)系圖按鈕09.函數(shù)如: On0( ).On1( ).On2( ).處理數(shù)字輸入OnOperandInput(

5、 )計算Calculate( )顯示輸出UpdateDisplay( )按 鈕 + - * / . +/- CE = 函數(shù)如:Onjia( ). Onjian( ).Oncheng( ) .按 鈕 sqrt x*x 函數(shù):Onsqrt( ).Onpingfang( )7. 程序主要代碼/在頭文件中手動添加成員函數(shù)與變量聲明/ caaDlg.h : header file/定義兩個euum型結(jié)構(gòu)enum Operator OpNone, OpAdd, OpSubtract, OpMultiply, OpDivide ;enum CalcError ErrNone, ErrDivideByZero

6、 ;float m_operand; /存儲當(dāng)前輸入的操作數(shù)float m_accum; /存儲當(dāng)前的計算處理結(jié)束BOOL m_bCoff; /標(biāo)識當(dāng)前輸入是否是小數(shù)float m_coff; /小數(shù)輸入時的系數(shù)Operator m_operator; /enum型變量用以標(biāo)識當(dāng)前運算符CalcError m_errorState; /enum型變量用以標(biāo)識當(dāng)前運算狀態(tài)BOOL m_bOperandAvail; /標(biāo)識當(dāng)前輸入是否是新輸入數(shù)字void UpdateDisplay(); /處理顯示void Calculate(); /處理計算void OnOperandInput(int a);

7、 /處理數(shù)字輸入/在執(zhí)行文件中添加成員函數(shù)實現(xiàn)部分與變量初始/ caaDlg.cpp : implementation file /以下是對聲明變量進(jìn)行初始CCaaDlg:CCaaDlg(CWnd* pParent /*=NULL*/): CDialog(CCaaDlg:IDD, pParent)/AFX_DATA_INIT(CCaaDlg)m_result = _T(""); /默認(rèn)為m_result變量初始/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win

8、32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_coff=0.1; /為變量進(jìn)行初始m_bCoff=0; /為變量進(jìn)行初始m_errorState = ErrNone; /為變量進(jìn)行初始m_bOperandAvail=FALSE; /為變量進(jìn)行初始m_operator=OpNone; /為變量進(jìn)行初始/以下是消息處理函數(shù),用以響應(yīng)消息映射void CCaaDlg:On0() /處理“0”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(0);

9、void CCaaDlg:On1() /處理“1”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(1);void CCaaDlg:On2() /處理“2”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(2);void CCaaDlg:On3() /處理“3”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(3);

10、void CCaaDlg:On4() /處理“4”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(4);void CCaaDlg:On5() /處理“5”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(5);void CCaaDlg:On6() /處理“6”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(6);

11、void CCaaDlg:On7() /處理“7”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(7);void CCaaDlg:On8() /處理“8”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(8);void CCaaDlg:On9() /處理“9”按鈕/ TODO: Add your control notification handler code hereOnOperandInput(9);

12、void CCaaDlg:Oncheng() /處理“ *”按鈕/ TODO: Add your control notification handler code hereCalculate();m_operator = OpMultiply;void CCaaDlg:Onchu() /處理“ /”按鈕/ TODO: Add your control notification handler code hereCalculate();m_operator = OpDivide;void CCaaDlg:Ondengyu() /處理“ =”按鈕/ TODO: Add your control

13、notification handler code hereCalculate();m_operator = OpNone;void CCaaDlg:Ondian() /處理“ .”按鈕/ TODO: Add your control notification handler code herem_bCoff=1;UpdateDisplay();void CCaaDlg:Onjia() /處理“ +”按鈕/ TODO: Add your control notification handler code hereCalculate();m_operator = OpAdd;void CCaaD

14、lg:Onjian() /處理“ -”按鈕/ TODO: Add your control notification handler code hereCalculate();m_operator = OpSubtract;void CCaaDlg:Onpingfang() /處理“ x*x”按鈕/ TODO: Add your control notification handler code herem_operand*=m_operand;UpdateDisplay();void CCaaDlg:Onqinglin() /處理“ CE”按鈕/ TODO: Add your control

15、 notification handler code herem_operator = OpNone;m_operand = 0;m_accum = 0;m_bOperandAvail = FALSE;m_errorState = ErrNone;m_coff=0.1;m_bCoff=0;UpdateDisplay();void CCaaDlg:Onsqrt() /處理“ sqrt”按鈕/ TODO: Add your control notification handler code herem_operand=sqrt(m_operand);UpdateDisplay();void CCa

16、aDlg:Onzhengfu() /處理“ +/-”按鈕/ TODO: Add your control notification handler code herem_operand*=-1;UpdateDisplay();/以下是自定義函數(shù),用于實現(xiàn)計算功能void CCaaDlg:OnOperandInput(int a)/處理0-9 數(shù)字的輸入函數(shù)if (m_errorState != ErrNone) /判斷當(dāng)前運算是否有誤,若有則返回return;if (!m_bOperandAvail) /判斷是否輸入新的數(shù)字,1-是 0-否m_operand = 0; if(!m_bCoff)

17、 /判斷是否是小數(shù)輸入,1-是 0-否m_operand=m_operand*10+(a);elsem_operand=m_operand+(a)*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay(); /更新顯示void CCaaDlg:Calculate()/處理計算函數(shù)if (m_errorState != ErrNone)return;if (m_bOperandAvail)/如果沒有計算符就將m_operand值賦予m_accumif (m_operator = OpNone)m_accum = m_operand;else

18、if (m_operator = OpMultiply) /否則按計算符進(jìn)行計算m_accum *= m_operand;else if (m_operator = OpDivide)if (m_operand = 0)m_errorState = ErrDivideByZero;elsem_accum /= m_operand;else if (m_operator = OpAdd)m_accum += m_operand;else if (m_operator = OpSubtract)m_accum -= m_operand;m_bOperandAvail = FALSE;m_bCoff

19、=0;m_coff=0.1;UpdateDisplay();void CCaaDlg:UpdateDisplay()/處理顯示函數(shù)if (GetSafeHwnd() = NULL)return;if (m_errorState != ErrNone)m_result="除數(shù)不能為零"else /如果當(dāng)前計算無錯誤那么進(jìn)行顯示/如果是輸入計算數(shù),那么顯示輸入情況,如果按下計算符,則顯示結(jié)果float lVal = (m_bOperandAvail) ? m_operand : m_accum;m_result.Format(_T("%f"), lVal);

20、 /將float型轉(zhuǎn)化為CString型int i=m_result.GetLength();while(m_result.GetAt(i-1)='0')m_result.Delete(i-1,1);i-=1;/用編輯控件變量m_result改變編輯控件的值,更新顯示UpdateData(FALSE);8難點分析在利用MFC編寫計算器過程中,遇到的技術(shù)上的問題,及解決方法。例如:計算數(shù)輸入的處理在程序中使用m_operand來存儲當(dāng)前的輸入。而程序只使用一個函數(shù)來處理所有數(shù)字輸入,也就是說每次單擊數(shù)字按鈕就會調(diào)用該函數(shù)。由于計算數(shù)不僅僅是個位數(shù),因此用戶可能需要單擊幾個數(shù)字按鈕來完成一個計算數(shù)的輸入,這樣在每次輸入時都必須將輸入的數(shù)字累加入m_operand中。而且對于小數(shù)輸入和整數(shù)輸入也必須采取不同的累加方式。如對整數(shù)的輸入,累加方式為: m_operand=m_operand*10+n;其中n為輸入的數(shù)字。而對于小數(shù)輸入,累加方式為:m_operand=m_operand+n*10i;其中n為數(shù)字,i為小數(shù)位數(shù)。因此在程序中還需設(shè)立布爾型變量m_coff的值來標(biāo)識當(dāng)按下按鈕小數(shù)點的時候來確定調(diào)用哪個累加方式。自定義消息處理函數(shù)、成員函數(shù)、變量在添加自定義函數(shù)、變量時需注意函數(shù)及變量的聲明在頭文件中如:CaaDlg.

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論