基于OOP技術(shù)的計(jì)算器設(shè)計(jì)_第1頁
基于OOP技術(shù)的計(jì)算器設(shè)計(jì)_第2頁
基于OOP技術(shù)的計(jì)算器設(shè)計(jì)_第3頁
基于OOP技術(shù)的計(jì)算器設(shè)計(jì)_第4頁
基于OOP技術(shù)的計(jì)算器設(shè)計(jì)_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGE32-基于OOP技術(shù)的計(jì)算器設(shè)計(jì)摘要:OOP編程技術(shù)以其良好的共享性、可維持性被逐步廣泛采用。本文以O(shè)OP技術(shù)理念,采用OOP方法,利用VisualC++6.0集成開發(fā)工具,制作了一個(gè)簡(jiǎn)易計(jì)算器。為深入理解OOP概念,熟練操作開發(fā)環(huán)境作了有益的嘗試。關(guān)鍵詞:OOPVC++類目錄1引言 -1-1.1OOP概念 -1-1.2VisualC++6.0簡(jiǎn)介 -1-2系統(tǒng)目標(biāo) -1-2.1良好的人機(jī)界面 -1-2.2需要實(shí)現(xiàn)的功能 -2-2.3使用面向?qū)ο蠹夹g(shù) -2-3程序功能與結(jié)構(gòu) -2-3.1系統(tǒng)功能分析 -2-3.1.1加、減、乘、除四則運(yùn)算 -2-3.1.2三角函數(shù)運(yùn)算 -2-4系統(tǒng)實(shí)現(xiàn) -2-4.1開發(fā)平臺(tái)的確定 -2-4.2應(yīng)用程序設(shè)計(jì) -2-4.2.1、整體思路 -2-4.2.2、CCalculatorDlg類的設(shè)計(jì) -3-4.2.3重要功能的代碼分析 -6-5程序源代碼(部分) -11-5.1CalculatorDlg類定義單元 -11-5.2CalculatorDlg類實(shí)現(xiàn)單元 -14-6程序調(diào)試 -29-7結(jié)論 -29-參考文獻(xiàn): -29-

