MFC(VS2010)四则运算器

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();
};

猜你喜欢

转载自blog.csdn.net/weixin_42386373/article/details/89227213
今日推荐