C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)
《C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)(25頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、C++課程設(shè)計(jì)報(bào)告 (20--20年度第學(xué)期) 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn) 專業(yè)計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名 班級(jí) 學(xué)號(hào) 指導(dǎo)教師 完成日期 目錄 1概述3 1.1課程設(shè)計(jì)目的3 1.2課程設(shè)計(jì)內(nèi)容3 2系統(tǒng)需求分析3 2.1系統(tǒng)目標(biāo)3 2.2主體功能3 2.3開發(fā)環(huán)境3 3系統(tǒng)概要設(shè)計(jì)4 3.1系統(tǒng)功能劃分4 3.2系統(tǒng)流程圖5 4系統(tǒng)詳細(xì)設(shè)計(jì)5 4.1設(shè)計(jì)步驟5 4.2界面設(shè)計(jì)7 4.2實(shí)現(xiàn)高級(jí)按鈕控件類10 5測(cè)試11 5.1測(cè)試方案11 5.2測(cè)試結(jié)果11 6小結(jié)12 參考文獻(xiàn)14 附錄15 附錄1源程序清單15 C++課稈設(shè)計(jì)報(bào)告(
2、2011) 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn) 1概述 1.1 課程設(shè)計(jì)目的 1、鞏固并加深學(xué)生對(duì)C++語言程序設(shè)計(jì)知識(shí)的理解; 2、培養(yǎng)學(xué)生面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,使學(xué)生認(rèn)識(shí)面向過程和面向?qū)ο髢煞N設(shè)計(jì)方法的區(qū)別; 3、進(jìn)一步掌握和應(yīng)用VC++6.0集成開發(fā)環(huán)境; 4、提高運(yùn)用C++語言解決實(shí)際問題的能力; 5、初步掌握開發(fā)小型實(shí)用軟件的基本方法,能獨(dú)立設(shè)計(jì)、實(shí)現(xiàn)基本的MIS系統(tǒng); 6、掌握書寫程序設(shè)計(jì)開發(fā)文檔的能力(書寫課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告)。 1.2 課程設(shè)計(jì)內(nèi)容 課題名稱:計(jì)算器的實(shí)現(xiàn)說明:實(shí)現(xiàn)一個(gè)計(jì)算器。 要求: 1)用“計(jì)算器”的標(biāo)準(zhǔn)視圖執(zhí)行簡(jiǎn)單的計(jì)算。 2)用其科學(xué)型視
3、圖執(zhí)行高級(jí)的科學(xué)計(jì)算。 2系統(tǒng)需求分析 2.1 系統(tǒng)目標(biāo) 我們?cè)趯W(xué)習(xí)生活中,常會(huì)遇到一些繁雜的數(shù)值運(yùn)算,這時(shí)候我們就必須用到科學(xué)計(jì)算器,所以便著手開發(fā)了這個(gè)計(jì)算器程序,以便用于自己的學(xué)習(xí)工作。要計(jì)算功能有以下幾個(gè)方面:加法,減法,乘法,除法,求冪,求模,求平方根,求Sin,求Cos。 2.2 主體功能 1、十進(jìn)制數(shù)的加、減、乘、除、乘方、取模等簡(jiǎn)單計(jì)算。 2、科學(xué)計(jì)算函數(shù),包括(反)正弦、(反)余弦、(反)正切、(反)余切、開方、指數(shù)等函數(shù)運(yùn)算。 3、以角度、弧度兩種方式實(shí)現(xiàn)上述部分函數(shù)。 2.3 開發(fā)環(huán)境 VC++6.0 3系統(tǒng)概要設(shè)計(jì) 3.1 系統(tǒng)功能劃分 表3-1
4、系統(tǒng)功能表 序號(hào) 文件名 主要功能 備注 1 + 加法求和 兩個(gè)操作數(shù) 2 - 減法求差 兩個(gè)操作數(shù) 3 * 乘法求積 兩個(gè)操作數(shù) 4 / 除法求商 兩個(gè)操作數(shù) 5 % 求模 兩個(gè)操作數(shù) 6 A 求x的y次幕 兩個(gè)操作數(shù) 7 S 求平方根 一個(gè)操作數(shù) 8 Sin 求正弦 一個(gè)操作數(shù) 9 Cos 求余弦 一個(gè)操作數(shù) 10 In 求對(duì)數(shù) 一個(gè)操作數(shù) 11 n! 求階乘 一個(gè)操作數(shù) 12 = 等于 13 C 寄存器清零 1)假設(shè)執(zhí)行操作“+”,先輸入一個(gè)數(shù),再輸入“+”,再輸入另
5、一個(gè)數(shù),最后輸入“+”。整個(gè)功能“+”就執(zhí)行完畢。 2)執(zhí)行操作“Sin”,先輸入一個(gè)數(shù),在輸入“Sin”,整個(gè)功能“Sin”就執(zhí)行完畢。 3)執(zhí)行操作“n!”,先輸入一個(gè)數(shù),再輸入“n!',整個(gè)功能“n!”執(zhí)行 3.2 系統(tǒng)流程圖 圖3-1系統(tǒng)流程圖 4系統(tǒng)詳細(xì)設(shè)計(jì) 4.1設(shè)計(jì)步驟 打開MicrosoftVisualC++6.0,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFC AppWizard[exe]工程,輸入工程名cao及其所在位置,點(diǎn)擊確定,如圖4-1所示。 圖4-1新建MFCAppWizard[exe]工程 將彈出MFCAppWizard-step1對(duì)話框,
6、選擇基本對(duì)話框,點(diǎn)擊完成,如圖4-2所示。 圖4-2基本對(duì)話框 這樣,MFCAppWizard就建立了一個(gè)基于對(duì)話窗口的程序框架,如圖4-3所示。 衰骨的章音SSA工程揭M疥E工曇囲口聖吐 '-□國(guó)蓉習(xí)1- d? CCtioDIg ▼|(AllcIs^binieimtber貝T|^CCaDDIgi 二臥4齒 !-ia -口oiire&uurccB 由二JDiaDog由UIc4>n申口SBrinqTable由_□Version) 豈tao.n:-SDD.CAO.DIALOG(Dialog]|二回 AZ口函因.i味逛曰出匚血出四回耳嘔國(guó)¥比氏I-?ml
7、.--“L3団F dHI.... ?;?4-咅站直回 和11奎 ...n Rc?dy 圖4-3新建的對(duì)話框 4.2 界面設(shè)計(jì) 界面設(shè)計(jì)主要是創(chuàng)建控件,在圖4-3所示的ResoureView選項(xiàng)卡中打開Dialog資源組,雙擊IDD_ZH0UT0NG_DIAL0G,在右邊的窗口中顯示出待編輯的對(duì)話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照此進(jìn)行操作。 1)在圖4-3中Controls的“編輯框”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)
8、右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對(duì)話框,如圖4-4所示,在該對(duì)話框中輸入ID屬性。 11 圖4-4Edit屬性對(duì)話框 2)在圖4-2中Controls的“Butto按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出PushButton屬性對(duì)話框,如圖4-5所示,在該對(duì)話框中輸入控件的ID值和標(biāo)題屬性。 圖4-5PushButton屬性 按照上面的操作過程編輯其他按鈕和編輯框等對(duì)象的屬性
9、 表4-1各按鈕和編輯框等對(duì)象的屬性 對(duì)象 ID 標(biāo)題或說明 編輯框 IDCxianshi 結(jié)果顯示 按鈕 IDCBUTTONO 0 按鈕 IDCBUTTON1 1 按鈕 IDCBUTTON2 2 按鈕 IDCBUTTON3 3 按鈕 IDCBUTTON4 4 按鈕 IDCBUTTON5 5 按鈕 IDCBUTTON6 6 按鈕 IDCBUTTON7 7 按鈕 IDCBUTTON8 8 按鈕 IDCBUTTON9 9 按鈕 IDCchange +/- 按鈕 IDCpoint 按鈕 IDCadd + 按
10、鈕 IDCdifference - 按鈕 IDCchu / 按鈕 IDCtan tan 按鈕 IDCexp exp 按鈕 IDCmultiply * 按鈕 IDCsqrt sqrt 按鈕 IDCdaoshu 1/x 按鈕 IDCjiecheng n! 按鈕 IDCln In 按鈕 IDCsin sin 按鈕 IDCcos cos 按鈕 IDCpow xAy 按鈕 IDCOnequal = 完成后界面如圖4-6所示。 ° 1 Pl l |&| i 11 nn
11、 147 FI-OU上_1上丄 63:pI | || || C05I I sin 圖4-6設(shè)計(jì)界面 E3 加入標(biāo)準(zhǔn)型和科學(xué)型按鍵: S3cao Edit r科學(xué)型r標(biāo)準(zhǔn)型 E1M-JTI 丄丄上丄 1 E -y 4 圖4-7加入標(biāo)準(zhǔn)型和科學(xué)型按鍵界面 C++課程設(shè)計(jì)報(bào)告(2011) 運(yùn)行界面效果如圖4-8: 13 L-.
12、 廣弧度 4 7 +/- 0 y 圖4-8科學(xué)型界面 4.3 實(shí)現(xiàn)高級(jí)按鈕控件類 因?yàn)楸境绦虼蠖嗍褂冒粹o來完成我們所需的計(jì)算,所以在這里,我使用高級(jí)按鈕控件來實(shí)現(xiàn)操作,具體過程如下: 利用ClassWizard添加一個(gè)新類 (1) 添加成員變量和成員函數(shù) 添加成員變量: public: CRectm_ClientRect;//用來保存按鈕的客戶的矩形區(qū)域 CRgnm_ClientRgn;//用來保存按鈕的客戶區(qū)域,非矩形 UINTm_State;//按鈕所處狀態(tài) CPointm_Point
13、;//當(dāng)前鼠標(biāo)位置 BOOLm_IsTimerOn;//標(biāo)識(shí)計(jì)時(shí)器是否已經(jīng)打開 利用ClassWizard添加消息映射和響應(yīng)函數(shù):再利用ClassWizard覆蓋父類中的兩個(gè)關(guān)鍵的虛函數(shù): //{{AFX_VIRTUAL(CAdvButton) public: virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct); protected: virtualvoidPreSubclassWindow(); //}}AFX_VIRTUAL 其中對(duì)于所有的對(duì)于按鈕的繪制工作都是在Drawltem函數(shù)中完成的。 (2) 添加創(chuàng)建按鈕
14、控件代碼按鈕的創(chuàng)建分兩步完成。首先,調(diào)用構(gòu)造函數(shù)對(duì)按鈕對(duì)象進(jìn)行初始化;其次,調(diào)用Create函數(shù)創(chuàng)建按鈕。 (3) 屏蔽Enter鍵 直到現(xiàn)在為止,雖然計(jì)算器的界面已經(jīng)完成。但是,它還有一個(gè)缺陷:當(dāng)Enter鍵按下時(shí),對(duì)話框應(yīng)付突然關(guān)掉。這是因?yàn)閷?duì)話框默認(rèn)具有焦點(diǎn)的控件是OK鍵,當(dāng)Enter鍵按下時(shí),框架會(huì)自動(dòng)執(zhí)行當(dāng)前擁有焦點(diǎn)的控件的響應(yīng)函數(shù),所以對(duì)話框自然就關(guān)閉了。要屏蔽這一功能,只要執(zhí)行下面的代碼就可以。 voidCCalculatorDlg::OnOK() { //CDialog::OnOK();//屏蔽掉此句代碼 } 5測(cè)試 5.1測(cè)試方案 先用標(biāo)準(zhǔn)型進(jìn)行簡(jiǎn)單的四則運(yùn)
15、算:+-*/,測(cè)試完成后。再用科學(xué)型進(jìn)行稍復(fù)雜的運(yùn)算:sin,cos,tan,log,ln,n!等,核對(duì)其計(jì)算結(jié)果的正確性。 5.2 測(cè)試結(jié)果 經(jīng)測(cè)試標(biāo)準(zhǔn)型計(jì)算器,進(jìn)行簡(jiǎn)單的四則運(yùn)算,結(jié)果均正確,如圖5-1所示。 圖5-1四則運(yùn)算測(cè)試結(jié)果圖 測(cè)試科學(xué)型計(jì)算器,進(jìn)行sin,cos,tan,log,ln,n!等運(yùn)算,結(jié)果均正確,求 丄丄 9」■-■in=I _J■-J 」_■」 ■-1 sin30'(如圖5-2所示)。 圖5-2求sin30測(cè)試結(jié)果圖(一) 圖5-3求sin30測(cè)試結(jié)果圖(二) 6小結(jié) 通過一個(gè)多星期的折騰,總算把課程
16、設(shè)計(jì)給完成了,這是一個(gè)堅(jiān)苦而又漫長(zhǎng)的過程。看著勞動(dòng)成果,很欣慰! 剛開始,可以說是完全沒有頭緒,于是上網(wǎng)查,找到了些與我題目相似的源代碼,然后對(duì)之進(jìn)行修改,測(cè)試,最后得到我這次課程設(shè)計(jì)所需要的代碼. 通過計(jì)算器的設(shè)計(jì)這一課題的設(shè)計(jì)和實(shí)現(xiàn),我對(duì)簡(jiǎn)單的C語言編程有了進(jìn)一步 C++課稈設(shè)計(jì)報(bào)告(2011) 的認(rèn)識(shí),對(duì)MicrosoftVisualC++6.0這個(gè)程序的操作更加熟練了一些。 回顧此次的課程設(shè)計(jì),我學(xué)到了很多東西不僅鞏固了書本的知識(shí)并且與實(shí)踐相結(jié)合提高具體操作能力,在設(shè)計(jì)的過程中發(fā)現(xiàn)自己的不足,有些知識(shí)掌握的不夠牢靠,通過這次的課程設(shè)計(jì)之后我把前面所學(xué)的知識(shí)又重新溫故了一遍
17、。 同時(shí),在老師和同學(xué)身上我學(xué)到了很多非常實(shí)用的知識(shí),在此對(duì)給過我?guī)椭耐瑢W(xué)和老師表示由衷的感謝! 17 參考文獻(xiàn) [1] 譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].北京:清華大學(xué)出版社,2005. [2] 譚浩強(qiáng).C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第三版)[M].北京:清華大學(xué)出版社,2005. [3] 甄煒.C++語言和面向?qū)ο蟪绦蛟O(shè)計(jì)教程[M].北京:機(jī)械工業(yè)出版社,2005. 附錄 附錄1源程序清單 //CalculatorDlg.cpp:implementationfile #include"stdafx.h" #include"Calculator.h" #i
18、nclude"CalculatorDlg.h" #include"math.h" #ifdef_DEBUG #definenewDEBUG_NEW #undefTHIS_FILE staticcharTHIS_FILE[]=__FILE__; #endif ///////////////////////////////////////////////////////////////////////////// //CAboutDlgdialogusedforAppAbout classCAboutDlg:publicCDialog { public: CAboutDlg
19、(); //DialogData //{{AFX_DATA(CAboutDlg) enum{IDD=IDD_ABOUTBOX}; //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CAboutDlg) //DDX/DDVsupport protected: virtualvoidDoDataExchange(CDataExchange*pDX); //}}AFX_VIRTUAL //Implementation protected: //{{AFX_MSG(CAbou
20、tDlg) //}}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(
21、CAboutDlg,CDialog) //{{AFX_MSG_MAP(CAboutDlg) //Nomessagehandlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// //CCalculatorDlgdialog CCalculatorDlg::CCalculatorDlg(CWnd*pParent/*=NULL*/) :CDialog(CCalculatorDlg::IDD,pParent)
22、 { //{{AFX_DATA_INIT(CCalculatorDlg)m_result=_T(""); m_isDegree=-1; m_sentific=-1; //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32 m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_hAccel=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDD));DtoR=1; m_c
23、off=0.1; m_bCoff=0;m_errorState=ErrNone; m_bOperandAvail=FALSE;m_operator=OpNone; } voidCCalculatorDlg::DoDataExchange(CDataExchange*pDX) {CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CCalculatorDlg)DDX_Text(pDX,IDC_DISPLAY,m_result);DDX_Radio(pDX,IDC_DEGREE,m_isDegree);DDX_Radio(pDX,IDC_SENTI
24、FIC,m_sentific);//}}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,OnD
25、ivid)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_
26、BN_CLICKED(IDC_FACTORIAL,OnFactorial)ON_BN_CLICKED(IDC_EXP,OnExp) ON_BN_CLICKED(IDC_SENTIFIC,OnSentific)ON_BN_CLICKED(IDC_SIN,OnSin)ON_BN_CLICKED(IDC_SQUAR,OnSquar)ON_BN_CLICKED(IDC_TAN,OnTan)ON_BN_CLICKED(IDC_STANDARD,OnStandard)ON_BN_CLICKED(IDC_DEGREE,OnDegree)ON_BN_CLICKED(IDC_RAD,OnRad)ON_BN_C
27、LICKED(IDC_COS,OnCos)//}}AFX_MSG_MAP END_MESSAGE_MAP() C++課稈設(shè)計(jì)報(bào)告(2011) ///////////////////////////////////////////////////////////////////////////// //CCalculatorDlgmessagehandlers BOOLCCalculatorDlg::OnInitDialog() { CDialog::OnInitDialog(); //Add"About..."menuitemtosystemmenu. //IDM_ABO
28、UTBOXmustbeinthesystemcommandrange. 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);pSy
29、sMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } //Settheiconforthisdialog.Theframeworkdoesthisautomatically //whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE);//Setbigicon SetIcon(m_hIcon,FALSE);//Setsmallicon //TODO:AddextrainitializationhereGetWindowRect(rcSentific
30、); CWnd*m_pMark=GetDlgItem(IDC_DISPLAY);ASSERT(m_pMark); CRectrect;m_pMark->GetWindowRect(rect); rcStandard=rcSentific;rcStandard.right=rect.right+5; m_bIsExpand=0;m_sentific=1; OnStandard(); m_result="0.";m_isDegree=1; UpdateData(FALSE); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
31、 } voidCCalculatorDlg::OnSysCommand(UINTnID,LPARAMlParam) { if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout;dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID,lParam); } } //Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow //todrawtheicon.ForMFCapplicationsusingthedoc
32、ument/viewmodel, //thisisautomaticallydoneforyoubytheframework. 19 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn) voidCCalculatorDlg::OnPaint() { if(IsIconic()) { CPaintDCdc(this);//devicecontextforpainting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);//CentericoninclientrectangleintcxIcon=GetSystemMetrics(SM_C
33、XICON);intcyIcon=GetSystemMetrics(SM_CYICON); CRectrect; GetClientRect(&rect); intx=(rect.Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; //Drawtheicondc.DrawIcon(x,y,m_hIcon); } else { CDialog::OnPaint(); } } //Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags //themi
34、nimizedwindow. HCURSORCCalculatorDlg::OnQueryDragIcon() { return(HCURSOR)m_hIcon; } voidCCalculatorDlg::OnOperandInput(UINTnID) { ASSERT(nID>=IDC_0&&nID<=IDC_9); if(m_errorState!=ErrNone)return; if(m_func!=FuncNone){ m_func=FuncNone;Calculate(); }if(!m_bOperandAvail)m_operand=0; if(!m_bC
35、off) m_operand=m_operand*10+(nID-IDC_0); else{ m_operand=m_operand+(nID-IDC_0)*m_coff;m_coff*=0.1; }m_bOperandAvail=TRUE; UpdateDisplay(); } voidCCalculatorDlg::Calculate() { if(m_errorState!=ErrNone) return; if(m_bOperandAvail) { # C++課稈設(shè)計(jì)報(bào)告(2011) if(m_operator==OpNone)m_accum=m_
36、operand; elseif(m_operator==OpMultiply)m_accum*=m_operand; elseif(m_operator==OpDivide) { if(m_operand==0) m_errorState=ErrDivideByZero; else m_accum/=m_operand; } elseif(m_operator==OpAdd)m_accum+=m_operand; elseif(m_operator==OpSubtract)m_accum-=m_operand; }m_bOperandAvail=FALSE; m_bCo
37、ff=0; m_coff=0.1; UpdateDisplay(); } voidCCalculatorDlg::UpdateDisplay() { if(GetSafeHwnd()==NULL) return; if(m_errorState!=ErrNone) m_result="除數(shù)不能為零";else { floatlVal=(m_bOperandAvail)?m_operand:m_accum;m_result.Format(_T("%f"),lVal);inti=m_result.GetLength();while(m_result.GetAt(i-1)=='
38、0') { m_result.Delete(i-1,1); i-=1; } } 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;
39、 case'=': OnEqual(); break; default: if(szButton[0]>='0'&&szButton[0]<='9') { if(m_errorState!=ErrNone) returnFALSE; if(!m_bOperandAvail) m_operand=0; m_operand=m_operand*10+szButton[0]-'0'; m_bOperandAvail=TRUE; UpdateDisplay(); } else returnFALSE; break; } returnTRUE; } voidCC
40、alculatorDlg::OnAdd() { //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpAdd; } voidCCalculatorDlg::OnMinus() { //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpSubtract; } voidCCalculatorDlg::OnDivid() { //TODO:Addyourcontrolnotifica
41、tionhandlercodehere Calculate(); m_operator=OpDivide; } voidCCalculatorDlg::OnMultiply() { //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpMultiply; } voidCCalculatorDlg::OnEqual() { //TODO:Addyourcontrolnotificationhandlercodehere Calculate(); m_operator=OpN
42、one; } voidCCalculatorDlg::OnSign() { //TODO:Addyourcontrolnotificationhandlercodeherem_operand*=-1; UpdateDisplay(); } voidCCalculatorDlg::OnSqrt() { //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncSqrt; Run_Func(); } voidCCalculatorDlg::OnReciprocal() { //TODO:Addyourcontr
43、olnotificationhandlercodeherem_func=FuncRec; Run_Func(); } voidCCalculatorDlg::OnPoint() { //TODO:Addyourcontrolnotificationhandlercodeherem_bCoff=1; UpdateDisplay(); } voidCCalculatorDlg::OnClear() { //TODO:Addyourcontrolnotificationhandlercodeherem_operator=OpNone; m_operand=0;m_accum=0
44、; m_bOperandAvail=FALSE;m_errorState=ErrNone; m_coff=0.1;UpdateDisplay(); } BOOLCCalculatorDlg::PreTranslateMessage(MSG*pMsg) { if(m_hAccel!=NULL&&TranslateAccelerator(m_hWnd,m_hAccel,pMsg))returnTRUE; returnCDialog::PreTranslateMessage(pMsg); } voidCCalculatorDlg::OnLog() { //TODO:Addyou
45、rcontrolnotificationhandlercodeherem_func=FuncLog; Run_Func(); } voidCCalculatorDlg::OnLn() { //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncLn; Run_Func(); } voidCCalculatorDlg::OnFactorial() { //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncN; Run_Func(); } void
46、CCalculatorDlg::OnExp() { //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncExp; Run_Func(); } voidCCalculatorDlg::OnSentific() { //TODO:Addyourcontrolnotificationhandlercodeherem_bIsExpand=1; m_sentific=0; ExpandToSentific(); } voidCCalculatorDlg::OnSin() { //TODO:Addyourcontr
47、olnotificationhandlercodeherem_func=FuncSin; Run_Func(); } voidCCalculatorDlg::OnSquar() { //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncSqre; Run_Func(); } voidCCalculatorDlg::OnTan() { //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncTan; Run_Func(); } voidCCalc
48、ulatorDlg::OnStandard() { //TODO:Addyourcontrolnotificationhandlercodeherem_bIsExpand=0; m_sentific=1; ExpandToSentific(); } voidCCalculatorDlg::Run_Func() { if(m_errorState!=ErrNone)return; if(m_bOperandAvail) { if(m_func==FuncExp)m_operand=exp(m_operand); if(m_func==FuncLn)m_operand=lo
49、g(m_operand); if(m_func==FuncLog)m_operand=log10(m_operand); if(m_func==FuncSqrt)m_operand=sqrt(m_operand); if(m_func==FuncSqre)m_operand=pow(10,m_operand); if(m_func==FuncSin)m_operand=sin(m_operand*DtoR); 23 C++課稈設(shè)計(jì)報(bào)告(2011) if(m_func==FuncCos)m_operand=cos(m_operand*DtoR); if(m_func==F
50、uncTan)m_operand=tan(m_operand*DtoR); if(m_func==FuncRec)m_operand=1/m_operand; if(m_func=FuncN) { inti; for(i=m_operand-1;i>=1;i--)m_operand*=i; } } UpdateDisplay(); //m_func=FuncNone; } voidCCalculatorDlg::OnDegree() { //TODO:Addyourcontrolnotificationhandlercodeherem_isDegree=0; Dto
51、R=(2*PI)/360; UpdateData(FALSE); } voidCCalculatorDlg::OnRad() { //TODO:Addyourcontrolnotificationhandlercodeherem_isDegree=1; DtoR=1; UpdateData(TRUE); } voidCCalculatorDlg::OnCos() { //TODO:Addyourcontrolnotificationhandlercodeherem_func=FuncCos; Run_Func(); } voidCCalculatorDlg::Exp
52、andToSentific() { if(m_bIsExpand) { SetWindowPos(NULL,0,0,rcSentific.Width(),rcSentific.Height(),SWP_NOMOVE|SWP_NOZORDER); SetVisibleCtrl(); } else { SetWindowPos(NULL,0,0,rcStandard.Width(),rcSentific.Height(),SWP_NOMOVE|SWP_NOZORDER); SetVisibleCtrl(); } UpdateData(FALSE); } voidCCal
53、culatorDlg::SetVisibleCtrl() { CWnd*pCtrl=GetWindow(GW_CHILD); CRectrcTest; CRectrcControl; CRectrcShow; GetWindowRect(rcShow);while(pCtrl!=NULL) { pCtrl->GetWindowRect(rcControl);if(rcTest.IntersectRect(rcShow,rcControl))pCtrl->EnableWindow(TRUE); else pCtrl->EnableWindow(FALSE);pCtrl=pCtrl->GetWindow(GW_HWNDNEXT); } } 25
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第八章社會(huì)組織與權(quán)威體系課件
- 硬膜下血腫護(hù)理查房課件
- 第二單元---第5課----凡爾賽體系的建立課件
- 商品行業(yè)跨境電商市場(chǎng)調(diào)研
- 第九章Inmarsat-BF系統(tǒng)及其船站課件
- 我與明天有個(gè)約會(huì)
- 電動(dòng)氣壓止血儀課件
- 五年級(jí)語文下冊(cè) 金色的腳印2課件 魯教
- 食品中三聚氰胺的檢測(cè)方法課件
- 人事年終工作總結(jié)ppt模板商務(wù)2018計(jì)劃PPT
- 圖解石材幕墻干掛做法課件
- 農(nóng)產(chǎn)品電商項(xiàng)目解決方案課件
- 偶發(fā)性肺結(jié)節(jié)影像診斷方法評(píng)估與處置原則課件
- 戶外用品提案課件
- Unit4_What_are_you_doing第四課時(shí)