版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課 程 設(shè) 計 報 告 課程名稱: 面向?qū)ο蟪绦蛟O(shè)計C+ 設(shè)計題目: 計算器課程設(shè)計 專 業(yè): 計算機(jī)科學(xué)與技術(shù)2013級 姓 名: 學(xué) 號: 指導(dǎo)教師: 李曉虹 2016 年 1 月 8 日1背景與目的 隨著科技的發(fā)展,人們在很多地方都要用到計算器來進(jìn)行工程和商業(yè)上的運算,計算器在日常生活中的重要地位已經(jīng)舉足輕重。計算器是日常生活中十分便捷有效的工具,能實現(xiàn)加、減、乘、除、等簡單運算的工具。計算器使用非常簡單和方便,對廣大中小學(xué)生的學(xué)習(xí)有巨大幫助作用,也對在職人員的工作有點幫助作用。要實現(xiàn)計算功能,可以用VC+的知識編寫程序來解決此問題。簡單計算器包括雙目運算和單目運算功能。雙目運算符包含基
2、本的四則運算及乘冪功能,單目運算符包含正余弦,階乘,對數(shù),開方,倒數(shù)等運算。可對輸入任意操作數(shù),包括小數(shù)和整數(shù)及正數(shù)和負(fù)數(shù)進(jìn)行以上的所有運算并能連續(xù)運算。出現(xiàn)錯誤會給出相應(yīng)提示,同時包含清除,退格,退出功能以及有與所有按鈕相對應(yīng)的菜單項。在程序設(shè)計中,通過設(shè)計、編制、調(diào)試一個模擬計算器的程序,加深對語法及語義分析原理的理解,并實現(xiàn)對命令語句的靈活應(yīng)用。在程序設(shè)計中,可以用兩種方法解決問題:一是傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法,二是更先進(jìn)的面向?qū)ο蟪绦蛟O(shè)計方法。由于多個函數(shù)均需要訪問某些數(shù)據(jù),這些數(shù)據(jù)常被設(shè)計為全局變量。而在面向?qū)ο蟪绦蛟O(shè)計中關(guān)鍵是如何將問題域中的實體(即日常所見的概念)抽取出來,作為C
3、+程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應(yīng)考慮類必須滿足的約束2需求分析本軟件主要用于計算機(jī)windows 2007/XP以上版本的用戶的使用,這次課程設(shè)計一般是實現(xiàn)簡單計算器的功能。要程序能實現(xiàn):加,減,乘,除,開方;還要實現(xiàn)數(shù)據(jù)的輸入,輸出,計算,顯示及程序退出等功能。另外還可以實現(xiàn)多種科學(xué)計算的功能,如:正負(fù)數(shù)的運算,還有分?jǐn)?shù)與小數(shù)的轉(zhuǎn)化。3詳細(xì)設(shè)計3.1設(shè)計目標(biāo)了解Windows應(yīng)用程序的結(jié)構(gòu)與DOS程序的不同,掌握應(yīng)用MFC類庫編寫Windows應(yīng)用程序的基本模式。3.2設(shè)計內(nèi)容以簡易計算器為例,通過對簡單應(yīng)用軟件計算器的設(shè)計,編制、調(diào)試,實現(xiàn)簡單
4、的加,減,乘,除等運算,以學(xué)習(xí)應(yīng)用MFC庫類編寫對話框的原理,加深對C+類的學(xué)習(xí)及應(yīng)用。3.3設(shè)計思想基于MFC庫類對對話框界面的設(shè)計,通過創(chuàng)建類成員函數(shù)成員變量,編輯控件創(chuàng)建消息映射,調(diào)用消息函數(shù)完成數(shù)據(jù)的輸入輸出,實現(xiàn)計算功能。生成簡單的應(yīng)用軟件。3.4設(shè)計說明 (1)包含的功能有:加、減、乘、除運算,開方等功能。 (2)計算器上數(shù)字09為一個控件數(shù)組,加、減、乘、除為一個控件數(shù)組,其余為單一的控件。 (3)輸入的原始數(shù)據(jù)、運算中間數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個標(biāo)簽中。 (4)計算功能基本上是用系統(tǒng)內(nèi)部函數(shù)。 (5)程序可以能自動判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個小數(shù)點、以0開頭
5、等不正?,F(xiàn)象。 (6)“CE”按鈕可以清除所有已輸入的數(shù)據(jù)從頭計算3.5設(shè)計模塊圖圖3-1功能模塊圖 圖3-1簡單計算器模塊程圖3.5設(shè)計總流程圖 圖3-2設(shè)計總流程圖4詳細(xì)設(shè)計4.1設(shè)計步驟(1) 選擇命令,選擇MFC AppWizard(exe)創(chuàng)建Project名為Caa,按確定。在彈出界面選擇創(chuàng)建對話框,單擊Finish按鈕 (2) 在生成的設(shè)計界面中加入控件,得到計算器應(yīng)用界面。如圖:圖4-1計算器應(yīng)用界面(3) 為控件編輯框編輯ID,如圖:(4) 進(jìn)入ClassWizard界面選擇Message Maps為控件插入消息映射,插入消息函數(shù),實現(xiàn)控件命令功能。如圖: 圖4-2Class
6、Wizard界面(5) 進(jìn)入ClassWizard界面Message Varibles為編輯框添加成員變量m_result用以顯示結(jié)果。如圖:圖4-3添加成員變量界面(6) 在CaaDlg.h中加入在主要成員函數(shù)和成員變量的申明在CaaDlg.cpp中加入主要成員函數(shù)實現(xiàn)過程和成員變量的初始化(代碼片段將于后面介紹)4.2主要成員函數(shù)關(guān)系圖 圖4-4成員函數(shù)關(guān)系圖5計算器的測試結(jié)果5.1測試一點擊“12.5”“+”“8”“=”,運算結(jié)果20.5,與實際結(jié)果相同。圖5-1 測試運算結(jié)果5.2測試二點擊“4”,再點擊“sqrt”,結(jié)果為2,與實際結(jié)果相符。圖5-2 測試運算結(jié)果5.3測試三點擊“5
7、0”與“-”“*”“2”“=”,結(jié)果為-100,與實際結(jié)果相符。圖5-3 測試運算結(jié)果6結(jié)果分析通過對計算器的功能測試,各類運算功能都已經(jīng)實現(xiàn),只是當(dāng)輸入的數(shù)據(jù)很大或者很小時,會致使結(jié)果很大或者很小,此時,若是結(jié)果的大小超過數(shù)據(jù)類型的表示范圍,那么就會產(chǎn)生錯誤,并且顯示錯誤信息。若是沒有超出數(shù)據(jù)的表示范圍,那么就會用浮點數(shù)來表示比較大或者比較小的數(shù)據(jù)。但總體來說本計算器完全可以運用到實際生活中去為人們帶來方便。7總結(jié)經(jīng)過多次測試,得出結(jié)論為設(shè)計的計算器基本完成功能描述內(nèi)容中的全部功能。盡管還有一小部分的功能沒有實現(xiàn),但是收獲很大。這樣不僅能加深我們對MFC程序設(shè)計的掌握,而且還及時、真正的做到
8、了學(xué)以致用。同時這次課程設(shè)計也讓我學(xué)到了很多,不僅是鞏固了先前學(xué)的MFC程序設(shè)計知識,而且也培養(yǎng)了我的動手能力,更令我的創(chuàng)造性思維得到拓展。也要善于思考。程序中有些實現(xiàn)難點和最初完成程序時免不了的許多不足就需要自己根據(jù)代碼認(rèn)真思考來解決。只有這樣才能糾正程序的不足并使其更加人性化。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("除數(shù)不能為零.");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("除數(shù)不能為零.");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("被開方數(shù)不能為負(fù)數(shù).");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)系上傳者。文件的所有權(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024特崗教師聘用及教師團(tuán)隊協(xié)作能力提升服務(wù)合同3篇
- 2025年度新能源車輛采購及維護(hù)服務(wù)合同范本2篇
- 2025年度智能家居系統(tǒng)代理商合作協(xié)議4篇
- 2025年度新能源汽車研發(fā)出資人合作協(xié)議4篇
- 2025年度旅游景區(qū)特色商品檔口租賃經(jīng)營合同3篇
- 2025年度水電工程安全監(jiān)測系統(tǒng)安裝與維護(hù)服務(wù)合同3篇
- 2024版食堂承包合同協(xié)議范文
- 2025年度特殊崗位人員辭退及安置協(xié)議范本4篇
- 2025年度智能機(jī)器人研發(fā)股權(quán)合作協(xié)議4篇
- 2025年度文化產(chǎn)業(yè)園區(qū)運營管理合同3篇
- 小學(xué)數(shù)學(xué)六年級解方程練習(xí)300題及答案
- 電抗器噪聲控制與減振技術(shù)
- 中醫(yī)健康宣教手冊
- 2024年江蘇揚州市高郵市國有企業(yè)招聘筆試參考題庫附帶答案詳解
- 消費醫(yī)療行業(yè)報告
- 品學(xué)課堂新范式
- GB/T 1196-2023重熔用鋁錠
- 運輸行業(yè)員工崗前安全培訓(xùn)
- 公路工程安全風(fēng)險辨識與防控手冊
- 幼兒園教師培訓(xùn):計數(shù)(數(shù)數(shù))的核心經(jīng)驗
- 如何撰寫和發(fā)表高水平的科研論文-good ppt
評論
0/150
提交評論