1引言1.1OOP概念OOP(ObjectOrientedProgramming)即面向?qū)ο蟪绦蛟O(shè)計(jì),是通過為數(shù)據(jù)和代碼建立分塊的內(nèi)存區(qū)域,以便提供對(duì)程序進(jìn)行模塊化的一種程序設(shè)計(jì)方法,這些模塊可以被用作樣板,在需要時(shí)再建立其副本。面向?qū)ο笫菍⑹澜缈闯墒怯梢唤M彼此相關(guān)并能相互通信的實(shí)體即對(duì)象組成的。程序中的對(duì)象映射現(xiàn)實(shí)世界中對(duì)象。在面向?qū)ο蟮某绦蛑?,?duì)象之間只能通過函數(shù)調(diào)用相互通信。本文通過設(shè)計(jì)制作一個(gè)簡(jiǎn)易計(jì)算器來實(shí)踐面向?qū)ο蟪绦蛟O(shè)計(jì)方法。1.2VisualC++6.0簡(jiǎn)介VisualC++6.0是微軟公司推出的開發(fā)Win32應(yīng)用程序的、面向?qū)ο蟮目梢暬晒ぞ?,環(huán)境提供了功能強(qiáng)大的MFC(MicrosoftFoundationClasses)類庫。MFC是微軟提供的,用于在C++環(huán)境下編寫應(yīng)用程序的一個(gè)框架和引擎,是一個(gè)很大的C++類層次結(jié)構(gòu),其中封裝了大量的類及其函數(shù),很多Windows程序所共有的標(biāo)準(zhǔn)內(nèi)容可以由MFC的類來提供,MFC類為這些內(nèi)容提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓,這將簡(jiǎn)化編程工作,大大的減少程序員編寫的代碼數(shù)量,使編程工作變得更加輕松容易。本設(shè)計(jì)利用集成環(huán)境的MFCApp向?qū)砩沙绦蛑骺蚣埽蟠筇岣吡碎_發(fā)效率。2系統(tǒng)目標(biāo)2.1良好的人機(jī)界面為使操作簡(jiǎn)潔,用戶易學(xué)易用,便于人機(jī)交互,程序采用如圖一所視GUI界面。圖一運(yùn)行界面2.2需要實(shí)現(xiàn)的功能1.四則運(yùn)算作為計(jì)算器的最基本功能必需具備,要完整支持小數(shù)操作。2.在日常工作中,要經(jīng)常進(jìn)行三角函數(shù)運(yùn)算,因此程序要有基本的三角函數(shù)運(yùn)算功能。3.用戶使用計(jì)算器時(shí),都習(xí)慣用數(shù)字鍵區(qū)操作,程序除使用鼠標(biāo)操作外,要能接收鍵盤輸入以實(shí)現(xiàn)四則運(yùn)算。2.3使用面向?qū)ο蠹夹g(shù)OOP技術(shù)是C++的靈魂,整個(gè)設(shè)計(jì)要能較好的體現(xiàn)C++的技術(shù)特性。3程序功能與結(jié)構(gòu)3.1系統(tǒng)功能分析3.1.1加、減、乘、除四則運(yùn)算1.操作數(shù)的輸入。2.實(shí)現(xiàn)指定的四則運(yùn)算。3.結(jié)果的顯示。包括輸入操作數(shù)、運(yùn)算結(jié)果、及出錯(cuò)信息的顯示3.1.2三角函數(shù)運(yùn)算1.操作數(shù)的輸入。2.實(shí)現(xiàn)指定的三角函數(shù)運(yùn)算。3.結(jié)果的顯示。包括輸入操作數(shù)、運(yùn)算結(jié)果及出錯(cuò)信息的顯示4系統(tǒng)實(shí)現(xiàn)4.1開發(fā)平臺(tái)的確定微軟的MicrosoftVC++6.0集成開發(fā)環(huán)境全面支持OOP編程,并且有強(qiáng)大的MFC,是目前比較流行的C++開發(fā)環(huán)境,本設(shè)計(jì)選用MicrosoftVC++6.0作為編程環(huán)境。4.2應(yīng)用程序設(shè)計(jì)4.2.1、整體思路1、本程序界面相對(duì)較為簡(jiǎn)單,從CDialog類直接派生出計(jì)算器對(duì)話框類CCalculatorDlg。2、在IDD_CALCULATOR_DIALOG對(duì)話框上添加操作控件,作為人機(jī)交互。3、實(shí)現(xiàn)CCalculatorDlg類。4.2.2、CCalculatorDlg類的設(shè)計(jì)1、通過MFCAppWizard(EXE)新建一個(gè)基于對(duì)話框的工程,工程名為:Calculator,向?qū)?huì)生成CAboutDlg,CCalculatorApp,CCalculatorDlg三個(gè)類,并自動(dòng)添加初始代碼,此時(shí)的CCalculatorDlg類骨架已由系統(tǒng)生成,下段將按我們的功能要求來逐步完善這個(gè)類。2、將對(duì)話框IDD_CALCULATOR_DIALOG按照計(jì)算器界面要求進(jìn)行布局。圖二界面布局3、定義程序操作狀態(tài)中用到的數(shù)據(jù)類型;①在計(jì)算器四則運(yùn)算中,運(yùn)算操作主要有加、減、乘、除。//運(yùn)算類型enumOperator {OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide};②常用的三角函數(shù)運(yùn)算有正弦、余弦、正切等,其他函數(shù)主要有對(duì)數(shù)、階乘等。//函數(shù)類型enumFunc {FuncSin,FuncTan,FuncCos,FuncSqrt,FuncSqre,FuncLn,FuncLog,FuncN,FuncRec,FuncExp,FuncNone};③四則運(yùn)算中存在的錯(cuò)誤主要是除零等。//運(yùn)算錯(cuò)誤類型enumCalcError {ErrNone,ErrDivideByZero};

