




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、面向?qū)ο蟮腣isual C+程序設(shè)計課程設(shè)計報告學(xué) 號: 1123101750 姓 名: 金鵬舉 專業(yè)年級:11測控技術(shù)與儀器河南大學(xué)物理與電子學(xué)院測控技術(shù)與儀器教研室1 / 15基于對話框的計算器MFC方法實現(xiàn)隨著社會的發(fā)展,人們在日常生活中經(jīng)常需要用到計算器來進行簡單或者復(fù)雜的運算,計算器在人們生活中的地位也越來越重要。簡單的計算器能實現(xiàn)加、減、乘、除、開方、平方等運算。學(xué)習(xí)了C+的程序設(shè)計語言這門課程,可以利用基于VC的MFC方法制作一個簡易的計算器,實現(xiàn)基本的運算功能,從而滿足生活中的需要,降低計算的難度。一. 面向?qū)ο蟮某绦蛟O(shè)計方法區(qū)別與面向過程的“先功能后數(shù)據(jù)”思想,面向?qū)ο蟮某绦?/p>
2、設(shè)計方法把狀態(tài)(數(shù)據(jù))和行為(功能)捆綁在一起,形成了對象。當(dāng)遇到一個具體的問題時,我們只需要將一個系統(tǒng)分解成一個個的對象,同時將狀態(tài)和行為封裝在對象中。面向?qū)ο蟮某绦蛟O(shè)計方法具有三個基本特點:封裝、繼承和多態(tài)。(1)封裝性封裝是一個用來指代將對象的狀態(tài)和行為捆綁到一個單一邏輯單元的機制的正式術(shù)語。它不是面向?qū)ο笳Z言所特有的,面向過程的C語言用結(jié)構(gòu)封裝了數(shù)據(jù),函數(shù)封裝了邏輯。但是面向?qū)ο蠓庋b了兩者,從這種意義上來說,面向?qū)ο蟮姆庋b更加完美。出于一些安全性與方便性的考慮,對象經(jīng)常會限制對它們特征(包括屬性和方法)的訪問,這種限制稱為信息隱藏。作為對象的抽象,類通常只公開對象可以公開的東西,主要是
3、一個特定對象對系統(tǒng)的服務(wù),而隱藏執(zhí)行服務(wù)的內(nèi)部細節(jié)和為了完成這些服務(wù)而設(shè)計的數(shù)據(jù)。(2)繼承性繼承是定義新類的一種機制,使用這種機制創(chuàng)建新類時只需要聲明新類和已創(chuàng)建類之間的差別。對于一個特定的繼承關(guān)系,我們將創(chuàng)建的新類稱為子類(subclass),被繼承的原始類稱為超類(superclass)。子類可以使用超類定義屬性和方法,也可以自己定義新的屬性和方法。超類的特征不會受到子類的影響。繼承帶來的第一個且是最顯而易見的好處是減少了代碼冗余,因此也減輕了需要改進或重寫代碼時的負擔(dān)。進一步地,子類會比不使用繼承時更加簡潔,這點應(yīng)當(dāng)不難理解;通過繼承可以不加修改地重用和擴展已經(jīng)徹底測試的代碼,這避免了
4、工程性的組裝對已經(jīng)完成測試代碼的影響;最好的一點,即使沒有已有類的源代碼,仍然可以從已有的類中派生出新類,只要我們擁有那個類編譯后的字節(jié)碼。(3)多態(tài)性術(shù)語多態(tài)指的是屬于兩個或多個不同類的對象以各自的類相關(guān)的不同方式響應(yīng)同一消息(方法調(diào)用)的能力。同一個消息根據(jù)發(fā)送的對象不同而采用多種不同的行為方式。換句話說多態(tài)使得消息發(fā)送者能給一組具有公共接口的對象發(fā)送相同的消息,接收者做出相應(yīng)的回應(yīng)。多態(tài)的作用:增強了代碼的可讀性、操作的透明性,增強了代碼的靈活性和可擴充性。二. MFC程序設(shè)計方法(1)API應(yīng)用程序編程的接口函數(shù)一個應(yīng)用程序要和具體的硬件打交道,比如接收按鍵值,接收鼠標左擊或右擊,記錄
5、鼠標的坐標等,就勢必要有所有這些硬件的驅(qū)動,這樣加大了程序的代碼量。而且,每一個應(yīng)用程序都得寫,增加了不必要的重復(fù)工作。操作系統(tǒng)就是解決這些問題的。操作系統(tǒng)基于硬件和應(yīng)用程序之間,它提供應(yīng)用程序調(diào)用的函數(shù),應(yīng)用程序可通過這些函數(shù)與硬件打交道。而這些函數(shù)就是API。(2)MFC(MicrosoftFoundationClass)微軟基礎(chǔ)類庫MFC類庫集成了大量已經(jīng)預(yù)先定義好的類,用戶可以根據(jù)編程的需要調(diào)用響應(yīng)的類,或根據(jù)需要自定義有關(guān)的類。(3)窗口就是一個應(yīng)用程序能夠看到的部分。是Windows應(yīng)用程序中一個非常重要的元素。通常都包含標題欄、菜單欄、系統(tǒng)菜單等(4)消息和消息隊列消息:應(yīng)用程序
6、接收的事件都會產(chǎn)生相應(yīng)的消息,消息的產(chǎn)生是因為事件發(fā)生的結(jié)果。如鍵盤有鍵盤按下和抬起消息,鼠標有點擊消息,畫面有刷新消息,重畫消息等。編寫應(yīng)用程序時,如果需要對某事件進行響應(yīng),如需要當(dāng)按下Ctrl+S組合鍵就進行保存操作時,就需要對Ctrl+S這個事件對應(yīng)的消息設(shè)計響應(yīng)函數(shù)。消息隊列:應(yīng)用程序?qū)κ录⑦M行的響應(yīng)時從它本身的消息隊列里取出消息來執(zhí)行的。事件是有操作系統(tǒng)接收的,然后把它轉(zhuǎn)化成消息,再把消息送到應(yīng)用程序所在的隊列中,供應(yīng)用程序取走。(5)事件驅(qū)動Windows應(yīng)用程序函數(shù)執(zhí)行過程沒有一個固定的順序。一條消息過來就對應(yīng)進行響應(yīng)(只要設(shè)計了響應(yīng)函數(shù)),那條消息來就執(zhí)行那條對應(yīng)的函數(shù),沒
7、有消息就等待。MFC程序設(shè)計的好處:一是MFC提供了一個標準化的結(jié)構(gòu),通過創(chuàng)建時的選擇就可以實現(xiàn)一個基本的程序功能。這樣不必從頭開始設(shè)計創(chuàng)建和管理一個標準Windows應(yīng)用程序所需的代碼,節(jié)省了時間;二是它可以自動生成很多代碼,比如只要用類向?qū)В–lassWizard)添加了一個成員變量,它就會自動在代碼的相應(yīng)位置添加代碼進去,如果手動添加,不光麻煩,而且文件很多,位置不固定可能會遺漏。所以類向?qū)墙?jīng)常需要用的,以提高編程效率,減少出錯。MFC編程的主要過程就是編寫消息響應(yīng)函數(shù)的過程,因為其他的工作都自動生成了。因此就需要我們知道如何添加消息響應(yīng)函數(shù)(用類向?qū)В憫?yīng)函數(shù)中寫什么內(nèi)容。響應(yīng)函數(shù)
8、的內(nèi)容主要是調(diào)用系統(tǒng)函數(shù),類里定義的成員函數(shù),系統(tǒng)的系統(tǒng)函數(shù),以及變量的傳遞等。三. MFC實現(xiàn)計算器的程序設(shè)計程序流程圖點擊加減乘除等進行運算選擇點擊數(shù)字鍵,輸入第二個操作數(shù)點擊數(shù)字鍵,輸入第一個操作數(shù)點擊“=”鍵,輸出運算結(jié)果程序開始顯示運算結(jié)果主要程序代碼如下:/為了能在同一個編輯框里顯示完整的算式,我添加了兩個編輯框,同時輸入,一個負責(zé)計算數(shù)據(jù)的不可見,另一個可見的用來顯示。void CJncalDlg:OnNUM1()/ 點擊數(shù)字鍵1時顯示1UpdateData(TRUE);m_str1 = m_str1 + 1;/在編輯框1的字符串后加上字符1m_str2 = m_str2 + 1
9、;/在編輯框2的字符串后加上字符1UpdateData(FALSE);void CJncalDlg:OnNUM2()/ 按下數(shù)字鍵2時顯示數(shù)字2UpdateData(TRUE);m_str1 = m_str1 + 2;/在編輯框1的字符串后加上字符2m_str2 = m_str2 + 2;/在編輯框2的字符串后加上字符2UpdateData(FALSE);void CJncalDlg:OnNUM3()/ /按下數(shù)字鍵3時顯示數(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ù)將第一個操作數(shù)變?yōu)閐ouble型并保存m_Sign = 0;/選擇語句的條件賦值void CJncalDlg:OnDEC()/減法UpdateData(TRUE);m_str2 = m_str2 + -;/顯示框上顯示“-”UpdateData(FALSE);SaveValue1()
11、;/調(diào)用函數(shù)將第一個操作數(shù)變?yōu)閐ouble型并保存m_Sign = 1; /選擇語句的條件賦值void CJncalDlg:OnMUL() UpdateData(TRUE);m_str2 = m_str2 + ;/顯示框上顯示“”UpdateData(FALSE);SaveValue1();/調(diào)用函數(shù)將第一個操作數(shù)變?yōu)閐ouble型并保存m_Sign = 2;/選擇語句的條件賦值void CJncalDlg:OnDIV() /除法UpdateData(TRUE);m_str2 = m_str2 + ;/顯示框上顯示“”UpdateData(FALSE);SaveValue1();/調(diào)用函數(shù)將第
12、一個操作數(shù)變?yōu)閐ouble型并保存m_Sign = 3; /選擇語句的條件賦值void CJncalDlg:OnEQUAL() /“=”操作Calculator();/調(diào)用Calculator函數(shù)void CJncalDlg:SaveValue1()/保存第一個操作數(shù)函數(shù)UpdateData(TRUE);m_num1 = atof(m_str1);/第一個編輯框內(nèi)的字符轉(zhuǎn)換為數(shù)字并賦給m_fNumber1m_str1 = ;/清空第一個編輯框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)/選擇語句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(輸入錯誤,請重新輸入);elsef = m_numn1 / m_num2;break;case 4: /平方f = m_num2 * m_n
14、um2;break;case 5: /開方f = sqrt(m_num2);break;default:break;if(r - int(r) = 1e-5) /如果浮點數(shù)其實是個整數(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 = ;/第一個編輯框賦空值m_str2 = ;/第二個編輯框賦空值m_num1 = 0.0f; /第一個操作數(shù)賦0m_ num2 = 0.0f; /第二個操作數(shù)賦0m_Sign = 0;UpdateData(FALSE);void CJncalDlg:OnDEL() /退格操作UpdateData(TRUE);if (!m_str1.IsEmpty()/移除編輯框內(nèi)最右邊一個字符m_str1= m_str1.Left(m_str1.GetLength()-1);m_str2 = m_str2.
16、Left(m_str2.GetLength()-1);UpdateData(FALSE); /以下為顯示當(dāng)前時間操作int CJncalDlg:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CDialog:OnCreate(lpCreateStruct) = -1)return -1;SetTimer(1,1000,NULL);/設(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);四、 試驗結(jié)果展示計算器的整體效果圖。我在計算器的頂端加入了顯示當(dāng)前日期和時間的功能,更加方便快捷。 加法功能的實現(xiàn)減法功能的實現(xiàn)乘法功能的實現(xiàn)除法功能的實現(xiàn)本計算器除了能實現(xiàn)加減乘除運算,還能進行平方(x2)和開方(sqrt)的運算。以下為開方演示 。關(guān)于計算器經(jīng)過后續(xù)改進,我又再計算器中加入了音樂播放功能,能夠邊聽音樂邊計算。截圖及程序代碼如下:void CJncalDl
18、g:OnMUSIC1() /播放音樂1PlaySound(F:/1.wav, NULL, SND_FILENAME| SND_ASYNC);void CJncalDlg:OnMUSICOFF()/關(guān)閉音樂/ TODO: Add your control notification handler code herePlaySound(NULL,NULL,SND_ASYNC);void CJncalDlg:OnMUSICCHANGE()/播放音樂2/ TODO: Add your control notification handler code herePlaySound(F:/1.wav, NULL, SND_FILENAME| SND_ASYNC);五、 總結(jié)本次計算器的制作是在查閱了大量參考文獻借鑒了許多前輩們的制作基礎(chǔ)上獨立完成的。控件的添加,代碼的編寫都是耗費大量時間和精力才成功的。計算器已經(jīng)實現(xiàn)了其基本功能,可以進行整數(shù)和小數(shù)的加減乘除、平方、開方運算,與其他計算器不同的是我所制作的計算器能夠完整的顯示運算式,這樣能夠清楚的看到自己所做的運算,更加方便,能夠及時找出錯誤,并且我還在計算器的頂端設(shè)計了當(dāng)天日期和當(dāng)前時間,更加符
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020年全國生物學(xué)聯(lián)賽加試答案
- 河南省許平汝名校2025屆高三下學(xué)期二模試題 物理 含解析
- 品牌代理運營合同協(xié)議
- 榆次二手房買賣合同協(xié)議
- 2025借款合同優(yōu)于租賃合同
- 2025中型建筑承包合同范本
- 哈密供熱合同協(xié)議
- 品牌規(guī)劃咨詢合同協(xié)議
- 四川省南充市2025屆高三下學(xué)期4月三診試題 政治 含解析
- 2025版全面單價合同范本
- 人教版美術(shù)一年級下冊《走進舊時光》課件
- 2025-2030中國棒棒糖行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 天津東疆綜合保稅區(qū)管理委員會招聘筆試題庫2025
- 江蘇省南京市江寧區(qū)2024-2025學(xué)年統(tǒng)編版二年級下冊期中考試語文試卷(含答案)
- 鐵路調(diào)車綜合實訓(xùn)鐵鞋的使用和注意事項課件
- 多模態(tài)自適應(yīng)技術(shù)應(yīng)用于鋼材表面缺陷檢測的研究與分析
- 無人機配送技術(shù)發(fā)展-全面剖析
- 廣東省江門市2025屆高三下學(xué)期一模化學(xué)試題(原卷版+解析版)
- 2025年春季學(xué)期形勢與政策第二講-中國經(jīng)濟行穩(wěn)致遠講稿
- 人教PEP版英語五年級下冊Recycle 1單元教學(xué)設(shè)計(2課時教案)
- 2025年山西焦煤集團有限責(zé)任公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論