課程設計計算器_第1頁
課程設計計算器_第2頁
課程設計計算器_第3頁
課程設計計算器_第4頁
課程設計計算器_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課 程 設 計 報 告 課程名稱: 面向對象程序設計C+ 設計題目: 計算器課程設計 專 業(yè): 計算機科學與技術2013級 姓 名: 學 號: 指導教師: 李曉虹 2016 年 1 月 8 日1背景與目的 隨著科技的發(fā)展,人們在很多地方都要用到計算器來進行工程和商業(yè)上的運算,計算器在日常生活中的重要地位已經舉足輕重。計算器是日常生活中十分便捷有效的工具,能實現加、減、乘、除、等簡單運算的工具。計算器使用非常簡單和方便,對廣大中小學生的學習有巨大幫助作用,也對在職人員的工作有點幫助作用。要實現計算功能,可以用VC+的知識編寫程序來解決此問題。簡單計算器包括雙目運算和單目運算功能。雙目運算符包含基

2、本的四則運算及乘冪功能,單目運算符包含正余弦,階乘,對數,開方,倒數等運算。可對輸入任意操作數,包括小數和整數及正數和負數進行以上的所有運算并能連續(xù)運算。出現錯誤會給出相應提示,同時包含清除,退格,退出功能以及有與所有按鈕相對應的菜單項。在程序設計中,通過設計、編制、調試一個模擬計算器的程序,加深對語法及語義分析原理的理解,并實現對命令語句的靈活應用。在程序設計中,可以用兩種方法解決問題:一是傳統(tǒng)的結構化程序設計方法,二是更先進的面向對象程序設計方法。由于多個函數均需要訪問某些數據,這些數據常被設計為全局變量。而在面向對象程序設計中關鍵是如何將問題域中的實體(即日常所見的概念)抽取出來,作為C

3、+程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應考慮類必須滿足的約束2需求分析本軟件主要用于計算機windows 2007/XP以上版本的用戶的使用,這次課程設計一般是實現簡單計算器的功能。要程序能實現:加,減,乘,除,開方;還要實現數據的輸入,輸出,計算,顯示及程序退出等功能。另外還可以實現多種科學計算的功能,如:正負數的運算,還有分數與小數的轉化。3詳細設計3.1設計目標了解Windows應用程序的結構與DOS程序的不同,掌握應用MFC類庫編寫Windows應用程序的基本模式。3.2設計內容以簡易計算器為例,通過對簡單應用軟件計算器的設計,編制、調試,實現簡單

4、的加,減,乘,除等運算,以學習應用MFC庫類編寫對話框的原理,加深對C+類的學習及應用。3.3設計思想基于MFC庫類對對話框界面的設計,通過創(chuàng)建類成員函數成員變量,編輯控件創(chuàng)建消息映射,調用消息函數完成數據的輸入輸出,實現計算功能。生成簡單的應用軟件。3.4設計說明 (1)包含的功能有:加、減、乘、除運算,開方等功能。 (2)計算器上數字09為一個控件數組,加、減、乘、除為一個控件數組,其余為單一的控件。 (3)輸入的原始數據、運算中間數據和結果都顯示在窗口頂部的同一個標簽中。 (4)計算功能基本上是用系統(tǒng)內部函數。 (5)程序可以能自動判斷輸入數據的正確性,保證不出現多于一個小數點、以0開頭

5、等不正常現象。 (6)“CE”按鈕可以清除所有已輸入的數據從頭計算3.5設計模塊圖圖3-1功能模塊圖 圖3-1簡單計算器模塊程圖3.5設計總流程圖 圖3-2設計總流程圖4詳細設計4.1設計步驟(1) 選擇命令,選擇MFC AppWizard(exe)創(chuàng)建Project名為Caa,按確定。在彈出界面選擇創(chuàng)建對話框,單擊Finish按鈕 (2) 在生成的設計界面中加入控件,得到計算器應用界面。如圖:圖4-1計算器應用界面(3) 為控件編輯框編輯ID,如圖:(4) 進入ClassWizard界面選擇Message Maps為控件插入消息映射,插入消息函數,實現控件命令功能。如圖: 圖4-2Class

6、Wizard界面(5) 進入ClassWizard界面Message Varibles為編輯框添加成員變量m_result用以顯示結果。如圖:圖4-3添加成員變量界面(6) 在CaaDlg.h中加入在主要成員函數和成員變量的申明在CaaDlg.cpp中加入主要成員函數實現過程和成員變量的初始化(代碼片段將于后面介紹)4.2主要成員函數關系圖 圖4-4成員函數關系圖5計算器的測試結果5.1測試一點擊“12.5”“+”“8”“=”,運算結果20.5,與實際結果相同。圖5-1 測試運算結果5.2測試二點擊“4”,再點擊“sqrt”,結果為2,與實際結果相符。圖5-2 測試運算結果5.3測試三點擊“5

