基于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è),還剩10頁(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、面向?qū)ο蟮腣isual C+程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告學(xué) 號(hào): 1123101750 姓 名: 金鵬舉 專(zhuān)業(yè)年級(jí):11測(cè)控技術(shù)與儀器河南大學(xué)物理與電子學(xué)院測(cè)控技術(shù)與儀器教研室1 / 15基于對(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ū)別與面向過(guò)程的“先功能后數(shù)據(jù)”思想,面向?qū)ο蟮某绦?/p>

2、設(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更加完美。出于一些安全性與方便性的考慮,對(duì)象經(jīng)常會(huì)限制對(duì)它們特征(包括屬性和方法)的訪問(wèn),這種限制稱(chēng)為信息隱藏。作為對(duì)象的抽象,類(lèi)通常只公開(kāi)對(duì)象可以公開(kāi)的東西,主要是

3、一個(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)的影響。繼承帶來(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è)試的代碼,這避免了

4、工程性的組裝對(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ì)象不同而采用多種不同的行為方式。換句話說(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)左擊或右擊,記錄

5、鼠標(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)用程序可通過(guò)這些函數(shù)與硬件打交道。而這些函數(shù)就是API。(2)MFC(MicrosoftFoundationClass)微軟基礎(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)用程序

6、接收的事件都會(huì)產(chǎn)生相應(yīng)的消息,消息的產(chǎn)生是因?yàn)槭录l(fā)生的結(jié)果。如鍵盤(pán)有鍵盤(pán)按下和抬起消息,鼠標(biāo)有點(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)

7、有消息就等待。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)容。響應(yīng)函數(shù)

8、的內(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_str2 = m_str2 + 1

9、;/在編輯框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 + 3;/在編輯框1的字符串后加上字符3m_str2 = m_str2 + 3;/在編輯框2的字符

10、串后加上字符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:OnDEC()/減法UpdateData(TRUE);m_str2 = m_str2 + -;/顯示框上顯示“-”UpdateData(FALSE);SaveValue1()

11、;/調(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;/選擇語(yǔ)句的條件賦值void CJncalDlg:OnDIV() /除法UpdateData(TRUE);m_str2 = m_str2 + ;/顯示框上顯示“”UpdateData(FALSE);SaveValue1();/調(diào)用函數(shù)將第

12、一個(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 = atof(m_str1);/第一個(gè)編輯框內(nèi)的字符轉(zhuǎn)換為數(shù)字并賦給m_fNumber1m_str1 = ;/清空第一個(gè)編輯框UpdateData(FALSE);void CJncalDlg:Calculator()/Calculator函數(shù)UpdateData(TRUE);m_

13、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;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_n

14、um2;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_str2=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)用voi

15、d CJncalDlg:OnCE() /清空編輯框操作UpdateData(TRUE);m_str1 = ;/第一個(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.

16、Left(m_str2.GetLength()-1);UpdateData(FALSE); /以下為顯示當(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.For

17、mat(%d:%d:%d,st.wHour,st.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 CJncalDl

18、g:OnMUSIC1() /播放音樂(lè)1PlaySound(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ú)立完成的。控件的添加,代碼的編寫(xiě)都是耗費(fèi)大量時(shí)間和精力才成功的。計(jì)算器已經(jīng)實(shí)現(xiàn)了其基本功能,可以進(jìn)行整數(shù)和小數(shù)的加減乘除、平方、開(kāi)方運(yùn)算,與其他計(jì)算器不同的是我所制作的計(jì)算器能夠完整的顯示運(yùn)算式,這樣能夠清楚的看到自己所做的運(yùn)算,更加方便,能夠及時(shí)找出錯(cuò)誤,并且我還在計(jì)算器的頂端設(shè)計(jì)了當(dāng)天日期和當(dāng)前時(shí)間,更加符

溫馨提示

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