INSTITUTO 9 DE JULIO - SAN MIGUEL DE TUCUMAN -NIVEL TERCIARIO - CARRERA DE ANALISTA DE SISTEMAS DE COMPUTACION

30 agosto 2008

EJERCICIOS FOXPRO

------------------------------------------------------------------------------------------------
EJERCICIO 1:
Ingresar el nombre de 2 personas y sus edades, imprimir el nombre de la 2da persona al lado la suma de las edades de las 2 personas y al lado el nombre de la 1era persona.
clea
nom1=space(10)
nom2=space(10)
ed1=0
ed2=0
suma=0
x=0
@ 5,5 say "PROGRAMA 1"
@ 10,5 say "INGRESAR PRIMER NOMBRE :" get nom1
@ 12,5 say "INGRESAR PRIMERA EDAD :" get ed1 picture "999"
@ 14,5 say "INGRESAR SEGUNDO NOMBRE :" get nom2
@ 16,5 say "INGRESAR SEGUNDA EDAD :" get ed2 picture "999"
read
suma=ed1+ed2
x=str(suma)
@ 20,5 say nom2+" "+x+" "+nom1
return

otra forma :
suma=str(ed1+ed2)
@ 20,5 say nom2+" "+suma+" "+nom1

otra forma:
@ 20,5 say nom2+" "+str(ed1+ed2)+" "+nom1
------------------------------------------------------------------------------------------------

Apuntes 1 FOXPRO

COMANDOS DE FOX
-------------------------------------------------------------------------------------------------
CLEAR : Comando que permite borrar o limpiar la pantalla.
-------------------------------------------------------------------------------------------------
ASIGNACION DE DATOS: Proceso mediante el cual se le asgna un dato a una variable.
ej : A=2 NOM="JUAN" FECNAC="9 de abril"
esto se "lee" : se le asigna el numero 2 a la variable A, se le asigna la cadena de caracteres JUAN a la variable NOM, se le asigna la cadena de 9 de abril a la variable FECNAC.
------------------------------------------------------------------------------------------------
POSICION DE PANTALLA: Fox usa para especificar una posicion en la pantalla el simbolo @ (arroba) y a continuacion un par de variables o constantes en donde la primera indica la fila y la segunda indica la columna donde se mostrara el dato en la pantalla seguido de la instruccion SAY.
ejemplo1 :
@ 1,5 say "HOLA"
ejemplo2 :
a="chau"
b="nos vemos!!!"
c="sergio"
@ 3,4 say a+space(1)+c+space(1)+b
la ejecucion de este pequeños prog. no da como resultado:
chau sergio nos vemos
------------------------------------------------------------------------------------------------
CONCATENACION : Significa unir, juntar. Fox se logra esto usando el signo +, el cual permite unir 2 cadenas de caracteres. ej:
.
ejemplo 1:
JUNTOS="HOLA"+" "+"PEDRO"
@ 5,6 SAY JUNTOS
.
donde JUNTOS es una variable de tipo caracter a la cual se le asigna las cadenas de caracteres que se observan. La ejecucion nos da como resultado: HOLA PEDRO
.
ejemplo 2:
NOM="PEPE"
ED="10" && 10 es una cadena de caracteres por estar entre comillas
@ 1,1 SAY NOM+" TIENE "+ED+" AÑOS"
.
No se debe concatenar datos o variables que no sean de tipo caracter
------------------------------------------------------------------------------------------------
STRING() O STR(): Funcion que permite transformar un datos numerico en un dato de tipo caracter. EJ.
ED=10
NOM="PEPE"
@ 1,1 SAY NOM + " TIENE "+STR(ED)+" AÑOS"
.
O lo que es lo mismo:
ED=10
NOM="PEPE"
X=STR(ED)
@ 1,1 SAY NOM+" TIENE"+X+" AÑOS"
-----------------------------------------------------------------------------------------------
GET : Instruccion que permite ingresar por teclado un dato a una variable. La variable usada en el GET tiene que ser declarada con anterioridad.
Esta instruccion va siempre acompañada de un READ, si hay varios GET se puede usar un solo READ para todos.
Ejemplo 1:
A=0
@ 1,1 get A
read
Ejemplo 2:
NOM=space(10)
DOC=0
@ 1,1 SAY "INGRESE NOMBRE:" GET NOM
@ 2,1 SAY "INGRESE DNI :" GET DOC
READ
------------------------------------------------------------------------------------------------
OPERACIONES ARITMETICAS : Fox usa los signos tradicionales : + - * / y para la potenciacion usa **
Ademas usa parentesis, tantos de ellos como sea necesario. Los parentesis rompen la jerarquia de los operadores indicados abajo:
1. **
2. * /
3. + -
cuando tenemos operaciones aritmeticas con operadores de igual peso o jerarquia se resuelve de izquierda a derecha.
Ejemplo 1:
A+B-C Se resuelve primero la suma de A+B y el resultado se resta a C
Ejemplo 2:
(A+B*C)/2*D/H se resuelve en este orden:
1) A+B
2) (1)*C
3) (2)/2
4) (3)*D
5) (4)/H
------------------------------------------------------------------------------------------------
SUBSTRING() o SUBSTR() : Funcion que permite extraer de una cadena de caracteres parte de la misma.
Ej :
nom="JOSE CARLOS"
substr(nom,1,4) ------> JOSE
substr(nom,2,2) ------> OS
substr(nom,5,1) ------> " "
Ejercicio : Ingresar un nombre e imprimirlo en sentido inverso.
clea
nom=space(10)
@ 5,5 say "PROGRAMA NOMBRE INVERSO"
@ 7,5 say "INGRESAR NOMBRE:" get nom
read
@ 9,5 say substr(nom,10,1)+substr(nom,9,1)+substr(nom,8,1)+........+substr(nom,1,1)
return
------------------------------------------------------------------------------------------------
LEN : Funcion de fox que devuelve como resultado la longitud o cantidad de caracteres tiene la cadena en cuestion.
Ej:
a="HOLA"
largo=LEN(A)
la variable largo recibe el valor 4, por que la palabra HOLA tiene 4 letras.
------------------------------------------------------------------------------------------------
DATE() : Funcion de fox que devuelve la fecha del sistema.
MONTH() : Devuelve el mes --> 2 digitos
YEAR() : Devuelve el año --> 2 digitos o 4 digitos (segun sea set century)
En todos los casos devuelve un valor numerico.
SET CENTURY ON/OFF : Si esta en ON mostrara siempre el año en 4 digitos, si esta en OFF mostrara siempre el años en 2 digitos.
Todas las instrucciones SET se definen por una cuestion de conveniencia en el programa principal cuya accion permanece inalterable no solo para el programa principal (convocante) sino tambien para el resto de los subprogramas o programas convocados.

