MFC(VS2010)四则运算计算器
xxxDlg.CCP文件
#include "stdafx.h"
#include "Tab_control.h"
#include "One.h"
#include "afxdialogex.h"
// COne 对话框
IMPLEMENT_DYNAMIC(COne, CDialogEx)
COne::COne(CWnd* pParent /*=NULL*/)
: CDialogEx(COne::IDD, pParent)
, m_str(_T(""))
{
}
COne::~COne()
{
}
void COne::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_DISPLY, m_edit);
DDX_Text(pDX, IDC_DISPLY, m_str);
}
BEGIN_MESSAGE_MAP(COne, CDialogEx)
ON_EN_CHANGE(IDC_DISPLY, &COne::OnEnChangeDisply)
ON_BN_CLICKED(IDC_EQU, &COne::OnBnClickedEqu)
ON_BN_CLICKED(IDC_ADD, &COne::OnBnClickedAdd)
ON_BN_CLICKED(IDC_RED, &COne::OnBnClickedRed)
ON_BN_CLICKED(IDC_RID, &COne::OnBnClickedRid)
ON_BN_CLICKED(IDC_DIV, &COne::OnBnClickedDiv)
ON_BN_CLICKED(IDC_NUM_0, &COne::OnBnClickedNum0)
ON_BN_CLICKED(IDC_NUM_1, &COne::OnBnClickedNum1)
ON_BN_CLICKED(IDC_NUM_2, &COne::OnBnClickedNum2)
ON_BN_CLICKED(IDC_NUM_3, &COne::OnBnClickedNum3)
ON_BN_CLICKED(IDC_NUM_4, &COne::OnBnClickedNum4)
ON_BN_CLICKED(IDC_NUM_5, &COne::OnBnClickedNum5)
ON_BN_CLICKED(IDC_NUM_6, &COne::OnBnClickedNum6)
ON_BN_CLICKED(IDC_NUM_7, &COne::OnBnClickedNum7)
ON_BN_CLICKED(IDC_NUM_8, &COne::OnBnClickedNum8)
ON_BN_CLICKED(IDC_NUM_9, &COne::OnBnClickedNum9)
ON_BN_CLICKED(IDC_CLEAR, &COne::OnBnClickedClear)
ON_BN_CLICKED(IDC_POINT, &COne::OnBnClickedPoint)
END_MESSAGE_MAP()
// COne 消息处理程序
void COne::OnEnChangeDisply()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
BOOL COne::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
m_edit.SetWindowText("");
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void COne::OnBnClickedEqu()
{
UpdateData(TRUE);
if(m_iSign!=0&&m_iSign!=1&&m_iSign!=2&&m_iSign!=3)
{
m_fNumber1 = atof(m_str);
}
else
Calculator();
UpdateData(FALSE);
}
void COne::OnBnClickedAdd()
{
SaveValue1(); //执行SaveValue1()函数,保存第一个数值并在按下操作符按钮后、第二个数值输出之前使编辑框空白
m_iSign = 0;
}
void COne::OnBnClickedRed()
{
SaveValue1(); //执行SaveValue1()函数,保存第一个数值并在按下操作符按钮后、第二个数值输出之前使编辑框空白
m_iSign = 1;
}
void COne::OnBnClickedRid()
{
SaveValue1(); //执行SaveValue1()函数,保存第一个数值并在按下操作符按钮后、第二个数值输出之前使编辑框空白
m_iSign = 2;
}
void COne::OnBnClickedDiv()
{
SaveValue1(); //执行SaveValue1()函数,保存第一个数值并在按下操作符按钮后、第二个数值输出之前使编辑框空白
m_iSign = 3;
}
void COne::OnBnClickedNum0()
{
UpdateData(TRUE);
m_str = m_str + "0";
UpdateData(FALSE);
}
void COne::OnBnClickedNum1()
{
UpdateData(TRUE);
m_str = m_str + "1";
UpdateData(FALSE);
}
void COne::OnBnClickedNum2()
{
UpdateData(TRUE);
m_str = m_str + "2";
UpdateData(FALSE);
}
void COne::OnBnClickedNum3()
{
UpdateData(TRUE);
m_str = m_str + "3";
UpdateData(FALSE);
}
void COne::OnBnClickedNum4()
{
UpdateData(TRUE);
m_str = m_str + "4";
UpdateData(FALSE);
}
void COne::OnBnClickedNum5()
{
UpdateData(TRUE);
m_str = m_str + "5";
UpdateData(FALSE);
}
void COne::OnBnClickedNum6()
{
UpdateData(TRUE);
m_str = m_str + "6";
UpdateData(FALSE);
}
void COne::OnBnClickedNum7()
{
UpdateData(TRUE);
m_str = m_str + "7";
UpdateData(FALSE);
}
void COne::OnBnClickedNum8()
{
UpdateData(TRUE);
m_str = m_str + "8";
UpdateData(FALSE);
}
void COne::OnBnClickedNum9()
{
UpdateData(TRUE);
m_str = m_str + "9";
UpdateData(FALSE);
}
void COne::OnBnClickedClear()
{
UpdateData(TRUE);
m_str = ""; //将对话框设为空,即达到清零的效果
UpdateData(FALSE);
}
void COne::OnBnClickedPoint()
{
UpdateData(TRUE);
if (-1 == m_str.Find('.'))
{
m_str = m_str + ".";
}
UpdateData(FALSE);
}
void COne::SaveValue1()
{
UpdateData(TRUE);
m_fNumber1 = atof(m_str); //编辑框显示第一个操作数
m_str = ""; //做完上步操作后将编辑框设置为空
UpdateData(FALSE);
}
void COne::Calculator()
{
UpdateData(TRUE);
m_fNumber2 = atof(m_str);
double f = 0.0f;
switch (m_iSign)
{
case 0:
f = m_fNumber1 + m_fNumber2;//加
break;
case 1:
f = m_fNumber1 - m_fNumber2;//减
break;
case 2:
f = m_fNumber1 * m_fNumber2;//乘
break;
case 3:
if (m_fNumber2 == 0.0f) //除法中分母不能为0,为0时需要进行如下操作
{
MessageBox("除数不能为0!"); //弹出提示消息框
f = m_fNumber1;
//除数为0时直接将第一个操作数赋给结果,表示第二个操作数不算,直接继续下一步操作
}
else
{
f = m_fNumber1 / m_fNumber2;//除
}
break;
default:
break;
}
//计算结果处理
//如果浮点数其实是个整数
if(f - int(f) <= 1e-5)
{
m_str.Format("%d",(int)f);
}
else
{
m_str.Format("%f",f);
}
UpdateData(FALSE);
}
xxxDlg.h文件
#pragma once
#include "afxwin.h"
// COne 对话框
class COne : public CDialogEx
{
DECLARE_DYNAMIC(COne)
public:
COne(CWnd* pParent = NULL); // 标准构造函数
virtual ~COne();
// 对话框数据
enum { IDD = IDD_DIALOG1 };
double m_fNumber1;
double m_fNumber2;
int m_iSign;
void SaveValue1();
void Calculator();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
CEdit m_edit;
CString m_str;
afx_msg void OnEnChangeDisply();
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedEqu();
afx_msg void OnBnClickedAdd();
afx_msg void OnBnClickedRed();
afx_msg void OnBnClickedRid();
afx_msg void OnBnClickedDiv();
afx_msg void OnBnClickedNum0();
afx_msg void OnBnClickedNum1();
afx_msg void OnBnClickedNum2();
afx_msg void OnBnClickedNum3();
afx_msg void OnBnClickedNum4();
afx_msg void OnBnClickedNum5();
afx_msg void OnBnClickedNum6();
afx_msg void OnBnClickedNum7();
afx_msg void OnBnClickedNum8();
afx_msg void OnBnClickedNum9();
afx_msg void OnBnClickedClear();
afx_msg void OnBnClickedPoint();
};