C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)

上傳人:ya****h 文檔編號:117408276 上傳時(shí)間:2022-07-08 格式:DOCX 頁數(shù):25 大?。?72.98KB
收藏 版權(quán)申訴 舉報(bào) 下載
C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
第1頁 / 共25頁
C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
第2頁 / 共25頁
C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
第3頁 / 共25頁

本資源只提供3頁預(yù)覽,全部文檔請下載后查看!喜歡就下載吧,查找使用更方便

20 積分

下載資源

資源描述:

《C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)》由會員分享,可在線閱讀,更多相關(guān)《C++課程設(shè)計(jì)報(bào)告 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)(25頁珍藏版)》請?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é)生姓名 班級 學(xué)號 指導(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)高級按鈕控件類10 5測試11 5.1測試方案11 5.2測試結(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é)生對C++語言程序設(shè)計(jì)知識的理解; 2、培養(yǎng)學(xué)生面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,使學(xué)生認(rèn)識面向過程和面向?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í)行簡單的計(jì)算。 2)用其科學(xué)型視

3、圖執(zhí)行高級的科學(xué)計(jì)算。 2系統(tǒng)需求分析 2.1 系統(tǒng)目標(biāo) 我們在學(xué)習(xí)生活中,常會遇到一些繁雜的數(shù)值運(yùn)算,這時(shí)候我們就必須用到科學(xué)計(jì)算器,所以便著手開發(fā)了這個(gè)計(jì)算器程序,以便用于自己的學(xué)習(xí)工作。要計(jì)算功能有以下幾個(gè)方面:加法,減法,乘法,除法,求冪,求模,求平方根,求Sin,求Cos。 2.2 主體功能 1、十進(jìn)制數(shù)的加、減、乘、除、乘方、取模等簡單計(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)功能表 序號 文件名 主要功能 備注 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 求對數(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對話框,

6、選擇基本對話框,點(diǎn)擊完成,如圖4-2所示。 圖4-2基本對話框 這樣,MFCAppWizard就建立了一個(gè)基于對話窗口的程序框架,如圖4-3所示。 衰骨的章音SSA工程揭M疥E工曇囲口聖吐 '-□國蓉習(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味逛曰出匚血出四回耳嘔國¥比氏I-?ml

7、.--“L3団F dHI.... ?;?4-咅站直回 和11奎 ...n Rc?dy 圖4-3新建的對話框 4.2 界面設(shè)計(jì) 界面設(shè)計(jì)主要是創(chuàng)建控件,在圖4-3所示的ResoureView選項(xiàng)卡中打開Dialog資源組,雙擊IDD_ZH0UT0NG_DIAL0G,在右邊的窗口中顯示出待編輯的對話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照此進(jìn)行操作。 1)在圖4-3中Controls的“編輯框”按鈕上單擊鼠標(biāo)左鍵,在對話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)

8、右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對話框,如圖4-4所示,在該對話框中輸入ID屬性。 11 圖4-4Edit屬性對話框 2)在圖4-2中Controls的“Butto按鈕上單擊鼠標(biāo)左鍵,在對話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出PushButton屬性對話框,如圖4-5所示,在該對話框中輸入控件的ID值和標(biāo)題屬性。 圖4-5PushButton屬性 按照上面的操作過程編輯其他按鈕和編輯框等對象的屬性

9、 表4-1各按鈕和編輯框等對象的屬性 對象 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)高級按鈕控件類 因?yàn)楸境绦虼蠖嗍褂冒粹o來完成我們所需的計(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)識計(jì)時(shí)器是否已經(jīng)打開 利用ClassWizard添加消息映射和響應(yīng)函數(shù):再利用ClassWizard覆蓋父類中的兩個(gè)關(guān)鍵的虛函數(shù): //{{AFX_VIRTUAL(CAdvButton) public: virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct); protected: virtualvoidPreSubclassWindow(); //}}AFX_VIRTUAL 其中對于所有的對于按鈕的繪制工作都是在Drawltem函數(shù)中完成的。 (2) 添加創(chuàng)建按鈕

14、控件代碼按鈕的創(chuàng)建分兩步完成。首先,調(diào)用構(gòu)造函數(shù)對按鈕對象進(jìn)行初始化;其次,調(diào)用Create函數(shù)創(chuàng)建按鈕。 (3) 屏蔽Enter鍵 直到現(xiàn)在為止,雖然計(jì)算器的界面已經(jīng)完成。但是,它還有一個(gè)缺陷:當(dāng)Enter鍵按下時(shí),對話框應(yīng)付突然關(guān)掉。這是因?yàn)閷υ捒蚰J(rèn)具有焦點(diǎn)的控件是OK鍵,當(dāng)Enter鍵按下時(shí),框架會自動(dòng)執(zhí)行當(dāng)前擁有焦點(diǎn)的控件的響應(yīng)函數(shù),所以對話框自然就關(guān)閉了。要屏蔽這一功能,只要執(zhí)行下面的代碼就可以。 voidCCalculatorDlg::OnOK() { //CDialog::OnOK();//屏蔽掉此句代碼 } 5測試 5.1測試方案 先用標(biāo)準(zhǔn)型進(jìn)行簡單的四則運(yùn)

15、算:+-*/,測試完成后。再用科學(xué)型進(jìn)行稍復(fù)雜的運(yùn)算:sin,cos,tan,log,ln,n!等,核對其計(jì)算結(jié)果的正確性。 5.2 測試結(jié)果 經(jīng)測試標(biāo)準(zhǔn)型計(jì)算器,進(jìn)行簡單的四則運(yùn)算,結(jié)果均正確,如圖5-1所示。 圖5-1四則運(yùn)算測試結(jié)果圖 測試科學(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測試結(jié)果圖(一) 圖5-3求sin30測試結(jié)果圖(二) 6小結(jié) 通過一個(gè)多星期的折騰,總算把課程

16、設(shè)計(jì)給完成了,這是一個(gè)堅(jiān)苦而又漫長的過程??粗鴦趧?dòng)成果,很欣慰! 剛開始,可以說是完全沒有頭緒,于是上網(wǎng)查,找到了些與我題目相似的源代碼,然后對之進(jìn)行修改,測試,最后得到我這次課程設(shè)計(jì)所需要的代碼. 通過計(jì)算器的設(shè)計(jì)這一課題的設(shè)計(jì)和實(shí)現(xiàn),我對簡單的C語言編程有了進(jìn)一步 C++課稈設(shè)計(jì)報(bào)告(2011) 的認(rèn)識,對MicrosoftVisualC++6.0這個(gè)程序的操作更加熟練了一些。 回顧此次的課程設(shè)計(jì),我學(xué)到了很多東西不僅鞏固了書本的知識并且與實(shí)踐相結(jié)合提高具體操作能力,在設(shè)計(jì)的過程中發(fā)現(xiàn)自己的不足,有些知識掌握的不夠牢靠,通過這次的課程設(shè)計(jì)之后我把前面所學(xué)的知識又重新溫故了一遍

17、。 同時(shí),在老師和同學(xué)身上我學(xué)到了很多非常實(shí)用的知識,在此對給過我?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等.壓縮文件請下載最新的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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!