MFC計(jì)算器編程設(shè)計(jì)報(bào)告_第1頁(yè)
MFC計(jì)算器編程設(shè)計(jì)報(bào)告_第2頁(yè)
MFC計(jì)算器編程設(shè)計(jì)報(bào)告_第3頁(yè)
MFC計(jì)算器編程設(shè)計(jì)報(bào)告_第4頁(yè)
MFC計(jì)算器編程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

MFC計(jì)算器課程設(shè)計(jì)報(bào)告地信091 指導(dǎo)老師:2010.11.15一.題目:利用MFC框架編寫(xiě)簡(jiǎn)易計(jì)算器要求使用MFC框架在VisualStudio6.0環(huán)境下編寫(xiě)一個(gè)簡(jiǎn)易的計(jì)算器,支持任意位數(shù)的加減乘數(shù),正負(fù)轉(zhuǎn)換,并且實(shí)現(xiàn)BackSpaceCEC功能。二.設(shè)計(jì)過(guò)程Windows消息處理機(jī)制的理解

首先編寫(xiě)程序需要對(duì)Windows程序的消息處理機(jī)制(MessageHandle)有個(gè)比較清晰的了解。Windows的程序都是通過(guò)消息來(lái)傳送數(shù)據(jù),有不需要用戶參與的系統(tǒng)消息,比如異常處理等。還有用戶消息,比如鼠標(biāo)的單擊,雙擊,鍵盤的鍵入等。界面的設(shè)計(jì)

仿照Windows附件里面的計(jì)算器,在資源視圖中畫(huà)好界面,如圖:

主要使用到Layout菜單中的Align功能對(duì)各個(gè)按鈕進(jìn)行對(duì)其,使界面更加整潔。拖出的控件有上面的一個(gè)Edit控件用于顯示數(shù)字,Button控件用于處理鼠標(biāo)的消息。 建立的變量,控件的命名,對(duì)應(yīng)的消息處理函數(shù)對(duì)應(yīng)表IDCAPTIONMessageHandlerIDD_CALC_DIALOG簡(jiǎn)易計(jì)算器1.0Beta1版N/AIDC_NUM00OnNum0IDC_NUM11OnNum1IDC_NUM22OnNum2IDC_NUM33OnNum3IDC_NUM44OnNum4IDC_NUM55OnNum5IDC_NUM66OnNum6IDC_NUM77OnNum7IDC_NUM88OnNum8IDC_NUM99OnNum9IDC_NEG+/-OnNegIDC_PT.OnPtIDC_DIV/OnDivIDC_MUL*OnMulIDC_MIN-OnMinIDC_ADD+OnAddIDC_BACKSPACEBACKOnBackspaceIDC_CECEOnCeIDC_CLEARCOnClearIDC_EQU=OnEquIDC_DISN/AN/AOnCal(doublenum)變量定義: doublepoz;//保存小數(shù)點(diǎn)的位置,初始化為1,表示poz-1個(gè)小數(shù)點(diǎn)。 double m_Dis;//Edit控件上需要顯示的數(shù)字 BOOLpoint_flag;//小數(shù)點(diǎn)表示位,判定是否是小數(shù),是小數(shù)為1,不是小數(shù)為0。 doublenumfirst;//保存計(jì)算過(guò)程中的前一個(gè)數(shù)字, doublenumsecond;//保存計(jì)算過(guò)程中的第二個(gè)數(shù)字 charop;//記錄當(dāng)前的計(jì)算符號(hào),可以為’+’,’-’,’*’,’/’,’=’,’c’,’n’變量初始化: poz=1; m_Dis=0.0; numfirst=0; numsecond=0; op=0; 設(shè)計(jì)思路