4、在CCalculatorDlg類中添加成員變量及方法。根據(jù)類封裝性要求,成員盡量定義為私有類型。圖三CCalculatorDlg類定義為Edit編輯框及角度選框按鈕添加成員變量m_result,m_iDegree,以進(jìn)行界面與數(shù)據(jù)交互。圖四添加成員變量

系統(tǒng)自動(dòng)生成的代碼如下所示圖五生成的成員變量在類CCalculatorDlg構(gòu)造函數(shù)中初始化各變量圖六CCalculatorDlg類構(gòu)造函數(shù)在BOOLCCalculatorDlg::OnInitDialog()方法中加入如下代碼圖七對(duì)話框初始化

4.2.3重要功能的代碼分析1.運(yùn)算操作數(shù)輸入voidCCalculatorDlg::OnOperandInput(UINTnID)圖八操作數(shù)輸入方法方法根據(jù)數(shù)字0-9按鈕的ID號(hào),將其轉(zhuǎn)換成操作數(shù)。2.顯示結(jié)果方法voidCCalculatorDlg::UpdateDisplay()圖九更新顯示方法先將要顯示的內(nèi)容賦給成員變量m_result,再調(diào)用UpdateData(FALSE)函數(shù),將m_result的內(nèi)容在Edit編輯框中顯示出來。3.函數(shù)運(yùn)算過程voidCCalculatorDlg::Run_Func()圖十函數(shù)運(yùn)算方法類成員函數(shù)根據(jù)成員變量m_func的內(nèi)容,選擇不同的分支執(zhí)行,最后調(diào)用UpdateDisplay()將執(zhí)行結(jié)果進(jìn)行顯示。4.四則運(yùn)算過程voidCCalculatorDlg::Calculate()圖十一四則運(yùn)算方法方法根據(jù)成員變量m_operator中的內(nèi)容,選擇不同的操作進(jìn)行運(yùn)算,最后調(diào)用UpdateDisplay()方法,進(jìn)行結(jié)果顯示。5.鍵盤輸入的實(shí)現(xiàn)⑴插入一個(gè)新的Accelerator到資源里,將鍵盤與對(duì)應(yīng)的響應(yīng)控件關(guān)聯(lián)圖十二添加Accelerator資源

在類CCalculatorDlg中進(jìn)行聲明:圖十三申明資源⑶

在類CCalculatorDlg構(gòu)造函數(shù)中初始化m_hAccel。圖十四資源初始化⑷重載類CCalculatorDlg的PreTranslateMessage函數(shù)圖十五重載PreTranslateMessage函數(shù)

