基于MFC的簡(jiǎn)易計(jì)算器制作設(shè)計(jì)_第1頁(yè)
基于MFC的簡(jiǎn)易計(jì)算器制作設(shè)計(jì)_第2頁(yè)
基于MFC的簡(jiǎn)易計(jì)算器制作設(shè)計(jì)_第3頁(yè)
基于MFC的簡(jiǎn)易計(jì)算器制作設(shè)計(jì)_第4頁(yè)
基于MFC的簡(jiǎn)易計(jì)算器制作設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JINGCHU UNIVERSITY OF TECHNOLOGY一個(gè)簡(jiǎn)單的計(jì)算器設(shè)計(jì)課程設(shè)計(jì)報(bào)告學(xué)院:計(jì)算機(jī)工程學(xué)院 學(xué)號(hào): 姓名: 朱鐘雄 專(zhuān)業(yè)年級(jí):12計(jì)算機(jī)應(yīng)用技術(shù)2班指導(dǎo)教師: 游明坤 時(shí) 間: 2014年12月25日 基于對(duì)話框的計(jì)算器MFC方法實(shí)現(xiàn)隨著社會(huì)的發(fā)展,人們?cè)谌粘I钪薪?jīng)常需要用到計(jì)算器來(lái)進(jìn)行簡(jiǎn)單或者復(fù)雜的運(yùn)算,計(jì)算器在人們生活中的地位也越來(lái)越重要。簡(jiǎn)單的計(jì)算器能實(shí)現(xiàn)加、減、乘、除、開(kāi)方、平方等運(yùn)算。學(xué)習(xí)了C+的程序設(shè)計(jì)語(yǔ)言這門(mén)課程,可以利用基于VC的MFC方法制作一個(gè)簡(jiǎn)易的計(jì)算器,實(shí)現(xiàn)基本的運(yùn)算功能,從而滿足生活中的需要,降低計(jì)算的難度。一. 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法區(qū)別

2、與面向過(guò)程的“先功能后數(shù)據(jù)”思想,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法把狀態(tài)(數(shù)據(jù))和行為(功能)捆綁在一起,形成了對(duì)象。當(dāng)遇到一個(gè)具體的問(wèn)題時(shí),我們只需要將一個(gè)系統(tǒng)分解成一個(gè)個(gè)的對(duì)象,同時(shí)將狀態(tài)和行為封裝在對(duì)象中。  面向?qū)ο蟮某绦蛟O(shè)計(jì)方法具有三個(gè)基本特點(diǎn):封裝、繼承和多態(tài)。 (1) 封裝性  封裝是一個(gè)用來(lái)指代將對(duì)象的狀態(tài)和行為捆綁到一個(gè)單一邏輯單元的機(jī)制的正式術(shù)語(yǔ)。它不是面向?qū)ο笳Z(yǔ)言所特有的,面向過(guò)程的C語(yǔ)言用結(jié)構(gòu)封裝了數(shù)據(jù),函數(shù)封裝了邏輯。但是面向?qū)ο蠓庋b了兩者,從這種意義上來(lái)說(shuō),面向?qū)ο蟮姆庋b更加完美。  出于一些安全

3、性與方便性的考慮,對(duì)象經(jīng)常會(huì)限制對(duì)它們特征(包括屬性和方法)的訪問(wèn),這種限制稱(chēng)為信息隱藏。作為對(duì)象的抽象,類(lèi)通常只公開(kāi)對(duì)象可以公開(kāi)的東西,主要是一個(gè)特定對(duì)象對(duì)系統(tǒng)的服務(wù),而隱藏執(zhí)行服務(wù)的內(nèi)部細(xì)節(jié)和為了完成這些服務(wù)而設(shè)計(jì)的數(shù)據(jù)。 ( 2) 繼承性  繼承是定義新類(lèi)的一種機(jī)制,使用這種機(jī)制創(chuàng)建新類(lèi)時(shí)只需要聲明新類(lèi)和已創(chuàng)建類(lèi)之間的差別。 對(duì)于一個(gè)特定的繼承關(guān)系,我們將創(chuàng)建的新類(lèi)稱(chēng)為子類(lèi)(subclass),被繼承的原始類(lèi)稱(chēng)為超類(lèi)(superclass)。子類(lèi)可以使用超類(lèi)定義屬性和方法,也可以自己定義新的屬性和方法。超類(lèi)的特征不會(huì)受到子類(lèi)的影