7、0”與“-”“*”“2”“=”,結果為-100,與實際結果相符。圖5-3 測試運算結果6結果分析通過對計算器的功能測試,各類運算功能都已經實現,只是當輸入的數據很大或者很小時,會致使結果很大或者很小,此時,若是結果的大小超過數據類型的表示范圍,那么就會產生錯誤,并且顯示錯誤信息。若是沒有超出數據的表示范圍,那么就會用浮點數來表示比較大或者比較小的數據。但總體來說本計算器完全可以運用到實際生活中去為人們帶來方便。7總結經過多次測試,得出結論為設計的計算器基本完成功能描述內容中的全部功能。盡管還有一小部分的功能沒有實現,但是收獲很大。這樣不僅能加深我們對MFC程序設計的掌握,而且還及時、真正的做到

8、了學以致用。同時這次課程設計也讓我學到了很多,不僅是鞏固了先前學的MFC程序設計知識,而且也培養(yǎng)了我的動手能力,更令我的創(chuàng)造性思維得到拓展。也要善于思考。程序中有些實現難點和最初完成程序時免不了的許多不足就需要自己根據代碼認真思考來解決。只有這樣才能糾正程序的不足并使其更加人性化。7附源代碼#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "resource.h"#include "MainDlg.h"#include &l

9、t;math.h>TCHAR text50;TCHAR opt='c'BOOL have=FALSE,enable=TRUE;double num1=0,num2=0;BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch(uMsg) HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_C

10、LOSE, Main_OnClose); return FALSE;BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)memset(text,'0',sizeof(TCHAR)*50);SetDlgItemText(hwnd,IDC_EDIT,TEXT("0."); return TRUE;void trim()int i=0,j=0;for (i=0;i<lstrlen(text);i+)if (texti!='0'&&texti!='

11、;0')j=i;for (j=j+1;j<lstrlen(text);j+)textj='0'void AppendText(HWND hwnd,TCHAR c)if (lstrlen(text)=1&&text0='0'&&c!='.')text0=c;elsetextlstrlen(text)=c;SetDlgItemText(hwnd,IDC_EDIT,text);void result(HWND hwnd)switch(opt)case '+':num2=num2+num1;b

12、reak;case '-':num2=num2-num1;break;case '*':num2=num1*num2;break;case '/':if (num1=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT("除數不能為零.");enable=FALSE;return; elsenum2=num2/num1;break;default:num2=num2+num1;break;num1=0;sprintf(text,TEXT("%f"),num2);trim();SetDlgI

13、temText(hwnd,IDC_EDIT,text);void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)TCHAR c2; switch(id) case IDC_0:case IDC_1:case IDC_2:case IDC_3:case IDC_4:case IDC_5:case IDC_6:case IDC_7:case IDC_8:case IDC_9:if (enable)GetDlgItemText(hwnd,id,c,2);AppendText(hwnd,c0);break;case ID

14、C_DOT:if (!have&&enable)have=TRUE;if (lstrlen(text)=0)AppendText(hwnd,'0');AppendText(hwnd,'.');break;case IDC_PLUSS:case IDC_SUB:case IDC_MUL:case IDC_DIV:if(enable)if (lstrlen(text)!=0)num1=atof(text);result(hwnd);GetDlgItemText(hwnd,id,c,2);opt=c0;memset(text,'0',s

15、izeof(TCHAR)*50);have=FALSE; elseGetDlgItemText(hwnd,id,c,2);opt=c0;break;case IDC_EQUAL:if (lstrlen(text)!=0&&enable)num1=atof(text);result(hwnd);memset(text,'0',sizeof(TCHAR)*50);have=FALSE;break;case IDC_C:memset(text,'0',sizeof(TCHAR)*50);num1=0;num2=0;have=FALSE;enable=T

16、RUE;opt='c'SetDlgItemText(hwnd,IDC_EDIT,TEXT("0.");break;case IDC_CE:memset(text,'0',sizeof(TCHAR)*50);num1=0;have=FALSE;enable=TRUE;SetDlgItemText(hwnd,IDC_EDIT,TEXT("0.");break;case IDC_CHANGE:if (strlen(text)!=0&&enable)num1=atof(text);num1=-num1;sprint

17、f(text,TEXT("%f"),num1);trim();SetDlgItemText(hwnd,IDC_EDIT,text);break;case IDC_1CX:if (enable)num1=atof(text);if (num1=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT("除數不能為零.");enable=FALSE; elsenum1=1.0/num1;sprintf(text,TEXT("%f"),num1);trim();SetDlgItemText(hwnd,IDC_EDIT,text

18、);break;case IDC_BFH:break;case IDC_SQRT:if (enable)num1=atof(text);if (num1<0)SetDlgItemText(hwnd,IDC_EDIT,TEXT("被開方數不能為負數.");enable=FALSE;elsenum1=sqrt(num1);sprintf(text,TEXT("%f"),num1);trim();SetDlgItemText(hwnd,IDC_EDIT,text);break;case IDC_BACKSPACE:if (lstrlen(text)>0&&enable)textlstrlen(text)-1='0'if (lstrlen(text)=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT("0."); elseSetDlgItemText(hwnd,IDC_EDIT,text);break;case IDC_MC:b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論