CALCULADORA EN VB NET

sábado, 23 de agosto de 2014

Con todo lo aprendido hasta ahora en nuestros tutoriales crearemos una calculadora muy simple la cual constara de botones y un cuadro de texto donde se visualizara la información ingresada, la calculadora usara solo dos números por cálculo. El código fuente completo de la aplicación estará disponible al final para su descarga.

El diseño final.



Para los dígitos crearemos 10 botones (0-9) cada uno de ellos se llamara btn_0, btn_1 y así sucesivamente hasta btn_9. Los nombres se asignan mediante la propiedad name y el texto que se muestra encima de cada botón con Text.


Propiedad Name:


Propiedad Text:



Los botones para las operaciones se llamaran btn_suma, btn_resta, btn_div, btn_multi.

Los otros botones serán btn_limpiar (C), btn_decimal (.) para los decimales y btn_resultado (=).  

La información se visualizara en un cuadro de texto llamado txt_calculadora. Que tendrá las sgtes propiedades:

ReadOnly: False
Name: txt_calculadora



Para crear nuestra calculadora haremos uso de una nueva característica del VB Net que es la de asignar eventos de diferentes objetos a un evento de un objeto especifico , por ejemplo nuestra calculadora tiene botones con los números del 0-9 los cuales al hacer clic en ellos el valor debe mostrarse en txt_calculadora, si hacemos clic al botón btn_5 el valor 5 se mostrara en txt_calculadora para ello con las versiones antiguas de Visual Basic tendríamos que programar en cada botón pero con las características nuevas lo que haríamos será hacer doble clic en cualquier botón y asignar eventos, para este caso usaremos el botón btn_0 .

Procedimiento inicial

Private Sub btn_0_Click(sender As Object, e As EventArgs) Handles btn_0.Click
txt_calculadora.Text = txt_calculadora.Text + sender.text

End Sub

El valor de la propiedad text nos la da sender.text que en este caso es 0.

Como veremos en el procedimiento anterior después de "Handles" está el objeto y el evento que maneja para este caso el btn_0.Click si quisiéramos añadir más eventos tan solo agregaremos el nombre del objeto más evento.

Procedimiento modificado

Private Sub btn_0_Click(sender As Object, e As EventArgs) Handles btn_0.Click, btn_1.Click, btn_2.Click, btn_3.Click,btn_4.Click, btn_5.Click, btn_6.Click, btn_7.Click, btn_8.Click, btn_9.Click

txt_calculadora.Text = txt_calculadora.Text + sender.text

End Sub

Como vemos el sub btn_0_click agrupa ahora el evento clic de todos los dígitos facilitándonos la tarea, Seguiremos analizando el código.

El programa utilizara estas variables globales. 

    Dim flag_opt As Boolean = True
    Dim flag_dec As Boolean = True
    Dim tipoperacion As String
    Dim num1 As String
    Dim num2 As String

Las variables flag_opt  son para el tipo de operación  y flag_dec para los decimales ellas controlaran que no se ingrese más de un signo de operación o puntos decimales respectivamente.
En tipoperacion se guardara el tipo de operación escogida (+, -, * o /), En num1 y num2 se guardaran los dos números a operar.

Analizaremos el evento Click de btn_0.

Private Sub btn_0_Click(sender As Object, e As EventArgs) Handles btn_0.Click, btn_1.Click, btn_2.Click, btn_3.Click, btn_4.Click, btn_5.Click, btn_6.Click, btn_7.Click, btn_8.Click, btn_9.Click

      
       1) If txt_calculadora.Text = "Error" Then Exit Sub
       2) If tipoperacion = "" Then
            flag_opt = False
            num1 = num1 + sender.text
        Else
            num2 = num2 + sender.text
        End If
        3)txt_calculadora.Text = txt_calculadora.Text + sender.text

    End Sub

1) Si el contenido del cuadro de texto txt_calculadora es "Error" entonces saldremos del procedimiento, esto sucederá al dividir cualquier número por cero.
2) Si la variable tipoperacion esta vacía asignamos a  flag_opt el valor "False" que permitirá el ingreso de un símbolo de operación (+,-,*,/) además tenemos el primer número que se guardara en num1  en caso contrario obtendremos el segundo que se almacena en num2 ya que el orden de ingreso de datos es: el primer número, el signo y luego el segundo. 
3) En txt_calculadora se mostrara los valores ingresados.

Analizaremos el evento Click de btn_suma, como vemos btn_suma controla también los eventos clic de los botones btn_div, btn_multi y btn_resta.

Private Sub btn_suma_Click(sender As Object, e As EventArgs) Handles btn_suma.Click, btn_div.Click, btn_multi.Click, btn_resta.Click

       1) If Not (txt_calculadora.Text = "" And sender.text = "-") And flag_opt Then Exit Sub

       2) If txt_calculadora.Text = "Error" Then Exit Sub
        3) txt_calculadora.Text = txt_calculadora.Text + sender.text
        4) If num1 <> "" Then
            tipoperacion = sender.text
            flag_opt = True
            flag_dec = True
        Else
            num1 = "-"
        End If