4、響。  繼承帶來(lái)的第一個(gè)且是最顯而易見(jiàn)的好處是減少了代碼冗余,因此也減輕了需要改進(jìn)或重寫(xiě)代碼時(shí)的負(fù)擔(dān)。  進(jìn)一步地,子類(lèi)會(huì)比不使用繼承時(shí)更加簡(jiǎn)潔,這點(diǎn)應(yīng)當(dāng)不難理解;通過(guò)繼承可以不加修改地重用和擴(kuò)展已經(jīng)徹底測(cè)試的代碼,這避免了工程性的組裝對(duì)已經(jīng)完成測(cè)試代碼的影響;最好的一點(diǎn),即使沒(méi)有已有類(lèi)的源代碼,仍然可以從已有的類(lèi)中派生出新類(lèi),只要我們擁有那個(gè)類(lèi)編譯后的字節(jié)碼。   (3)多態(tài)性 術(shù)語(yǔ)多態(tài)指的是屬于兩個(gè)或多個(gè)不同類(lèi)的對(duì)象以各自的類(lèi)相關(guān)的不同方式響應(yīng)同一消息(方法調(diào)用)的能力。同一個(gè)消息根據(jù)發(fā)送的對(duì)象不同而采用多種不

5、同的行為方式。換句話說(shuō)多態(tài)使得消息發(fā)送者能給一組具有公共接口的對(duì)象發(fā)送相同的消息,接收者做出相應(yīng)的回應(yīng)。  多態(tài)的作用:增強(qiáng)了代碼的可讀性、操作的透明性,增強(qiáng)了代碼的靈活性和可擴(kuò)充性。二. MFC程序設(shè)計(jì)方法 (1)API 應(yīng)用程序編程的接口函數(shù) 一個(gè)應(yīng)用程序要和具體的硬件打交道,比如接收按鍵值,接收鼠標(biāo)左擊或右擊,記錄鼠標(biāo)的坐標(biāo)等,就勢(shì)必要有所有這些硬件的驅(qū)動(dòng),這樣加大了程序的代碼量。而且,每一個(gè)應(yīng)用程序都得寫(xiě),增加了不必要的重復(fù)工作。操作系統(tǒng)就是解決這些問(wèn)題的。 操作系統(tǒng)基于硬件和應(yīng)用程序之間,它提供應(yīng)用程序調(diào)用的函數(shù),應(yīng)用程序可

6、通過(guò)這些函數(shù)與硬件打交道。而這些函數(shù)就是API。 (2)MFC(Microsoft Foundation Class)微軟基礎(chǔ)類(lèi)庫(kù) MFC類(lèi)庫(kù)集成了大量已經(jīng)預(yù)先定義好的類(lèi),用戶可以根據(jù)編程的需要調(diào)用響應(yīng)的類(lèi),或根據(jù)需要自定義有關(guān)的類(lèi)。 (3)窗口 就是一個(gè)應(yīng)用程序能夠看到的部分。是Windows應(yīng)用程序中一個(gè)非常重要的元素。 通常都包含標(biāo)題欄、菜單欄、系統(tǒng)菜單等 (4)消息和消息隊(duì)列 消息 :應(yīng)用程序接收的事件都會(huì)產(chǎn)生相應(yīng)的消息,消息的產(chǎn)生是因?yàn)槭录l(fā)生的結(jié)果。如鍵盤(pán)有鍵盤(pán)按下和抬起消息,鼠標(biāo)有

