Código fuente de emergencia para una calculadora escrita en VC 6.0
clase CCacl2Dlg: CDialog público
{
// estructura
Público:
int m_fun ; //m_fun es un operador, por ejemplo:
void AddFun(int j); //Esta función es para ingresar números
void AddNum(int i); la función es para ingresar números
void AddNum(int i); //Esta función es para ingresar operadores
int m_ForS //Indica si la entrada es el
//primer número o segundo
bool m_Firx, m_secx; //m_fun es un operador como: m_fun es un operador, como: , -, *, /
int m_fun; //m_fun es un operador, como: , -, *, /
firx, m_secx // Indica si se ingresa la parte decimal en este momento
/ /es decir, double m_first, m_segundo; // El primer y segundo número
double m_firstz, m_segundoz; // La parte entera del primer y segundo número
double m_firstx, m_segundox; // La parte decimal del primer y segundo número
int m_firxw, m_secxw; //El número de dígitos en la parte decimal del primer y segundo número
int m_firzorf, m_seczorf ; //Indica si es un número negativo
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon()
afx_msg void On0(); /p>
afx_msg vacío On1();
afx_msg vacío On2()
afx_msg vacío On3();
afx_msg vacío On4();
afx_msg vacío On5();
afx_msg vacío On6 ();
afx_msg vacío On7(); ();
afx_msg vacío On9();
afx_msg vacío OnAdd();
afx_msg vacío OnBack(); void OnDiv();
afx_msg void OnGo();
afx_msg void OnOn()
afx_msg void OnSub(); > afx_msg vacío OnTim();
afx_msg vacío OnXsd();
afx_msg vacío OnZfh();
afx_msg vacío
OnAbtath();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
Archivo CPP
CCacl2Dlg::CCacl2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CCacl2Dlg::IDD, pParent)
{
// {{AFX_DATA_INIT(CCacl2Dlg)
m_x = 0.0;
//}}AFX_DATA_INIT
// Tenga en cuenta que en Win32, LoadIcon no necesita a seguir DestroyIcon
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_first=0.0; m_segundo=0.0 // Esta línea se inicializa de la siguiente manera
m_firstz=0; m_firstx=0.0;
m_segundoz=0; m_segundox=0.0; m_msec=0.0 ; m_mfun=0;
m_sfmf=FALSE; m_sfms=FALSE; m_sfmfun=FALSE;
}
void CCacl2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCacl2Dlg)
DDX_Control(pDX , IDC_RESULT, m_xedit);
DDX_Text(pDX, IDC_RESULT, m_x);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP (CCacl2Dlg,
//{{AFX_MSG_MAP(CCacl2Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON(
ON_BN_CLICKED(IDC_0, On0)
ON_BN_CLICKED(IDC_1, On1)
ON_BN_CLICKED(IDC_2, On2)
ON_BN_CLICKED(IDC_3, On3)
ON_ BN_CLICKED(IDC_4, On4)
ON_BN_CLICKED(IDC_5, On5)
ON_BN_CLICKED(IDC_6, On6)
ON_BN_CLICKED (IDC_7, On7)
ON_BN_ CLICKED(IDC_8, On8)
ON_BN_CLICKED(IDC_9, On9)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED (ID
C_BACK, OnBack)
ON _BN_CLICKED(IDC_DIV, OnDiv)
ON_BN_CLICKED(IDC_GO, OnGo)
ON_BN_CLICKED(IDC_ON, OnOn)
ON_BN_CLICKED(IDC_SUB, OnSub)
ON_BN_CLICKED(IDC_TIM, OnTim)
ON_BN_CLICKED(IDC_XSD, OnXsd)
ON_BN_CLICKED(IDC_ZFH, OnZfh)
ON_BN_CLICKED(IDC_ ABTATH, OnAbtath)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////// /////////////////////////////////////////////////// //// ////////////////
// Controlador de mensajes CCacl2Dlg
void CCacl2Dlg::OnSysCommand(UINT nID, LPARAM lParam ) p>
{
if ((nID amp; 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog: .OnSysCommand(nID, lParam);
}
}
// Si agrega un botón de minimizar al cuadro de diálogo, necesitará el siguiente código
// Dibuja el botón de minimizar. Para aplicaciones MFC que utilizan documentos/modelos de vista,
// el marco hace esto automáticamente:
// si agrega un botón de minimizar al cuadro de diálogo, necesitará el siguiente código
// para dibujar el icono.
OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); Para dibujar
SendMessage(WM_ ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Coloca el icono en el centro del rectángulo del cliente
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(amp;rect);
p>
int x = (rect.Width() - cxIcon 1) / 2;
int y = (rect.Height() - cyIcon 1) / 2;
// Dibujar icono
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog: .OnPaint();
}
}
// Cuando el usuario arrastra la ventana minimizada, el sistema llamará esta función para obtener el cursor.
>HCURSOR CCacl2Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CCacl2Dlg::On0( ) // Entrada 0
{
//TODO: Agregue su control al cursor.// TODO: Agregue su código de controlador de notificación de control aquí
AddNum (0);
}
void CCacl2Dlg::On1() //Entrada 1
{
// TODO: AddNum (1);
}
void CCacl2Dlg::On2() //Entrada 2
{
/ /TODO: Agregar su código de controlador de notificación de control aquí
AddNum(2);
}
void CCacl2Dlg::On3() // Ingrese 3
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
AddNum(3);
}
void CCacl2Dlg:: On4() // Entrada 4
{
// TODO: Agregue el código del controlador de notificación de control aquí
AddNum(4);
}
void CCacl2Dlg::On5() // Ingrese 5
{
/ /TODO: Agregue el código del controlador de notificaciones de control aquí
AddNum(5);
}
void CCacl2Dlg::On6() // Ingresa 6
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
AddNum(6);
} p>
void CCacl2Dlg::On7() // Entrada 7
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
AddNum(7);
}
void CCacl2Dlg ::On8() // Ingrese 8
{
// TODO: agregue aquí el código del controlador de notificación de control
AddNum(8);
}
void CCacl2Dlg::On9() //entrada 9 p>
{
// TODO: AddNum(9
);}
void CCacl2Dlg::OnAdd() //input
{
// TODO: agregue aquí el código del controlador de notificaciones de control
AddFun(1);
}
void CCacl2Dlg::OnBack() //Presiona la tecla de retorno
{
// TODO: agregue aquí su código de controlador de notificación de control
if(m_ForS==1) //Si el primer número se ingresa en este momento
{
if(m_firx==FALSE) //Si en este momento se ingresa el primer número Parte entera
{ if(m_fi
rstzlt; 10 ) //si la parte entera es menor que 10
{
m_firstz=0; //cambiar a 0
m_firzorf=1;
}
else
{
int y1=(int)m_firstz; //y1 es un número igual a la parte entera
p>y1/=10; // Eliminar dígitos individuales
m_firstz=y1;
}
}
else //si solo hay un dígito en la parte fraccionaria de la entrada
{
if(m_firxw==1) //en este punto solo hay un dígito en la parte decimal
{
m_firstx=0.0; m_firxw=0; m_firx=FALSE; // Borrar la parte decimal
}
else
{
int y2=(int)(m_firstx*pow(10, m_firxw)); //Toma un número entero igual al número entero representado por todos los decimales, por ejemplo: 123 es igual a 0.
Por ejemplo, 123 es igual al número representado por la parte decimal de 0.123
y2/=10; m_firxw-- // Elimina el último dígito
m_firstx=y2*pow (10, ( -1)*m_firxw);
}
}
m_first=m_firzorf*(m_firstz m_firstx); // Calcula el primer número
m_x=m_first; UpdateData(FALSE); // Mostrarlo
}
else if(m_ForS==2) // Si se ingresa el segundo número , método de procesamiento Igual que el primer número
{
if(m_secx==FALSE)
{
if(m_segundozlt;10 )
{
m_segundoz=0;
m_seczorf=1
}
más
{
int y3=(int)m_segundoz
y3/=10
m_segundoz=y3; }
}
más
{
if(m_secxw==1)
{
m_segundox= 0.0; m_secxw=0; m_secx=FALSO;
}
más
{
int y4=(int)( m_segundox* pow(10, m_secxw));
y4/=10; m_secxw--;
m_segundox=y4*pow(10, (-1)*m_secxw);
}
}
m_segundo=m_seczorf*(m_segundoz m _segundox);
m_x=m_segundo; p>
}
}
}
void CCacl2Dlg::OnDiv() //Entrada
{
// TODO: AddFun(4);
}
void CCacl2Dlg::OnGo() //Presione = operación de símbolo
{
// TODO: agrega aquí el código del controlador de notificaciones de control
if(m_sfmf==TRUE&m_sfms==TRUE&m_sfmfun==TRUE) //Si recuerdas el primero dos dígitos y operadores, i., i., i., i., i., i., i., i., i., ii.e., y luego presione el signo = nuevamente < sfmf=TRUE; =TRUE; m_sfmfun=TRUE; // Recuerda los números y operadores involucrados en la operación
m_mfir=m_result; m_msec=m_msec;
}
<; p> else if(m_sfmf= = VERDADEROamp;amp;m_sfms==FALSEamp;amp; m_sfmfun==FALSE) // Solo recuerda el primer número, como g., cuenta 2 3=5 y luego presiona *4=
{
if(m_fun= =1)m_result=m_mfir m_segundo;
else if(m_fun==2)m_result=m_mfir-m_segundo;
else if(m_fun==3)m_result=m_mfir*m_segundo;
else if(m_fun==4)m_result=m_ mfir/m_segundo;
m_sfmf=TRUE; m_sfms=TRUE; m_result; m_msec=m_segundo; m_mfun=m_fun;
}
else if(m_sfmf=TRUEamp;amp;m_sfms==TRUEamp;m_sfmfun==FALSE) //Recuerda el Se ingresó el primer número, no se ingresó el segundo número y se ingresó el operador.
Si presionas *= después de 2 3=5, el resultado será 5*5=25;
{
m_segundo=m_mfir;
if(m_fun ==1)m_result=m_mfir m_segundo;
else if(m_fun==2)m_result=m _mfir-m_segundo;
else if(m_fun==3)m_result=m_mfir* m_segundo;
else if(m_fun==4)m_result=m_mfir/m_segundo;
m_sfmf=TRUE; =m_result;m_msec=m_segundo;m_mfun=m_fun;
}
else if(m_sfmf==FALSEamp;amp;m_sfms= = FALSEamp;amp;m_sfmfun==FALSE)// Los dos primeros números y operadores no se memorizan. Vuelva a ingresarlos después de memorizarlos. Por ejemplo, después de calcular 2 3 = 5, ingrese 4 * 6 =
{
if (. m_EnterSec==FALSE) m_segundo=m_first;
Si (m_fun===1) m_result=m_first m_segundo;
En caso contrario, si (m_fun===2) m_result=m_first- m_segundo;
else if(m_fun==3)m_result=m_first*m_segundo;
else if(m_fun==4)m_result=m_first/m_segundo;
m_sfmf=VERDADERO; m_sfms=VERDADERO; m_sfmfun=verdadero;
m_mfir=m_result; m_msec =m_segundo;
}
m_x=m_resultado ;
UpdateData(FALSE); //Mostrar resultados
m_first=0.0; >
m_segundoz =0; m_segundox=0.0;
m_firx=FALSE; m_secx=FALSE;
m_firxw=0; m_secxw=0;
m_firzorf =1; m_seczorf= 1;
m_ForS=1
m_EnterSec=FALSE;
}
void CCacl2Dlg::OnOn( ) //Presiona
{
// TODO: Agrega tu control secondz=0; m_segundox=0.0
m_firx=FALSE;
m_firxw=0; m_secxw=0;
m_firzorf=1;
m_ForS=1; 0,0; m_
msec=0.0;
m_mfun=0;
m_EnterSec=FALSE; p> UpdateData(FALSE);
}
void CCacl2Dlg::OnSub() //entrada-
{
// TODO: agregue aquí el código del controlador de notificaciones de control
AddFun(2);
}
void CCacl2Dlg::OnTim() //input*
{
// TODO: agregue aquí el código del controlador de notificaciones de control
AddFun(3);
}
m_segundoz*=10; m_segundoz =i;
}
más
{
m_segundox = pow(10, (- 1)*m_secxw)*i;
}
m_segundo=m_seczorf*(m_segundoz m_segundox);
m_sfms=m_msec =0; >
m_x=m_segundo;
UpdateData(FALSE
}
}
void CCacl2Dlg: :AddFun(int j) //Función de controlador en el operador de entrada
{
if(m_sfmf==TRUEamp;amp;m_sfmfun==FALSEamp;amp; m_EnterSec==TRUE)
{ if(m_fun==1)m_result=m_mfir m_segundo;
más si(m_fun==2)m_result=m_mfir-m_segundo;
más si( m_fun==3)m_result=m_mfir* m_segundo;
else if(m_fun==4)m_result=m_mfir/m_segundo;
m_x=m_result; m_sfmf =TRUE;
UpdateData(FALSE).m_EnterSec=FALSE
m_firstx=0; ; m_segundoz=0; m_segundox=0; m_secxw=0;
m_ForS=2; m_seczorf=1
si (j==1) m_fun =1; >
En caso contrario, si (j==2) m_fun=2
En caso contrario, si (j==3) m_fun=3
En caso contrario, si (j=; =4) m_fun=4;
}
else if (m_sfmf==FALSEamp; amp; m_sfmfun==FALSEamp; m_EnterSec==TRUE) //si
En este punto hay un segundo número. Luego haga el cálculo, por ejemplo, ingrese 2 3 y presione *
{
If (m_fun==1) m_result=m_first m_segundo
De lo contrario, if (m_fun ==2) m_result=m_first-m_segundo;
En caso contrario, if (m_fun==3) m_result=m_first*m_segundo
En caso contrario, if (m_fun==4; ) m_result= m_first/m_segundo
m_x=m_result; m_first=m_result;
UpdateData(FALSE); m_EnterSec=FALSE; =m_resultado;
m_segundo=0; m_segundox=0; /p>
m_ForS=2; m_seczorf=1;
si(j==1)m_fun=1
si(j==2)m_fun=2; ;
p>más si(j==3)m_fun=3;
más si(j==4)m_fun=4;
}
más
{
si(j==1)m_fun=1
más si(j==2)m_fun=; 2;
más si(j==3)m_fun=3;
más si(j==4)m_fun=4;
m_ForS=2 ;
m_x=0;
UpdateData(FALSO);
}
m_ sfmfun=FALSO; p>
}