End Sub


1) Aquí controlamos que no se ingrese ningún tipo de operación no permitida al comienzo como (+,/,*,%) ya que cálculos como %4+2 o *2-3 no son válidos pero si es válido -3+4 así que para ello usaremos Not (txt_calculadora.Text = "" And sender.text = "-") que nos dará el valor falso si la condición se cumple gracias al indicador Not, la otra validación es flag_opt si ambas condiciones se cumplen salimos del procedimiento debido a "Exit Sub".
2) Validamos que txt_calculadora no contenga el valor "Error" si lo contiene salimos del programa.
3)  Agregamos el símbolo de operación a txt_calculadora.
4) Validamos  si num1 tiene algún valor si es así el valor ingresado es el símbolo de la operación escogida y la almacenaremos en tipoperacion además asignamos True a flag_opt para evitar el ingreso de mas símbolos y flag_dec para permitir el ingreso de decimales, si num1 no tiene ningún valor quiere decir que num1 será negativo por lo que tendrá el valor "-", nuestro programa solo permitirá el signo negativo delante de cada número.

Analizaremos btn_resultado evento click, este procedimiento será el encargado de dar el resultado de nuestras operaciones.

Private Sub btn_resultado_Click(sender As Object, e As EventArgs) Handles btn_resultado.Click

        1)if num2="" then exit sub         

        2)Select Case tipoperacion
            Case "+"
                txt_calculadora.Text = Convert.ToDouble(num1) + Convert.ToDouble(num2)

            Case "-"

                txt_calculadora.Text = Convert.ToDouble(num1) - Convert.ToDouble(num2)

            Case "*"
                txt_calculadora.Text = Convert.ToDouble(num1) * Convert.ToDouble(num2)
            Case "/"
                If (Convert.ToDouble(num2)) = 0 Then
                    txt_calculadora.Text = "Error"
                Else
                    txt_calculadora.Text = Convert.ToDouble(num1) / Convert.ToDouble(num2)
                End If

        End Select

        num1 = txt_calculadora.Text
        num2 = ""
        tipoperacion = ""
        flag_opt = False

 End Sub


1) si num2 esta vacío salimos del procedimiento, para calcular necesitamos dos números.
2) Usaremos el Case para determinar el tipo de operación escogida convertiremos cada digito a double ya que no podemos operar cadenas (num1 y num2 son definidas como cadenas). En el caso de la división si num2 igual a 0 el resultado es "Error".

El paso final será guardar el resultado en num1 para siguientes operaciones, A num2 y tipoperacion les asignamos el valor de "", flag_opt será "False" para permitir otro calculo y el ingreso de símbolos de operación.

El evento click de btn_limpiar se encarga de limpiar todos los datos ingresos y de inicializar las variables.

Private Sub bt_limpiar_Click(sender As Object, e As EventArgs) Handles bt_limpiar.Click
        txt_calculadora.Text = ""
        tipoperacion = ""
        flag_opt = True
        flag_dec = True
        num1 = ""
        num2 = ""
End Sub

El último procedimiento por analizar es el evento click de bt_decimal.

 Private Sub btn_decimal_Click(sender As Object, e As EventArgs) Handles bt_decimal.Click

        1)If Not flag_dec Then Exit Sub

        2)If tipoperacion = "" Then
            num1 = num1 + "."

        Else
            num2 = num2 + "."
        End If
        txt_calculadora.Text = txt_calculadora.Text + "."
        flag_dec = False

End Sub

1) Si flag_dec tiene el valor falso quiere decir que nuestro número ya posee un punto decimal por lo que no se permite más.
2) Si la variable tipoperacion esta vacía quiere decir que el símbolo decimal es para num1 en caso contrario num2.

Por ultimo agregamos el símbolo decimal a txt_calculadora y asignamos el valor False a flag_dec.
Si se desea cambiar el punto decimal por la coma tan solo modifique los valores.

El código fuente para su descarga : calculadora.

Así terminamos nuestra primera aplicación, si tiene alguna pregunta no dude en consultar.

Gracias.  

Facebook Comments


2 comentarios:

Premium Quality Translation dijo...

We have professional translator which has experience for 100 plus language translation. Especially if you have requirement for Danish Translation Service Certified Russian Translation Services NYC

saudi_events_catering dijo...

Are you Searching For event management companies in Riyadh? then Saudi Events Catering Company provides you the best service that suits your budget and provides you innovative way for any events in Saudi Arabia.

Visit here: http://saudieventscatering.com/corporate-event-organizers.html

Publicar un comentario