求用MFC做计算器的详细步骤

作者&投稿:伏儿 (若有异议请与网页底部的电邮联系)
下面是我以前看过的一个程序,现在提供出来供你参考:
建议自己动手将下面的代码组织运行一遍,你会受益的!祝你好运!
简易计算器(MFC)
1.设计目标
了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式。

2.设计内容
以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。
3. 设计思想
基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。
4. 设计说明
(1)包含的功能有:加、减、乘、除运算,开方、平方等功能。
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。
(4)计算功能基本上是用系统内部函数。
(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。
(6)“CE”按钮可以清除所有已输入的数据从头计算
5. 设计步骤
(1)选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为Caa,按确定。在弹出界面选择创建对话框,单击Finish按钮
(2)在生成的设计界面中加入控件,得到计算器应用界面。如图:

(3)为控件编辑框编辑ID,如图:

按钮名称 ID 用途
0 IDC_0 按键0
1 IDC_1 按键1
2 IDC_2 按键2
3 IDC_3 按键3
4 IDC_4 按键4
5 IDC_5 按键5
6 IDC_6 按键6
7 IDC_7 按键7
8 IDC_8 按键8
9 IDC_9 按键9
. IDC_dian 按键 .
+/- IDC_zhengfu 正负
+ IDC_jia 加
- IDC_jian 减
* IDC_cheng 乘
/ IDC_chu 除
CE IDC_qinglin 清零
sqrt IDC_sqrt 开方
x*x IDC_pingfang 平方
= IDC_dengyu 等于

编辑框 IDC_E1 显示数据输入输出

(4)进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。如图:

(5) 进入ClassWizard界面Message Varibles为编辑框添加成员变量m_result用以显示结果。如图:

(6)在CaaDlg.h中加入在主要成员函数和成员变量的申明在CaaDlg.cpp中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)。

6. 主要成员函数关系图

7. 程序主要代码
//在头文件中手动添加成员函数与变量声明
// caaDlg.h : header file

//定义两个euum型结构
enum Operator { OpNone, OpAdd, OpSubtract, OpMultiply, OpDivide };
enum CalcError { ErrNone, ErrDivideByZero };

float m_operand; //存储当前输入的操作数
float m_accum; //存储当前的计算处理结束
BOOL m_bCoff; //标识当前输入是否是小数
float m_coff; //小数输入时的系数
Operator m_operator; //enum型变量用以标识当前运算符
CalcError m_errorState; //enum型变量用以标识当前运算状态
BOOL m_bOperandAvail; //标识当前输入是否是新输入数字
void UpdateDisplay(); //处理显示
void Calculate(); //处理计算
void OnOperandInput(int a); //处理数字输入

//在执行文件中添加成员函数实现部分与变量初始
// caaDlg.cpp : implementation file

//以下是对声明变量进行初始
CCaaDlg::CCaaDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCaaDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCaaDlg)
m_result = _T(""); //默认为m_result变量初始
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_coff=0.1; //为变量进行初始
m_bCoff=0; //为变量进行初始

m_errorState = ErrNone; //为变量进行初始
m_bOperandAvail=FALSE; //为变量进行初始
m_operator=OpNone; //为变量进行初始
}

//以下是消息处理函数,用以响应消息映射
void CCaaDlg::On0() //处理“ 0”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(0);
}

void CCaaDlg::On1() //处理“ 1”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(1);
}

void CCaaDlg::On2() //处理“ 2”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(2);
}

void CCaaDlg::On3() //处理“ 3”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(3);
}

void CCaaDlg::On4() //处理“ 4”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(4);
}

void CCaaDlg::On5() //处理“ 5”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(5);
}

void CCaaDlg::On6() //处理“ 6”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(6);
}

void CCaaDlg::On7() //处理“ 7”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(7);
}

void CCaaDlg::On8() //处理“ 8”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(8);
}

void CCaaDlg::On9() //处理“ 9”按钮
{
// TODO: Add your control notification handler code here
OnOperandInput(9);
}

void CCaaDlg::Oncheng() //处理“ *”按钮
{
// TODO: Add your control notification handler code here
Calculate();
m_operator = OpMultiply;
}

void CCaaDlg::Onchu() //处理“ /”按钮
{
// TODO: Add your control notification handler code here
Calculate();
m_operator = OpDivide;
}

void CCaaDlg::Ondengyu() //处理“ =”按钮
{
// TODO: Add your control notification handler code here
Calculate();
m_operator = OpNone;
}

void CCaaDlg::Ondian() //处理“ .”按钮
{
// TODO: Add your control notification handler code here
m_bCoff=1;

UpdateDisplay();
}

void CCaaDlg::Onjia() //处理“ +”按钮
{
// TODO: Add your control notification handler code here
Calculate();
m_operator = OpAdd;
}

void CCaaDlg::Onjian() //处理“ -”按钮
{
// TODO: Add your control notification handler code here
Calculate();
m_operator = OpSubtract;
}

void CCaaDlg::Onpingfang() //处理“ x*x”按钮
{
// TODO: Add your control notification handler code here
m_operand*=m_operand;
UpdateDisplay();
}

void CCaaDlg::Onqinglin() //处理“ CE”按钮
{
// TODO: Add your control notification handler code here
m_operator = OpNone;
m_operand = 0;
m_accum = 0;
m_bOperandAvail = FALSE;
m_errorState = ErrNone;
m_coff=0.1;
m_bCoff=0;
UpdateDisplay();
}

void CCaaDlg::Onsqrt() //处理“ sqrt”按钮
{
// TODO: Add your control notification handler code here
m_operand=sqrt(m_operand);
UpdateDisplay();
}

void CCaaDlg::Onzhengfu() //处理“ +/-”按钮
{
// TODO: Add your control notification handler code here
m_operand*=-1;
UpdateDisplay();
}

//以下是自定义函数,用于实现计算功能
void CCaaDlg::OnOperandInput(int a) //处理0-9 数字的输入函数
{ if (m_errorState != ErrNone) //判断当前运算是否有误,若有则返回
return;

if (!m_bOperandAvail) //判断是否输入新的数字,1-是 0-否
m_operand = 0;

if(!m_bCoff) //判断是否是小数输入,1-是 0-否
m_operand=m_operand*10+(a);
else
{
m_operand=m_operand+(a)*m_coff;
m_coff*=0.1;
}

m_bOperandAvail=TRUE;
UpdateDisplay(); //更新显示
}
void CCaaDlg::Calculate() //处理计算函数
{
if (m_errorState != ErrNone)
return;

if (m_bOperandAvail)
{
//如果没有计算符就将m_operand值赋予m_accum
if (m_operator == OpNone)
m_accum = m_operand;
else if (m_operator == OpMultiply) //否则按计算符进行计算
m_accum *= m_operand;
else if (m_operator == OpDivide)
{
if (m_operand == 0)
m_errorState = ErrDivideByZero;
else
m_accum /= m_operand;
}
else if (m_operator == OpAdd)
m_accum += m_operand;
else if (m_operator == OpSubtract)
m_accum -= m_operand;
}

m_bOperandAvail = FALSE;
m_bCoff=0;
m_coff=0.1;
UpdateDisplay();
}

void CCaaDlg::UpdateDisplay() //处理显示函数
{
if (GetSafeHwnd() == NULL)
return;

if (m_errorState != ErrNone)
m_result="除数不能为零";
else //如果当前计算无错误那么进行显示
{
//如果是输入计算数,那么显示输入情况,如果按下计算符,则显示结果
float lVal = (m_bOperandAvail) ? m_operand : m_accum;
m_result.Format(_T("%f"), lVal); //将float型转化为CString型
int i=m_result.GetLength();
while(m_result.GetAt(i-1)=='0')
{
m_result.Delete(i-1,1);
i-=1;
}
}
//用编辑控件变量m_result改变编辑控件的值,更新显示
UpdateData(FALSE);
}

8. 难点分析
在利用MFC编写计算器过程中,遇到的技术上的问题,及解决方法。
例如:
⑴.计算数输入的处理
在程序中使用m_operand来存储当前的输入。而程序只使用一个函数来处理所有数字输入,也就是说每次单击数字按钮就会调用该函数。由于计算数不仅仅是个位数,因此用户可能需要单击几个数字按钮来完成一个计算数的输入,这样在每次输入时都必须将输入的数字累加入m_operand中。而且对于小数输入和整数输入也必须采取不同的累加方式。如对整数的输入,累加方式为: m_operand=m_operand*10+n;其中n为输入的数字。而对于小数输入,累加方式为:m_operand=m_operand+n*10i ;其中n为数字,i为小数位数。因此在程序中还需设立布尔型变量m_coff 的值来标识当按下按钮小数点的时候来确定调用哪个累加方式。
⑵.自定义消息处理函数、成员函数、变量
在添加自定义函数、变量时需注意函数及变量的声明在头文件中如:CaaDlg.h ;而函数的实现部分及变量的初始在执行文件中如:CaaDlg.cpp 。
值得提醒的是手动添加消息处理函数时,需声明在头文件//{{AFX_MSG(CCaaDlg) …//}}AFX_MSG中的部分。
而添加消息映射在执行文件
//{{AFX_MSG_MAP(CCaaDlg) …//}}AFX_MSG_MAP中的部分。
最后将消息处理函数添加到执行文件末即可。

