Mostrar+informacion+seleccionada+de+un+fichero

=__**Mostrar información seleccionada de un fichero**__=

Se dispone de un fichero de créditos con la siguiente información de cada crédito:

> Nombre : Cadena de caracteres (máximo 40) > Numero de Cuenta : Cadena de caracteres (máximo 40) > Cantidad : De tipo real

El programa debe leer el nombre del fichero (y permitir añadir más información en él).

Seguidamente pregunta por un valor límite para la cantidad de un credito y muestra por pantalla solo los créditos que superen esa cantidad.

code format="pascal" PROGRAM fichb_Creditos ; USES Crt, SysUtils ; TYPE tsCadena = STRING [40] ;

trgCredito = RECORD sNombre, sNumCuenta : tsCadena ; rCredito : Real END ;

tfbrgCreditos = FILE OF trgCredito ;

VAR sNomFichCreditos : tsCadena ; rLimCredito     : Real ; cResp, cEspera  : Char ;

PROCEDURE LeerDatosCredito (VAR rgCredito : trgCredito) ; BEGIN WITH rgCredito DO      BEGIN Write ('                     Nombre: ') ; Readln (sNombre) ; Write ('N. de Cuenta(0-123-12345678): ') ; Readln (sNumCuenta) ; Write ('                    Credito: ') ; Readln (rCredito) ; Writeln END END ; { LeerDatosCredito }

PROCEDURE MostrarDatosCredito (rgCredito : trgCredito) ; BEGIN WITH rgCredito DO      BEGIN Writeln ('    Nombre : ', sNombre) ; Writeln ('N. de Cuenta: ', sNumCuenta) ; Writeln ('    Cr‚dito: ', rCredito:0:2) ; Writeln END ; END ; { MostrarDatosCredito }

PROCEDURE CrearFicheroSiNoExiste (sNomFich : tsCadena) ; VAR fbrgCreditos : tfbrgCreditos ; BEGIN IF NOT FileExists (sNomFich) THEN BEGIN Assign (fbrgCreditos, sNomFich) ; ReWrite (fbrgCreditos) ; Close (fbrgCreditos) ; END ; END ; { CrearFicheroSiNoExiste }

PROCEDURE AniadirDatosAlFicheroCreditos (sNomFich : tsCadena) ; VAR rgCredito : trgCredito ; fbrgCreditos : tfbrgCreditos ; cResp : Char ; BEGIN { Como ya existe el fichero se abren y nos posicionamos al final } Assign (fbrgCreditos, sNomFich) ; Reset (fbrgCreditos) ; Seek (fbrgCreditos, Filesize (fbrgCreditos)) ;

Writeln ;                          { Comenzar la introducción de datos } Write ('¨ Añadir informacion sobre otra persona (S/N) ? : ') ; Readln (cResp) ;

WHILE Upcase (cResp) = 'S' DO      BEGIN { Leer datos de una persona } LeerDatosCredito (rgCredito) ;

{ Escribir los datos en el fichero } Write (fbrgCreditos, rgCredito) ;

{ Ver si se continúa con la introducci¢n de datos } Write ('¨ Añadir informacion sobre otra persona (S/N) ? : ') ; Readln (cResp) END ;

Close (fbrgCreditos) END ; { AniadirDatosAlFicheroCreditos }

PROCEDURE MostrarDatosFichero (sNomFich : tsCadena) ; VAR rgCredito   : trgCredito ; fbrgCreditos : tfbrgCreditos ; cEspera     : Char ; BEGIN Assign (fbrgCreditos, sNomFich) ; Reset (fbrgCreditos) ;

Clrscr ; Writeln ; Writeln ('Informaci¢n de todos los creditos') ; Writeln ; WHILE NOT Eof (fbrgCreditos) DO      BEGIN { leer informaci¢n de una persona } Read (fbrgCreditos, rgCredito) ;

{ Mostrar la informaci¢n le¡da } MostrarDatosCredito (rgCredito) ; cEspera := ReadKey ; END ;

Close (fbrgCreditos) ; Writeln ; Writeln ('Fin de listado') ; Writeln END ; { MostrarDatosFichero }

PROCEDURE MostrarCreditosMayores (sNomFich : tsCadena ;                                 rLimCredito : Real) ; VAR rgCredito   : trgCredito ; fbrgCreditos : tfbrgCreditos ; cEspera     : Char ; BEGIN Assign (fbrgCreditos, sNomFich) ; Reset (fbrgCreditos) ;

Writeln ; Writeln ('Informacion de creditos mayores de ', rLimCredito:0:2,           ' Euros') ; Writeln ;

WHILE NOT Eof (fbrgCreditos) DO      BEGIN { leer informaci¢n de una persona } Read (fbrgCreditos, rgCredito) ;

{ Mostrar la informacion leida si cumple la condici¢n } IF rgCredito.rCredito > rLimCredito THEN BEGIN MostrarDatosCredito (rgCredito) ; cEspera := ReadKey ; END ; END ;

Close (fbrgCreditos) ;

Writeln ; Writeln ('Fin de listado') ; Writeln END ; { MostrarCreditosMauyores }

BEGIN {******* PROGRAMA PRINCIPAL ***********} { Leer nombre del fichero del cr‚ditos } REPEAT Write ('Nombre del fichero del creditos (ej.: BancoUno.DAT): ') ; readln (sNomFichCreditos) ; UNTIL Length (sNomFichCreditos) <> 0 ;

CrearFicheroSiNoExiste (sNomFichCreditos) ;

Writeln ; Write ('        Añadir datos al fichero de creditos (S/N) : ') ; Readln (cResp) ; IF Upcase (cResp) = 'S' THEN AniadirDatosAlFicheroCreditos (sNomFichCreditos) ;

Writeln ; Write ('Mostrar el contenido del fichero de creditos (S/N) : ') ; Readln (cResp) ;

IF Upcase (cResp) = 'S' THEN MostrarDatosFichero (sNomFichCreditos) ;

{ Leer el l¡mite del cr‚dito } Writeln ; Writeln ('Se van a mostrar los creditos que superan ',           'un determinado limite'); Writeln ; Write ('Limite de credito : ') ; Readln (rLimCredito) ;

MostrarCreditosMayores (sNomFichCreditos, rLImCredito) ;

Writeln ; Writeln ; Write ('Pulsa una tecla para continuar') ; cEspera := ReadKey ; END. { FIN DE FICHB_Creditos.PAS } code