Descargar

Funciones y procedimientos en Visual Basic 2005 para calcular el valor en letras de un monto y el detalle del vuelto correspondiente (página 2)

Enviado por jaimemontoya


Partes: 1, 2

MONTO DE $13.00

MONTO DE $47.00

MONTO DE $82.00

MONTO DE $96.00

MONTO DE $100.0

CLICK AL BOTÓN LIMPIAR

CLICK AL BOTÓN SALIR

CÓDIGO DEL PROGRAMA

Los TextBox tienen los siguientes nombres de arriba hacia abajo:

montoapagar

montoenletras

efectivo

vuelto

billetes20

billetes10

billetes5

billetes1

Los tres botones tienen los siguientes nombres de izquierda a derecha:

calcular

limpiar

salir

CÓDIGO DEL FORMULARIO Y SUS CORRESPONDIENTES PROCEDIMIENTOS

Public Class Form1

Private Sub calcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcular.Click

If (montoapagar.Text = "") Then

MsgBox("Escriba el valor del monto.", MsgBoxStyle.Exclamation, "Cálculo de Montos")

montoapagar.Focus()

Else

If (montoapagar.Text > 100) Then

MsgBox("El monto no puede ser mayor que $100.00.", MsgBoxStyle.Exclamation, "Cálculo de Montos")

montoapagar.Text = ""

montoenletras.Text = ""

efectivo.Text = "$100.00"

vuelto.Text = ""

billetes20.Text = ""

billetes10.Text = ""

billetes5.Text = ""

billetes1.Text = ""

montoapagar.Focus()

Else

montoenletras.Text = montoenletras1(montoapagar.Text)

vuelto.Text = vuelto1(montoapagar.Text)

vueltoendetalle(vuelto.Text, billetes20.Text, billetes10.Text, billetes5.Text, billetes1.Text)

End If

End If

End Sub

Private Sub montoapagar_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles montoapagar.KeyPress

If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

'No se hace nada porque el caracter presionado es válido.

Else

'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

End If

End Sub

Private Sub salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles salir.Click

Dim mensaje As String

mensaje = MsgBox("¿Desea realmente salir del programa?", vbYesNo, "Cálculo de Montos")

If mensaje = 6 Then

End

End If

End Sub

Private Sub limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles limpiar.Click

montoapagar.Text = ""

montoenletras.Text = ""

efectivo.Text = "$100.00"

vuelto.Text = ""

billetes20.Text = ""

billetes10.Text = ""

billetes5.Text = ""

billetes1.Text = ""

End Sub

End Class

CÓDIGO DEL MÓDULO Y SUS CORRESPONDIENTES FUNCIONES Y PROCEDIMIENTOS

Module Module1

Public Function unidades(ByVal montoapagar As Integer) As Integer

unidades = Val(Strings.Right(Str(montoapagar), 1)) 'A partir de la derecha, toma un valor, de modo que devuelve las unidades.

End Function

Public Function decenas(ByVal montoapagar As Integer) As Integer

decenas = Val(Strings.Left(Strings.Right(Str(montoapagar), 2), 1)) 'A partir de la derecha, toma dos valores. Luego de ese resultado, a partir de la izquierda toma un valor, de modo que devuelve las decenas.

End Function

Public Function montoenletras1(ByVal montoapagar As Integer) As String

Dim unidades1, decenas1 As Integer

unidades1 = unidades(montoapagar)

decenas1 = decenas(montoapagar)

montoenletras1 = ""

If (montoapagar >= 30) Then

Select Case decenas1

Case 3

montoenletras1 += "Treinta"

Case 4

montoenletras1 += "Cuarenta"

Case 5

montoenletras1 += "Cincuenta"

Case 6

montoenletras1 += "Sesenta"

Case 7

montoenletras1 += "Setenta"

Case 8

montoenletras1 += "Ochenta"

Case 9

montoenletras1 += "Noventa"

Case 0 'Si El valor es "100", el segundo digito de derecha a izquierda (el valor de las decenas) es "0".

montoenletras1 += "Cien"

End Select

Select Case unidades1

Case 1

montoenletras1 += " y uno"

Case 2

montoenletras1 += " y dos"

Case 3

montoenletras1 += " y tres"

Case 4

montoenletras1 += " y cuatro"

Case 5

montoenletras1 += " y cinco"

Case 6

