miércoles, 20 de mayo de 2009

APLICACION DE GESTION DE BASE DE DATOS

Bueno, hace poco nos dejaron una aplicacion en gestion de base de datos y hay que trabajarlo en VisualFox Pro 9.0 y he decidido compartirlo con todos a manera de explicacion.


El "programa" sera de un cajero automatico que solo aceptara billetes multiplos de $5 y repartira la cantidad ingresada en billetes de 100, 50, 20, 10 y 5 (si ya se, no tiene nada que ver con la materia pero va...)

- Empezaremos abriendo nuestro VisualFox Pro 9.0 en la barra de inicio...

- Luego click en "file", click en "new", y en la ventana de tipo de archivo abriremos escojemos "Form" y luego click en "new file"

Nos aparecera algo como esto:

Photobucket


- Luego, vamos a poner controles, vamos a poner 6 textbox, tres comand (o botones de comando) y 6 labels al formulario. Las etiquetas les vamos a poner texto en la propiedad "name", y nos tiene que quedar asi:

Photobucket

Notese los nombres en los controles....

- Ahora, le daremos doble click en el boton aceptar y nos abrira la ventana de codigo. He aqui donde al darle click en aceptar cuando el formulario se este ejecutando, ejecutara el codigo que pondremos. Primero hay que obtener el valor de la cantidad que esta en el textbox con nombre "txtx", nuestra primera linea sera:

n1=INT(Thisform.txtx.Value)
donde:
n1: es la variable donde almacenaremos el valor de "txtx"
INT: es el tipo de datos que tenemos que capturar (entero en este caso)
Thisform.txtx.Value: quiere decir que tomara el valor de "txtx" que esta en este formulario

Lo segundo que hay que hacer es hacer una condicion para muestre un mensaje de error si un dado caso no estamos mentiendo un valor permitido, hay que recordar que tiene que ser multiplos de 5. Entonces, hay que ver si la resta de la division del valor entre cinco y la parte entera de la division es igual que 0, para lo cual escribiremos en la segunda linea:

valor=(n1/5)-INT(n1/5)

que quiere decir esto?

el primer miembro hara una division directa del valor tomado en txtx por ejemplo: si dividimos "200/5" nos dara "40", pero si dividimos "201/5" nos dara "40.2"

He aqui donde la segunda parte actua, ya que el segundo miembro solo tomara la parte entera de la operacion, eso quiere decir que si dividimos "201/5" y solo toma la parte entera nos dara "40".

Si el valor que se puso en txtx era multiplo de cinco, esta operacion siempre dara cero, sino (como en el caso de 201), nos dara como resultado 0.2; ahora pondremos la condicion....

En mi caso puse primero la condicion si el valor ingresado es "mayor que 0", si asi tirara un mensaje de error. Entonces escribimos el siguiente bloque de codigo:

IF valor>0 THEN
MESSAGEBOX("El valor introducido es incorrecto, tiene que ser multiplo de 5")
Thisform.txtx.SetFocus
ELSE
(...)

(Nota: los puntos suspensivos es solo para decir que ahi sigue lo demas del codigo, no se tiene que poner el codigo original)

Luego del else, que quiere decir que sino se cumple lo anterior en otras palabras: "si es multiplo de cinco", se escribe las diferentes operaciones. Saquemos los diferentes billetes de 100 que hayan, eso se hace asi:

cien= n1/100
temp1= n1%100

¿que es eso de temp1?

Digamos que es una variable temporal donde guardaremos la cantidad que no sea multiplo de 100, el signo "%" quiere decir el "el restante o la parte decimal de una operacion" y eso lo pone como numero entero, es decir, que si el valor ingresado es "150", el valor que se guardara en temp1 es "50".

Ahora hay que ir con cada tipo de billete y en los siguientes temp's tomara el valor del anterior temp para sacar su restante.


cincuenta=temp1/50
temp2=temp1%50
veinte=temp2/20
temp3=temp2%20
diez=temp3/10
temp4=temp3%10
cinco=temp4/5
Ahora hay que insertar el codigo para meter estos datos en cada textbox, finalizar el bloque del IF y actualizar el formulario:

Thisform.Text1.Value=cien
Thisform.Text2.Value=cincuenta
Thisform.Text3.Value=veinte
Thisform.Text4.Value=diez
Thisform.Text5.Value=cinco
ENDIF
Thisform.refresh

Todo junto el codigo se veria asi:

n1=INT(Thisform.Txtx.Value)
valor=(n1/5)-INT(n1/5)
IF valor > 0 THEN
MESSAGEBOX("Introduzca un valor correcto, multiplo de 5")
Thisform.txtx.SetFocus
ELSE
cien= n1/100
temp1= n1%100
cincuenta=temp1/50
temp2=temp1%50
veinte=temp2/20
temp3=temp2%20
diez=temp3/10
temp4=temp3%10
cinco=temp4/5
Thisform.Text1.Value=cien
Thisform.Text2.Value=cincuenta
Thisform.Text3.Value=veinte
Thisform.Text4.Value=diez
Thisform.Text5.Value=cinco
ENDIF
Thisform.Refresh


Ahora cerremos el codigo y demos doble click en el boton "limpiar". Este solo limpiara los controles para un nuevo calculo, sin mas expliaciones este es su codigo:

thisform.txtx.value=0
thisform.text1.value=0
thisform.text2.value=0
thisform.text3.value=0
thisform.text4.value=0
thisform.text5.value=0
thisform.txtx.SetFocus
thisform.Refresh

Y este es el del boton salir:

RELEASE thisform

Una vez guardado le damos click en ejecutar (RUN) y ya podemos apreciar nuestro programa. Tengo que recordarles que para una mejor funcionalidad pongan en la propiedad de inputmask de txtx, pongan esto: 999999999999; asi ya no les agarrara decimales.

Pruebenlo, analizenlo, haganlo, cambien todo y traten de hacerlo. Esto nada mas es una guia de estudio y por eso no les pongo el formulario ya hecho hasta despues de la fecha de entrega.

Saludos

Programa diseñado por:
Juan Manuel

Diseño, Depurado y correccion:
Carlos Campos (MaxxDJ)


No hay comentarios: