思路:
用壹個變量來標記操作符(+ - * /),int flag=0; ? //1為加,2為減,3為乘,4為除,0為未按操作符。
用兩個CString變量來存儲第壹個和第二個操作數,註意如果為除時要檢測第二個操作數是否為0。
隨時檢測輸入框edit中輸入的內容,最多只能有壹個小數點,首先按小數點時顯示為“0.”
另註意壹些細節:連續操作,結果數如果有小數點,末尾為0的要全部消除0等等
實現:
edit控件:增加控件變量:m_edit
新建上述button 分別更改為:IDC_0........IDC_9, IDC_AC, IDC_C , IDC_CHU(除) , IDC_C(乘) , IDC_J(減) , IDC_ADD(加) , IDC_DOT(點) , IDC_DY(等於)
全局變量:?
CString str1, str;
int flag = 0; //0為無,1為加,2為減,3為乘,4為除
bool bflag = false; //輸入是否為第二個操作數
代碼如下:
void CcalcDlg::OnBnClickedAc() //AC
{
flag = 0;
bflag = false;
str1 = _T("");
str = _T("");
m_edit.SetWindowTextW(_T(""));
}
void CcalcDlg::OnBnClickedC() //C
{
OnBnClickedAc();
}
void CcalcDlg::OnBnClicked1() //1
{
if (bflag==true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("1");
}
else
{
str = str + _T("1");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked2() //2
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("2");
}
else
{
str = str + _T("2");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked3() //3
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("3");
}
else
{
str = str + _T("3");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked4() //4
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("4");
}
else
{
str = str + _T("4");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked5() //5
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("5");
}
else
{
str = str + _T("5");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked6() //6
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("6");
}
else
{
str = str + _T("6");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked7() //7
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("7");
}
else
{
str = str + _T("7");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked8() //8
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("8");
}
else
{
str = str + _T("8");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked9() //9
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("9");
}
else
{
str = str + _T("9");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked0() //0
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str != _T("0"))
{
str = str + _T("0");
m_edit.SetWindowTextW(str);
}
}
void CcalcDlg::OnBnClickedDot() //點
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str.Find('.') != -1)
return;
if (str == _T("0") || str == _T(""))
{
str = _T("0.");
}
else
{
str = str + _T(".");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClickedChu() //除
{
if (str != _T(""))
{
flag = 4;
bflag = true;
}
}
void CcalcDlg::OnBnClickedCheng() //乘
{
if (str != _T(""))
{
flag = 3;
bflag = true;
}
}
void CcalcDlg::OnBnClickedJ() //減
{
if (str != _T(""))
{
bflag = true;
flag = 2;
}
}
void CcalcDlg::OnBnClickedAdd() //加
{
if (str != _T(""))
{
flag = 1;
bflag = true;
}
}
void CcalcDlg::OnBnClickedDy() //等於
{
double a, b;
b = _ttof(str);
a = _ttof(str1);
CString s;
switch (flag)
{
case 1: //加
s.Format(_T("%f"), a + b);
break;
case 2: //減
s.Format(_T("%f"), a - b);
break;
case 3: //乘
s.Format(_T("%f"), a * b);
break;
case 4: //除
if (str != _T("0"))
{
s.Format(_T("%f"), a / b);
}
else
{
MessageBox(_T("除數為0"));
OnBnClickedAc();
}
break;
default:
s = _T("");
}
int f = s.Find('.');
if (f != -1)
{
int i = s.GetLength();
while ('0' == s.GetAt(i - 1))
{
s.Delete(i - 1, 1);
i--;
}
i = s.GetLength();
if ('.' == s.GetAt(i - 1))
{
s.Delete(i - 1, 1);
}
}
m_edit.SetWindowTextW(s);
str = _T("");
str1 = _T("");
flag = 0;
bflag = false;
}