7、點(diǎn)擊消息,畫(huà)面有刷新消息,重畫(huà)消息等。 編寫(xiě)應(yīng)用程序時(shí),如果需要對(duì)某事件進(jìn)行響應(yīng),如需要當(dāng)按下Ctrl+S組合鍵就進(jìn)行保存操作時(shí),就需要對(duì)Ctrl+S這個(gè)事件對(duì)應(yīng)的消息設(shè)計(jì)響應(yīng)函數(shù)。 消息隊(duì)列 : 應(yīng)用程序?qū)κ录⑦M(jìn)行的響應(yīng)時(shí)從它本身的消息隊(duì)列里取出消息來(lái)執(zhí)行的。事件是有操作系統(tǒng)接收的,然后把它轉(zhuǎn)化成消息,再把消息送到應(yīng)用程序所在的隊(duì)列中,供應(yīng)用程序取走。 (5)事件驅(qū)動(dòng) Windows應(yīng)用程序函數(shù)執(zhí)行過(guò)程沒(méi)有一個(gè)固定的順序。一條消息過(guò)來(lái)就對(duì)應(yīng)進(jìn)行響應(yīng)(只要設(shè)計(jì)了響應(yīng)函數(shù)),那條消息來(lái)就執(zhí)行那條對(duì)應(yīng)的函數(shù),沒(méi)有消息就等待。 

8、;MFC程序設(shè)計(jì)的好處:一是MFC提供了一個(gè)標(biāo)準(zhǔn)化的結(jié)構(gòu),通過(guò)創(chuàng)建時(shí)的選擇就可以實(shí)現(xiàn)一個(gè)基本的程序功能。這樣不必從頭開(kāi)始設(shè)計(jì)創(chuàng)建和管理一個(gè)標(biāo)準(zhǔn)Windows應(yīng)用程序所需的代碼,節(jié)省了時(shí)間;二是它可以自動(dòng)生成很多代碼,比如只要用類(lèi)向?qū)В–lassWizard)添加了一個(gè)成員變量,它就會(huì)自動(dòng)在代碼的相應(yīng)位置添加代碼進(jìn)去,如果手動(dòng)添加,不光麻煩,而且文件很多,位置不固定可能會(huì)遺漏。所以類(lèi)向?qū)墙?jīng)常需要用的,以提高編程效率,減少出錯(cuò)。 MFC編程的主要過(guò)程就是編寫(xiě)消息響應(yīng)函數(shù)的過(guò)程,因?yàn)槠渌墓ぷ鞫甲詣?dòng)生成了。因此就需要我們知道如何添加消息響應(yīng)函數(shù)(用類(lèi)向?qū)В憫?yīng)函數(shù)中寫(xiě)什么內(nèi)容。

9、0;響應(yīng)函數(shù)的內(nèi)容主要是調(diào)用系統(tǒng)函數(shù),類(lèi)里定義的成員函數(shù),系統(tǒng)的系統(tǒng)函數(shù),以及變量的傳遞等。三. MFC實(shí)現(xiàn)計(jì)算器的程序設(shè)計(jì)程序流程圖點(diǎn)擊加減乘除等進(jìn)行運(yùn)算選擇點(diǎn)擊數(shù)字鍵,輸入第二個(gè)操作數(shù)點(diǎn)擊數(shù)字鍵,輸入第一個(gè)操作數(shù)點(diǎn)擊“=”鍵,輸出運(yùn)算結(jié)果程序開(kāi)始顯示運(yùn)算結(jié)果主要程序代碼如下:/為了能在同一個(gè)編輯框里顯示完整的算式,我添加了兩個(gè)編輯框,同時(shí)輸入,一個(gè)負(fù)責(zé)計(jì)算數(shù)據(jù)的不可見(jiàn),另一個(gè)可見(jiàn)的用來(lái)顯示。void CJncalDlg:OnNUM1()/ 點(diǎn)擊數(shù)字鍵1時(shí)顯示1UpdateData(TRUE);m_str1 = m_str1 + "1"/在編輯框1的字符串后加上字符1m_