⑸在類CCalculatorDlg中加入消息處理方法定義圖十六定義消息⑹在類CCalculatorDlg實(shí)現(xiàn)中,加入如下代碼:圖十七鍵盤輸入處理方法方法根據(jù)按鍵來選擇執(zhí)行分支,完成不同的運(yùn)算。5程序源代碼(部分)5.1CalculatorDlg類定義單元//////////////////////////////////////////////////////////////////////////////////文件名:CalculatorDlg.h//功能:定義CalculatorDlg類//程序設(shè)計(jì):楊斌峰//編碼時(shí)間:2008/10/12////////////////////////////////////////////////////////////////////////////////#if!defined(AFX_CALCULATORDLG_H__8F15023D_4EA7_11D3_860D_A73AED693C48__INCLUDED_)#defineAFX_CALCULATORDLG_H__8F15023D_4EA7_11D3_860D_A73AED693C48__INCLUDED_#if_MSC_VER>1000#pragmaonce#endif//_MSC_VER>1000//運(yùn)算類型enumOperator {OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide};//函數(shù)類型enumFunc {FuncSin,FuncTan,FuncCos,FuncSqrt,FuncSqre,FuncLn,FuncLog, FuncN,FuncRec,FuncExp,FuncNone};//運(yùn)算錯(cuò)誤類型enumCalcError {ErrNone,ErrDivideByZero};#definePI3.1415926//定義π值classCCalculatorDlg:publicCDialog{private:doublem_dOperand;//操作數(shù) doublem_dTempOperand;//操作數(shù)或結(jié)果暫存 BOOLm_bDecimally;//小數(shù)標(biāo)志 doublem_dRatio;//小數(shù)倍率 doublem_dDegToRad;//角度轉(zhuǎn)弧度 Operatorm_operator;//操作類型{OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide} Funcm_func;//當(dāng)前函數(shù) CalcErrorm_errorState;//出錯(cuò)類型 BOOLm_bOperandAvail;//操作數(shù)可用標(biāo)志 voidCalculate();//四則運(yùn)算 voidRun_Func();//函數(shù)計(jì)算 voidUpdateDisplay();//更新顯示內(nèi)容protected: HICONm_hIcon; HACCELm_hAccel;//資源申明 //Generatedmessagemapfunctions //{{AFX_MSG(CCalculatorDlg) virtualBOOLOnInitDialog(); afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam); afx_msgvoidOnPaint(); afx_msgHCURSOROnQueryDragIcon(); afx_msgvoidOnOperandInput(UINTnID); afx_msgvoidOnAdd(); afx_msgvoidOnMinus(); afx_msgvoidOnDivid(); afx_msgvoidOnMultiply(); afx_msgvoidOnEqual(); afx_msgvoidOnSqrt(); afx_msgvoidOnSign(); afx_msgvoidOnReciprocal(); afx_msgvoidOnPoint(); afx_msgvoidOnClear();afx_msgBOOLKeyboard(LPCTSTRszButton); afx_msgvoidOnLog(); afx_msgvoidOnLn(); afx_msgvoidOnFactorial(); afx_msgvoidOnExp(); afx_msgvoidOnSin(); afx_msgvoidOnSquar(); afx_msgvoidOnTan(); afx_msgvoidOnDegree(); afx_msgvoidOnRad(); afx_msgvoidOnCos(); //}}AFX_MSG DECLARE_MESSAGE_MAP()public: CCalculatorDlg(CWnd*pParent=NULL); //standardconstructor //DialogData //{{AFX_DATA(CCalculatorDlg) enum{IDD=IDD_CALCULATOR_DIALOG}; CString m_result;//待顯示字符串 int m_iDegree; //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CCalculatorDlg) public: virtualBOOLPreTranslateMessage(MSG*pMsg); protected: virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport //}}AFX_VIRTUAL//Implementation};//{{AFX_INSERT_LOCATION}}//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_CALCULATORDLG_H__8F15023D_4EA7_11D3_860D_A73AED693C48__INCLUDED_)5.2CalculatorDlg類實(shí)現(xiàn)單元//////////////////////////////////////////////////////////////////////////////////文件名:CalculatorDlg.cpp//功能:CalculatorDlg類實(shí)現(xiàn)//程序設(shè)計(jì):楊斌峰//編碼時(shí)間:2008/10/12////////////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"Calculator.h"#include"CalculatorDlg.h"#include"math.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public: CAboutDlg();//DialogData //{{AFX_DATA(CAboutDlg) enum{IDD=IDD_ABOUTBOX}; //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){ //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog) //{{AFX_MSG_MAP(CAboutDlg) //Nomessagehandlers //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CCalculatorDlgdialogCCalculatorDlg::CCalculatorDlg(CWnd*pParent/*=NULL*/) :CDialog(CCalculatorDlg::IDD,pParent){ //{{AFX_DATA_INIT(CCalculatorDlg) m_result=_T("");//運(yùn)算結(jié)果屬性 m_iDegree=-1;//角度弧度指示屬性 //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_hAccel=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDD)); m_dDegToRad=(2*PI)/360;//初始時(shí)為角度,1角度相當(dāng)于(2*PI)/360弧度 m_dRatio=0.1;//小數(shù)輸入時(shí)初始倍率 m_bDecimally=false;//非小數(shù) m_errorState=ErrNone;//運(yùn)算無錯(cuò)誤 m_bOperandAvail=FALSE;//操作數(shù)不可用 m_operator=OpNone;//運(yùn)算不可用}voidCCalculatorDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCalculatorDlg) DDX_Text(pDX,IDC_DISPLAY,m_result); DDX_Radio(pDX,IDC_DEGREE,m_iDegree); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCalculatorDlg,CDialog) //{{AFX_MSG_MAP(CCalculatorDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND_RANGE(IDC_0,IDC_9,OnOperandInput) ON_BN_CLICKED(IDC_ADD,OnAdd) ON_BN_CLICKED(IDC_MINUS,OnMinus) ON_BN_CLICKED(IDC_DIVID,OnDivid) ON_BN_CLICKED(IDC_MULTIPLY,OnMultiply) ON_BN_CLICKED(IDC_EQUAL,OnEqual) ON_BN_CLICKED(IDC_SQRT,OnSqrt) ON_BN_CLICKED(IDC_SIGN,OnSign) ON_BN_CLICKED(IDC_RECIPROCAL,OnReciprocal) ON_BN_CLICKED(IDC_POINT,OnPoint) ON_BN_CLICKED(IDC_CLEAR,OnClear) ON_BN_CLICKED(IDC_LOG,OnLog) ON_BN_CLICKED(IDC_LN,OnLn) ON_BN_CLICKED(IDC_FACTORIAL,OnFactorial) ON_BN_CLICKED(IDC_EXP,OnExp) ON_BN_CLICKED(IDC_SIN,OnSin) ON_BN_CLICKED(IDC_SQUAR,OnSquar) ON_BN_CLICKED(IDC_TAN,OnTan) ON_BN_CLICKED(IDC_DEGREE,OnDegree) ON_BN_CLICKED(IDC_RAD,OnRad) ON_BN_CLICKED(IDC_COS,OnCos) //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CCalculatorDlgmessagehandlersBOOLCCalculatorDlg::OnInitDialog(){ CDialog::OnInitDialog(); //Add"About..."menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystemcommandrange. ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) { CStringstrAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } //Settheiconforthisdialog.Theframeworkdoesthisautomatically //whentheapplication'smainwindowisnotadialog SetIcon(m_hIcon,TRUE); //Setbigicon SetIcon(m_hIcon,FALSE); //Setsmallicon //TODO:Addextrainitializationhere m_result="0.";//初始顯示內(nèi)容 m_iDegree=0;//角度單選框選中 UpdateData(FALSE);//變量到控件 returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCCalculatorDlg::OnSysCommand(UINTnID,LPARAMlParam){ if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID,lParam); }}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCCalculatorDlg::OnPaint(){ if(IsIconic()) { CPaintDCdc(this);//devicecontextforpainting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0); //Centericoninclientrectangle intcxIcon=GetSystemMetrics(SM_CXICON); intcyIcon=GetSystemMetrics(SM_CYICON); CRectrect; GetClientRect(&rect); intx=(rect.Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; //Drawtheicon dc.DrawIcon(x,y,m_hIcon); } else { CDialog::OnPaint(); }}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCCalculatorDlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;}voidCCalculatorDlg::OnOperandInput(UINTnID){// ASSERT(nID>=IDC_0&&nID<=IDC_9); if(m_errorState!=ErrNone)//有錯(cuò)誤返回 return; if(m_func!=FuncNone)//進(jìn)行函數(shù)運(yùn)算 { m_func=FuncNone; Calculate(); } if(!m_bOperandAvail)//操作數(shù)不可用 m_dOperand=0;if(!m_bDecimally)//輸入非小數(shù)操作數(shù) m_dOperand=m_dOperand*10+(nID-IDC_0); else { m_dOperand=m_dOperand+(nID-IDC_0)*m_dRatio; m_dRatio*=0.1; } m_bOperandAvail=TRUE;//操作數(shù)可用 UpdateDisplay();}voidCCalculatorDlg::Calculate(){ if(m_errorState!=ErrNone)//出錯(cuò)則返回 return; if(m_bOperandAvail)//當(dāng)操作數(shù)可用時(shí),判斷運(yùn)算類型 { switch(m_operator) { caseOpNone://無運(yùn)算 m_dTempOperand=m_dOperand; break; caseOpMultiply://乘 m_dTempOperand*=m_dOperand; break; caseOpDivide://除 if(m_dOperand==0) m_errorState=ErrDivideByZero; else m_dTempOperand/=m_dOperand; break; caseOpAdd://加 m_dTempOperand+=m_dOperand; break; caseOpSubtract://減 m_dTempOperand-=m_dOperand; } } m_bOperandAvail=FALSE;//運(yùn)算一次完成后,操作數(shù)不可用 m_bDecimally=FALSE; m_dRatio=0.1; UpdateDisplay();//更新顯示方法}voidCCalculatorDlg::UpdateDisplay(){ if(GetSafeHwnd()==NULL) return; if(m_errorState==ErrDivideByZero) m_result="除數(shù)不能為零"; else { doublelVal=m_bOperandAvail?m_dOperand:m_dTempOperand; m_result.Format(_T("%f"),lVal); inti=m_result.GetLength(); while(m_result.GetAt(i-1)=='0') { m_result.Delete(i-1,1); i--; } } UpdateData(FALSE);}//鍵盤輸入處理方法BOOLCCalculatorDlg::Keyboard(LPCTSTRszButton){ switch(szButton[0]) { case'c': case'C': OnClear(); break; case'/': OnDivid(); break; case'+': OnAdd(); break; case'-': OnMinus(); break; case'*': OnMultiply(); break; case'=': caseVK_RETURN://回車鍵 OnEqual(); break; case'.': OnPoint(); break; default://0~9數(shù)字鍵 if(szButton[0]>='0'&&szButton[0]<='9') { if(m_errorState!=ErrNone) returnFALSE; if(!m_bOperandAvail) m_dOperand=0; m_dOperand=m_dOperand*10+szButton[0]-'0'; m_bOperandAvail=TRUE; UpdateDisplay(); } else returnFALSE; break; } returnTRUE;}voidCCalculatorDlg::OnAdd()//加運(yùn)算{ //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpAdd;}voidCCalculatorDlg::OnMinus()//減運(yùn)算{ //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpSubtract;}voidCCalculatorDlg::OnDivid()//除運(yùn)算{ //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpDivide;}voidCCalculatorDlg::OnMultiply()//乘運(yùn)算{ //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpMultiply;}voidCCalculatorDlg::OnEqual()//等于{ //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpNone;}voidCCalculatorDlg::OnSign()//符號(hào)轉(zhuǎn)換{ //TODO:Addyourcontrolnotificationhandlercodehere m_dOperand*=-1; UpdateDisplay();}voidCCalculatorDlg::OnSqrt(){ //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncSqrt; Run_Func();}voidCCalculatorDlg::OnReciprocal(){ //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncRec; Run_Func();}voidCCalculatorDlg::OnPoint()//小數(shù){ //TODO:Addyourcontrolnotificationhandlercodehere m_bDecimally=TRUE; UpdateDisplay();}voidCCalculatorDlg::OnClear()//清零{ //TODO:Addyourcontrolnotificationhandlercodehere m_operator=OpNone; m_dOperand=0; m_dTempOperand=0; m_bOperandAvail=FALSE; m_errorState=ErrNone; m_dRatio=0.1; m_bDecimally=FALSE; UpdateDisplay();}BOOLCCalculatorDlg::PreTranslateMessage(MSG*pMsg){ if(m_hAccel!=NULL&&TranslateAccelerator(m_hWnd,m_hAccel,pMsg)) returnTRUE; returnCDialog::PreTranslateMessage(pMsg);}voidCCalculatorDlg::OnLog(){ //TODO:Addyourcontrolnotificationhandlercodehere m_func=FuncLog; Run_Func();}voidCCalculatorDlg::OnLn(){ //TODO:Addyourcontrolnotificationhandlercodehere m_func=FuncLn; Run_Func();}voidCCalculatorDlg::OnFactorial()//階乘{(lán) //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncN; Run_Func();}voidCCalculatorDlg::OnExp(){ //TODO:Addyourcontrolnotificationhandlercodehere m_func=FuncExp; Run_Func();}voidCCalculatorDlg::OnSin(){ //TODO:Addyourcontrolnotificationhandlercodehere m_func=FuncSin; Run_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論