設(shè)計計算器論文_第1頁
設(shè)計計算器論文_第2頁
設(shè)計計算器論文_第3頁
設(shè)計計算器論文_第4頁
設(shè)計計算器論文_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、南京信息工程大學(xué)C+面向?qū)ο蟪绦蛟O(shè)計課程作業(yè)報告設(shè)計課題: 計算器的設(shè)計 專業(yè)班級:自動化2班 學(xué)生姓名:學(xué)生學(xué)號:指導(dǎo)教師:成 績:二 一一 年 六 月 二十 日計算器的設(shè)計一、設(shè)計目的學(xué)會用MFC設(shè)計一個簡易計算器,能夠求實數(shù)的四則運算以及求倒數(shù)和平方根,可自己增加功能。二、需求分析系統(tǒng)目標(biāo):設(shè)計的計算器至少能夠進(jìn)行簡單的四則運算和求倒數(shù)求反以及開方運算。主體功能:實現(xiàn)簡單的四則運算和求倒數(shù)求反以及開方運算。開發(fā)環(huán)境:操作系統(tǒng):windows XP;編程環(huán)境:microsoftvisualC+6.0 。3、 總體設(shè)計思路 系統(tǒng)流程圖:鼠標(biāo)單機(jī)左鍵,響應(yīng)相應(yīng)的函數(shù)選擇第一第二個操作數(shù)選擇所需

2、的運算顯示結(jié)果 圖1(流程圖)基本功能劃分:1.加法運算2.減法運算3.乘法運算4.除法運算5.求倒數(shù)6.求平方根7.求余數(shù)8.取反9.Backspace功能10.清零功能11.操作幫助四、詳細(xì)設(shè)計 流程圖:創(chuàng)建工程(創(chuàng)建一個對話框應(yīng)用程序)設(shè)計對話框界面設(shè)置各控件屬性為編輯框連接成員變量為類添加數(shù)據(jù)成員,初始化構(gòu)造函數(shù)。為所有按鈕添加事件對類添加成員函數(shù)(更新編輯框)并進(jìn)行實現(xiàn)實現(xiàn)對各按鈕事件的實現(xiàn)圖2(流程圖)(1)創(chuàng)建工程 啟動Microsoft Visual利用AppWizard向?qū)В瑒?chuàng)建一個工程“Calculator”。選擇基本表,Click完成。(2) 設(shè)計對話框界面 看到如下界面

3、,Delete刪除頁面上全部原配控件。 利用MFC自帶的控件選項編輯計算器界面 設(shè)計的界面如下當(dāng)然作為“所見即所得”的MFC控件設(shè)計,干凈整齊的界面是基本要求,界面是否整潔明了甚至?xí)绊懹脩舻男那椤8骺丶膶傩栽O(shè)置見下表:表1:各個控件控件類型控件的ID控件的CaptionButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonIDC_Num0IDC_Num1IDC_Num9IDC_DotIDC_SignIDC_SubIDC_MulIDC_DivI

4、DC_ClearIDC_SqrtIDC_ReciIDC_EqualIDC_ModIDC_BackspaceIDC_ClearIDC_Help019.+/-+-*/sqrt1/x=%BackspaceClearHelp(3)為編輯框“IDC_DISPLAY”連接成員變量為編輯框“IDC_DISPLAY”連接一個CString類型的成員變量m_display,用來顯示操作數(shù)和運算結(jié)果。(4) 建立向?qū)В?)這里我把添加的控件消息響應(yīng)函數(shù)列出來,控件消息響應(yīng)函數(shù)具體代碼部分。 雙擊控件,首先從加減乘除開始注釋: UpdateData() 是MFC的窗口函數(shù),用來刷新數(shù)據(jù)的由于我們進(jìn)行基本運算需要更新

5、數(shù)據(jù) 所以必須添加這個函數(shù)。無獨有偶剩下的求余,開平方,清零,取反,Backspace,求倒數(shù) 也是大同小異(只是把符號小改一下便可)(6)編譯CalculatorDlg.cpp(7)編譯CalculatorDlg.h(8)編譯、鏈接、運行程序。5、 系統(tǒng)測試開始界面運行9+3=12運行9-3=6運行9*3=27運行9/3=3運行8 sqrt = 2.828運行 3 取倒數(shù)運行9/5求余數(shù)運行9 取反輸入“98754”點Backspace清除最后一位數(shù)“5”利用CE 實現(xiàn)清零功能點擊Help ,彈出Help窗口。六、參考文獻(xiàn)1、段興,visual C+ 使用程序100例 北京:人民郵電出版社

