1,简介
某个晚上帮人做的一个MFC课程设计的作业。大概花了两三个小时。
效果:
就和平常使用的计算器用法差不多。
2,源码下载
3,部分主要代码
CalculatorDlg.h文件中:
class CCalculatorDlg : public CDialog
{
// Construction
public:
void SaveValue1();
CCalculatorDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CCalculatorDlg)
enum { IDD = IDD_CALCULATOR_DIALOG };
CEdit m_edit;<span style="white-space:pre"> </span>//显示使用一个编辑框
CString m_str;<span style="white-space:pre"> </span>//编辑框内的字符串
//输入的2个值
double m_fNumber1;
double m_fNumber2;
//保存计算符号类型 0='+',1='-',2='*',3='/'
int m_iSign;
//计算
void Calculator();
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCalculatorDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CCalculatorDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnMyAbout();
afx_msg void OnButtonBack();
afx_msg void OnButtonClear();
afx_msg void OnButton1();
afx_msg void OnButton2();
afx_msg void OnButton3();
afx_msg void OnButton4();
afx_msg void OnButton5();
afx_msg void OnButton6();
afx_msg void OnButton7();
afx_msg void OnButton8();
afx_msg void OnButton9();
afx_msg void OnButton0();
afx_msg void OnButtonDian();
afx_msg void OnButtonJia();
afx_msg void OnButtonJian();
afx_msg void OnButtonCheng();
afx_msg void OnButtonChu();
afx_msg void OnButtonDeng();
afx_msg void OnButtonPingFang();
afx_msg void OnButtonKaiFang();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CalculatorDlg.cpp文件中:
void CCalculatorDlg::OnButtonBack()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
//移除最右边一个字符
if (!m_str.IsEmpty())
{
m_str = m_str.Left(m_str.GetLength()-1);
}
UpdateData(FALSE);
}
void CCalculatorDlg::OnButtonClear()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = "";
m_fNumber1 = 0.0f;
m_fNumber2 = 0.0f;
m_iSign = 0;
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "1";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton2()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "2";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton3()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "3";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton4()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "4";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton5()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "5";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton6()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "6";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton7()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "7";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton8()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "8";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton9()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "9";
UpdateData(FALSE);
}
void CCalculatorDlg::OnButton0()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_str = m_str + "0";
UpdateData(FALSE);
}
//小数点按钮
void CCalculatorDlg::OnButtonDian()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
//如果没有小数点,则加上一个小数点,如果已有小数点就忽略此次的小数点,保证最多只有1个
if (-1 == m_str.Find('.'))
{
m_str = m_str + ".";
}
UpdateData(FALSE);
}
void CCalculatorDlg::OnButtonJia()
{
// TODO: Add your control notification handler code here
SaveValue1();
m_iSign = 0;
}
void CCalculatorDlg::OnButtonJian()
{
// TODO: Add your control notification handler code here
SaveValue1();
m_iSign = 1;
}
void CCalculatorDlg::OnButtonCheng()
{
// TODO: Add your control notification handler code here
SaveValue1();
m_iSign = 2;
}
void CCalculatorDlg::OnButtonChu()
{
// TODO: Add your control notification handler code here
SaveValue1();
m_iSign = 3;
}
void CCalculatorDlg::OnButtonDeng()
{
// TODO: Add your control notification handler code here
Calculator();
}
void CCalculatorDlg::SaveValue1()
{
UpdateData(TRUE);
m_fNumber1 = atof(m_str);
m_str = "";
UpdateData(FALSE);
}
void CCalculatorDlg::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)
{
f = m_fNumber1;
}
else
{
f = m_fNumber1 / m_fNumber2;
}
break;
//平方
case 4:
f = m_fNumber2 * m_fNumber2;
break;
//开方
case 5:
f = sqrt(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);
m_fNumber1 = f;
m_fNumber2 = 0.0f;
}
void CCalculatorDlg::OnButtonPingFang()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_fNumber1 = atof(m_str);
double f = m_fNumber1 * m_fNumber1;
//如果浮点数其实是个整数
if(f - int(f) <= 1e-5)
{
m_str.Format("%d",(int)f);
}
else
{
m_str.Format("%f",f);
}
UpdateData(FALSE);
m_fNumber1 = f;
m_fNumber2 = 0.0f;
m_iSign = 4;
}
void CCalculatorDlg::OnButtonKaiFang()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_fNumber1 = atof(m_str);
double f = sqrt(m_fNumber1);
//如果浮点数其实是个整数
if(f - int(f) <= 1e-5)
{
m_str.Format("%d",(int)f);
}
else
{
m_str.Format("%f",f);
}
UpdateData(FALSE);
m_fNumber1 = f;
m_fNumber2 = 0.0f;
m_iSign = 5;
}
本文分享了一个使用MFC进行的简单计算器课程设计作业,包括源码下载和关键代码解析,功能与普通计算器类似。

被折叠的 条评论
为什么被折叠?