首先考慮對(duì)所有按鍵分為兩類,數(shù)字類和符號(hào)類,0,1,2,3,4,5,6,7,8,9為數(shù)字類,+,-,*,/,=為符號(hào)類。數(shù)字在計(jì)算的過(guò)程中最多需要保存兩個(gè),所以定義了兩個(gè)double型變量numfirst和numsecond來(lái)進(jìn)行存儲(chǔ)。符號(hào)需要一個(gè)charop來(lái)存儲(chǔ)。然后考慮在計(jì)算的過(guò)程中,numfirst和numsecond的存儲(chǔ)狀態(tài)有三種,一種是numfirst==0&&numsecond==0也就是程序剛開(kāi)始運(yùn)行還沒(méi)有開(kāi)始錄入數(shù)字的狀態(tài)。二種是numfirst!=0&&numsecond==0也就是第一個(gè)數(shù)字已經(jīng)錄入,符號(hào)也已經(jīng)錄入時(shí)候把m_Dis的值直接賦值給numfirst,第三種是numfirst!=0&&numsecond!=0,表示可以通過(guò)op來(lái)把兩數(shù)合并為一個(gè)數(shù)??紤]到該計(jì)算器支持連續(xù)的計(jì)算,比如3.33+1.33*88/96=?。所以必須在點(diǎn)符號(hào)Button也要計(jì)算出之前的結(jié)果,通過(guò)判斷op,來(lái)計(jì)算,把兩個(gè)數(shù)字合并為一個(gè)數(shù)字,方便下一次運(yùn)算,功能近似于點(diǎn)=,所以把=也劃分到符號(hào)類。因?yàn)閿?shù)字全部使用的是double,鍵入的數(shù)字必須通過(guò)一定的處理達(dá)到累加的效果,加上小數(shù)和整數(shù)的處理差異性大,所以分別用point_flag來(lái)判斷,分別出來(lái)小數(shù)和整數(shù)。成員函數(shù)及其釋義 因?yàn)閷?duì)OnNum0()到OnNum9()的處理函數(shù)差異僅在一個(gè)數(shù)字上,可以通過(guò)調(diào)用一個(gè)共同的函數(shù)OnCal(doublenum)來(lái)簡(jiǎn)化源代碼長(zhǎng)度,增加模塊性。voidCCalcDlg::OnCal(doublenum){ //分三種狀態(tài)來(lái)處理 if(numfirst!=0&&numsecond!=0) { if(point_flag==TRUE)//判定為小數(shù) { poz*=0.1;//小數(shù)進(jìn)位 m_Dis=m_Dis+poz*num;//遞增 UpdateData(false);//把結(jié)果從內(nèi)存?zhèn)鬟f到屏幕 } else { m_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+poz*num; UpdateData(false); } else { m_Dis=m_Dis*10+num; UpdateData(false); } }}以O(shè)nAdd()為例子講解符號(hào)的處理函數(shù),函數(shù)的功能是先判定之前按下字符時(shí)op的值,更具op的值來(lái)進(jìn)行相應(yīng)的運(yùn)算。voidCCalcDlg::OnAdd(){ //根據(jù)numfirst和numsecond和op的值分為5種狀態(tài)。 if(numfirst!=0&&numsecond==0&&op=='+') { numsecond=m_Dis; numfirst=numfirst+numsecond;//之前按的是加把兩個(gè)數(shù)賦值到前一個(gè)數(shù) m_Dis=numfirst;//賦值給屏幕 numsecond=0;//從新賦值為0,清空,不影響下一次判斷 UpdateData(FALSE); m_Dis=0;//屏幕的值同時(shí)清空 } 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==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&&numsecond==0) {//該狀態(tài)為程序啟動(dòng)還沒(méi)有開(kāi)始錄入輸入的狀態(tài) numfirst=m_Dis;//屏幕的值賦值到numfirst UpdateData(FALSE); m_Dis=0; } op='+';//最后記錄最后一個(gè)操作是+ poz=1;//小數(shù)點(diǎn)位置歸位 point_flag=FALSE;//默認(rèn)小數(shù)點(diǎn)標(biāo)志為整數(shù),也就是0,也就是FALSE}“+/-“按鈕的處理函數(shù)voidCCalcDlg::OnNeg(){ m_Dis=-m_Dis;//換個(gè)符號(hào),其他都一樣 UpdateData(FALSE); poz=1; point_flag=FALSE;}‘.’按鈕的處理函數(shù)voidCCalcDlg::OnPt(){ point_flag=TRUE;//把標(biāo)志位改為“小數(shù)點(diǎn)”狀態(tài)}“Backspace”按鈕的處理voidCCalcDlg::OnBackspace(){ //主要通過(guò)_gcvt()和strtod()函數(shù)進(jìn)行字符串和浮點(diǎn)數(shù)之間的轉(zhuǎn)換 charbuffer[30];//定義個(gè)裝字符的數(shù)組 _gcvt(m_Dis,sizeof(m_Dis),buffer);//把m_Dis存的數(shù)字轉(zhuǎn)換為string for(inti=0;i<30;i++) { if(buffer[i]=='.'&&buffer[i+1]==0)//判斷是否為整數(shù) { point_flag=FALSE;//標(biāo)志位設(shè)置為“整數(shù)位” break; } } if(point_flag==TRUE)//如果是小數(shù) { for(intj=0;j<30;j++) { if(buffer[j]==0) { buffer[j-1]=0;//把’\0’之前的字符賦值為’\0 break; } } } else//如果是整數(shù) { buffer[i-1]=0;//剪掉’.’之前那位 } m_Dis=strtod(buffer,NULL);//再用strtod弄成浮點(diǎn)數(shù) UpdateData(FALSE); poz=1;}‘CE’按鈕處理函數(shù)voidCCalcDlg::OnCe(){ if(numfirst!=0&&numsecond==0)//CE只能修改第二個(gè)數(shù)字 { m_Dis=0;//把屏幕的值賦值為0 UpdateData(FALSE);//并顯示出來(lái) }}‘C’按鈕處理函數(shù)voidCCalcDlg::OnClear(){ op=NULL;//清空符號(hào) numfirst=0;//清空第一個(gè)數(shù)字 numsecond=0;//清空第二個(gè)數(shù)字 point_flag=FALSE;//改為默認(rèn)整數(shù)位 poz=1;//小數(shù)點(diǎn)歸位 m_Dis=0; UpdateData(FALSE);//屏幕顯示歸0}鍵盤響應(yīng):voidCCalcDlg::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags){ switch(nChar) { caseVK_NUMPAD0: OnNum0();break; caseVK_NUMPAD1: OnNum1();break; caseVK_NUMPAD2: OnNum2();break; caseVK_NUMPAD3: OnNum3();break; caseVK_NUMPAD4: OnNum4();break; caseVK_NUMPAD5: OnNum5();break; caseVK_NUMPAD6: OnNum6();break; caseVK_NUMPAD7: OnNum7();break; caseVK_NUMPAD8: OnNum8();break; caseVK_NUMPAD9: OnNum9();break; caseVK_ADD: OnAdd();break; caseVK_SUBTRACT: OnMin();break; caseVK_MULTIPLY: OnMul();break; caseVK_DIVIDE: OnDiv();break; caseVK_BACK: OnBackspace();break; caseVK_DECIMAL: OnPt();break; caseVK_DELETE: OnBackspace();break; caseVK_RETURN: OnEqu();break; } CDialog::OnKeyDown(nChar,nRepCnt,nFlags);}BOOLCCalcDlg::PreTranslateMessage(MSG*pMsg){ SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam); returnCDialog::PreTranslateMessage(pMsg);}//CalculatorDlg.cpp:implementationfile//#include"stdafx.h"#include"Calculator.h"#include"CalculatorDlg.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)poz=1; numfirst=0; numsecond=0; op=0; m_Dis=0.0;// num=0; //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCCalculatorDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCalculatorDlg) DDX_Text(pDX,IDC_EDIT,m_Dis); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCalculatorDlg,CDialog)//{{AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_NUM0,OnNum0)ON_BN_CLICKED(IDC_NUM1,OnNum1)ON_BN_CLICKED(IDC_NUM2,OnNum2)ON_BN_CLICKED(IDC_NUM3,OnNum3)ON_BN_CLICKED(IDC_NUM4,OnNum4)ON_BN_CLICKED(IDC_NUM5,OnNum5)ON_BN_CLICKED(IDC_NUM6,OnNum6)ON_BN_CLICKED(IDC_NUM7,OnNum7)ON_BN_CLICKED(IDC_NUM8,OnNum8)ON_BN_CLICKED(IDC_NUM9,OnNum9)ON_BN_CLICKED(IDC_ADD,OnAdd) ON_BN_CLICKED(IDC_NEG,OnNeg) ON_BN_CLICKED(IDC_PT,OnPt) ON_BN_CLICKED(IDC_BACKSPACE,OnBackspace) ON_BN_CLICKED(IDC_CE,OnCe) ON_BN_CLICKED(IDC_CLEAR,OnClear) ON_BN_CLICKED(IDC_MIN,OnMin) ON_BN_CLICKED(IDC_MUL,OnMul) ON_BN_CLICKED(IDC_DIV,OnDiv) ON_BN_CLICKED(IDC_EOU,OnEou) //}}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 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::OnCal(doublenum){//分三種狀態(tài)來(lái)處理 if(numfirst!=0&&numsecond!=0) { if(point_flag==TRUE)//判定為小數(shù) { poz*=0.1;//小數(shù)進(jìn)位 m_Dis=m_Dis+poz*num;//遞增 UpdateData(false);//把結(jié)果從內(nèi)存?zhèn)鬟f到屏幕 } else { m_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+poz*num; UpdateData(false); } else { m_Dis=m_Dis*10+num; UpdateData(false); } }}voidCCalculatorDlg::OnNum0(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(0);}voidCCalculatorDlg::OnNum1(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(1);}voidCCalculatorDlg::OnNum2(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(2);}voidCCalculatorDlg::OnNum3(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(3);}voidCCalculatorDlg::OnNum4(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(4);}voidCCalculatorDlg::OnNum5(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(5);}voidCCalculatorDlg::OnNum6(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(6);}voidCCalculatorDlg::OnNum7(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(7);}voidCCalculatorDlg::OnNum8(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(8);}voidCCalculatorDlg::OnNum9(){ //TODO:Addyourcontrolnotificationhandlercodehere OnCal(9);}voidCCalculatorDlg::OnAdd(){ //TODO:Addyourcontrolnotificationhandlercodehere { //根據(jù)numfirst和numsecond和op的值分為5種狀態(tài)。 if(numfirst!=0&&numsecond==0&&op=='+') { numsecond=m_Dis; numfirst=numfirst+numsecond;//之前按的是加把兩個(gè)數(shù)賦值到前一個(gè)數(shù) m_Dis=numfirst;//賦值給屏幕 numsecond=0;//從新賦值為0,清空,不影響下一次判斷 UpdateData(FALSE); m_Dis=0;//屏幕的值同時(shí)清空 } 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==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&&numsecond==0) {//該狀態(tài)為程序啟動(dòng)還沒(méi)有開(kāi)始錄入輸入的狀態(tài) numfirst=m_Dis;//屏幕的值賦值到numfirst UpdateData(FALSE); m_Dis=0; } op='+';//最后記錄最后一個(gè)操作是+ poz=1;//小數(shù)點(diǎn)位置歸位 point_flag=FALSE;//默認(rèn)小數(shù)點(diǎn)標(biāo)志為整數(shù),也就是0,也就是FALSE } }voidCCalculatorDlg::OnNeg(){ //TODO:Addyourcontrolnotificationhandlercodehere m_Dis=-m_Dis;//換個(gè)符號(hào),其他都一樣 UpdateData(FALSE); poz=1; point_flag=FALSE;}voidCCalculatorDlg::OnPt(){ //TODO:Addyourcontrolnotificationhandlercodehere point_flag=TRUE;//把標(biāo)志位改為"小數(shù)點(diǎn)"狀態(tài)}voidCCalculatorDlg::OnBackspace(){ //TODO:Addyourcontrolnotificationhandlercodehere //主要通過(guò)_gcvt()和strtod()函數(shù)進(jìn)行字符串和浮點(diǎn)數(shù)之間的轉(zhuǎn)換 charbuffer[30];//定義個(gè)裝字符的數(shù)組 _gcvt(m_Dis,sizeof(m_Dis),buffer);//把m_Dis存的數(shù)字轉(zhuǎn)換為string for(inti=0;i<30;i++) { if(buffer[i]=='.'&&buffer[i+1]==0)//判斷是否為整數(shù) { point_flag=FALSE;//標(biāo)志位設(shè)置為"整數(shù)位" break; } } if(point_flag==TRUE)//如果是小數(shù) { for(intj=0;j<30;j++) { if(buffer[j]==0) { buffer[j-1]=0;//把'\0'之前的字符賦值為'\0',就相當(dāng)于剪掉最后一位 break; } } } else//如果是整數(shù) { buffer[i-1]=0;//剪掉'.'之前那位 } m_Dis=strtod(buffer,NULL);//再用strtod弄成浮點(diǎn)數(shù) UpdateData(FALSE); poz=1;}voidCCalculatorDlg::OnCe(){ //TODO:Addyourcontrolnotificationhandlercodehere if(numfirst!=0&&numsecond==0)//CE只能修改第二個(gè)數(shù)字 { m_Dis=0;//把屏幕的值賦值為0 UpdateData(FALSE);//并顯示出來(lái) }}voidCCalculatorDlg::OnClear(){ //TODO:Addyourcontrolnotificationhandlercodehere op=NULL;//清空符號(hào) numfirst=0;//清空第一個(gè)數(shù)字 numsecond=0;//清空第二個(gè)數(shù)字 point_flag=FALSE;//改為默認(rèn)整數(shù)位 poz=1;//小數(shù)點(diǎn)歸位 m_Dis=0; UpdateData(FALSE);//屏幕顯示歸0}voidCCalculatorDlg::OnMin(){ //TODO:Addyourcontrolnotificationhandlercodehere { //根據(jù)numfirst和numsecond和op的值分為5種狀態(tài)。 if(numfirst!=0&&numsecond==0&&op=='+') { numsecond=m_Dis; numfirst=numfirst+numsecond;//之前按的是加把兩個(gè)數(shù)賦值到前一個(gè)數(shù) m_Dis=numfirst;//賦值給屏幕 numsecond=0;//從新賦值為0,清空,不影響下一次判斷 UpdateData(FALSE); m_Dis=0;//屏幕的值同時(shí)清空 } 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==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&&numsecond==0) {//該狀態(tài)為程序啟動(dòng)還沒(méi)有開(kāi)始錄入輸入的狀態(tài) numfirst=m_Dis;//屏幕的值賦值到numfirst UpdateData(FALSE); m_Dis=0; } op='-';//最后記錄最后一個(gè)操作是+ poz=1;//小數(shù)點(diǎn)位置歸位 point_flag=FALSE;//默認(rèn)小數(shù)點(diǎn)標(biāo)志為整數(shù),也就是0,也就是FALSE }}voidCCalculatorDlg::OnMul(){ //TODO:Addyourcontrolnotificationhandlercodehere { //根據(jù)numfirst和numsecond和op的值分為5種狀態(tài)。 if(numfirst!=0&&numsecond==0&&op=='+') { numsecond=m_Dis; numfirst=numfirst+numsecond;//之前按的是加把兩個(gè)數(shù)賦值到前一個(gè)數(shù) m_Dis=numfirst;//賦值給屏幕 numsecond=0;//從新賦值為0,清空,不影響下一次判斷 UpdateData(FALSE); m_Dis=0;//屏幕的值同時(shí)清空 } 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==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&&numsecond==0) {//該狀態(tài)為程序啟動(dòng)還沒(méi)有開(kāi)始錄入輸入的狀態(tài) numfirst=m_Dis;//屏幕的值賦值到numfirst UpdateData(FALSE); m_Dis=0; } op='*';//最后記錄最后一個(gè)操作是+ poz=1;//小數(shù)點(diǎn)位置歸位 point_flag=FALSE;//默認(rèn)小數(shù)點(diǎn)標(biāo)志為整數(shù),也就是0,也就是FALSE }}voidCCalculatorDlg::OnDiv(){ //TODO:Addyourcontrolnotificationhandlercodehere { //根據(jù)numfirst和numsecond和op的值分為5種狀態(tài)。 if(numfirst!=0&&numsecond==0&&op=='+') { numsecond=m_Dis; numfirst=numfirst+numsecond;//之前按的是加把兩個(gè)數(shù)賦值到前一個(gè)數(shù) m_Dis=numfirst;//賦值給屏幕 numsecond=0;//從新賦值為0,清空,不影響下一次判斷 UpdateData(FALSE); m_Dis=0;//屏幕的值同時(shí)清空 } if(numfirst!=0&&numsecond==0&&op=='-') { numsecond=m_Dis; numfirst=numfirst-numsecond; m_Dis=numfirst; numsecond=0; UpdateData(FALSE

溫馨提示

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