當前位置:編程學習大全網 - 編程語言 - 用C++編寫計算器

用C++編寫計算器

思路:

用壹個變量來標記操作符(+ - * /),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;

}

  • 上一篇:pdf文件禁止打印怎麽解除
  • 下一篇:如何生成二維碼
  • copyright 2024編程學習大全網