C++課程設(shè)計(jì):計(jì)算器(4)_第1頁(yè)
C++課程設(shè)計(jì):計(jì)算器(4)_第2頁(yè)
C++課程設(shè)計(jì):計(jì)算器(4)_第3頁(yè)
C++課程設(shè)計(jì):計(jì)算器(4)_第4頁(yè)
C++課程設(shè)計(jì):計(jì)算器(4)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(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、.課 程 設(shè) 計(jì) 報(bào) 告 課程名稱:面向?qū)ο蟪绦蛟O(shè)計(jì)C+ 設(shè)計(jì)題目: 計(jì)算器 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 姓 名: 學(xué) 號(hào): 指導(dǎo)教師:李 曉 虹2016 年 1 月 1 日(1) 系統(tǒng)需求分析編寫(xiě)一個(gè)程序來(lái)實(shí)現(xiàn)算術(shù)計(jì)算器。通過(guò)結(jié)構(gòu)體數(shù)組和共用體數(shù)組來(lái)存放輸入的每一數(shù)字或運(yùn)算符號(hào)的記錄(包括1、2、3等數(shù)字,+、-、*、/、等運(yùn)算符號(hào)),然后將其信息存入文件中。輸入一個(gè)算術(shù)計(jì)算式,就在屏幕上顯示結(jié)果。(2) 總體設(shè)計(jì)是通過(guò)在計(jì)算器的界面上按下相應(yīng)的按鈕,來(lái)進(jìn)行基本的加,減,乘,除等基本運(yùn)算。A 創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序。 B 利用資源編輯器編輯對(duì)話框資源,及設(shè)計(jì)

2、計(jì)算器界面并修改對(duì)話框各按鈕的ID屬性和Caption屬性。 C 利用ClassWizard為各按鈕添加消息映射(代碼在下面詳細(xì)介紹)。 D 設(shè)置對(duì)話框文本背景顏色。(3) 詳細(xì)設(shè)計(jì)打開(kāi)Microsoft Visual C+ 6.0,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFC AppWizardexe工程,輸入工程名計(jì)算器及其所在位置,點(diǎn)擊確定,如圖1-1圖1-1將彈出MFC AppWizard-step 1對(duì)話框,選擇基本對(duì)話框,點(diǎn)擊完成,如圖1-2圖1-2這樣,MFC AppWizard就建立了一個(gè)基于對(duì)話窗口的程序框架,如圖1-3圖1-3界面設(shè)計(jì)1、創(chuàng)

3、建控件Resoure View選項(xiàng)卡中打開(kāi)Dialog資源組,雙擊IDD_main,在右邊的窗口中顯示出待編輯的對(duì)話框。開(kāi)始擺放控件,包括編輯框和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照此進(jìn)行操作。1)在圖5中Controls的“編輯框”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫(huà)出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷萊單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對(duì)話框,在該對(duì)話框中輸入ID屬性。 如圖2-1圖1-42)Controls的“Button”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫(huà)出一個(gè)

4、大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出Push Button屬性對(duì)話框,在該對(duì)話框中輸入控件的ID值和標(biāo)題屬性。如圖1-5圖1-5按照上面的操作過(guò)程編輯其他按鈕和編輯框等對(duì)象的屬性。如表2-1各按鈕和編輯框等對(duì)象的屬性對(duì)象ID標(biāo)題或說(shuō)明編輯框IDC_EDIT結(jié)果顯示按鈕IDC_00按鈕IDC_11按鈕IDC_22按鈕IDC_33按鈕IDC_44按鈕IDC_55按鈕IDC_66按鈕IDC_77按鈕IDC_88按鈕IDC_99按鈕IDC_CHANGE+/-按鈕IDC_DOT.按鈕IDC_PLUSS+按鈕IDC_SUB-按鈕IDC_MUL*按鈕IDC_

5、DIV/按鈕IDC_SQRTSqrt按鈕IDC_1CX1/x按鈕IDC_BFH%按鈕IDC_CC按鈕IDC_CECE按鈕IDC_BACKSPACEBackspace按鈕IDC_STATIC按鈕IDC_MCMC按鈕IDC_MRMR按鈕IDC_MSMS按鈕IDC_MPLUSSM+表2-1完成后界面如圖1-6圖1-62、連接變量和代碼1) 給編輯框連接變量。在編輯框上單擊鼠標(biāo)右鍵,在彈出菜單中選擇ClassWizard菜單項(xiàng),彈出MFC ClassWizard對(duì)話框,選擇Member Variables選項(xiàng)卡3、菜單的設(shè)計(jì)選擇 插入/資源命令,將顯示插入資源對(duì)話框。選擇Menu,點(diǎn)擊新建即可。如圖1

6、-7圖1-7Resoure View選項(xiàng)卡中打開(kāi)Menu資源組,雙擊IDR_MENU,如圖1-8圖1-8最終的得到的界面如圖1-9圖1-9(4) 系統(tǒng)調(diào)試加減乘除均能正常運(yùn)行 當(dāng)除數(shù)為0時(shí) 如圖1-10圖1-10證明錯(cuò)誤提示功能實(shí)現(xiàn)正常。計(jì)算器功能基本實(shí)現(xiàn)。(5) 結(jié)果分析在Windows可視化界面中,消息映射函數(shù)十分重要,每個(gè)按鈕必須與與之對(duì)應(yīng)的消息函數(shù)對(duì)應(yīng),同時(shí),函數(shù)的變量也應(yīng)該在MFC Class Wizard里設(shè)置準(zhǔn)確,否則會(huì)影響最終的調(diào)試。在設(shè)置編輯框的變量時(shí)要注意與程序中的的變量名保持一致,這樣才能保證鍵入的數(shù)值能正確顯示在程序框中。在初始化列表框的過(guò)程中,添加Onintdialo

7、g中的代碼時(shí)要注意各個(gè)操作項(xiàng)的順序,否則會(huì)造成操作項(xiàng)的反串給對(duì)應(yīng)按鍵加函數(shù)時(shí)注意添加到源文件中正確的位置,否則會(huì)造成程序產(chǎn)生錯(cuò)誤。(6) 總結(jié)通過(guò)計(jì)算器程序的設(shè)計(jì),使我對(duì)VC+ MFC有了一定了解,使用MFC類庫(kù)可以大大簡(jiǎn)化程序的設(shè)計(jì),為我們?cè)O(shè)計(jì)程序提供了很大的方便。我們通過(guò)查閱各種介紹MFC編程的書(shū)籍,最后學(xué)會(huì)了從利用MFC的應(yīng)用程序向?qū)ВˋppWizard)創(chuàng)建一個(gè)應(yīng)用程序,再到添加控件,再到消息函數(shù)的創(chuàng)建,再到控件代碼的編輯,最后完成程序。在程序設(shè)計(jì)中遇到困難時(shí),我和同學(xué)們一起討論,解決問(wèn)題,遇到實(shí)在是想不通的地方,通過(guò)老師的指點(diǎn)答疑,最終共同完成了程序。在整個(gè)過(guò)程中,也增進(jìn)了我發(fā)現(xiàn)問(wèn)題

8、和解決問(wèn)題的能力。附源代碼Main.cpp/ 計(jì)算器.cpp : Defines the entry point for the application./#include "stdafx.h"#include "resource.h"#include "MainDlg.h"#include <COMMCTRL.H>int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)/Enable

9、IPAddress、Calendar.etcInitCommonControls();DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);return 0;MainDlg.cpp#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "resource.h"#include "MainDlg.h"#include <math.h>TCHAR

10、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_CLOSE, Main_OnClose)

11、; 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!='0')j=i;for (j=

12、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;break;case '-

13、9;: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();SetDlgItemText(hwnd,IDC_ED

14、IT,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 IDC_DOT:if (!have&

15、;&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',sizeof(TCHAR)*50);ha

16、ve=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=TRUE;opt='c'

17、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;sprintf(text,TEXT("%

18、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);break;case IDC_BFH:break;case IDC_SQRT:if (enable)num1=atof(text);if (num1<0)SetDlgItemText(hwnd,IDC_EDIT,TEXT("被開(kāi)方數(shù)不能為負(fù)數(shù).");enable=FALSE;elsenum1=sqr

溫馨提示

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