ORDENAMIENTO O INDEXACION

Este proceso consiste en ordenar una tabla segun un campo clave o un conjunto de ellos. Fox crea en estos casos un archivos anexo a la tabla en donde guarda todos los ordenamientos que se realicen de la tabla en cuestion. Este archivo indice tiene extension CDX y se caracteriza por tener el mismo nombre que la tabla.

USE ALUMNOS
INDEX ON ape TAG xape && ape es el nombre del campo y xape la etiqueta de ordenam.
INDEX ON dni TAG xdni && dni es el nombre del campo y xdni la etiqueta de ordenam.
INDEX ON cuota TAG xcuota && cuota es el nombre del campo y xcuota la etiqueta de ordenam.

La orden INDEX se ejecuta desde la ventana de comandos.






Para ver cuales son los ordenamientos existentes de una tabla ejecutar la orden (desde la ventana de comandos):
USE ALUMNOS
MODI STRU
donde se podran no solo observar sino crear nuevos ordenamientos (pinchar en la solapa indice de la ventana del dibujo).
La tabla se llama : ALUMNOS.DBF y el archivo indice : ALUMNOS.CDX

En el archivo ALUMNOS.CDX se guardan todas las etiquetas de ordenamientos.
Los archivos indices CDX se eliminan con la orden : DELETE TAG
ej : DELE TAG alumnos

PROCESO DE MODIFICACION

Proceso por el cual se modifica los datos de un registro de la tabla, este proceso consiste en buscar el registro que se quiere modificar ya sea en forma secuencial (recorre la tabla desde el primer al ultimo registro hasta encontrar el registro buscado), o acceder al registro buscado a traves de un campo clave. Este segundo metodo es mucho mas practico por la velocidad con que ubica dicho registro, pero necesita de un archivo indice (donde se almacena el ordenamiento que se necesita).

*******************************************************************
* OBJETIVO: PROCESO DE MODIFICACION EN TABLA ALUMNOS.DBF
* Estructura de la tabla:
* dni c(10)
* nom c(20)
* ape c(20)
* fecing f(10)
* cuota n(3,2)
*
*Ordenamiento: index on dni tag dni
*******************************************************************
set confirm on && obliga oprimir ENTER para pasar al campo sgte.
set century on && fecha con 4 digitos
control=1
clea
close data* pone en uso tabla alumnos ordenada por dni
use alumnos order tag dni
op=0
do while control=1
clear
xdni=space(10)
xnom=space(20)
xape=space(20)
xdire=spac(40)
xfecing=CTOD(" / / ")
xcuota=0
@ 1,1 say "Documento (DNI) :" get xdni
read
if lastkey()=27 && si oprime tecla ESC cierra tabla y sale
close data
clea
retur
endif
seek xdni && busca el dni en la tabla ordenada
if !found() && si lo encontro
wait "DOCUENTO NO EXISTENTE..." windows nowait
loop && transfiere el control al do while (arriba)
endif
=insmode(.t.)
xape=ape
xnom=nom
xdire=dire
xfecing=fecing
xcuota=cuota
@ 3,1 say "Apellido :" get xape function "!"
@ 5,1 say "Nombre :" get xnom function "!"
@ 7,1 say "Direccion :" get xdire
@ 9,1 say "Fecha Ingreso :" get xfecing
@ 11,1 say "Cuota :" get xcuota picture "999.99"
@ 13,1 get op function "*h Graba;Salir" size 2,20,3 && alto,ancho,espacio entre botones
read cycle
if lastkey()=27 && si oprime tecla ESC cierra tabla y sale
close data
clea
retur
endif
do case
case op=1
replace dni with xdni
replace ape with xape
replace nom with xnom
replace dire with xdire
replace fecing with xfecing
replace cuota with xcuota
case op=2
control=0
endcase
enddo
close data
clea
return

29 agosto 2008

PROCESO DE BAJAS

Proceso por el cual se elimina logica y/o fisicamente un registro de la tabla, este proceso consiste en buscar el registro que se quiere borrar ya sea en forma secuencial (recorre la tabla desde el primer al ultimo registro hasta encontrar el registro buscado), o acceder al registro buscado a traves de un campo clave. Este segundo metodo es mucho mas practico por la velocidad con que ubica dicho registro, pero necesita de un archivo indice (donde se almacena el ordenamiento que se necesita).
*******************************************************************
* OBJETIVO: PROCESO DE BAJA EN TABLA ALUMNOS.DBF
* Estructura de la tabla:
* dni c(10)
* nom c(20)
* ape c(20)
* fecing f(10)
* cuota n(3,2)
*
*Ordenamiento: index on dni tag dni
*******************************************************************
set confirm on && obliga oprimir ENTER para pasar al campo sgte.
set century on && fecha con 4 digitos
control=1
clea
close data
* pone en uso tabla alumnos ordenada por dni
use alumnos order tag dni
op=0
do while control=1
clear
xdni=space(10)
xnom=space(20)
xape=space(20)
xdire=spac(40)
xfecing=CTOD(" / / ")
xcuota=0
@ 1,1 say "Documento (DNI) :" get xdni
read
if lastkey()=27 && si oprime tecla ESC cierra tabla y sale
close data
clea
retur
endif
seek xdni && busca el dni en la tabla ordenada
if !found() && no lo encontro
wait "DOCUMENTO NO EXISTENTE..." windows nowait
loop && transfiere el control al do while (arriba)
endif
@ 3,1 say "Apellido :" + ape
@ 5,1 say "Nombre :" + nom
@ 7,1 say "Direccion :" + dire
@ 9,1 say "Fecha Ingreso :" + DTOC(fecing)
@ 11,1 say "Cuota :" + STR(cuota)
@ 13,1 get op function "*h Borrar;Salir" size 2,20,3 && alto,ancho,espacio entre botones
read cycle
if lastkey()=27 && si oprime tecla ESC cierra tabla y sale
close data
clea
retur
endif
do case
case op=1
dele && marca para ser borrado
pack && borra los marcados
case op=2
control=0
endcase
enddo
close data
clea
return

PROCESO DE ALTA

