简易计算器

0 篇文章 0 订阅

一个可以进行小数加减乘除简易运算的计算器

这是vc2010&&mfc下实现的:


// CalculatorDlg.cpp : 实现文件
//


#include "stdafx.h"
#include "Calculator.h"
#include "CalculatorDlg.h"
#include "afxdialogex.h"
#include <cmath>

CString number1;
CString number2;
CString result;
CString flag;
CString text;
int numberM = 0;
int count1  = 0;
int count2  = 0; 
double num_result = 0;

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void On32780();
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
	ON_COMMAND(ID_32780, &CAboutDlg::On32780)
END_MESSAGE_MAP()


// CCalculatorDlg 对话框




CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CCalculatorDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCalculatorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT_Show, m_edit_show);
}

BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTN_Zero, &CCalculatorDlg::OnBnClickedBtnZero)
	ON_BN_CLICKED(IDC_BTN_One, &CCalculatorDlg::OnBnClickedBtnOne)
	ON_BN_CLICKED(IDC_BTN_Two, &CCalculatorDlg::OnBnClickedBtnTwo)
	ON_BN_CLICKED(IDC_BTN_Three, &CCalculatorDlg::OnBnClickedBtnThree)
	ON_BN_CLICKED(IDC_BTN_Four, &CCalculatorDlg::OnBnClickedBtnFour)
	ON_BN_CLICKED(IDC_BTN_Fives, &CCalculatorDlg::OnBnClickedBtnFives)
	ON_BN_CLICKED(IDC_BTN_Six, &CCalculatorDlg::OnBnClickedBtnSix)
	ON_BN_CLICKED(IDC_BTN_Seven, &CCalculatorDlg::OnBnClickedBtnSeven)
	ON_BN_CLICKED(IDC_BTN_Eight, &CCalculatorDlg::OnBnClickedBtnEight)
	ON_BN_CLICKED(IDC_BTN_Nine, &CCalculatorDlg::OnBnClickedBtnNine)
	ON_BN_CLICKED(IDC_BTN_Point, &CCalculatorDlg::OnBnClickedBtnPoint)
	ON_BN_CLICKED(IDC_BTN_Plus, &CCalculatorDlg::OnBnClickedBtnPlus)
	ON_BN_CLICKED(IDC_BTN_Less, &CCalculatorDlg::OnBnClickedBtnLess)
	ON_BN_CLICKED(IDC_BTN_Multiply, &CCalculatorDlg::OnBnClickedBtnMultiply)
	ON_BN_CLICKED(IDC_BTN_Except, &CCalculatorDlg::OnBnClickedBtnExcept)
	ON_BN_CLICKED(IDC_BTN_Equal, &CCalculatorDlg::OnBnClickedBtnEqual)
	ON_BN_CLICKED(IDC_BTN_C, &CCalculatorDlg::OnBnClickedBtnC)
	ON_BN_CLICKED(IDC_BTN_Back, &CCalculatorDlg::OnBnClickedBtnBack)
	ON_BN_CLICKED(IDC_BTN_Positive_Negative, &CCalculatorDlg::OnBnClickedBtnPositiveNegative)
	ON_BN_CLICKED(IDC_BTN__Fraction, &CCalculatorDlg::OnBnClickedBtn)
	ON_BN_CLICKED(IDC_BTN_Root, &CCalculatorDlg::OnBnClickedBtnRoot)
	ON_BN_CLICKED(IDC_BTN_MC, &CCalculatorDlg::OnBnClickedBtnMc)
	ON_BN_CLICKED(IDC_BTN_MR, &CCalculatorDlg::OnBnClickedBtnMr)
	ON_BN_CLICKED(IDC_BTN_MS, &CCalculatorDlg::OnBnClickedBtnMs)
	ON_BN_CLICKED(IDC_BTN_Mplus, &CCalculatorDlg::OnBnClickedBtnMplus)
	ON_BN_CLICKED(IDC_BTN_Mless, &CCalculatorDlg::OnBnClickedBtnMless)
	ON_BN_CLICKED(IDC_BTN_CE, &CCalculatorDlg::OnBnClickedBtnCe)
	ON_BN_CLICKED(IDC_BTN_Percent_Sign, &CCalculatorDlg::OnBnClickedBtnPercentSign)