10、str2 = m_str2 + "1"/在編輯框2的字符串后加上字符1UpdateData(FALSE);void CJncalDlg:OnNUM2()/ 按下數(shù)字鍵2時(shí)顯示數(shù)字2UpdateData(TRUE);m_str1 = m_str1 + "2"/在編輯框1的字符串后加上字符2m_str2 = m_str2 + "2"/在編輯框2的字符串后加上字符2UpdateData(FALSE);void CJncalDlg:OnNUM3()/ /按下數(shù)字鍵3時(shí)顯示數(shù)字3UpdateData(TRUE); m_str1 = m_str1

11、 + "3"/在編輯框1的字符串后加上字符3m_str2 = m_str2 + "3"/在編輯框2的字符串后加上字符3UpdateData(FALSE);數(shù)字鍵4、5、6、7、8、9、0、00的代碼同上void CJncalDlg:OnSUB() /加法UpdateData(TRUE);m_str2 = m_str2 + "+"/顯示框上顯示“+”UpdateData(FALSE);SaveValue1();/調(diào)用函數(shù)將第一個(gè)操作數(shù)變?yōu)閐ouble型并保存m_Sign = 0;/選擇語(yǔ)句的條件賦值void CJncalDlg:OnDE

12、C()/減法UpdateData(TRUE);m_str2 = m_str2 + "-"/顯示框上顯示“-”UpdateData(FALSE);SaveValue1();/調(diào)用函數(shù)將第一個(gè)操作數(shù)變?yōu)閐ouble型并保存m_Sign = 1; /選擇語(yǔ)句的條件賦值void CJncalDlg:OnMUL() UpdateData(TRUE);m_str2 = m_str2 + "×"/顯示框上顯示“×”UpdateData(FALSE);SaveValue1();/調(diào)用函數(shù)將第一個(gè)操作數(shù)變?yōu)閐ouble型并保存m_Sign = 2;/選

13、擇語(yǔ)句的條件賦值void CJncalDlg:OnDIV() /除法UpdateData(TRUE);m_str2 = m_str2 + "÷"/顯示框上顯示“÷”UpdateData(FALSE);SaveValue1();/調(diào)用函數(shù)將第一個(gè)操作數(shù)變?yōu)閐ouble型并保存m_Sign = 3; /選擇語(yǔ)句的條件賦值void CJncalDlg:OnEQUAL() /“=”操作Calculator();/調(diào)用Calculator函數(shù)void CJncalDlg:SaveValue1()/保存第一個(gè)操作數(shù)函數(shù)UpdateData(TRUE);m_num1

14、= atof(m_str1);/第一個(gè)編輯框內(nèi)的字符轉(zhuǎn)換為數(shù)字并賦給m_fNumber1m_str1 = ""/清空第一個(gè)編輯框UpdateData(FALSE);void CJncalDlg:Calculator()/Calculator函數(shù)UpdateData(TRUE);m_num2 = atof(m_str1);/編輯框1內(nèi)的字符轉(zhuǎn)換成數(shù)字并賦值給m_fNumber2double r = 0.0f;switch (m_Sign)/選擇語(yǔ)句case 0: /加f = m_num1 + m_num2;break;case 1: /減f = m_num1 - m_num2

15、;break;case 2: /乘f = m_num1* m_num2;break;case 3: /除if (m_num2 = 0.0f)MessageBox("輸入錯(cuò)誤,請(qǐng)重新輸入");elsef = m_numn1 / m_num2;break;case 4: /平方f = m_num2 * m_num2;break;case 5: /開(kāi)方f = sqrt(m_num2);break;default:break;if(r - int(r) <= 1e-5) /如果浮點(diǎn)數(shù)其實(shí)是個(gè)整數(shù)m_str1.Format("%d",(int)f);m_st

