MFC简单计算器设计正文
- 格式:docx
- 大小:18.02 KB
- 文档页数:7
mfc计算器程序设计详细
MFC是Microsoft基础类的缩写,用于Windows下的GUI程序开发,封装了许多常用的功能,其中包括控件、多线程、消息传递等等。
下面我们将基于MFC来编写一个简单的计算器程序。
首先,我们需要创建一个MFC应用程序并添加一个对话框。
然后,我们需要在对话框中添加各种控件,比如按钮、文本框、标签等等。
在这个例子中,我们需要添加数字按钮、运算符按钮和一个显示结果
的文本框。
接着,我们需要定义各种事件函数,比如数字按钮的点击事件、
运算符按钮的点击事件等等。
在这些事件函数中,我们需要根据相应
的操作完成对应的计算,并将结果显示到文本框中。
当然,我们还需
要处理一些特殊情况,比如输入非法字符、除以0等等。
最后,我们需要将所有的控件和事件函数进行绑定,使得程序能
够正常地运行。
这个过程中,我们将使用MFC提供的消息映射机制来
处理鼠标和键盘事件,以及相应的消息传递机制来更新界面。
总之,在MFC的帮助下编写一个计算器程序不仅方便快捷,而且
代码逻辑清晰,可读性好。
MFC计算器课程设计题目: MFC计算器设计学院:计算机学院姓名:学号:指导教师:2015年5月20日目录1概述 (3)1.1课程设计目的 (3)1.2课程设计内容 (3)2系统需求分析 (4)2.1系统目标 (4)2.2主体功能 (4)2.3开发环境 (4)3系统概要设计 (4)3.1系统功能划 (4)4系统详细设计 (7)4.1 设计步骤 (7)4.2 界面设计 (9)5测试 (11)5.1 测试方案 (11)5.2 测试结果 (12)6小结 (14)参考文献 (14)附录 (15)附录1源程序清单 (15)计算器的设计1概述1.1 课程设计目的1、巩固并加深学生对C++语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC++ 6.0集成开发环境;4、提高运用C++语言解决实际问题的能力;5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统;6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。
1.2 课程设计内容课题名称:计算器的实现说明:实现一个计算器。
要求:用“计算器”的标准视图执行简单的计算。
32系统需求分析2.1 系统目标我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
要计算功能有以下几个方面:加法,减法,乘法,除法,乘方。
2.2 主体功能十进制数的加、减、乘、除、乘方简单计算。
2.3 开发环境W indows操作系统,VC++ 6.0, OFFICE WORD3 系统概要设计3.1 系统功能划表3-1 系统功能表1)假设执行操作“+”,先输入一个数,再输入“+”,再输入另一个数,最后输入“+”。
整个功能“+”就执行完毕。
4四则代码如下void CCALDlg::OnButtonequal(){// TODO: Add your control notification handler code here UpdateData(TRUE);num2 =m_str;if(num2==0&&ope==3){m_str1="除数不能为零";m_str =0;num1 = 0;num2 = 0;UpdateData(FALSE);}else{// int f = 0;switch (ope){//加case 0:m_str = num1 + num2;break;//减case 1:m_str = num1 - num2;break;5case 2:m_str = num1 * num2;break;case 3:m_str = num1 / num2;break;case 4:m_str = num1 * num1;}UpdateData(FALSE);}64系统详细设计4.1 设计步骤打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名yeyahui及其所在位置,点击确定,如图4-1所示。
课程设计报告课程名称:VC++课程设计设计题目:计算器专业班级:通信工程1202班*名:**学号:*********时间:2015年7月14日指导教师:***目录1.课程设计的要求 (3)2.功能描述 (3)3.设计步骤 (3)4.运算流程图 (7)5.运行效果与不足 (8)6.总结 (9)7.参考文献及开发环境 (9)附录:程序代码 (9)简易计算器(MFC)1.课程设计的要求多功能计算器:要求所编写的的计算器能够完成加、减、乘、除、基本函数的运算,类似于Windows附件中的计算器。
2.功能描述(1)包含的功能有:加、减、乘、除运算,开方、倒数、求余等功能。
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。
(4)计算功能基本上是用系统内部函数。
(5)“0”不能做除数。
(6)“Backspace”按钮可以清除上一次输入的数据,“Clear”按钮可以清除所有已输入的数据从头计算。
3. 设计步骤(1)选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为“计算器”,按确定。
在弹出界面选择创建对话框,单击“完成”按钮。
(2)在生成的设计界面中加入控件,得到计算器应用界面。
如图:(3)为控件编辑框编辑ID,如图:按钮名称ID 用途0 IDC_BUTTON_0 按键01 IDC_ BUTTON_1 按键12 IDC_ BUTTON_2 按键23 IDC_ BUTTON_3 按键34 IDC_ BUTTON_4 按键45 IDC_ BUTTON_5 按键56 IDC_ BUTTON_6 按键67 IDC_ BUTTON_7 按键78 IDC_ BUTTON_8 按键89 IDC_ BUTTON_9 按键9. IDC_ BUTTONpt 按键.(4)进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。
《C++面向对象程序设计》实验报告学院:信息科学与工程学院专业:学号:姓名:一.题目:利用MFC框架编写Windows附件中所示的简易计算器二.功能描述:1.能够实现最基本的加,减,乘,除四则基本运算。
2.界面有清空,退格按钮,方便用户计算使用。
3.此计算器具有开方,取倒数,求对数的高级运算。
三.概要设计:1.Windows消息处理机制通过对教材的阅读,对Windows程序的消息处理机制有个大致的了解。
Windows的程序都是通过消息来传送数据,并且存在异常处理等不需要用户参与的系统消息,用户消息就是鼠标的单击,双击等。
2.界面的设计如图,简易的计算器界面主要使用菜单中相关控件,并合理的布置各个按钮的位置,使得界面让用户看起来整洁简单。
3.框架描述Windows 简易计算器在资源视图画好界面添加控件的同时,通过属性修改名称为各个按钮和编辑框添加不同的函数四则运算+,-,*,/ 1/x,lgx等函数退格和清空键4.建立的变量和控件的命名,对应的消息处理函数命名表ID CAPTION Message Handler IDC_BUTTON0 0 OnButton0()IDC_BUTTON1 1 OnButton1()IDC_BUTTON2 2 OnButton2()IDC_BUTTON3 3 OnButton3()IDC_BUTTON4 4 OnButton4()IDC_BUTTON5 5 OnButton5()IDC_BUTTON6 6 OnButton6()IDC_BUTTON7 7 OnButton7()IDC_BUTTON8 8 OnButton8()IDC_BUTTON9 9 OnButton9()IDC_BUTTON10 . OnButton11()IDC_BUTTON11 = OnButtonequal() IDC_BUTTON12 + OnButtonadd()IDC_BUTTON13 - OnButtoncut()IDC_BUTTON14 * OnButtonmultiply() IDC_BUTTON15 / OnButtonremove() IDC_BUTTON16 1/x OnButton1x()IDC_BUTTON17 lg OnButtonlg()IDC_BUTTON18 sqrt OnButtonsqrt()IDC_BUTTON19 Backspace OnButtonbackspace() IDC_BUTTON20 C(清空) OnButtonclear()5.下图是基本对话框中所有的类四.详细设计:1.新建工程,选择MFC AppWizard[exe],并命名工程的名称为mycalculator2.选择基本对话框3.通过控件添加各种按钮和编辑框(对话框右边的“Controls”控件箱提供了可用于对话框的各种组建,在此次计算器中,基本上只用到上面四个控件,对话框只能通过控件来实现它们的功能,把控件中的数据保存在对话框类的数据成员中,应用程序才能通过这些数据成员获取控件中的数据)4.考虑用户们的习惯,把编辑框的显示的数字属性由靠左改成靠右(选中编辑框,右击选择属性-样式,排列文本改为向左)5.用同样的方法改变按钮的标题,其他按钮同理6.为美观改变对话框的标题为“计算器”7.右击编辑框添加类向导,添加变量m_result,且type为CString//可通过其改变类型和名称8.实现每个按钮的功能,双击按钮,为按钮添加函数,可以改变函数的名称① 0~9和小数点的函数大致类似void CMycalculatorDlg::OnButton1(){// TODO: Add your control notification handler code herem_result +=_T("1");UpdateData(FALSE);}函数_T()可以对字符串进行操作,UpdateData(FALSE)可以把数据传到文本框里面,小数点与数字同样这样处理。
工程名称:calculator学院:信息科学与工程学院班级:计本08-1班姓名:明康注学号:3081817131开始时间:2010-11-13完成时间:2010-12-04一、需求分析使用面向对象编程语言(MFC)设计一个计算器,点击各按钮将按钮所对应的信息显示在编辑框中,可以进行十进制下的四则运算(加、减、乘、除)和清零及删减等功能,当遇到错误输入时(即不能形成一个算术表达式时或其他情况下),提示错误信息。
二、项目概要与详细设计1、项目概要添加类CCalculatorDlg来为各个按钮添加响应函数,完成对算术表达式的输入,添加类CCalculate分析所输入的表达式,完成十进制下的四则运算(加、减、乘、除),内包含小数点,括号等符号,含有清零,删减等功能。
2、详细设计本程序采用MFC编程语言开发,利用MFC编程语言的布局管理器设计所需要的界面,并利用MFC的事件监听处理机制对用户请求的事件进行处理,以及响应用户的操作。
代码简洁,易维护,易扩展,可读性强。
主界面如下:此界面风格简洁,为科学计算,实现功能清晰明了,对于一般运算均能胜任,为用户基本运算所用。
三、关键函数或功能的实现步骤或思路1、关键函数(1)、按钮响应函数:void CCalculatorDlg::OnBadd() //按下+按钮void CCalculatorDlg::OnBdiv() //按下÷按钮void CCalculatorDlg::OnBflo() //按下. 按钮void CCalculatorDlg::OnBmul() //按下×按钮void CCalculatorDlg::OnBsub() //按下- 按钮void CCalculatorDlg::OnBval() //按下= 按钮void CCalculatorDlg::OnButton0() //按下数字0按钮void CCalculatorDlg::OnButton1() //按下数字1按钮void CCalculatorDlg::OnButton2() //按下数字2按钮void CCalculatorDlg::OnButton3() //按下数字3按钮void CCalculatorDlg::OnButton4() //按下数字4按钮void CCalculatorDlg::OnButton5() //按下数字5按钮void CCalculatorDlg::OnButton6() //按下数字6按钮void CCalculatorDlg::OnButton7() //按下数字7按钮void CCalculatorDlg::OnButton8() //按下数字8按钮void CCalculatorDlg::OnButton9() //按下数字9按钮void CCalculatorDlg::OnBclear() //按下“清零”按钮void CCalculatorDlg::OnBbackspace() //按下“←”按钮void CCalculatorDlg::OnButton10() //按下“(“按钮void CCalculatorDlg::OnButton11() //按下“)”按钮(2)、字符串处理函数:void CCalculate::init() //初始化编辑框int CCalculate::yylex() // 词法分析,读入一个记号void CCalculate::Match(int t) // 匹配函数,若当前记号与参数相//则读入下一个记号2、实现步骤(简易步骤)按下“等号”按钮响应void CCalculatorDlg::OnBval()函数,判断编辑框中的输入串是否为空,若为空,则按下“等号”按钮后,编辑框消息映射变量m_result赋为空,若不为空,则调用E(),E()、E_()、T()、S()、T_()、G()、S_()、F()、G_()、Match()、yylex()等函数嵌套、递归调用来分析输入串,判断输入算术表达式是否有错误,若有错误,则在编辑框中输出“ERROR!!!”,若无错误,则输入运算结果显示到编辑框中。
MFC 课程设计——简易计算器程序设计FCL指导老师:东南大学机械工程学院2009-10-12目录摘要 (3)Abstract (4)第一章绪论 (5)1.1 引言 (5)1.2 MFC主要的界面风格 (6)1.3 基于对话框设计的技术 (6)第二章程序设计 (7)2.1 计算器基本功能的需求 (7)2.2 计算器具体功能介绍 (7)2.3 详细设计的类 (8)第三章程序具体实现代码及步骤 (11)3.1 开始步骤 (11)3.2 对话框设计,变量关联 (11)3.3 加入的代码 (13)第四章运行实例 (31)结论 (34)致谢 (34)参考文献(References) (34)附录 (35)简易计算器程序设计摘要摘要内容(中文):通过MFC Windows 可以设计出许多的应用程序。
计算器是其中一个简单的,也是非常实用的应用程序。
此计算器可以进行+、-、×、÷、、sin、cos、tan、arcsin、arccos、arctan(输入,输出结果以度为单位)、、、、log、ln、。
关键词(中文):MFC,计算器,基本运算The Design of a Simple and Easy CalculatorAbstractAbstract (English):Through MFC, many programs can be designed. Calculator is just a simple and practical program. This calculator can operate +、-、×、÷、、sin、cos、tan、arcsin、arccos、arctan、、、、log、ln、、vector operations and imaginary number operations.Key words:MFC, Calculator, Basic operations, Vector operations, Imaginary number operations第一章绪论1.1 引言MFC,微软基础类(Microsoft Foundation Classes),是一种Application Framework,随微软Visual C++ 开发工具发布。
MFC实现简易计算器©Free Copy操作简便,还有帮助提示,支持double类型的数据进行运算,显示清除无效0. By: 杜运福计算器类结构如下:class CCalculatorDlg : public CDialog{// Constructionpublic:CCalculatorDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DA TA(CCalculatorDlg)enum { IDD = IDD_CALCULA TOR_DIALOG };double m_Num;//}}AFX_DA TAdouble num1,num2; //第一、二操作数char cal; //运算符号BYTE dotflag; //小数点标志BYTE numflag; //键入数字标志long quan2; //小数部分权值// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CCalculatorDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;// Generated message map functions//{{AFX_MSG(CCalculatorDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnNum0();afx_msg void OnNum1();afx_msg void OnNum2();afx_msg void OnNum3();afx_msg void OnNum4();afx_msg void OnNum5();afx_msg void OnNum6();afx_msg void OnNum7();afx_msg void OnNum8();afx_msg void OnNum9();afx_msg void OnAdd();afx_msg void OnSub();afx_msg void OnMul();afx_msg void OnDiv();afx_msg void OnEqual();afx_msg void OnSign();afx_msg void OnInv();afx_msg void OnMod();afx_msg void OnSqrt();afx_msg void OnDot();afx_msg void OnClear();afx_msg void OnBackspace();afx_msg void OnHelp();//}}AFX_MSGDECLARE_MESSAGE_MAP()};完整实现代码如下:// CalculatorDlg.cpp : implementation file///****************************************************************************** *********** 简易计算器***** by 追梦2011-4-18******************************************************************************* *****/#include "stdafx.h"#include "Calculator.h"#include "CalculatorDlg.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DA TA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DA TA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DA TA_INIT(CAboutDlg)//}}AFX_DA TA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DA TA_MAP(CAboutDlg)//}}AFX_DA TA_MAP}BEGIN_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_DA TA_INIT(CCalculatorDlg)m_Num = 0.0;//}}AFX_DA TA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CCalculatorDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DA TA_MAP(CCalculatorDlg)DDX_Text(pDX, IDC_Num, m_Num);//}}AFX_DA TA_MAP}BEGIN_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, OnNum5)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, 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 CCalculatorDlg::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){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARA TOR);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 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 control}void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::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 CCalculatorDlg::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 = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::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;}//键入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 = 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){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(FALSE);}//键入 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_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(dotflag){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;UpdateData(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 = '*';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(){UpdateData();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;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 = 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);}//键入'.' 小数点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);}//撤销之前键入的数,可以依次撤销所有整数位或小数位void CCalculatorDlg::OnBackspace(){UpdateData();static int dotquan = quan2; //一次初始化long temp;if(dotflag && numflag) //撤销小数部分{if(dotquan >= 10){temp = (long)(m_Num * dotquan);m_Num= (double)(temp/10);dotquan /= 10;m_Num= m_Num / dotquan;}}else //撤销整数部分{if(numflag && m_Num){ m_Num = (long)m_Num /10;}}UpdateData(FALSE);}//帮助提示void CCalculatorDlg::OnHelp(){const char tipname[]="简易计算器帮助by 追梦";MessageBox("\t简易计算器\tby追梦\n\n 只用一个文本编辑框,用于输入和输出,接受粘贴或键盘输入。
学院软件与微电子学院目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (4)2.3函数实现 (6)2.4开发日志 (7)3 程序调试及运行 (7)3.1程序运行结果 (12)3.2程序使用说明 (12)3.3程序开发总结 (12)4 附件(源程序) (13)1 摘要1.1 设计题目10.编写窗口程序,实现计算器1.2 设计内容(1)实现基本的算术运算(如加、减,乘、除、幂次运算,开方等)(2)实现基本函数运算(如三角函数、对数函数)1.3 开发工具Visual C++ 6.0和Win32。
1.4 应用平台Windows 2000/XP/Vista 32位2 详细设计2.1 程序结构如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。
子程序开始是m_num 为零。
按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后再判断是否有小数点,处理后输出结果。
回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。
若按下的是单目运算符,则直接对其处理得出结果。
若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,已做出相关提示,按下清零。
算出后把结果保存至num2。
若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断是否需要开始新一轮的运算,不需要则结束。
2.2 主要功能(1)包含的功能有:加、减、乘、除运算,还有开方、求倒数等功能。
(2)计算器上数字0——9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一控件。
(3)计算功能基本上是用系统内部函数。
(4)程序可以自动判断输入数据的正确性,保证不出现多余一个小数点、以0开头等不正常现象(5)“Clear”按钮可以清除所有已输入的数据从头计算。
面向对象程序设计实训报告——简易计算器专业:电子信息工程学生姓名:唐伯虎学号: 9527指导教师:小行星2016年1月7 日1 总体设计1.1 设计任务使用Visual C++6.0 MFC编写一个计算器。
1.2 基本要求(1)按照题目要求独立设计计算器所需的所有按钮,并完成程序源码编写、调试及关键代码注释。
(40分)(2)能够实现+、-、*、/计算。
(10分)(3)能够实现对数及幂函数计算。
(15分)(4)能够实现三角函数及反三角函数计算。
(15分)1.3 发挥部分能够实现8,16,10,2进制之间相互转换。
(20分)2 方案设计2.1 需求性分析所谓计算器,就是要进行数值运算,提供1-9数字按键,让用户按下不同的数字键,可以是组合输入,然后再按下运算符按键实现两个或者多个数值的计算,因此在计算器中除了需要定义数字按键之外运算符按键也是必不可少的,但是运算符按键类型众多,实现的功能也是五花八门,有双目运算符,比如+ - * /这些,也有单目运算符,比如x^2,ln,sqrt,所针对的数字个数也不一样,因此在设计计算器之前需要明确好该计算器大致要实现怎样的功能,需要定义多少个按键,而不是什么按键都要添加,企图复杂化,这样一来,就会造成很多麻烦。
应该先从四则运算开始,然后逐一增加功能,循序渐进的进行,根据题目的要求,划分好制作的步骤先后顺序。
我在基本的要求基础上希望添加几个功能,分别是清除按键,这是少不了的,作用是初始化数据,清屏,然后是退格按键,在输入错误的情况下能够实现退格再输入;再次是Ans按键,用以保留上一次的运算结果,以备下次运算时需要;最后是圆周率PI,在需要用到圆周运算时不用输入3.1415……这么长的一段数值……但是这都是在完成基本功能的基础上添加的功能。
2.2 可行性分析本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。