END_MESSAGE_MAP()


// CCalculatorDlg 消息处理程序

BOOL CCalculatorDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	m_Menu.LoadMenu(IDR_MENU1);  //  IDR_MENU1
	SetMenu(&m_Menu);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CCalculatorDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int 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;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CCalculatorDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



void CCalculatorDlg::OnBnClickedBtnZero()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '0';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '0';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnOne()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '1';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '1';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnTwo()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '2';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '2';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnThree()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '3';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '3';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnFour()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '4';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '4';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnFives()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '5';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '5';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnSix()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '6';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '6';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnSeven()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '7';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '7';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnEight()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '8';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '8';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnNine()
{
	// TODO: 在此添加控件通知处理程序代码
	if (count2 == 0)
	{
		number1 = "";
	}
	if (flag == "")
	{
		number1 = number1 + '9';
		m_edit_show.SetWindowText(number1);
	}
	if (flag != "")
	{
		number2 = number2 + '9';
		m_edit_show.SetWindowText(flag+number2);
	}
	count2++;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnPoint()
{
	if (count2 == 0)
	{
		number1 = "";
	}
	if (count1 == 0)
	{
		if (flag == "")
		{
			
			GetDlgItemText(IDC_EDIT_Show,text);
			if (text == "")
			{	
				number1 = '0';
			}else{
				number1 = text;
			}
			number1 = number1 + '.';
			m_edit_show.SetWindowText(number1);
			count1++;
			count2++;
		}
	}
	if (flag != "")
	{
		if (number2 == "")
		{
			number2 = '0';
		}
		number2 = number2 + '.';
		m_edit_show.SetWindowText(flag+number2);
	}
	count1++;
	count2++;
	UpdateData(false);
	}

	


void CCalculatorDlg::OnBnClickedBtnPlus()
{
	flag = number1 + " " +  '+' + " ";
	m_edit_show.SetWindowText(flag);
	count2++;
	UpdateData(FALSE);

}


void CCalculatorDlg::OnBnClickedBtnLess()
{
	// TODO: 在此添加控件通知处理程序代码
	flag = number1 + " " + '-' + " ";
	m_edit_show.SetWindowText(flag);
	count2++;
	UpdateData(FALSE);
}


void CCalculatorDlg::OnBnClickedBtnMultiply()
{
	flag = number1 + " " + '*' + " ";
	m_edit_show.SetWindowText(flag);
	count2++;
	UpdateData(FALSE);

}


void CCalculatorDlg::OnBnClickedBtnExcept()
{
	flag = number1 + " " + '/' + " ";
	count2++;
	m_edit_show.SetWindowText(flag);
	UpdateData(FALSE);

}


void CCalculatorDlg::OnBnClickedBtnEqual()
{
	if (number1 != "" && number2 != "")
	{
		double num1 = atof(number1);
		double num2 = atof(number2);
		
		char flag_Equal;
		flag_Equal = flag[flag.GetLength()-2];
		switch(flag_Equal){
		case '+' : 
			num_result = num1 + num2;
			break;
		case '*' : 
			num_result = num1 * num2;
			break;
		case '/' : 

				num_result = num1 / num2;
				break;

		case '-' : 
			num_result = num1 - num2;
			break;
		default:
			m_edit_show.SetWindowText(_T("出错"));
			break;
		}

		if (num2 == 0)
		{
			m_edit_show.SetWindowText(_T("被除数不能为零"));
		}else{
			if (int(num_result) == num_result)
			{
				result.Format("%0.0f",num_result);
			}else{
				result.Format("%0.6f",num_result);
			}
			m_edit_show.SetWindowText(result);
		}
		number1 = result;
		number2 = "";
		flag = "";
		count1 = 0;
		count2 = 0;
		UpdateData(FALSE);
	}

}


void CCalculatorDlg::OnBnClickedBtnC()
{
	m_edit_show.SetWindowText(NULL);
	number1 = "";
	number2 = "";
	flag = "";
	count1 = 0;
	count2 = 0;
	UpdateData(false);
}


void CCalculatorDlg::OnBnClickedBtnBack()
{
	GetDlgItemText(IDC_EDIT_Show,text);
	if (text == "")
	{
		number1 = "";
		number2 = "";
		flag = "";
		count1 = 0;
		count2 = 0;
		m_edit_show.SetWindowText(NULL);
	}
	if (number1 != "" && number2 == "" && flag =="")
	{
		number1.Delete(number1.GetLength()-1,1);
		m_edit_show.SetWindowText(number1);
		UpdateData(FALSE);

	}
	if (number1 != "" && number2 == "" && flag !="")
	{
		flag.Delete(flag.GetLength()-1,1);
		m_edit_show.SetWindowText(flag);
		UpdateData(FALSE);
	}
	if (number1 != "" && number2 != "" && flag !="")
	{
		number2.Delete(number2.GetLength()-1,1);
		m_edit_show.SetWindowText(flag+number2);
		UpdateData(FALSE);
	}
}


void CCalculatorDlg::OnBnClickedBtnPositiveNegative()
{
	if (number1 != "" && number2 == "" && flag =="")
	{
		double num = -atof(number1);
		if (int(num) == num)
		{
			number1.Format("%0.0f",num);
		}else{
			number1.Format("%0.6f",num);
		}
		m_edit_show.SetWindowText(number1);
		UpdateData(FALSE);

	}
	if (number1 != "" && number2 != "" && flag !="")
	{
		double num = -atof(number2);
		if (int(num) == num)
		{
			number2.Format(" %0.0f",num);
		}else{
			number2.Format(" %0.6f",num);
		}
		m_edit_show.SetWindowText(flag+number2);
		UpdateData(FALSE);
	}
}


void CCalculatorDlg::OnBnClickedBtn()
{
	if (number1 != "" && number2 == "")
	{
		double Num = 1.0 / atoi(number1);
		if (int(Num) == Num)
		{
			number1.Format("%0.0f",Num);
		}else{
			number1.Format("%0.6f",Num);
		}
		m_edit_show.SetWindowText(number1);
		UpdateData(FALSE);
		count2 = 0;
	}
}


void CCalculatorDlg::OnBnClickedBtnRoot()
{
	// TODO: 在此添加控件通知处理程序代码
	if (number1 != "" && number2 == "")
	{
		double rootNum = atoi(number1);
		rootNum =  sqrt(rootNum);
		if (int(rootNum) == rootNum)
		{
			number1.Format("%0.0f",rootNum);
		}else{
			number1.Format("%0.6f",rootNum);
		}
		m_edit_show.SetWindowText(number1);
		UpdateData(FALSE);
		count2++;
	}
}


void CCalculatorDlg::OnBnClickedBtnMc()
{
	numberM = 0;
}


void CCalculatorDlg::OnBnClickedBtnMr()
{
	if (number1 != "")
	{
		number1.Format("%d",numberM);
	}else{
		number2.Format("%d",numberM);
	}
}


void CCalculatorDlg::OnBnClickedBtnMs()
{
	
	GetDlgItemText(IDC_EDIT_Show,text);
	numberM = atoi(text);
}


void CCalculatorDlg::OnBnClickedBtnMplus()
{

	GetDlgItemText(IDC_EDIT_Show,text);
	int renumberM = atoi(text);
	numberM = numberM + renumberM;
}


void CCalculatorDlg::OnBnClickedBtnMless()
{
	
	GetDlgItemText(IDC_EDIT_Show,text);
	int renumberM = atoi(text);
	numberM = numberM - renumberM;
}


void CCalculatorDlg::OnBnClickedBtnCe()
{
	m_edit_show.SetWindowText("");
}


void CCalculatorDlg::OnBnClickedBtnPercentSign()
{
	if (num_result != 0)
	{
		num_result = num_result / 100;
		result.Format("%0.6f",num_result);
		m_edit_show.SetWindowText(result);
		number1 = result;
	}else{
		m_edit_show.SetWindowText("0");
		number1 = "";
	}

	number2 = "";
	flag = "";
	count1 = 0;
	count2 = 0;
	UpdateData(FALSE);
}


void CAboutDlg::On32780()
{
	// TODO: 在此添加命令处理程序代码
	MessageBox("test");
}

好了,到这里就已经完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值