版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 超聲探頭的清潔消毒制度
- 警醫(yī)聯(lián)席制度
- 行業(yè)自律與風(fēng)險(xiǎn)準(zhǔn)備金制度
- 用地政策培訓(xùn)課件
- 心內(nèi)科患者的睡眠管理
- 2026年福建寧德市司法局招聘2人備考考試題庫(kù)附答案解析
- 2026年安徽某機(jī)關(guān)醫(yī)院門診部招聘2名備考考試題庫(kù)附答案解析
- 2026廣西北海市合浦縣民政局招錄城鎮(zhèn)公益性崗位人員11人備考考試試題附答案解析
- 2026西安鴻德高級(jí)中學(xué)教師招聘參考考試試題附答案解析
- 零售藥品培訓(xùn)課件
- 診所護(hù)士聘用合同
- DB21T 3414-2021 遼寧省防汛物資儲(chǔ)備定額編制規(guī)程
- 2024年度中國(guó)LCOS行業(yè)研究報(bào)告:廣泛應(yīng)用于投影、AR/VR、車載HUD的微顯示技術(shù)
- 2024金屬材料彎曲試驗(yàn)方法
- 代謝相關(guān)(非酒精性)脂肪性肝病防治指南(2024年版)解讀
- DB11-T 1253-2022 地埋管地源熱泵系統(tǒng)工程技術(shù)規(guī)范
- 2024-2029年滴漏式咖啡機(jī)行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃投資研究報(bào)告
- 《審計(jì)法》修訂解讀
- 江蘇省姜堰市勵(lì)才實(shí)驗(yàn)學(xué)校2024屆七年級(jí)數(shù)學(xué)第一學(xué)期期末經(jīng)典試題含解析
- 我國(guó)歷史文化名城保護(hù)面臨的沖擊與對(duì)策
- 白油化學(xué)品安全技術(shù)說(shuō)明書(shū)
評(píng)論
0/150
提交評(píng)論