Escribir una calculadora en C++
Idea:
Usar una variable para marcar el operador (+ - * /), int flag=0 ? //1 es suma, 2 es resta, 3 es multiplicación, 4 significa división, 0 significa que no se presiona ningún operador.
Utilice dos variables CString para almacenar el primer y segundo operando. Tenga en cuenta que si es división, verifique si el segundo operando es 0.
Verifique el contenido ingresado en el cuadro de entrada de edición en cualquier momento. Solo puede haber un punto decimal como máximo. Cuando presione el punto decimal primero, se mostrará como "0".
Preste atención también a algunos detalles: operación continua, el resultado Si el número tiene punto decimal, se deben eliminar todos los 0 al final, etc.
Implementación:
editar control: Agregar variable de control: m_edit
Crear los botones anteriores respectivamente Cambiar a: IDC_0..........IDC_9, IDC_AC, IDC_C, IDC_CHU(dividir), IDC_C(multiplicar) , IDC_J(resta), IDC_ADD(agregar), IDC_DOT(punto), IDC_DY(igual)
Variables globales:?
CString str1, str;
int flag = 0; //0 significa ninguno, 1 significa suma, 2 significa resta, 3 significa multiplicación, 4 es división
bool bflag = false //Si la entrada es el segundo operando
El código es el siguiente:
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"))
{
cadena = _T("1");
}
else
{
cadena = cadena + _T("1" );
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked2() //2
{
if (bflag == verdadero)
{
str1 = str;
str = _T ("");
bflag = false;
m_editWindowTextW(_T(""));
}
if. (cadena == _T("0"))
{
cadena = _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. Establecer texto de ventana W (
_T(""));
}
if (str == _T("0"))
{
str = _T("3");
}
else
{
cadena = cadena + _T("3");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked4() //4
{
if (bflag == verdadero)
{
str1 = str;
str = _T(" ");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
cadena = _T("4");
}
más
{
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
{
cadena = cadena + _T("5");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked6() //6
{
if (bflag == verdadero)
{
str1 = str;
str = _T(" ");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
cadena = _T("6");
}
más
{
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"))
{
cadena = _T("7");
}
else
{
cadena = cadena + _T("7")
;
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked8() //8 p>
{
if (bflag == verdadero)
{
str1 = str;
str = _T( "");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if ( str == _T("0"))
{
cadena = _T("8");
}
más
{
str = str + _T("8");
}
m_edit.SetWindowTextW(str); p>
p>
}
void CcalcDlg::OnBnClicked9() //9
{
if (bflag == verdadero)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW (_T(""));
}
if (str == _T("0"))
{ p>
str = _T("9");
}
else
{
str = str + _T ("9") ;
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClicked0() //0 p>
{
si (bflag == verdadero)
{
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() //Punto
{
if (bflag == verdadero)
{
str1 = str;
str = _T("");
bflag = falso;
m_edit.SetWindowTextW(_T(""));
}
if (str.Find('.') != -1) p>
return;
if (str == _T("0") || str == _T(""))
{
cadena = _T("0.");
}
else
{
cadena = cadena + _T(". ");
}
m_edit.SetWindowTextW(str);
}
void CcalcDlg::OnBnClickedChu () //Excepto
{
>if (str != _T(""))
{
bandera = 4;
bflag = verdadero;
}
}
void CcalcDlg::OnBnClickedCheng() //Multiplicar
{
if (str != _T("") )
{
bandera = 3;
bflag = verdadero;
}
}
void CcalcDlg::OnBnClickedJ() //Restar
{
if (str != _T(""))
{ p>
bflag = true;
flag = 2;
}
}
void CcalcDlg::OnBnClickedAdd() //Añadir
{
if (str != _T(""))
{
bandera = 1; p>
bflag = true;
}
}
void CcalcDlg::OnBnClickedDy() //Igual
{
doble a, b;
b = _ttof(str);
a = _ttof(str1);
CString s;
cambiar (bandera)
{
caso 1: //Agregar
s.Format(_T("%f") , a + b);
romper;
caso 2: //resta
s.Format(_T("%f"), a - b );
romper;
caso 3: //Multiplicar
s.Format(_T("%f"), a * b); p> p>
romper;
caso 4: //except
if (str != _T("0"))
{
s.Format(_T("%f"), a / b);
}
else
{
MessageBox(_T("El divisor es 0"));
OnBnClickedAc();
}
break;
predeterminado:
s = _T("");
}
int f = s.Find('.');
if (f != -1)
{
int i = s.GetLength();
mientras ('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("");
bandera = 0;
bflag = false;
}