montoenletras1 += " y seis"

Case 7

montoenletras1 += " y siete"

Case 8

montoenletras1 += " y ocho"

Case 9

montoenletras1 += " y nueve"

End Select

Return montoenletras1

Else

Select Case montoapagar

Case 0

Return "Cero"

Case 1

Return "Uno"

Case 2

Return "Dos"

Case 3

Return "Tres"

Case 4

Return "Cuatro"

Case 5

Return "Cinco"

Case 6

Return "Seis"

Case 7

Return "Siete"

Case 8

Return "Ocho"

Case 9

Return "Nueve"

Case 10

Return "Diez"

Case 11

Return "Once"

Case 12

Return "Doce"

Case 13

Return "Trece"

Case 14

Return "Catorce"

Case 15

Return "Quince"

Case 16

Return "Dieciséis"

Case 17

Return "Diecisiete"

Case 18

Return "Dieciocho"

Case 19

Return "Diecinueve"

Case 20

Return "Veinte"

Case 21

Return "Veintiuno"

Case 22

Return "Veintidos"

Case 23

Return "Veintitres"

Case 24

Return "Veinticuatro"

Case 25

Return "Veinticinco"

Case 26

Return "Veintiséis"

Case 27

Return "Veintisiete"

Case 28

Return "Veintiocho"

Case 29

Return "Veintinueve"

End Select

End If

End Function

Public Function vuelto1(ByVal montoapagar As Integer) As String

vuelto1 = (100 – montoapagar)

vuelto1 = "$" + vuelto1 'Concatenando "$" para la respuesta.

End Function

Public Sub vueltoendetalle(ByVal vuelto As String, ByRef billetes20 As String, ByRef billetes10 As String, ByRef billetes5 As String, ByRef billetes1 As String) 'Este es un procedimiento, no una funcion. Notese que el primer parametro es por valor y los demas por referencia. Es porque el primer parametro es para darle datos con que trabajar al procedimiento y los demas son donde se hacen los intercambios u operaciones. Los ultimos 4 parametros tienen que ser "ByRef", pues de lo contrario el programa no da error pero no funcionaria correctamente, pues esperaria parametros por valor provenientes de los TextBox. Lo que se pretende es que el procedimiento realice las respectivas operaciones y modifique las variables correspondientes que se le dan como parametro, de modo que imprimira los resultados en los TextBox correspondientes cuando estos se pasen correctamente como parametros del procedimientos cuando este sea llamado por el programa.

Dim residuo As Integer 'Ira almacenando los residuos

billetes20 = Str(Int(vuelto / 20)) 'Cuantos billetes de $20 se necesitan para dar el vuelto.

'billetes20 = Str(vuelto Mod 20) '"Str()" porque los parametros del procedimiento son tipo String, entonces se requiere la conversion.

residuo = vuelto Mod 20 'Residuo luego de dar los billetes de $20.00

billetes10 = Str(Int(residuo / 10)) 'Cuantos billetes de $10 se necesitan para dar el vuelto.

residuo = residuo Mod 10 'Residuo luego de dar los billetes de $10.00.

billetes5 = Str(Int(residuo / 5)) 'Cuantos billetes de $5 se necesitan para dar el vuelto.

residuo = residuo Mod 5 'Residuo luego de dar los billetes de $5.00.

billetes1 = Str(Int(residuo / 1)) 'Cuantos billetes de $1 se necesitan para dar el vuelto.

residuo = residuo Mod 1 'Residuo luego de dar los billetes de $1.00. Esta linea realmente no tiene sentido, pues dividir entre 1 no dara residuo diferente de cero, entonces se sabe que el residuo es cero.

End Sub

End Module

CONCLUSIÓN

Este sencillo programa permite comprender el uso y utilidad de funciones y procedimientos, así como percibir la diferencia entre la una y la otra. Básicamente la diferencia es que una función devuelve uno y sólo un valor, mientras que un procedimiento puede devolver varios valores o incluso no devolver ninguno.

Las funciones y procedimientos son fundamentales en la programación orientada a objetos, por lo cual es necesario comprender y utilizar adecuadamente estas poderosas herramientas. Analizar este programa y comprenderlo en su totalidad será de gran ayuda para aprender el uso y utilidad de las funciones y procedimientos.

 

Jaime Montoya

Santa Ana, 29 de enero de 2008

El Salvador

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente