实现计算器的输入数据和求和功能

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实例5实现计算器的输入数据和求和功能

实现步骤:

1.创建对话框工程MyCaculator。

2.设计对话框界面。注意:将按钮0、1、2连续设置。如图所示:

3.设置各个控件的属性;参考如下:

4.添加消息处理函数

首先利用ClassWizard为编辑框控件增加CString型成员变量m_result,该变量用于显示结果。然后再增加相关的消息处理函数。参考如下:

5.On_COMMAND_RANGE宏

可以用上面同样的方法为数字按钮添加消息处理函数,使之响应鼠标单击而进行数据输入。但是对于数字输入来说,对不同的数字按钮所做的处理十分相似,如果采用上述方法就显得很烦琐。

6.我们可以利用On_COMMAND_RANGE宏,来处理一系列控件对同一消息处理函数的响应。不过,必须手动加入函数声明,分别在在CMyCaculatorDlg.h和CMyCaculatorDlg.cpp 中添加下面的语句:

CMyCaculatorDlg.h中:afx_msg void OnOperandInput(UINT nID);

位置在//{{AFX_MSG(CMyCaculatorDlg)和//}}AFX_MSG之间

CMyCaculatorDlg.cpp中:ON_COMMAND_RANGE(IDC_0,IDC_2,OnOperandInput) //注

//意:这句末尾不要分号

位置在//{{AFX_MSG_MAP(CMyCaculatorDlg)和//}}AFX_MSG_MAP之间。

说明:ON_COMMAND_RANGE(IDC_0,IDC_2,OnOperandInput)中的IDC_0表示按钮控件ID的起始值(这里是指控件“0”开始);IDC_2表示按钮控件的结束值(这里是指控件“2”);OnOperandInput 标识处理输入的函数。

7.在CMyCalculatorDlg的声明处(即CMyCaculatorDlg.h中)添加成员函数和成员变量,参考如下:

int m_operand; //存储当前输入的操作数

int m_accum; //存储当前的计算处理结果

Operator m_operator; //enum型变量用以标识当前运算符

CalcError m_errorState;//enum型变量用以标识当前运算状态

BOOL m_bOperandAvail; //标识当前输入是否是新输入数字

void Calculate(); //处理计算

void UpdateDisplay();//处理显示

其中Operator为enum型结构,用来存储计算符,必须要在CMyCaculatorDlg.h中按照下面的方式定义:

enum Operator { OpNone, OpAdd}; //操作符可以为加法,可以为无

8.完善代码:

①处理输入

●使用m_operrand来存储当前的输入。

●使用OnOperandInput函数来处理,每次单击数字按钮就会调用该函数。

在每次输入时都必须将输入的数字累加入m_operand中,对于整数的累加方式:

m_operand=m_operand*10+(nID-IDC_0); //n为输入的数字

●需要判断当前是不是进行新的计算输入,函数中使用布尔变量

m_bOperandAvail作为标识。当按下任意一个计算符按钮,在响应的消息处理

函数中将m_bOperandAvail设为假(0),即表示开始新的计算数输入。

●初始化部分变量。根据面向对象德概念,初始化工作可以放在构造函数实现,

本程序CMyCaculatorDlg的构造函数中添加:

m_operator=OpNone; //刚开始没有任何计算符

m_bOperandAvail=FALSE;//初始化m_bOperandAvail,表示没有新的输入●数字输入处理函数OnOperandInput()的实现参考代码:

void CMyCaculatorDlg::OnOperandInput(UINT nID)

{

ASSERT(nID >= 0 && nID <= IDC_2);//ASSER宏,用来判断传递给它的

//条件表达式。

if (!m_bOperandAvail) //是不是输入新的计算数,0-否,1-是

{m_operand = 0;}

m_operand=m_operand*10+(nID-IDC_0);// 将输入的数字累加入m_operand

m_bOperandAvail=TRUE;

UpdateDisplay();//更新显示

}

●处理“+”按钮函数OnAdd()

void CMyCaculatorDlg::OnAdd()

{

// TODO: Add your control notification handler code here

Calculate();

m_operator = OpAdd;

}

●处理“=”按钮函数OnEqual()

void CMyCaculatorDlg::OnEqual()

{

// TODO: Add your control notification handler code here

Calculate();

m_operator = OpNone;

}

●处理计算函数Caculate()

分析说明:该函数是完成计算器应用程序功能的主要部分,在该函数中完成了计算的中间处理和结果。每当运算符被按下,应用程序就会调用该函数。

当该函数被调用时,首先判断当前是否满足运算条件,即两个计算数和一个运算符,若满足条件就进行计算,否则将当前计算数m_operand赋给m_accum 后返回。参考代码如下:

void CMyCaculatorDlg::Calculate()

{

if (m_bOperandAvail)

{

if (m_operator == OpNone)//若没有计算符就将m_operand值赋给m_accum m_accum = m_operand;

else if (m_operator == OpAdd)

m_accum += m_operand;

}

相关文档
最新文档