6、2002;2、楊永國,Visual C+6.0實用教程 清華大學(xué)出版社 2007;七、程序附錄CalculatorDlg.cpp / CalculatorDlg.cpp : implementation file/* My Calculator* by Siwenzi */#include "stdafx.h"#include "Calculator.h"#include "CalculatorDlg.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#und

7、ef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void

8、DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX

9、);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalculatorDlg dialogCCalculatorDlg:CCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalculatorDlg:IDD, pParent)/AFX_DATA_INIT(CCalculatorDlg)m_Num

10、= 0.0;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CCalculatorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCalculatorDlg)DDX_Text(pDX, IDC_Num, m_Num);/AFX_DATA_MAPBEGIN

11、_MESSAGE_MAP(CCalculatorDlg, CDialog)/AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_Num0, OnNum0)ON_BN_CLICKED(IDC_Num1, OnNum1)ON_BN_CLICKED(IDC_Num2, OnNum2)ON_BN_CLICKED(IDC_Num3, OnNum3)ON_BN_CLICKED(IDC_Num4, OnNum4)ON_BN_CLICKED(IDC_Num5, OnNu

12、m5)ON_BN_CLICKED(IDC_Num6, OnNum6)ON_BN_CLICKED(IDC_Num7, OnNum7)ON_BN_CLICKED(IDC_Num8, OnNum8)ON_BN_CLICKED(IDC_Num9, OnNum9)ON_BN_CLICKED(IDC_Add, OnAdd)ON_BN_CLICKED(IDC_Sub, OnSub)ON_BN_CLICKED(IDC_Mul, OnMul)ON_BN_CLICKED(IDC_Div, OnDiv)ON_BN_CLICKED(IDC_Equal, OnEqual)ON_BN_CLICKED(IDC_Sign,

13、OnSign)ON_BN_CLICKED(IDC_Inv, OnInv)ON_BN_CLICKED(IDC_Mod, OnMod)ON_BN_CLICKED(IDC_Sqrt, OnSqrt)ON_BN_CLICKED(IDC_Dot, OnDot)ON_BN_CLICKED(IDC_Clear, OnClear)ON_BN_CLICKED(IDC_Backspace, OnBackspace)ON_BN_CLICKED(IDC_Help, OnHelp)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalculatorDlg message handlers/BOOL CC

14、alculatorDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CStrin

15、g strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a

16、dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herequan2 = 1;dotflag = 0;numflag = 0;return TRUE; / return TRUE unless you set the focus to a controlvoid CCalculatorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = I

17、DM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CCalcul

18、atorDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (

19、rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCalculatorDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;

20、/鍵入 0void CCalculatorDlg:OnNum0() UpdateData();if(dotflag)quan2 *= 10;m_Num += 0 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 0;else m_Num = 0;numflag = 1;UpdateData(FALSE);/鍵入 1void CCalculatorDlg:OnNum1() UpdateData();if(dotflag)quan2 *= 10;m_Num += 1 / (double)quan2;else if(numflag)m_Num

21、= m_Num * 10 + 1;else m_Num = 1;numflag = 1;UpdateData(FALSE);/鍵入 2void CCalculatorDlg:OnNum2() UpdateData();if(dotflag)quan2 *= 10;m_Num += 2 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 2;else m_Num = 2;numflag = 1;UpdateData(FALSE);/鍵入 3void CCalculatorDlg:OnNum3() UpdateData();if(dotflag

22、)quan2 *= 10;m_Num += 3 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 3;else m_Num = 3;numflag = 1;UpdateData(FALSE);/鍵入 4void CCalculatorDlg:OnNum4() UpdateData();if(dotflag)quan2 *= 10;m_Num += 4 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 4;else m_Num = 4;numflag = 1;UpdateData(FA

23、LSE);/鍵入 5void CCalculatorDlg:OnNum5() UpdateData();if(dotflag)quan2 *= 10;m_Num += 5 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 5;else m_Num = 5;numflag = 1;UpdateData(FALSE);/鍵入 6void CCalculatorDlg:OnNum6() UpdateData();if(dotflag)quan2 *= 10;m_Num += 6 / (double)quan2;else if(numflag)m

24、_Num = m_Num * 10 + 6;else m_Num = 6;numflag = 1;UpdateData(FALSE);/鍵入 7void CCalculatorDlg:OnNum7() UpdateData();if(dotflag)quan2 *= 10;m_Num += 7 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 7;else m_Num = 7;numflag = 1;UpdateData(FALSE);/鍵入 8void CCalculatorDlg:OnNum8() UpdateData();if(do

25、tflag)quan2 *= 10;m_Num += 8 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 8;else m_Num = 8;numflag = 1;UpdateData(FALSE);/鍵入 9void CCalculatorDlg:OnNum9() UpdateData();if(dotflag)quan2 *= 10;m_Num += 9 / (double)quan2;else if(numflag)m_Num = m_Num * 10 + 9;else m_Num = 9;numflag = 1;UpdateDa

26、ta(FALSE);/鍵入 +void CCalculatorDlg:OnAdd() UpdateData();num1 = m_Num;cal = '+'numflag = 0;dotflag = 0;quan2 = 1;/鍵入 -void CCalculatorDlg:OnSub() UpdateData();num1 = m_Num;cal = '-'numflag = 0;dotflag = 0;quan2 = 1;/鍵入 *void CCalculatorDlg:OnMul() UpdateData();num1 = m_Num;cal = '

27、*'numflag = 0;dotflag = 0;quan2 = 1;/鍵入 /void CCalculatorDlg:OnDiv() UpdateData();num1 = m_Num;cal = '/'numflag = 0;dotflag = 0;quan2 = 1;/鍵入 %void CCalculatorDlg:OnMod() UpdateData();num1 = m_Num;cal = '%'numflag = 0;dotflag = 0;quan2 = 1;/鍵入 =void CCalculatorDlg:OnEqual() Updat

28、eData();num2 = m_Num;switch(cal)case '+': m_Num = num1 + num2; break;case '-': m_Num = num1 - num2; break;case '*': m_Num = num1 * num2; break;case '/': m_Num = num1 / num2; break;case '%': m_Num = (int)num1 % (int)num2; break;numflag = 0;dotflag = 0;quan2 = 1

29、;UpdateData(FALSE);/鍵入 +/-void CCalculatorDlg:OnSign() UpdateData();m_Num = 0 - m_Num;UpdateData(FALSE);/鍵入 1/xvoid CCalculatorDlg:OnInv() UpdateData();m_Num = 1 / m_Num;numflag = 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);/鍵入 sqrtvoid CCalculatorDlg:OnSqrt() UpdateData();m_Num = sqrt(m_Num);numflag

30、= 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);/鍵入 '.' 小數(shù)點void CCalculatorDlg:OnDot() UpdateData();dotflag = 1;m_Num += 0.0;UpdateData(FALSE);void CCalculatorDlg:OnClear() UpdateData();m_Num = 0;num1 = 0;num2 = 0;numflag = 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);/撤銷之前鍵入的數(shù),可以依次撤銷所有整數(shù)位或小數(shù)位void

31、CCalculatorDlg:OnBackspace() UpdateData();static int dotquan = quan2; /一次初始化long temp;if(dotflag && numflag) /撤銷小數(shù)部分if(dotquan >= 10)temp = (long)(m_Num * dotquan);m_Num= (double)(temp/10);dotquan /= 10;m_Num= m_Num / dotquan;else /撤銷整數(shù)部分if(numflag && m_Num) m_Num = (long)m_Num /1

32、0;UpdateData(FALSE);/幫助提示void CCalculatorDlg:OnHelp() const char tipname="My Calculator Help by Siwenzi"MessageBox("tMy Calculatortby Siwenzinn 文本編輯框,用于輸入和輸出,接受粘貼或鍵盤輸入。n Backspace功能類似鍵盤的Backspace鍵,用于撤銷之前鍵入的數(shù)值,可以依次撤銷所有整數(shù)位或小數(shù)位。 n CE為清零鍵,%為取余運算鍵,sqrt為開方運算鍵,+/-用于改變數(shù)的正負(fù)符號,1/x用于求倒數(shù)。n 感謝使用!&

33、quot;,tipname);CalculatorDlg.h/ CalculatorDlg.h : header file/#if !defined(AFX_CALCULATORDLG_H_CB0AD658_C66E_4A7B_AD98_76331DD0BA2A_INCLUDED_)#define AFX_CALCULATORDLG_H_CB0AD658_C66E_4A7B_AD98_76331DD0BA2A_INCLUDED_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000/ CCalculatorDlg dialog

34、class CCalculatorDlg : public CDialog/ Constructionpublic:CCalculatorDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CCalculatorDlg)enum IDD = IDD_CALCULATOR_DIALOG ;doublem_Num;/AFX_DATAdouble num1,num2; /第一、二操作數(shù)char cal; /運算符號BYTE dotflag; /小數(shù)點標(biāo)志BYTE numflag; /鍵入數(shù)字標(biāo)志long quan2; /小數(shù)部分權(quán)值

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論