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

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

3、,Delete刪除頁(yè)面上全部原配控件。 利用MFC自帶的控件選項(xiàng)編輯計(jì)算器界面 設(shè)計(jì)的界面如下當(dāng)然作為“所見(jiàn)即所得”的MFC控件設(shè)計(jì),干凈整齊的界面是基本要求,界面是否整潔明了甚至?xí)绊懹脩舻男那?。各控件的屬性設(shè)置見(jiàn)下表:表1:各個(gè)控件控件類型控件的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”連接一個(gè)CString類型的成員變量m_display,用來(lái)顯示操作數(shù)和運(yùn)算結(jié)果。(4) 建立向?qū)В?)這里我把添加的控件消息響應(yīng)函數(shù)列出來(lái),控件消息響應(yīng)函數(shù)具體代碼部分。 雙擊控件,首先從加減乘除開(kāi)始注釋: UpdateData() 是MFC的窗口函數(shù),用來(lái)刷新數(shù)據(jù)的由于我們進(jìn)行基本運(yùn)算需要更新

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

6、2002;2、楊永國(guó),Visual C+6.0實(shí)用教程 清華大學(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ù)點(diǎn)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為清零鍵,%為取余運(yùn)算鍵,sqrt為開(kāi)方運(yùn)算鍵,+/-用于改變數(shù)的正負(fù)符號(hào),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; /運(yùn)算符號(hào)BYTE dotflag; /小數(shù)點(diǎn)標(biāo)志BYTE numflag; /鍵入數(shù)字標(biāo)志long quan2; /小數(shù)部分權(quán)值

溫馨提示

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