16、r2=m_str2+"="+m_str1+" "elsem_str1.Format("%f",f);m_str2=m_str2+"="+m_str1+" "UpdateData(FALSE);m_num1 = r;m_num2 = 0.0f;void CJncalDlg:OnABOUT() /軟件關(guān)于按鈕CAboutDlg dlg;dlg.DoModal();/調(diào)用void CJncalDlg:OnCE() /清空編輯框操作UpdateData(TRUE);m_str1 = "&quo

17、t;/第一個(gè)編輯框賦空值m_str2 = ""/第二個(gè)編輯框賦空值m_num1 = 0.0f; /第一個(gè)操作數(shù)賦0m_ num2 = 0.0f; /第二個(gè)操作數(shù)賦0m_Sign = 0;UpdateData(FALSE);void CJncalDlg:OnDEL() /退格操作UpdateData(TRUE);if (!m_str1.IsEmpty()/移除編輯框內(nèi)最右邊一個(gè)字符m_str1= m_str1.Left(m_str1.GetLength()-1);m_str2 = m_str2.Left(m_str2.GetLength()-1);UpdateData(FAL

18、SE); /以下為顯示當(dāng)前時(shí)間操作int CJncalDlg:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CDialog:OnCreate(lpCreateStruct) = -1)return -1;SetTimer(1,1000,NULL);/設(shè)置定時(shí)器return 0;void CJncalDlg:OnTimer(UINT nIDEvent) SYSTEMTIME st;GetLocalTime(&st);CString str_time;str_time.Format("%d:%d:%d",st.wHour,st.

19、wMinute,st.wSecond);SetDlgItemText(IDC_STATICTIME,str_time);CDialog:OnTimer(nIDEvent);四、 試驗(yàn)結(jié)果展示計(jì)算器的整體效果圖。我在計(jì)算器的頂端加入了顯示當(dāng)前日期和時(shí)間的功能,更加方便快捷。 加法功能的實(shí)現(xiàn)減法功能的實(shí)現(xiàn)乘法功能的實(shí)現(xiàn)除法功能的實(shí)現(xiàn)本計(jì)算器除了能實(shí)現(xiàn)加減乘除運(yùn)算,還能進(jìn)行平方(x2)和開(kāi)方(sqrt)的運(yùn)算。以下為開(kāi)方演示 。關(guān)于計(jì)算器經(jīng)過(guò)后續(xù)改進(jìn),我又再計(jì)算器中加入了音樂(lè)播放功能,能夠邊聽(tīng)音樂(lè)邊計(jì)算。截圖及程序代碼如下:void CJncalDlg:OnMUSIC1() /播放音樂(lè)1PlaySo

20、und("F:/1.wav", NULL, SND_FILENAME| SND_ASYNC);void CJncalDlg:OnMUSICOFF()/關(guān)閉音樂(lè)/ TODO: Add your control notification handler code herePlaySound(NULL,NULL,SND_ASYNC);void CJncalDlg:OnMUSICCHANGE()/播放音樂(lè)2/ TODO: Add your control notification handler code herePlaySound("F:/1.wav", NULL, SND_FILENAME| SND_ASYNC);五、 總結(jié)這次計(jì)算器的制作我查閱了大量參考文獻(xiàn)借鑒了許多前輩們的制作基礎(chǔ)上獨(dú)立完成的??丶奶砑樱a的編寫(xiě)都是耗費(fèi)大量時(shí)間和精力才成功的。計(jì)算器已經(jīng)實(shí)現(xiàn)了其基本功能,可以進(jìn)行整數(shù)和小數(shù)的加減乘除、平方、開(kāi)方運(yùn)算,與其他計(jì)算器不同的是我所制作的計(jì)算器能夠完整的顯示運(yùn)算

溫馨提示

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