MFC编写计算器具体步骤 方法 代码,拜托高手急用!~

1、首先打开VS2013,新建一个VC++ MFC项目,命名为 gongzi。

2、然后在程序类型中,选择“基于对话框”,点击“完成”按钮。

3、然后在弹出的对话框中,删除原先的Static Text,添加相应的控件到窗体上。

4、接着在应发工资编辑框右击添加变量。 变量名称是 m_editTotal, 变量类型是 double, 类别为 value,点击“完成”。同样扣税费用编辑框右击添加变量。 变量名称是 m_editTax, 变量类型是 double, 类别为 value,应扣税款标签右击添加变量。

5、然后双击“计算应扣税款”进入代码,添加代码。

6、最后点击运行,输入对应的数目,按下按钮,查看执行效果。

嗯,实现如下:
用visual stdio 或者 visual c++ 6.0建一个MFC的工程项目,默认会自动有一个面板。
然后在面板上添加按钮(button(包括数值和计算的法则)),并为每个button关联一个变量(0-9),对于=则右击选择添加函数,执行具体操作。
再在面板上添加一个可编辑框,用于显示结果,关联到一个变量。
在点击=之后,执行操作的时候,将获取的变量序列通过数据结构(清华大学版中有)中的介绍栈的实例就是讲解如果将计算式表达为后缀表达式,并计算结果,这个就涉及到具体怎么实现算法了,你需要哪一步怎么用的时候再上网查下怎么做,这样即能做出来,而且以后还知道怎么做了。

求MFC编写计算器的详细方法 步骤 代码
答:在MFC AppWized(exe)项目下做。界面自己做 1.在对话框的头文件CalculatorDlg.h中添加#include<math.h> 2.为CCalculatorDlg类添加成员数据和成员函数 double number1,number2;int NumberState,OperationState;void cal();并...

用MFC制作计算器。
答:编辑框关联变量CString m_csEdit;加号按钮函数添加:m_csEdit=m_csEdit+_T("+");UpdateData(0);这样显示 计算时用原来的double型计算

用c++的mfc做计算器的具体步骤,急求
答:用visual stdio 或者 visual c++ 6.0建一个MFC的工程项目,默认会自动有一个面板。然后在面板上添加按钮(button(包括数值和计算的法则)),并为每个button关联一个变量(0-9),对于=则右击选择添加函数,执行具体操作。再...

MFC写计算器
答:CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就...

如何做一个VC++、MFC的简单计算器,怎样点击数字按钮让数字显示在编辑框...
答:UpdateData(TRUE);//读取控件变量值 m_iResult = m_iResult*10 +1; //例如原来是2,现在点1之后要显示成21,就是2*10+1 UpdateData(FALSE);//把改过的值更新到控件 } 你忘记数字0了^_^ 这是我写的计算器,...

用C++MFC做一个计算器怎么做?
答:创建一个dialog,然后将控件拖到那,为每一个buntton绑定一个变量,然后对变量进行操作就好了,不过简单的是很好做,复杂点的就比较麻烦了……

用VS2010做一个基于MFC的计算器。加减乘除带小数点的就行不用太复杂
答:MFC是采用消息机制的,以基于对话框编程为例,添加变量、函数可以在XXXDlg类的.h文件下定义,如定义一个加法Add函数 先在XXXDlg类的.h文件下定义 public:afx_msg void Add();//函数 int sum;//变量 int a,b;//...

vs2008 mfc基于对话框的简单计算器
答:楼主你好!这个程序要求不高,非常简单,我已经为你做了一个,请自行建一个MFC工程,将下面代码贴在对应位置即可编译运行:第一步:新建基于对话框的MFC程序,工程名 JiSuanQi 第二步:在stdafx.h中,添加:include <stdlib...

怎么用c++mfc做一个加减乘除的 有三角函数的计算器?709207455谢谢_百度...
答:基于对话框,然后设计对话框按钮,然后给各个按钮设定函数,将对话框的字符串转化为double类型的数,这样才能进行运算

用VC2010 的MFC 制作WIN7自带的科学计算器的思路?
答:算好了直接传给Edit关联的变量.这样就能实现最基本的计算功能了,至于那些复杂的算法,比如平方什么的,也不过和上面的逻辑差不多,总体 上不会有什么大难度的问题.自己写吧,如果写的过程中有哪想不明白的就查资料,资...