viernes, 26 de agosto de 2011

Calculadora En Visual C#


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Calculadora
{
    public partial class Formulariocalculadora : Form
    {
        private enum Entrada
        {
            NINGUNA,
            DIGITO,
            OPERADOR,
            CE
        }
        private byte numOperandos;
        private double operando1;
        private double operando2;
        private Entrada ultimaEntrada;
        private bool comaDecimal;
        private char operador;
        private double memoria;
        public Formulariocalculadora()
        {
            numOperandos = 0;
            operando1 = 0;
            operando2 = 0;
            operador = '\0';
            comaDecimal = false;
            ultimaEntrada = Entrada.NINGUNA;
            memoria = 0;
            InitializeComponent();
        }



     

        private void btDigito_Click(object sender, EventArgs e)
        {
           
            Button objButton = (Button)sender;

            if (ultimaEntrada != Entrada.DIGITO)
            {
                if (ultimaEntrada != Entrada.OPERADOR)
                if (objButton.Text == "0") return;
                etPantalla.Text = "";
                if (objButton.Text == ",")
                    etPantalla.Text = "0";
                ultimaEntrada = Entrada.DIGITO;
                comaDecimal = false;
            }
            if (objButton.Text == ",")
            {
                if (comaDecimal == false)
                {
                    etPantalla.Text += ",";
                    comaDecimal = true;
                }
                return;
            }
            etPantalla.Text += objButton.Text;
           
        }
       

       

        private void btOPeracion_Click(object sender, EventArgs e)
        {
            Button objButton = (Button)sender;
            // Obtener el texto del botón pulsado
            string textoBoton = objButton.Text;

            if ((numOperandos == 0) && (textoBoton[0] == '-'))
                ultimaEntrada = Entrada.DIGITO;

            if (ultimaEntrada == Entrada.DIGITO)
                numOperandos += 1;

            if (numOperandos == 1)
                operando1 = double.Parse(etPantalla.Text);
            else if (numOperandos == 2)
            {
             
                operando2 = double.Parse(etPantalla.Text.Replace(',', '.'));
                switch (operador)
                {
                    case '+':
                        operando1 += operando2;
                        break;
                    case '-':
                        operando1 -= operando2;
                        break;
                    case 'x':
                        operando1 *= operando2;
                        break;
                    case '/':
                        operando1 /= operando2;
                        break;
                 
                    case '=':
                        operando1 = operando2;
                        break;
         
                         
                }
                etPantalla.Text = operando1.ToString();
                numOperandos = 1;
            }
            operador = textoBoton[0];
            ultimaEntrada = Entrada.OPERADOR;
        }

     

        private void btIniciar_Click(object sender, EventArgs e)
        {
            if (ultimaEntrada != Entrada.NINGUNA)
            {
                etPantalla.Text = "0,";
                ultimaEntrada = Entrada.NINGUNA;
                comaDecimal = false;
                operador = '\0';
                numOperandos = 0;
                operando1 = 0;
                operando2 = 0;
            }
        }

        private void btBorrarEntrada_Click(object sender, EventArgs e)
        {

            if (ultimaEntrada != Entrada.NINGUNA)
            {
                if (etPantalla.Text.EndsWith(","))
                    comaDecimal = false;
                etPantalla.Text = etPantalla.Text.Substring(0, etPantalla.Text.Length - 1);
                if (etPantalla.Text.Length == 0 || ultimaEntrada == Entrada.CE)
                {
                    etPantalla.Text = "0,";
                    ultimaEntrada = Entrada.CE;
                    //comaDecimal = false;
                }
            }
        }

        private void Formulariocalculadora_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar > 47 && e.KeyChar < 58)
            {
                if (ultimaEntrada != Entrada.DIGITO)
                {
                if(ultimaEntrada!=Entrada.OPERADOR)
                        if (e.KeyChar== 0) return;
                    etPantalla.Text = "";
                    ultimaEntrada = Entrada.DIGITO;
                    comaDecimal = false;
                }
                etPantalla.Text += e.KeyChar;
            }
            if (e.KeyChar == 27)
                btIniciar.PerformClick();
            else if (e.KeyChar == 8)
                btBorrarEntrada.PerformClick();
            else if (e.KeyChar == 43)
                btMas.PerformClick();
            else if (e.KeyChar == 45)
                btMenos.PerformClick();
            else if (e.KeyChar == 47)
                btDividir.PerformClick();
            else if (e.KeyChar == 37)
                btTantoPorCiento.PerformClick();
            else if (e.KeyChar == 42)
                btpor.PerformClick();
            else if (e.KeyChar == 44)
                btComaDec.PerformClick();
        }
       
        private void button1_Click(object sender, EventArgs e)
        {
            if (ultimaEntrada != Entrada.NINGUNA)
            {
                double aux;
                aux = double.Parse(etPantalla.Text.Replace(',', '.'));
                aux = aux * (-1);
                etPantalla.Text = aux.ToString().Replace('.', ',');
            }

        }

        private void funciones_matematicas(object sender, EventArgs e)
        {
            ToolStripMenuItem menu = (ToolStripMenuItem)sender;
            numOperandos = 1;
            if (menu.Text == "sqrt")
            {
                operando1 = double.Parse(etPantalla.Text.Replace(',', '.'));
                operando1=Math.Sqrt(operando1);
            }
            else if (menu.Text == "1/x")
            {
                operando1 = double.Parse(etPantalla.Text.Replace(',', '.'));
                if (operando1 == 0)
                {
                    MessageBox.Show("ERROR: Division por cero.");
                    return;
                }
                operando1 = 1 / operando1;
            }
            else if (menu.Text == "^")
            {
                operando1 = double.Parse(etPantalla.Text.Replace(',', '.'));
                numOperandos = 1;
                operador = '^';
            }
            ultimaEntrada = Entrada.OPERADOR;
            etPantalla.Text = operando1.ToString().Replace('.',',');
        }

        private void teclas_de_memoria(object sender, EventArgs e)
        {
            ToolStripMenuItem menu = (ToolStripMenuItem)sender;
            if (menu.Text == "M+")
                memoria = double.Parse(etPantalla.Text.Replace(',', '.'));
            else if (menu.Text == "M-")
                memoria = 0;
            else if (menu.Text == "MR")
                etPantalla.Text = memoria.ToString().Replace('.', ',');
        }

        private void btComaDec_Click(object sender, EventArgs e)
        {
            if (ultimaEntrada != Entrada.DIGITO)
            {
                etPantalla.Text = "0,";
                ultimaEntrada = Entrada.DIGITO;
            }
            else if (comaDecimal == false)
                etPantalla.Text = etPantalla.Text + ",";
            comaDecimal = true;


        }

        private void btTantoPorCiento_Click(object sender, EventArgs e)
        {
            double resultado;
            if (ultimaEntrada == Entrada.DIGITO)
            {
                resultado = operando1 * double.Parse(etPantalla.Text) / 100;
                // Visualizar el resultado
                etPantalla.Text = resultado.ToString();
                // Simular que se ha hecho clic en "="
                btIgual.PerformClick();
                // Enfocar la tecla %
                btTantoPorCiento.Focus();
            }
        }

       
        }

    }

Resultado:

6 comentarios: