MFC简单计算器设计正文
简单MFC程序设计(编写一个小型计算器)
if(dotflag==1) {
quan= quan*10; m_Num += 0 / (double)quan; } else { if(numflag==1) {
m_Num = m_Num * 10 + 0; } else m_Num = 0; } numflag = 1; mark=1; UpdateData(FALSE); } void CTestDlg::OnButtonZhengfu() { UpdateData(); m_Num = 0-m_Num; UpdateData(FALSE); } void CTestDlg::OnButtonDengyu()
m_Num = m_Num * 10 + 8; } else m_Num = 8; } numflag = 1; mark=1; UpdateData(FALSE); } void CTestDlg::OnButtonNum9()
5
{ if(dotflag==1) { quan= quan*10; m_Num += 9 / (double)quan; } else { if(numflag==1) { m_Num = m_Num * 10 + 9; } else m_Num = 9; } numflag = 1; mark=1; UpdateData(FALSE);
是否为数字的 int 型标志 mark。
c) 然后考虑到在计算过程中 num1 和 num2 的储存状态有三种,num1==0 和
num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!=0 和
num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时
mfc计算器程序设计详细
mfc计算器程序设计详细
MFC是Microsoft基础类的缩写,用于Windows下的GUI程序开发,封装了许多常用的功能,其中包括控件、多线程、消息传递等等。
下面我们将基于MFC来编写一个简单的计算器程序。
首先,我们需要创建一个MFC应用程序并添加一个对话框。
然后,我们需要在对话框中添加各种控件,比如按钮、文本框、标签等等。
在这个例子中,我们需要添加数字按钮、运算符按钮和一个显示结果
的文本框。
接着,我们需要定义各种事件函数,比如数字按钮的点击事件、
运算符按钮的点击事件等等。
在这些事件函数中,我们需要根据相应
的操作完成对应的计算,并将结果显示到文本框中。
当然,我们还需
要处理一些特殊情况,比如输入非法字符、除以0等等。
最后,我们需要将所有的控件和事件函数进行绑定,使得程序能
够正常地运行。
这个过程中,我们将使用MFC提供的消息映射机制来
处理鼠标和键盘事件,以及相应的消息传递机制来更新界面。
总之,在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所示。
计算器程序设计.C++_MFC
课程设计报告课程名称: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为控件插入消息映射,插入消息函数,实现控件命令功能。
MFC计算器
《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)可以把数据传到文本框里面,小数点与数字同样这样处理。
基于mfc的计算器设计文档
工程名称: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_的简易计算器程序设计
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实现简易计算器
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 只用一个文本编辑框,用于输入和输出,接受粘贴或键盘输入。
mfc 计算器
学院软件与微电子学院目录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”按钮可以清除所有已输入的数据从头计算。
MFC实训_计算器
面向对象程序设计实训报告——简易计算器专业:电子信息工程学生姓名:唐伯虎学号: 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 可行性分析本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。
MFC计算器编程设计报告
MFC计算器编程设计报告地信091指导老师:2010.11.15一(题目:利用MFC框架编写简易计算器要求使用MFC框架在Visual Studio 6.0环境下编写一个简易的计算器,支持任意位数的加减乘数,正负转换,并且实现BackSpace CE C功能。
二(设计过程1. Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制(Message Handle)有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
还有用户消息,比如鼠标的单击,双击,键盘的键入等。
2. 界面的设计仿照Windows附件里面的计算器,在资源视图中画好界面,如图:主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
3. 建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION Message Handler简易计算器 1.0 Beta1版 IDD_CALC_DIALOG N/A IDC_NUM0 0 OnNum0IDC_NUM1 1 OnNum1IDC_NUM2 2 OnNum2IDC_NUM3 3 OnNum3IDC_NUM4 4 OnNum4IDC_NUM5 5 OnNum5IDC_NUM6 6 OnNum6IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_NEG +/- OnNegIDC_PT . OnPtIDC_DIV / OnDivIDC_MUL * OnMulIDC_MIN - OnMinIDC_ADD + OnAddIDC_BACKSPACE BACK OnBackspaceIDC_CE CE OnCeIDC_CLEAR C OnClearIDC_EQU = OnEquIDC_DIS N/A N/AOnCal(double num) 变量定义:double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。
基于MFC的简易计算器制作设计【范本模板】
《一个简单的计算器设计》课程设计报告学院:计算机工程学院学号: 2012304030223姓名: 朱钟雄专业年级:12计算机应用技术2班指导教师: 游明坤时 间: 2014年12月25日JINGCHU UNIVERSITY OF TECHNOLOGY基于对话框的计算器MFC方法实现随着社会的发展,人们在日常生活中经常需要用到计算器来进行简单或者复杂的运算,计算器在人们生活中的地位也越来越重要。
简单的计算器能实现加、减、乘、除、开方、平方等运算。
学习了C++的程序设计语言这门课程,可以利用基于VC的MFC方法制作一个简易的计算器,实现基本的运算功能,从而满足生活中的需要,降低计算的难度。
一. 面向对象的程序设计方法区别与面向过程的“先功能后数据”思想,面向对象的程序设计方法把状态(数据)和行为(功能)捆绑在一起,形成了对象。
当遇到一个具体的问题时,我们只需要将一个系统分解成一个个的对象,同时将状态和行为封装在对象中。
面向对象的程序设计方法具有三个基本特点:封装、继承和多态.(1)封装性封装是一个用来指代将对象的状态和行为捆绑到一个单一逻辑单元的机制的正式术语.它不是面向对象语言所特有的,面向过程的C语言用结构封装了数据,函数封装了逻辑。
但是面向对象封装了两者,从这种意义上来说,面向对象的封装更加完美。
出于一些安全性与方便性的考虑,对象经常会限制对它们特征(包括属性和方法)的访问,这种限制称为信息隐藏。
作为对象的抽象,类通常只公开对象可以公开的东西,主要是一个特定对象对系统的服务,而隐藏执行服务的内部细节和为了完成这些服务而设计的数据。
( 2)继承性继承是定义新类的一种机制,使用这种机制创建新类时只需要声明新类和已创建类之间的差别。
对于一个特定的继承关系,我们将创建的新类称为子类(subclass),被继承的原始类称为超类(superclass)。
子类可以使用超类定义属性和方法,也可以自己定义新的属性和方法。
MFC课程设计报告一个简单的计算器应用程序
设计一个简朴的计算器应用程序一、设计目的与内容1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思绪和方法;3.掌握用VC++开发应用程序的的一般环节和方法;4.可以运用所学的基本知识,设计一个简朴的计算器应用程序,实现基本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。
5.在程序中注意解决数据和运算符的输入,计算结果的显示。
二,设计规定1.用VC++进行编码,实现应用程序的功能。
注重编码质量,代码要有适当的注释;2.提交设计报告一份(课程设计任务书、目录、设计的基本思绪、设计的环节及重要代码、心得体会、参考文献)。
一个简朴的计算器应用程序总体设计可以运用所学的基本知识,设计一个简朴的计算器应用程序,实现基本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。
在程序中注意解决数据和运算符的输入,计算结果的显示。
具体设计◆新建工程Counter新建工程,选择对话框应用程序。
◆程序运营主界面图2-1在对话框内添加相应的控件,分别给编辑框添加三个变量m_N1,m_N2和m_Result。
然后添加一个组合框,在里面添加十二个单选按钮设立第一个单选按钮为组,如图图2-2然后给对话框类添加一个int变量Operator用来作相应运算时的标记。
给控件添加相应的函数1、给单选按钮添加相应的函数void CCounterDlg::OnRadio1(){Operator=1;}void CCounterDlg::OnRadio2()Operator=2;}void CCounterDlg::OnRadio3() {Operator=3;}void CCounterDlg::OnRadio4() {Operator=4;}void CCounterDlg::OnRadio5() {Operator=5;}void CCounterDlg::OnRadio6() {Operator=6;void CCounterDlg::OnRadio7() {Operator=7;}void CCounterDlg::OnRadio8() {Operator=8;}void CCounterDlg::OnRadio9() {Operator=9;}void CCounterDlg::OnRadio10() {Operator=10;}void CCounterDlg::OnRadio11(){Operator=11;}void CCounterDlg::OnRadio12(){Operator=12;}用来作相应的操作时标记Operator的值。
MFC实现简单计算器-12页文档资料
MFC实现简易计算器姓名柳超学号2012077501专业计算机科学与技术指导老师蒋年德2013年01月12日一、设计题目设计一个基于对话框的简单计算器,实现整数、小数的加减乘除四则运算以及开方、阶乘、取对数等操作。
二、运行环境硬件:Haier A60 Notebook,Celeron M 1.86GHz\512MB\250GB软件:Windows xp professional 5.1,visual C++ 6.0三、算法设计的思想打开计算器程序,输入数据,开始时编辑框成员变量m_num初始化为零。
按下数字按钮后,根据bool型变量b_zf判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。
同时根据judge的大小,判断是单目运算还是双目运算,进入不同的处理程序,最终输出结果。
若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。
若按下的是单目运算符,则直接对其处理得出结果。
若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。
算出后把结果保存至num2。
若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。
四、流程图五、算法分析设计在visual C++ 6.0中新建一个MFC APPWizard[exe]工程文件,文件名为CALU,应用程序类型选为基本对话,完成后,在Dialog中画出计算器的基本控件,包括0~10个数字按钮,符号转换按钮“+/-”,小数点符号“.”,加、减、乘、除四个双目运算符按钮,开方“sqrt”,阶乘“n!”,取对数“ln”等三个单目运算符按钮,计算并显示运算结果的等于号“=”按钮,以及用于退回的“backspace”按钮,清除“clear”按钮和退出“exit”按钮,一个编辑框,用于显示运算值。
最后给每个控件定义ID号和标题。
MFC简单计算器设计正文
MFC简单计算器设计正文实用计算器程序1.基本功能描述计算器是人们日常生活中非常实用的计算工具。
预期设计目标与实际计算器为标准,Windows 10系统提供的计算器为范例进行设计。
实用计算器要实现单目运算和双目运算。
单目运算主要包括阶乘、正弦、余弦;双目运算主要包括加、减、乘、除、乘幂等。
计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。
实际过程中要能够对不同的数据灵活判断执行。
同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。
用户的修改包括清屏和退格。
程序设计的重点和难点在于:第一,能够对于不同的操作数和操作符进行连续运算,运算过程中要有优先级的判断,根据优先级执行不同的运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。
编程环境采用Visual Studio 2017提供的MFC建立对话框应用程序,设计界面要简单大方,并提供程序所有功能的接口。
2.设计思路表1 操作符优先级设计优先级操作符1 阶乘、正弦、余弦2 乘幂3 乘、除4 加、减对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num[]进行更新,其中num[0]表示的是当前已经存储变量的个数。
由于算法设计为四层优先级,且单目运算的优先级最高。
当按下相应单目运算符,首先将当前数据数组的最后一个存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。
但按下双目运算符相应按键后,将计数num[0]++,同时将运算符的类型和位置记录。
当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。
如果没有按下等号键,则继续执行循环。
在按下等号按钮之后,按照先乘幂、再乘除、后加减的运算顺序执行运算,将最后结果保存并显示。
(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。
)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。
基于MFC的简易计算器课程设计
switch(nID)
{
case IDCumber;
if(NumberState==1)
number1=m_number;
else number2=m_number;
UpdateData(FALSE);
break;
case IDC_NUMBER12:
m_number=(int)m_number/10;
case IDC_NUMBER3:n=3;break;
case IDC_NUMBER4:n=4;break;
case IDC_NUMBER5:n=5;break;
case IDC_NUMBER6:n=6;break;
case IDC_NUMBER7:n=7;break;
case IDC_NUMBER8:n=8;break;
if(NumberState==1)
number1=m_number;
else number2=m_number;
UpdateData(FALSE);
break;
case IDC_NUMBER13:
OperationState=1;m_number=0;UpdateData(FALSE);NumberState=2;break;
case IDC_NUMBER9:n=9;break;
case IDC_NUMBER10:n=0;break;
}
if (NumberState==1)
{
if(point_1==1)
{
m_number=m_number+n*pow(0.1,point_1);
point_1++;
number1=m_number;
number1=m_number;break;
MFC计算器编程设计报告
MFC计算器编程设计报告地信091指导老师:2010.11.15一(题目:利用MFC框架编写简易计算器要求使用MFC框架在Visual Studio 6.0环境下编写一个简易的计算器,支持任意位数的加减乘数,正负转换,并且实现BackSpace CE C功能。
二(设计过程1. Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制(Message Handle)有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
还有用户消息,比如鼠标的单击,双击,键盘的键入等。
2. 界面的设计仿照Windows附件里面的计算器,在资源视图中画好界面,如图:主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
3. 建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION Message Handler简易计算器 1.0 Beta1版 IDD_CALC_DIALOG N/A IDC_NUM0 0 OnNum0IDC_NUM1 1 OnNum1IDC_NUM2 2 OnNum2IDC_NUM3 3 OnNum3IDC_NUM4 4 OnNum4IDC_NUM5 5 OnNum5IDC_NUM6 6 OnNum6IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_NEG +/- OnNegIDC_PT . OnPtIDC_DIV / OnDivIDC_MUL * OnMulIDC_MIN - OnMinIDC_ADD + OnAddIDC_BACKSPACE BACK OnBackspaceIDC_CE CE OnCeIDC_CLEAR C OnClearIDC_EQU = OnEquIDC_DIS N/A N/AOnCal(double num) 变量定义:double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M F C简单计算器设计正文IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】实用计算器程序1.基本功能描述计算器是人们日常生活中非常实用的计算工具。
预期设计目标与实际计算器为标准,Windows10系统提供的计算器为范例进行设计。
实用计算器要实现单目运算和双目运算。
单目运算主要包括阶乘、正弦、余弦;双目运算主要包括加、减、乘、除、乘幂等。
计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。
实际过程中要能够对不同的数据灵活判断执行。
同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。
用户的修改包括清屏和退格。
程序设计的重点和难点在于:第一,能够对于不同的操作数和操作符进行连续运算,运算过程中要有优先级的判断,根据优先级执行不同的运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。
编程环境采用VisualStudio2017提供的MFC建立对话框应用程序,设计界面要简单大方,并提供程序所有功能的接口。
2.设计思路表1操作符优先级设计优先级操作符1 阶乘、正弦、余弦2 乘幂3 乘、除4 加、减对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num[]进行更新,其中num[0]表示的是当前已经存储变量的个数。
由于算法设计为四层优先级,且单目运算的优先级最高。
当按下相应单目运算符,首先将当前数据数组的最后一个存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。
但按下双目运算符相应按键后,将计数num[0]++,同时将运算符的类型和位置记录。
当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。
如果没有按下等号键,则继续执行循环。
在按下等号按钮之后,按照先乘幂、再乘除、后加减的运算顺序执行运算,将最后结果保存并显示。
(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。
)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。
图1程序流程图3.软件设计设计步骤1)创建基于对话框的程序利用AppWizard建立应用程序框架,创建一个基于对话框的MFC工程,命名为“fengwanjincalculator”,如图2所示。
在图3显示的应用程序类型中选择基于对话框。
创建成功后,系统自动生成相应程序文件。
图2创建MFC工程图图3应用程序类型选择图2)定义成员变量添加相应变量和标志位,以方便程序的编写,主要变量如表2所示:表2成员变量表变量名变量类型变量作用mystr CString 编辑框关联变量m_editFont CFont 设置编辑框字体num float 存储操作数flagdian bool 点号标志位flagdengyu bool 等号标志位flagerror bool 错误标志位Jiajian int 存储加减运算符的位置4)添加事件处理程序MFC应用程序是通过消息响应来进行各项操作的,必须在对话类中加入消息处理函数来处理这些事件。
当点击相应控件,在进入WinMain函数之前,每个可以响应消息的MFC类都生成了一个消息映射表,程序运行时通过查询该表判断是否需要响应某条消息。
在相应控件单击右键,弹出图4,选择添加事件处理程序,在图5的事件处理程序向导中选择fengwanjincalculatorDlg类,消息类型选择为BN_CLICKED,即左键单击。
图4添加事件处理程序图5选择添加事件处理程序类型在完成上述操作后MFC使用ClassWizard帮助实现消息映射,它在源码中添加一些消息映射的内容,并声明和实现消息处理函数。
首先,在类的定义(头文件)里,它增加了消息处理函数声明,并添加一行声明消息映射的宏DECLARE_MESSAGE_MAP。
在类的实现(实现文件)里,实现消息处理函数,并使用IMPLEMENT_MESSAGE_MAP宏实现消息映射。
BEGIN_MESSAGE_MAP******END_MESSAGE_MAP界面设计图5向对话框添加控件在项目的资源视图中找到位于Dialog下的对话框,如图4所示。
添加相应控件,完成用户界面设计。
图6用户界面设计其中编辑框行为下Multiline属性设置为True,作为多行编辑框。
第一行显示算式,第二行结果。
整体上将控件分为四组,数值控件区NUM,加减乘除一般运算控件区NORMAL,阶乘、乘幂、正余弦科学运算控件区SCIENCE以及清零退格控件。
设计完成后的界面如图7所示。
图7用户界面设计的界面中只有编辑框关联Cstring类型变量mystr。
其余控件关联相应的消息处理函数。
关键功能的实现程序主要分为数值、单目运算、双目运算、清除等。
1)数值控件消息处理函数voidCfengwanjincalculatorDlg::OnBnClickedButton1(){shuzihanshu(L'1',1);}考虑到0~9数字的处理函数有很大的相似处,所以都采用调用shuzhihanshu函数的方法执行。
shuzhihanshu包含两个参数,分别是数值对应字符和相应数值。
其具体实现如下:voidCfengwanjincalculatorDlg::shuzihanshu(charshuzi,intshuzhi)论与心得体会1、Windows编程中可能会遇到可能会遇到各种编译问题,例如编译环境的设置,具体函数的调用。
同时Windows为程序员提供了大量的库函数,在具体实践的过程中,要充分利用书籍和网络查阅相关函数和环境设置,减轻编程负担。
2、考虑到编程的难度,首先编写了未设置优先级的表达式运算,后又通过在原先程序的基础上,编写了设置优先级的程序。
由于两种方式在算法设计上有很大不同,导致了程序改进的困难。
3、由于在编程思想方面并没有参照网上的先例,也没有采取堆栈的方式进行优先级的运算,在具体编程的过程中遇到了很多细节问题。
所以在日后的编程中要注意,算法与数据结构的结合。
4、相较于传统的C++编程,MFC的编程不仅要考虑算法和数据结构的问题,还需要考虑环境、用户界面的美观便捷等问题,编程的难度更大,出现的问题也更多,在编程的过程中渐渐提高了自己的耐性和对于新事物的应用能力。
5、从本次编程的结果来看,此次编程需要提高的方面还很多,人机交互界面的设计、程序算法的统一性、可读性都有待提高。
在程序的设计过程中主要参考了Windows10参做系统自带的计算器,交互界面如图8所示:图8Windows10计算器仅从界面看,差距还很大。
但是任何一个程序都不可能是完美的,这款计算器在调试的过程中也发现了一些bug,所以在日后更加重要的学习和工作中的编程过程中,要注意程序的调试和检查,完善任何一个优秀程序都是需要细致耐心的打磨。
5.思考题1、程序如何实现小数的显示和运算?首先,数值数组采用float类型,可以实现整形和浮点型的统一运算。
在读取数值的过程中要加入小数点的判断,如果出现了小数点,则在之后读取的每一个数值需要将相应的倍数每次除以10乘以读出的数值与原数值相加得到。
例如changevalue函数:voidCfengwanjincalculatorDlg::changevalue(){if(!flagdian){num[(int)num[0]]=data+num[(int)num[0]]*10;}else{beishu/=10;num[(int)num[0]]=num[(int)num[0]]+data*beishu;}}对于例如阶乘等只能对于整形进行运算的运算符或函数,首先对数值取证判断其是否与原数据相等,如果相等则可以进行相应运算。
如果不同,则通过AfxMessageBox函数弹出错误提示,错误窗口如图9所示:图9错误提示窗口2、描述等号对应的消息处理函数中需要问题及相应实现代码?点击等号控件,则首先要进行表达式是否正确的判断(本次程序编写过程中,运算符操作的合法性检查放在了每个运算符的函数中,故在等号的消息处理函数中不需要再添加),将结果计算得出并显示在窗口上,同时设置相应的标志。
具体代码如下:voidCfengwanjincalculatorDlg::OnBnClickedButtonDeng()pp文件中忘记相应函数实现的编写,编译运行过程中仅提示找不到相应的.exe文件。
通过pause函数等暂停函数到某一点,找到错误的区间解决问题。
2、结果错误问题此类问题在本次编程过程中遇到的情况较多,采用的自己模拟程序执行流程发现问题,如果不能通过这种方式发现,则通过设置断点,单步执行观察变量在每一步中的变化,并于自己的设想相比较发现问题。
测试结果1、键入表达式125+6*5-8!+7^3点击等号得到表达式的结果,与实际相一致,如图10所示。
图10键入数值并执行运算2、点击加号后可以继续执行运算。
图11点击加号继续运算3、按下数值9,清屏屏显示数值9图12按下数值94、清屏图13清屏5、错误提示图14错误提示关键源代码1、文件中自定义变量和函数的相应声明:public:intjiajian[10];{flagdian=0;mystr=()-1);}else{num[0]--;switch(temp){case43:case45:jiajian[jiajian[0]]=0;jiajian[0]--;mystr=()-1);break;case42:case47:chengchu[chengchu[0]]=0;chengchu[0]--;mystr=()-1);break;case33:num[0]++;num[(int)num[0]]=nextdata[2*(int)nextdata[0]];nextdata[2*(int)nextdata[0]-1]=0;nextdata[0]--;mystr=()-1);break;case94:mizhi[mizhi[0]]=0;mizhi[0]--;mystr=()-1);break;case110:num[0]++;num[(int)num[0]]=nextdata[2*(int)nextdata[0]];nextdata[2*(int)nextdata[0]-1]=0;nextdata[0]--;mystr=()-3);break;case115:num[0]++;num[(int)num[0]]=nextdata[2*(int)nextdata[0]];nextdata[2*(int)nextdata[0]-1]=0;nextdata[0]--;mystr=()-3);break;default:break;}flaglast=0;}}UpdateData(FALSE);}6、改变数值数组voidCfengwanjincalculatorDlg::changevalue(){if(!flagdian){num[(int)num[0]]=data+num[(int)num[0]]*10;}else{beishu/=10;num[(int)num[0]]=num[(int)num[0]]+data*beishu;}}7、表达式求值函数voidCfengwanjincalculatorDlg::calculator();flagdian=1;}flaglast=0;}UpdateData(FALSE);}voidCfengwanjincalculatorDlg::sincos(){if(nextdata[2*(int)nextdata[0]-1]==Sin){nextdata[2*(int)nextdata[0]]=num[(int)num[0]];num[(int)num[0]]=sin(num[(int)num[0]]);nextdata[2*(int)nextdata[0]-1]==-Sin;}if(nextdata[2*(int)nextdata[0]-1]==Cos){nextdata[2*(int)nextdata[0]]=num[(int)num[0]];num[(int)num[0]]=cos(num[(int)num[0]]);nextdata[2*(int)nextdata[0]-1]==-Cos;}}voidCfengwanjincalculatorDlg::OnBnClickedButtonJia()。