Proceso por el cual se ingresa un registro a la tabla, este proceso controla si el dato que se quiere agregar no existe ya. Esta busqueda se hace en forma secuencial (recorre la tabla desde el primer al ultimo registro hasta encontrar el registro buscado), o acceder al registro buscado a traves de un campo clave. Este segundo metodo es mucho mas practico por la velocidad con que ubica dicho registro, pero necesita de un archivo indice (donde se almacena el ordenamiento que se necesita).
*******************************************************************
* OBJETIVO: PROCESO DE ALTA EN TABLA ALUMNOS.DBF
* Estructura de la tabla:
* dni c(10)
* nom c(20)
* ape c(20)
* fecing f(10)
* cuota n(3,2)
*
*Ordenamiento: index on dni tag dni
*******************************************************************
set confirm on && obliga oprimir ENTER para pasar al campo sgte.
set century on && fecha con 4 digitos
control=1
clea
close data
* pone en uso tabla alumnos ordenada por dni
use alumnos order tag dni
op=0
do while control=1
clear
xdni=space(10)
xnom=space(20)
xape=space(20)
xdire=spac(40)
xfecing=CTOD(" / / ")
xcuota=0
@ 1,1 say "Documento (DNI) :" get xdni
read
if lastkey()=27 && si oprime tecla ESC cierra tabla y sale
close data
clea
return
endif
seek xdni && busca el dni en la tabla ordenada
if found() && si lo encontro
wait "DOCUENTO YA EXISTENTE..." windows nowait
loop && transfiere el control al do while (arriba)
endif
@ 3,1 say "Apellido :" get xape function "!"
@ 5,1 say "Nombre :" get xnom function "!"
@ 7,1 say "Direccion :" get xdire
@ 9,1 say "Fecha Ingreso :" get xfecing
@ 11,1 say "Cuota :" get xcuota picture "999.99"
@ 13,1 get op function "*h Confirma;Termina" size 2,20,3 && alto,ancho,esp. entre botones
read cycle
if lastkey()=27 && si oprime tecla ESC cierra tabla y sale
close data
clea
retur
endif
do case
case op=1
append blank
replace dni with xdni
replace ape with xape
replace nom with xnom
replace dire with xdire
replace fecing with xfecing
replace cuota with xcuota
case op=2
control=0
endcase
enddo
close data
clea
return

FOXPRO para WINDOWS (INTRODUCCION)

Es un lenguaje de programacion que permite la creacion de programas (PRG). Este lenguaje se caracteriza por la facilidad de manejo de tablas.
Existen 2 modos de trabajo:
Modo directo : Consiste en escribir un comando reconocido por FOXPRO, el cual lleva a cabo una determinada tarea. Esto se hace a traves de la "ventana de comandos", en donde aparece un cursor donde se escribe directamente la orden que se ejecuta en tiempo real.
FOXPRO tiene en la parte superior de la ventana un MENU a traves de la cual se pueden llevar a cabo las mismas tareas que las que se llevan cuando uno escribe un orden desde la ventana de comandos de una manera mas simple que no exige practicamente muchos conocimientos de sintaxis de comandos.
Modo indirecto: FOXPRO dispone de un editor de texto que nos permite escribir los programas. Para ingresar al editor de texto se debe escribir desde la ventana de comandos:
MODIFY COMMAND
ej : MODIFY COMMAND programa1
Con esta orden se abre el editor de texto de FOX para comenzar a escribir un programa (conjunto de comandos que se escriben en forma secuencial y que conforman nuestro programa).
Este archivo (desde el punto de vista del Sistema Operativo) tiene extension PRG. Ej. prog1.prg
CTRL - F10 : Permite agrandar o achicar la ventana del editor de textos.
CTRL - W : Perminte grabar y salir del editor de textos.
En FOX solo son obligatorias las 4 primeras letras de un comando por ejemplo:
MODI COMM programa1
Cuando se graba un programa editado en el editor de texto se generan los siguientes archivos:
1. el programa fuente (ej. prog1.prg) entendible por nosotros.
2. el programa objeto (ej. prog1.fxp) entendible por la maquina.
3. el programa backup (ej. prog1.bak) entendible por nosotros, contiene la copia anterior del prog1.prg antes de ser modificado.
Los archivos mas importantes con los PRG, el resto de ellos pueden ser borrados. Los archivos FXP permiten en funcionamiento del programa pero no puede ser modificado sin los PRG.-