版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> C++課程設(shè)計(jì)報(bào)告</b></p><p> ( 2013 — 2014 年度第 1 學(xué)期)</p><p><b> 計(jì)算器程序設(shè)計(jì)</b></p><p> 專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 學(xué)生姓名</p><p> 班
2、 級(jí)</p><p> 學(xué) 號(hào)</p><p> 指導(dǎo)教師</p><p> 完成日期2014年1月16日</p><p><b> 目 錄</b></p><p><b> 摘 要1</b></p><p><b>
3、1、引 言1</b></p><p> 1.1 課題意義及目的1</p><p> 1.2 課程設(shè)計(jì)內(nèi)容及要求1</p><p> 2、開發(fā)工具的介紹2</p><p><b> 3、設(shè)計(jì)內(nèi)容3</b></p><p> 3.1 功能說明3</p>
4、<p> 3.2 流程圖:3</p><p><b> 4、系統(tǒng)的實(shí)現(xiàn)4</b></p><p> 4.1 文件創(chuàng)建4</p><p> 4.2 界面設(shè)計(jì)6</p><p> 4.3 數(shù)值計(jì)算功能的實(shí)現(xiàn)10</p><p> 5、程序結(jié)果的演示2</p>
5、;<p> 5.1 測試的研究與選擇2</p><p> 5.2 測試環(huán)境3</p><p> 5.3 實(shí)例測試結(jié)果3</p><p><b> 心得與體會(huì)5</b></p><p><b> 參考文獻(xiàn)6</b></p><p> 附錄1:
6、RUN函數(shù)程序7</p><p> 附錄2:計(jì)算器程序8</p><p><b> 摘 要</b></p><p> 隨著當(dāng)今社會(huì)的發(fā)展,越來越多的人開始使用電子商品,新的高考制度也允許使用計(jì)算器,而作為一名計(jì)算機(jī)專業(yè)的學(xué)生,在使用工具的同時(shí)也應(yīng)該學(xué)會(huì)制作這類工具。本課程設(shè)計(jì)是利用VC++編程,實(shí)現(xiàn)一個(gè)簡單計(jì)算器。此計(jì)算器類似于Wi
7、ndows附件中自帶的計(jì)算器,它利用不僅實(shí)現(xiàn)了簡單的四則運(yùn)算功能,還實(shí)現(xiàn)了少部分科學(xué)函數(shù)計(jì)算功能,例如sin,cos,tan等而且具有簡潔的外觀,好看的背景。用戶可以使用任何合法的四則運(yùn)算,并且顯示運(yùn)算結(jié)果。計(jì)算器的設(shè)計(jì)是基于MFC下進(jìn)行,通過各種控件的使用,實(shí)現(xiàn)要求中的功能。該報(bào)告介紹了該課題的意義,設(shè)計(jì)內(nèi)容及要求, vc++開發(fā)工具的簡單使用方式。且著重闡述了計(jì)算器的設(shè)計(jì)思路和功能,并對(duì)代碼進(jìn)行了詳細(xì)的解釋。</p>
8、<p> 關(guān)鍵詞 VC++ , 計(jì)算器 , MFC , 控件</p><p><b> 計(jì)算器程序設(shè)計(jì)</b></p><p><b> 1、引 言</b></p><p> 現(xiàn)代計(jì)算器一般是指“電子計(jì)算器”,所以,可以認(rèn)為是“電子計(jì)算器”的簡稱。能進(jìn)行數(shù)學(xué)運(yùn)算的手持機(jī)器,擁有集成電路芯片,但結(jié)構(gòu)簡單,
9、比現(xiàn)代的電腦結(jié)構(gòu)簡單的多,但是比較廉價(jià),可以說是現(xiàn)代辦公必備用品之一。本課程設(shè)計(jì)主要在運(yùn)算過程中,如果通過計(jì)算器來完成,就會(huì)減少計(jì)算量,該程序即可以在簡單計(jì)算器鍵面下進(jìn)行簡單運(yùn)算,也可以在科學(xué)計(jì)算器鍵面下進(jìn)行高級(jí)的科學(xué)計(jì)算。并且可以分別計(jì)算弧度、角度的三角函數(shù)的計(jì)算等較為復(fù)雜的運(yùn)算。</p><p> 1.1 課題意義及目的</p><p> 現(xiàn)實(shí)學(xué)習(xí)生活中,常會(huì)遇到一些數(shù)目較大數(shù)據(jù)繁
10、雜的數(shù)值運(yùn)算,徒手運(yùn)算起來很困難,這時(shí)候我們就必須用到計(jì)算器,所以便著手開發(fā)了這個(gè)計(jì)算器程序,以便用于自己的學(xué)習(xí)工作。人們對(duì)計(jì)算的要求不斷提高,普通的功能簡單的僅能進(jìn)行四則運(yùn)算的計(jì)算工具已經(jīng)不能滿足需要,需要一種能進(jìn)行多種計(jì)算。現(xiàn)在已經(jīng)有一些功能較為強(qiáng)大、涵蓋面較廣的計(jì)算軟件,而且各種平臺(tái)的小工具仍不斷出現(xiàn)。這些大大方便了我們的生活給我們更多的選擇和實(shí)現(xiàn)方式。</p><p> 這個(gè)程序可以直接輸入數(shù)學(xué)表達(dá)式,
11、不需要任何轉(zhuǎn)換,就可以直接輸出數(shù)學(xué)四則運(yùn)算的結(jié)果。并且操作簡單、界面清晰、靈活、實(shí)用、方便等要求出發(fā),它所能完成的主要計(jì)算功能有以下幾個(gè)方面:加法,減法,乘法,除法,求平方根,求Sin,求Cos,求Tan,求Log10。計(jì)算器的設(shè)計(jì)使我們所學(xué)到的c語言知識(shí)在現(xiàn)實(shí)中得到檢驗(yàn)!</p><p> 信息時(shí)代是科技和經(jīng)濟(jì)發(fā)展的產(chǎn)物,軟件產(chǎn)業(yè)是信息時(shí)代的產(chǎn)物,它在我們的生活工作中發(fā)揮著越來越大的作用,計(jì)算器的設(shè)計(jì)對(duì)我們知
12、識(shí)的掌握有很大的作用,更能方便他人,可行性很強(qiáng)!</p><p> 1.2 課程設(shè)計(jì)內(nèi)容及要求</p><p><b> 1.設(shè)計(jì)內(nèi)容</b></p><p> 設(shè)計(jì)一個(gè)簡單的計(jì)算器。要求能實(shí)現(xiàn)整數(shù)、小數(shù)算術(shù)運(yùn)算。程序帶清零按鈕。</p><p><b> 2.設(shè)計(jì)要求</b></p&
13、gt;<p> 用VC++進(jìn)行編寫MFC程序,工程名為自己的姓名首字母和學(xué)號(hào)連接而成。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?lt;/p><p> 提交設(shè)計(jì)報(bào)告一份(課程設(shè)計(jì)任務(wù)書、目錄、設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼、心得體會(huì)、參考文獻(xiàn))。</p><p> 程序運(yùn)行如下圖1所示:</p><p> 圖1 計(jì)算器運(yùn)行界面</p>
14、<p><b> 2、開發(fā)工具的介紹</b></p><p> 本課程設(shè)計(jì)使用的是Visual C++6.0。Visual C++6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的優(yōu)秀集成開發(fā)環(huán)境。該環(huán)境為用戶提供了良好的可視化編程環(huán)境,程序員可以里利用該開發(fā)環(huán)境輕松地訪問C++源代碼編輯器,資源編輯器和使用內(nèi)部調(diào)試器,并且可以創(chuàng)
15、建項(xiàng)目文件。Visual C++6.0不僅包括編譯器,而且它還包括許多有用組件,通過這些組件的協(xié)同工作,可以在Visual C++6.0集成環(huán)境中輕松地完成創(chuàng)建源文件,編輯資源,以及對(duì)程序的編譯,連接和調(diào)試等各項(xiàng)工作。</p><p> VC++6.0是Windows 95/98、XP或Windows NT下的一個(gè)應(yīng)用程序,本身對(duì)軟硬件沒有特殊要求。就是說它對(duì)環(huán)境的要求與Windows 95/98、Window
16、s NT要求是一致的。</p><p> 硬件要求:一般在586以上的處理器、16MB以上內(nèi)存、100MB以上的硬盤。</p><p> 軟件要求:Windows 95/98或Windows NT3.51以上版本。</p><p> VC++ 6.0系統(tǒng)可以在一張CD盤上,也可以在“Visual Studio( Visual C++、Visual Foxpro
17、)”等產(chǎn)品的第一張CD盤上。一般都有一個(gè)VC的自動(dòng)安裝程序,也可以執(zhí)行VC6目錄下的setup.exe,在安裝包的提示下進(jìn)行,對(duì)初學(xué)者可采用“典型安裝”方式。</p><p> 在安裝好VC 6.0系統(tǒng)后,有時(shí)根據(jù)需要添加或刪除某些部件,可插入CD盤重新執(zhí)行setup.exe安裝程序,安裝程序會(huì)檢測當(dāng)前系統(tǒng)安裝VC6的足件,用戶單擊“添加/刪除”按鈕后,在“安裝維護(hù)”對(duì)話框中選定要添加的部件或撤消選定要?jiǎng)h除的部
18、件。</p><p> 與一般的應(yīng)用軟件一樣,有以下兩種啟動(dòng)方式:</p><p> (1)通過“開始”按鈕,選擇“程序”菜單,然后打開“Microsoft Visual studio 6.0中文版”子菜單中的“Microsoft Visual C++ 6.0 中文版”程序。</p><p> (2)用戶也可以使用命令行啟動(dòng)VC。單擊“開始”按鈕后選擇“運(yùn)行”
19、命令,在“運(yùn)行”對(duì)話框中輸入c:\Program Files\Microsoft Visual Studio\VC98\VC6.exe(按默認(rèn)盤符和路徑安裝)即可。</p><p><b> 3、設(shè)計(jì)內(nèi)容</b></p><p><b> 3.1 功能說明</b></p><p> 它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)
20、具有良好的界面;必要的交互信息;簡約美觀的效果。使用人員能快捷簡單地進(jìn)行操作。即可單機(jī)按鈕進(jìn)行操作,也可直接通過鍵盤直接輸入。即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時(shí)間,對(duì)人們的生活有一定的幫助。</p><p><b> 功能:</b></p><p> (1)包含的功能有:加、減、乘、除運(yùn)算,開方,平方等功能。</p>
21、<p> (2)計(jì)算器上數(shù)字0—9為一個(gè)控件數(shù)組,加、減、乘、除等為一個(gè)控件組。</p><p> (3)給對(duì)話框添加菜單。</p><p> (4)制定高級(jí)按鈕控件,使按鈕改變默認(rèn)的顏色。</p><p> (5)制定高級(jí)編輯控件,該編輯控件可以指定文本文字的字體和顏色。</p><p> (6)輸入的原始數(shù)據(jù)、運(yùn)算中間
22、數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個(gè)標(biāo)簽中。</p><p> (7)計(jì)算功能基本上是用系統(tǒng)內(nèi)部函數(shù)。</p><p> (8)程序可以能自動(dòng)判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個(gè)小數(shù)點(diǎn)、以0開頭等不正?,F(xiàn)象。</p><p> (10)“CE”按鈕可以清除所有已輸入的數(shù)據(jù)從頭計(jì)算</p><p><b> 功能模塊的實(shí)現(xiàn):
23、</b></p><p> (1)首先,添加高級(jí)按鈕控件類,在這個(gè)類中實(shí)現(xiàn)高級(jí)的按鈕控件。在此類中對(duì)于所有的對(duì)于按鈕的繪制工作都是在DrawItem函數(shù)中完成的,實(shí)現(xiàn)按鈕對(duì)鼠標(biāo)不同的位置和動(dòng)作改變不同的顏色,并且按鈕的客戶區(qū)域變成一個(gè)橢圓。</p><p> (2)其次,添加一個(gè)高級(jí)編輯控件類,在此類的基礎(chǔ)上實(shí)現(xiàn)高級(jí)編輯控件。在OnDisplay函數(shù)中設(shè)置編輯框的顯示文本,
24、再調(diào)用OnDraw函數(shù)將其顯示出來,并用指定的畫刷填充客戶區(qū),并且用指定的顏色繪制顯示文本。</p><p> (3)最后,實(shí)現(xiàn)主對(duì)話框界面功能,主要是加載菜單資源和對(duì)話框擴(kuò)展功能的實(shí)現(xiàn)。在CCalculatorDlg::OnCreate函數(shù)中設(shè)定對(duì)話框的初始大小與位置,可以在這個(gè)對(duì)話框中進(jìn)行窗口風(fēng)格修改,位置設(shè)置等操作,然后添加菜單項(xiàng)ID_EXTEND的響應(yīng)函數(shù)OnExtend。</p><
25、;p><b> 3.2 流程圖:</b></p><p><b> 4、系統(tǒng)的實(shí)現(xiàn)</b></p><p><b> 4.1 文件創(chuàng)建</b></p><p> 利用MFC AppWinzard生成計(jì)算器應(yīng)用程序框架具體步驟如下:</p><p> (1)執(zhí)行V
26、C程序,選擇File|New命令,彈出New對(duì)話框.單擊Projects標(biāo)簽,轉(zhuǎn)到Projects選項(xiàng)卡,選擇MFC AppWizard(exe)選項(xiàng),然后在Project name文本框中輸入ZZ 。Lacation文本框是指項(xiàng)目的本地路徑。如圖所示。</p><p> (2)單擊OK按鈕,彈出MFC AppWinzard_Step1對(duì)話框。選中基本對(duì)話框,如圖所示。</p><p>
27、 (3)單擊Next按鈕,彈出MFC AppWinzard_Step2 of4對(duì)話框,如圖所示。</p><p> (4)單擊Next按鈕,彈出MFC AppWinzard_Step3 of4對(duì)話框,如圖所示。</p><p> (5)單擊Next按鈕,彈出MFC AppWinzard_Step4 of4對(duì)話框,如圖所示。單擊Finish按鈕,創(chuàng)建框架。</p><
28、;p><b> 4.2 界面設(shè)計(jì)</b></p><p> (1)編輯對(duì)話框及控件資源 </p><p> 利用Visual C++提供的資源編輯器對(duì)對(duì)話框資源進(jìn)行編輯。刪除對(duì)話框中默認(rèn)的OK和Cancel按鈕。添加一個(gè)Edit控件,其控件ID為IDC_EDIT1。</p><p> 接下來在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖
29、動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出Push Button屬性對(duì)話框,如圖所示,</p><p> 在該對(duì)話框中輸入控件的ID值和標(biāo)題屬性。并通過復(fù)制添加若干按鈕控件,其ID如表4-1所示。</p><p> 表1按鈕控件資源清單:</p><p> 所有按鍵都添加好后的效果如圖2所示。</
30、p><p><b> 圖 2</b></p><p> (2)連接按鈕與變量</p><p> 除了建立上面所示的控件外,還要對(duì)每個(gè)按鈕控件定義一個(gè)對(duì)象與之相關(guān)聯(lián),并為每個(gè)按鈕控件建立一個(gè)成員函數(shù)來響應(yīng)其BN_CLICKED消息。如圖3所示:</p><p> 圖3為按鈕控件添加消息響應(yīng)</p><
31、;p> (3)關(guān)聯(lián)控件與對(duì)象</p><p> 在CAboutDlg類的聲明中,已經(jīng)為編輯框、靜態(tài)框及每一個(gè)按鈕聲明了相應(yīng)類型的對(duì)象與之對(duì)應(yīng)。但這些控件與對(duì)象的關(guān)聯(lián)工作是在DoDataExchange函數(shù)中完成的。</p><p><b> 圖4關(guān)聯(lián)控件與對(duì)象</b></p><p><b> (4)添加背景圖</
32、b></p><p> 為對(duì)話框添加背景圖,以增加界面的美觀性。首先為工程添加一幅位圖資源,以作為對(duì)話框的背景。然后加入一個(gè)Static控件,將其Type屬性設(shè)為Bitmap,并為Image屬性選擇位圖資源,如圖5所示。</p><p><b> 圖5添加位圖</b></p><p> 參數(shù)設(shè)置后對(duì)話框的外觀如圖6所示。</p
33、><p><b> 圖6運(yùn)行結(jié)果圖</b></p><p> 4.3 數(shù)值計(jì)算功能的實(shí)現(xiàn)</p><p> 具體功能的實(shí)現(xiàn)首先添加成員變量。該計(jì)算器中大部分的運(yùn)算都是二元運(yùn)算,即需要兩個(gè)操作數(shù)和一個(gè)二元運(yùn)算操作符。所以必須聲明兩個(gè)浮點(diǎn)數(shù),分別用來表示初始操作數(shù)和結(jié)果操作數(shù),同時(shí),必須聲明兩個(gè)字符串類型的變量,分別用來顯示初始操作數(shù)。還需要一個(gè)
34、整形變量來記錄當(dāng)前運(yùn)算符,以及一個(gè)整形變量來記錄當(dāng)前小數(shù)點(diǎn)按鈕是否被單擊過。定義如下:</p><p><b> public:</b></p><p> CZZDlg(CWnd* pParent = NULL);// standard constructor</p><p> double m_input; //保存輸入的數(shù)字<
35、;/p><p> bool m_done,opt; //布爾類型成員變量,判斷一次計(jì)算結(jié)束,和操作符點(diǎn)擊的憑據(jù)</p><p> void Numin(double put); //成員函數(shù),處理輸入的數(shù)據(jù)</p><p> double num_1,num_2; //兩個(gè)操作數(shù)</p><p> void operate();//輸入
36、運(yùn)算符后要調(diào)用的函數(shù)</p><p> int yun;//運(yùn)算判斷</p><p> bool dian;//判斷小數(shù)點(diǎn)是否被點(diǎn)擊</p><p> int n;//顯示小數(shù)部分的輸入位數(shù)</p><p><b> double m;</b></p><p> void OnMnuCu
37、t();</p><p> void OnMnuCopy();</p><p> void OnMnuPaste();</p><p> void OnContextMenu(CWnd* pWnd, CPoint point);</p><p> 當(dāng)小數(shù)點(diǎn)鍵被單擊時(shí),首先判斷小數(shù)點(diǎn)鍵是否已經(jīng)被單擊過,以及當(dāng)前初始操作數(shù)字符串是否為空。
38、如果小數(shù)點(diǎn)鍵沒有被單擊過,而且當(dāng)前初始操作數(shù)字符串不為空,則將小數(shù)點(diǎn)追加到初始操作數(shù)末尾,并且修改小數(shù)點(diǎn)標(biāo)識(shí)dian為TRUE。實(shí)現(xiàn)代碼如下:</p><p><b> 小數(shù)點(diǎn)的定義如下:</b></p><p> void CZZDlg::OnBd() </p><p><b> {</b></p>
39、<p><b> // "."</b></p><p> dian=true;</p><p><b> n=1;</b></p><p><b> }</b></p><p> 程序判斷代碼實(shí)現(xiàn)如下:</p><p&
40、gt; void CZZDlg::Numin(double put)</p><p><b> {</b></p><p> if(m_done==true||opt==true) //如果一次計(jì)算結(jié)束或運(yùn)算符已經(jīng)選擇</p><p><b> {</b></p><p> if(dian
41、==false)//如果小數(shù)點(diǎn)還沒有被按下</p><p><b> {</b></p><p> m_Result=m_input=0.0;</p><p> UpdateData(false);</p><p> m_input=m_input*10+put;</p><p> m_
42、Result=m_input;</p><p> UpdateData(false);</p><p> opt=false;m_done=false;</p><p><b> }</b></p><p> else if(dian==true)//如果小數(shù)點(diǎn)已經(jīng)被按下//////////</p>
43、<p><b> {</b></p><p> m_Result=m_input=0.0;</p><p> UpdateData(false);</p><p><b> int i;</b></p><p> for(i=0;i<n;i++)</p>&
44、lt;p><b> {</b></p><p> put=put/10;</p><p><b> }</b></p><p><b> m=put;</b></p><p> m_input=m_input+m;</p><p> m
45、_Result=m_input;</p><p> UpdateData(false);</p><p> opt=false;m_done=false;</p><p><b> }</b></p><p><b> }</b></p><p><b>
46、 else</b></p><p><b> { </b></p><p> if(dian==false)//如果小數(shù)點(diǎn)還沒有被按下</p><p><b> {</b></p><p> m_input=m_input*10+put;</p><p>
47、 m_Result=m_input;</p><p> UpdateData(false);</p><p> opt=false;m_done=false;</p><p><b> }</b></p><p> else if(dian==true)//如果小數(shù)點(diǎn)已經(jīng)被按下///////////////&l
48、t;/p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> put=put/10;</p>
49、<p><b> }</b></p><p><b> m=put;</b></p><p> m_input=m_input+m;</p><p> m_Result=m_input;</p><p> UpdateData(false);</p><p&g
50、t; opt=false;m_done=false;</p><p><b> }</b></p><p><b> }</b></p><p><b> n++;</b></p><p><b> }</b></p><
51、p> 當(dāng)數(shù)字鍵0—9被單擊時(shí),則將當(dāng)前所按鍵加到初始操作數(shù)末尾,并將初始操作數(shù)顯示出來。以數(shù)字鍵盤被單擊為例,實(shí)現(xiàn)代碼如下:</p><p> void CZZDlg::OnB0() </p><p><b> {// "0"</b></p><p> Numin(0.0);</p><p
52、><b> }</b></p><p> void CZZDlg::OnB1() </p><p><b> {// "1"</b></p><p> Numin(1.0);</p><p><b> }</b></p>&l
53、t;p> void CZZDlg::OnB2() </p><p><b> {// "2"</b></p><p> Numin(2.0);</p><p><b> }</b></p><p> void CZZDlg::OnB3() </p>
54、<p><b> {// "3"</b></p><p> Numin(3.0);</p><p><b> }</b></p><p> void CZZDlg::OnB4() </p><p><b> {// "4"&
55、lt;/b></p><p> Numin(4.0);</p><p><b> }</b></p><p> void CZZDlg::OnB5() </p><p><b> {// "5"</b></p><p> Numin(5.
56、0);</p><p><b> }</b></p><p> void CZZDlg::OnB6() </p><p><b> {// "6"</b></p><p> Numin(6.0);</p><p><b> }<
57、/b></p><p> void CZZDlg::OnB7() </p><p><b> {// "7"</b></p><p> Numin(7.0);</p><p><b> }</b></p><p> void CZZDlg
58、::OnB8() </p><p><b> {// "8"</b></p><p> Numin(8.0);</p><p><b> }</b></p><p> void CZZDlg::OnB9() </p><p><b>
59、{// "9"</b></p><p> Numin(9.0);</p><p><b> }</b></p><p> void CZZDlg::operate()</p><p><b> {</b></p><p> num_
60、1=m_Result;</p><p><b> opt=true;</b></p><p> dian=false;</p><p><b> n=0;</b></p><p><b> }</b></p><p> 當(dāng)清除鍵CE被單擊時(shí),則
61、對(duì)所有的成員變量進(jìn)行初始化。清除小數(shù)點(diǎn)標(biāo)識(shí),將保存初始操作數(shù)和結(jié)果操作數(shù)的字符串清空,將保存初始操作數(shù)和結(jié)果操作數(shù)的浮點(diǎn)數(shù)清0,將當(dāng)前操作符清0。實(shí)現(xiàn)代碼如下:</p><p> void CZZDlg::OnBce() </p><p><b> {// "CE"</b></p><p> m_input=0;<
62、;/p><p> m_Result=float(m_input);</p><p> UpdateData(false);</p><p> m_done=false;</p><p> dian=false;</p><p> opt=false;</p><p><b>
63、n=0;</b></p><p><b> }</b></p><p> 當(dāng)任何一個(gè)運(yùn)算符鍵被單擊時(shí),首先根據(jù)當(dāng)前運(yùn)算符計(jì)算運(yùn)算結(jié)果,再修改記錄當(dāng)前運(yùn)算符的變量的值。以加號(hào)鍵被按下為例,實(shí)現(xiàn)代碼如下:</p><p><b> 加號(hào)函數(shù):</b></p><p> void CZ
64、ZDlg::OnBadd() </p><p><b> {// "+"</b></p><p> operate();</p><p><b> yun=1;</b></p><p><b> }</b></p><p>
65、 void CZZDlg::operate()</p><p><b> {</b></p><p> num_1=m_Result;</p><p><b> opt=true;</b></p><p> dian=false;</p><p><b>
66、 n=0;</b></p><p><b> }</b></p><p> 加號(hào)運(yùn)算的實(shí)現(xiàn)如下:</p><p> if(yun==1)//判斷執(zhí)行何種運(yùn)算</p><p><b> {</b></p><p> m_Result=num_1+num_
67、2;</p><p> UpdateData(false);</p><p><b> }</b></p><p> 計(jì)算機(jī)還有簡單的函數(shù)功能,函數(shù)定義如下:</p><p> void CZZDlg::Onlog() </p><p> {operate();</p>
68、<p><b> yun=5;</b></p><p><b> }</b></p><p> void CZZDlg::Onpf() </p><p> {operate();</p><p><b> yun=6;</b></p><
69、;p><b> }</b></p><p> void CZZDlg::Onsqrt() </p><p> {operate();</p><p><b> yun=7;</b></p><p><b> }</b></p><p>
70、 void CZZDlg::Onsin() </p><p> {operate();</p><p><b> yun=8;</b></p><p><b> }</b></p><p> void CZZDlg::Ontan() </p><p> {op
71、erate();</p><p><b> yun=9;</b></p><p><b> }</b></p><p> void CZZDlg::Oncos() </p><p> {operate();</p><p><b> yun=10;<
72、;/b></p><p><b> }</b></p><p><b> 函數(shù)運(yùn)算實(shí)現(xiàn)如下:</b></p><p> else if(yun==6)//平方</p><p><b> {</b></p><p> m_Result=nu
73、m_1*num_1;</p><p> UpdateData(false);</p><p><b> }</b></p><p> else if(yun==7)//根號(hào)</p><p><b> {</b></p><p> if(num_1<=0)<
74、;/p><p><b> {</b></p><p> m_Result=0;</p><p> UpdateData(false);</p><p><b> }</b></p><p> m_Result=sqrt(num_1);</p><p&
75、gt; UpdateData(false);</p><p><b> }</b></p><p> else if(yun==8)//sin</p><p><b> {</b></p><p> m_Result=sin(num_1*PI/180);</p><p&
76、gt; UpdateData(false);</p><p><b> }</b></p><p> else if(yun==9)//tan</p><p><b> {</b></p><p> m_Result=tan(num_1*PI/180);</p><p&
77、gt; UpdateData(false);</p><p><b> }</b></p><p> else if(yun==10)//cos</p><p><b> {</b></p><p> m_Result=cos(num_1*PI/180);</p><p
78、> UpdateData(false);</p><p><b> }</b></p><p> 計(jì)算器的核心運(yùn)算函數(shù)——Run。在Run中,首先將記錄當(dāng)前操作數(shù)的字符串中保存的字符串轉(zhuǎn)化為浮點(diǎn)數(shù);其次根據(jù)當(dāng)前操作符的類型,選擇適當(dāng)?shù)倪\(yùn)算操作;再將記錄結(jié)果操作數(shù)的浮點(diǎn)變量中的值轉(zhuǎn)化為字符串,并顯示在結(jié)果編輯框中。Run函數(shù)實(shí)現(xiàn)代碼見附錄1。</p&g
79、t;<p> 計(jì)算器的全部代碼實(shí)現(xiàn)見附錄2。</p><p><b> 5、程序結(jié)果的演示</b></p><p> 5.1 測試的研究與選擇</p><p> 測試過程中要判斷測試是否成功,首先要分析程序界面的變化是否正常、輸入數(shù)據(jù)顯示是否正常,然后是計(jì)算數(shù)據(jù)的結(jié)果是否正確,最后看各個(gè)功能鍵是否能正常使用。</p&
80、gt;<p><b> 5.2 測試環(huán)境</b></p><p><b> 測試環(huán)境如下: </b></p><p> 測試系統(tǒng): Windows win7 *64位</p><p> 測試工具: Visual Studio C++ 6.0 </p><p> 5.3 實(shí)例
81、測試結(jié)果</p><p> 首先,在運(yùn)行界面測試簡單運(yùn)算是否能正常運(yùn)算,輸入“34+87=”見結(jié)果圖5-1所示,觀察計(jì)算結(jié)果是否正確。</p><p> 圖5-1“34+78=”的運(yùn)行結(jié)果</p><p> 其次,輸入“2*4=”,見結(jié)果圖5-2所示</p><p> 圖5-2“2*4=”的運(yùn)行結(jié)果</p><p&
82、gt; 再輸入“9/3=”,見結(jié)果圖5-3所示</p><p> 圖5-3“9/3=”的運(yùn)行結(jié)果</p><p> 最后出入25開根,見結(jié)果圖5-4所示:</p><p> 圖5-3“25開根=”的運(yùn)行結(jié)果</p><p> 測試結(jié)構(gòu)顯示,“計(jì)算器”運(yùn)行基本正常,沒有發(fā)現(xiàn)明顯的錯(cuò)誤。</p><p><
83、b> 心得與體會(huì)</b></p><p> 經(jīng)過兩個(gè)星期的努力,課程設(shè)計(jì)基本完成了。在課程設(shè)計(jì)的實(shí)踐中,學(xué)到很多有用的知識(shí),也積累了不少寶貴的經(jīng)驗(yàn)。本次設(shè)計(jì)是以一個(gè)計(jì)算器的實(shí)現(xiàn)為基礎(chǔ),掌握一個(gè)基于對(duì)話框的應(yīng)用程序的編程方法以及對(duì)話框常用控件的高級(jí)編程。在課程設(shè)計(jì)中我了解到對(duì)話框應(yīng)用程序的編程模式、對(duì)話框添加背景圖片。課程設(shè)計(jì)是需要大量時(shí)間去動(dòng)手練習(xí)才能體驗(yàn)到它的內(nèi)涵的,同時(shí)還需要用心地投入,
84、時(shí)間和情感花下去之后,的確感受到有所收獲,增加了對(duì)編程的興趣。通過這次課程設(shè)計(jì),掌握了對(duì)話框的相關(guān)操作,也體會(huì)到書寫代碼一定要仔細(xì),有時(shí)候一小點(diǎn)拼寫錯(cuò)誤會(huì)浪費(fèi)很多調(diào)試程序的時(shí)間,再有一點(diǎn)就是要好好學(xué)習(xí)英語,對(duì)編程有很大幫助。</p><p> 經(jīng)過設(shè)計(jì)的各個(gè)環(huán)節(jié),從中學(xué)到了很多,鍛煉了自己系統(tǒng)的設(shè)計(jì)的能力,從系統(tǒng)的需求到系統(tǒng)的功能,到系統(tǒng)的測試,到系統(tǒng)的發(fā)布,可以掌握到一個(gè)完全的過程,這樣對(duì)我們以后在工作中或?qū)W
85、習(xí)中得到很好的鍛煉,為用VC++編輯軟件奠定基礎(chǔ)。這次課程設(shè)計(jì)讓我學(xué)到了很多,不僅鞏固了MFC程序設(shè)計(jì)知識(shí),而且也培養(yǎng)了我的動(dòng)手能力,令我的創(chuàng)造性思維得到拓展。期待今后有更多類似的鍛煉機(jī)會(huì)。</p><p> 當(dāng)然,本課程設(shè)計(jì)所采取的解決問題的方法并不是非常完善的,在今后的學(xué)習(xí)、工作中,我將繼續(xù)認(rèn)真學(xué)習(xí),以求能做出更完善的程序。</p><p><b> 參考文獻(xiàn)</b
86、></p><p> [1] 徐金梧.TURBO C實(shí)用大全.北京機(jī)械工業(yè)出版社.1996. 5</p><p> [2] 江漢秀.C語言實(shí)用程序薈萃.西安西安電子科技大學(xué)出版社1993</p><p> [3] 譚浩強(qiáng).C語言程序設(shè)計(jì).北京清華大學(xué)出版社1999.12</p><p> [4] 楊開城.C語言教程實(shí)驗(yàn)與練習(xí).北
87、京人民郵電出版社2002.8</p><p> [5] 揣錦華.面向?qū)ο蟪绦蛟O(shè)計(jì)與VC++實(shí)踐.西安電子科技大學(xué)出版社.2005</p><p> [6] 張建宏、湯練兵、馬德駿.計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-C語言程序設(shè)計(jì).科學(xué)出版社.2006</p><p> [7] 陳清華.Visual C++課程設(shè)計(jì)案例精選與編程指導(dǎo).東南大學(xué)出版社.2004</p>
88、;<p> 附錄1:RUN函數(shù)程序</p><p> void CZZDlg::OnBrun() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p><b&g
89、t; //"="</b></p><p> num_2=m_Result;</p><p> if(yun==1)//加</p><p><b> {</b></p><p> m_Result=num_1+num_2;</p><p> UpdateD
90、ata(false);</p><p><b> }</b></p><p> else if(yun==2)//減</p><p><b> {</b></p><p> m_Result=num_1-num_2;</p><p> UpdateData(fals
91、e);</p><p><b> }</b></p><p> else if(yun==3)//乘</p><p><b> {</b></p><p> m_Result=num_1*num_2;</p><p> UpdateData(false);</
92、p><p><b> }</b></p><p> else if(yun==4)//除</p><p><b> {</b></p><p> m_Result=num_1/num_2;</p><p> UpdateData(false);</p>&
93、lt;p><b> }</b></p><p> else if(yun==5)//log</p><p> {if(num_1<=0)</p><p><b> {</b></p><p> m_Result=0;</p><p> UpdateD
94、ata(false);</p><p><b> }</b></p><p> m_Result=log10(num_1);</p><p> UpdateData(false);</p><p><b> }</b></p><p> else if(yun==6
95、)//平方</p><p><b> {</b></p><p> m_Result=num_1*num_1;</p><p> UpdateData(false);</p><p><b> }</b></p><p> else if(yun==7)//根號(hào)&l
96、t;/p><p><b> {</b></p><p> if(num_1<=0)</p><p><b> {</b></p><p> m_Result=0;</p><p> UpdateData(false);</p><p>&l
97、t;b> }</b></p><p> m_Result=sqrt(num_1);</p><p> UpdateData(false);</p><p><b> }</b></p><p> else if(yun==8)//sin</p><p><b>
98、; {</b></p><p> m_Result=sin(num_1*PI/180);</p><p> UpdateData(false);</p><p><b> }</b></p><p> else if(yun==9)//tan</p><p><b>
99、; {</b></p><p> m_Result=tan(num_1*PI/180);</p><p> UpdateData(false);</p><p><b> }</b></p><p> else if(yun==10)//cos</p><p><b&g
100、t; {</b></p><p> m_Result=cos(num_1*PI/180);</p><p> UpdateData(false);</p><p><b> }</b></p><p> opt=false;</p><p> m_done=true;<
101、;/p><p> dian=false;</p><p><b> n=0;</b></p><p><b> 附錄2:計(jì)算器程序</b></p><p> // ZZDlg.h : header file</p><p> #if !defined(AFX_ZZDLG
102、_H__70D9D5A9_C97C_488F_8F36_08F210B07A01__INCLUDED_)</p><p> #define AFX_ZZDLG_H__70D9D5A9_C97C_488F_8F36_08F210B07A01__INCLUDED_</p><p> #if _MSC_VER > 1000</p><p> #pragma o
103、nce</p><p> #endif // _MSC_VER > 1000</p><p> /////////////////////////////////////////////////////////////////////</p><p> // CZZDlg dialog</p><p> class CZZDlg
104、 : public CDialog</p><p><b> {</b></p><p> // Construction</p><p><b> public:</b></p><p> CZZDlg(CWnd* pParent = NULL);// standard construc
105、tor</p><p> double m_input; //保存輸入的數(shù)字</p><p> bool m_done,opt; //布爾類型成員變量,判斷一次計(jì)算結(jié)束,和操作符點(diǎn)擊的憑據(jù)</p><p> void Numin(double put); //成員函數(shù),處理輸入的數(shù)據(jù)</p><p> double num_1
106、,num_2; //兩個(gè)操作數(shù)</p><p> void operate();//輸入運(yùn)算符后要調(diào)用的函數(shù)</p><p><b> int yun;</b></p><p> bool dian;//判斷小數(shù)點(diǎn)是否被點(diǎn)擊</p><p> int n;//顯示小數(shù)部分的輸入位數(shù)</p>&
107、lt;p><b> double m;</b></p><p> void OnMnuCut();</p><p> void OnMnuCopy();</p><p> void OnMnuPaste();</p><p> void OnContextMenu(CWnd* pWnd, CPoint p
108、oint);</p><p> // Dialog Data</p><p> //{{AFX_DATA(CZZDlg)</p><p> enum { IDD = IDD_ZZ_DIALOG };</p><p> doublem_Result;</p><p> //}}AFX_DATA</p&g
109、t;<p> // ClassWizard generated virtual function overrides</p><p> //{{AFX_VIRTUAL(CZZDlg)</p><p> protected:</p><p> virtual void DoDataExchange(CDataExchange* pDX);//
110、DDX/DDV support</p><p> //}}AFX_VIRTUAL</p><p> // Implementation</p><p> protected:</p><p> HICON m_hIcon;</p><p> // Generated message map functions
111、</p><p> //{{AFX_MSG(CZZDlg)</p><p> virtual BOOL OnInitDialog();</p><p> afx_msg void OnSysCommand(UINT nID, LPARAM lParam);</p><p> afx_msg void OnPaint();</p&
112、gt;<p> afx_msg HCURSOR OnQueryDragIcon();</p><p> afx_msg void OnB0();</p><p> afx_msg void OnB1();</p><p> afx_msg void OnB2();</p><p> afx_msg void OnB3(
113、);</p><p> afx_msg void OnB4();</p><p> afx_msg void OnB5();</p><p> afx_msg void OnB6();</p><p> afx_msg void OnB7();</p><p> afx_msg void OnB8();<
114、;/p><p> afx_msg void OnB9();</p><p> afx_msg void OnBadd();</p><p> afx_msg void OnBce();</p><p> afx_msg void OnBd();</p><p> afx_msg void OnBdiv();<
115、;/p><p> afx_msg void OnBmult();</p><p> afx_msg void OnBrun();</p><p> afx_msg void OnBsub();</p><p> afx_msg void OnChangeEdit1();</p><p> afx_msg void
116、 Onpf();</p><p> afx_msg void Onsin();</p><p> afx_msg void Onsqrt();</p><p> afx_msg void Ontan();</p><p> afx_msg void Oncos();</p><p> afx_msg void
117、 Onlog();</p><p> //}}AFX_MSG</p><p> DECLARE_MESSAGE_MAP()</p><p><b> };</b></p><p> //{{AFX_INSERT_LOCATION}}</p><p> // Microsoft Visua
118、l C++ will insert additional declarations immediately before the previous line.</p><p> #endif // !defined(AFX_ZZDLG_H__70D9D5A9_C97C_488F_8F36_08F210B07A01__INCLUDED_)</p><p> // ZZDlg.cpp :
119、implementation file</p><p><b> //</b></p><p> #include "stdafx.h"</p><p> #include "ZZ.h"</p><p> #include "ZZDlg.h"</p
120、><p> #include "string.h"</p><p> #include <math.h></p><p> #include "malloc.h"</p><p> #include <iostream.h></p><p> #if
121、def _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> #define PI 3.1415926535897932384626433</p><p> static char THIS_FILE[] = __FILE__;</p&g
122、t;<p><b> #endif</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CAboutDlg dialog used for App About</p><p&g
123、t; class CAboutDlg : public CDialog</p><p><b> {</b></p><p><b> public:</b></p><p> CAboutDlg();</p><p> // Dialog Data</p><p>
124、; //{{AFX_DATA(CAboutDlg)</p><p> enum { IDD = IDD_ABOUTBOX };</p><p> //}}AFX_DATA</p><p> // ClassWizard generated virtual function overrides</p><p> //{{AFX_VIR
125、TUAL(CAboutDlg)</p><p> protected:</p><p> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p> //}}AFX_VIRTUAL</p><p> // Implementation&
126、lt;/p><p> protected:</p><p> //{{AFX_MSG(CAboutDlg)</p><p> //}}AFX_MSG</p><p> DECLARE_MESSAGE_MAP()</p><p><b> };</b></p><p>
127、 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)</p><p><b> {</b></p><p> //{{AFX_DATA_INIT(CAboutDlg)</p><p> //}}AFX_DATA_INIT</p><p><b> }<
128、;/b></p><p> void CAboutDlg::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p><p> CDialog::DoDataExchange(pDX);</p><p> //{{AFX_DATA_MAP(CAbou
129、tDlg)</p><p> //}}AFX_DATA_MAP</p><p><b> }</b></p><p> BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)</p><p> //{{AFX_MSG_MAP(CAboutDlg)</p><p> /
130、/ No message handlers</p><p> //}}AFX_MSG_MAP</p><p> END_MESSAGE_MAP()</p><p> /////////////////////////////////////////////////////////////////////////////</p><p>
131、 // CZZDlg dialog</p><p> CZZDlg::CZZDlg(CWnd* pParent /*=NULL*/)</p><p> : CDialog(CZZDlg::IDD, pParent)</p><p><b> {</b></p><p> //{{AFX_DATA_INIT(CZ
132、ZDlg)</p><p> m_Result = 0.0;</p><p> //}}AFX_DATA_INIT</p><p> // Note that LoadIcon does not require a subsequent DestroyIcon in Win32</p><p> m_hIcon = AfxGetApp
133、()->LoadIcon(IDR_MAINFRAME);</p><p><b> }</b></p><p> void CZZDlg::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p><p> CDialog::D
134、oDataExchange(pDX);</p><p> //{{AFX_DATA_MAP(CZZDlg)</p><p> DDX_Text(pDX, IDC_EDIT1, m_Result);</p><p> //}}AFX_DATA_MAP</p><p><b> }</b></p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算器課程設(shè)計(jì)---計(jì)算器仿真程序設(shè)計(jì)
- 計(jì)算器c++課程設(shè)計(jì)
- c++課程設(shè)計(jì)——計(jì)算器
- c++課程設(shè)計(jì)--簡單計(jì)算器
- c++課程設(shè)計(jì)--復(fù)數(shù)計(jì)算器
- c++課程設(shè)計(jì)--分?jǐn)?shù)計(jì)算器
- c++課程設(shè)計(jì)--簡單計(jì)算器
- c++課程設(shè)計(jì)---分?jǐn)?shù)計(jì)算器
- c++課程設(shè)計(jì)---分?jǐn)?shù)計(jì)算器
- c++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告
- 《c#計(jì)算器程序設(shè)計(jì)》課程設(shè)計(jì)--計(jì)算器的開發(fā)與應(yīng)用
- c++計(jì)算器程序
- c++簡單計(jì)算器課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)報(bào)告--簡單計(jì)算器
- c++課程設(shè)計(jì)報(bào)告--復(fù)數(shù)計(jì)算器
- c++設(shè)計(jì)計(jì)算器
- 面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)——計(jì)算器
- java計(jì)算器課程設(shè)計(jì)---計(jì)算器模擬程序
- c++課程設(shè)計(jì)報(bào)告--小型特殊計(jì)算器
- c++課程設(shè)計(jì)報(bào)告--小型特殊計(jì)算器
評(píng)論
0/150
提交評(píng)論