include

Anuncio
#include <stdio.h>
#include <string.h>
#define MAXNOMF 100
#define MAXCAD 100
struct Tficha
{
char dni[MAXCAD];
long int saldo;
};
void escribir_ficha( struct Tficha ficha, FILE *f );
struct Tficha leer_ficha( FILE *f );
void aniadir_ficha( char nomf[] );
void consultar_ficha( char nomf[] );
void modificar_ficha( char nomf[] );
void eliminar_ficha( char nomf[] );
void listar_fichero( char nomf[] );
void vaciar_fichero( char nomf[] );
int main()
{
unsigned opcion;
char nomf[MAXNOMF];
printf("\n Introduce el nombre del fichero a tratar: ");
scanf(" %s", nomf );
do{
printf("\n\n GESTION DE UN FICHERO SECUENCIAL DE TEXTO");
printf("\n 1. Añadir un registro");
printf("\n 2. Consultar un registro");
printf("\n 3. Modificar un registro");
printf("\n 4. Eliminar un registro");
printf("\n 5. Listar todo el fichero");
printf("\n 6. Vaciar fichero");
printf("\n 0. Salir del programa");
printf("\n ....Elige la operacion a realizar: ");
scanf("%u", &opcion);
switch( opcion )
{
case 0: printf("Adios"); break;
case 1: aniadir_ficha(nomf); break;
case 2: consultar_ficha(nomf); break;
case 3: modificar_ficha(nomf); break;
case 4: eliminar_ficha(nomf); break;
case 5: listar_fichero(nomf); break;
case 6: vaciar_fichero(nomf); break;
default: printf("\n\n Opcion no valida”);
}
}while ( opcion != 0 );
return 0;
}
/* FUNCION QUE ESCRIBE UNA FICHA EN LA POSICION ACTUAL DEL FICHERO */
void escribir_ficha( struct Tficha ficha, FILE *f )
{
fprintf( f, "%s %li\n", ficha.dni, ficha.saldo);
}
/* FUNCION QUE LEE UNA FICHA DE LA POSICION ACTUAL DEL FICHERO */
struct Tficha leer_ficha( FILE *f )
{
struct Tficha ficha;
fscanf( f, "%s %li", ficha.dni, &ficha.saldo);
return ficha;
}
/* FUNCION QUE AÑADE UNA FICHA AL FINAL DEL FICHERO */
void aniadir_ficha( char nomf[] )
{
struct Tficha ficha;
FILE *f;
f = fopen( nomf, "at");
if (f == NULL)
printf("ERROR, FICHA NO AÑADIDA");
else
{
printf("\n INTRODUZCA LOS DATOS DE LA FICHA A AÑADIR");
printf("\n DNI....: "); scanf("%s", ficha.dni );
printf("\n SALDO..: "); scanf("%li", &ficha.saldo );
escribir_ficha( ficha, f );
fclose(f);
}
}
/* FUNCION QUE LISTA TODO EL CONTENIDO DE UN FICHERO */
void listar_fichero( char nomf[] )
{
struct Tficha ficha;
int encontrado;
FILE *f;
f = fopen( nomf, "rt");
if (f == NULL)
printf("ERROR, NO SE HA PODIDO LISTAR EL FICHERO");
else
{
ficha = leer_ficha(f);
while ( !feof(f) )
{
printf("\n\n DNI....: "); printf("%s", ficha.dni );
printf("\n SALDO..: "); printf("%li", ficha.saldo );
ficha = leer_ficha(f);
}
fclose(f);
}
}
/* FUNCION QUE REALIZA LA BUSQUEDA DE UNA FICHA Y, SI LA ENCUENTRA, LA
MUESTRA */
void consultar_ficha( char nomf[] )
{
struct Tficha ficha;
char clave[MAXCAD];
int encontrada = 0;
FILE *f;
f = fopen( nomf, "rt");
if (f == NULL)
printf("ERROR AL ABRIR FICHERO, NO SE PUEDE CONSULTAR FICHA");
else
{
printf("\n INTRODUZCA EL DNI DE LA FICHA A CONSULTAR: ");
scanf(" %s", clave);
printf("\n ESPERE, SE ESTA BUSCANDO LA FICHA");
ficha = leer_ficha(f);
while ( !feof(f) && !encontrada )
{
if ( strcmp( ficha.dni, clave ) == 0 )
{
encontrada = 1;
printf("\n DNI....: "); printf("%s", ficha.dni );
printf("\n SALDO..: "); printf("%li", ficha.saldo );
}
else
ficha = leer_ficha(f);
}
if ( !encontrada )
printf("\n ¡¡¡¡ FICHA NO EXISTENTE !!!!");
fclose(f);
}
}
/* FUNCION QUE ELIMINA TODO EL CONTENIDO DE UN FICHERO */
void vaciar_fichero( char nomf[] )
{
FILE *f;
f = fopen( nomf, "w" );
if (f == NULL)
printf("\n ERROR, NO SE HA PODIDO VACIAR EL FICHERO");
else
fclose(f);
}
/* FUNCION QUE ELIMINA LA FICHA (CASO DE ENCONTRARLA) CUYO CAMPO CLAVE
SE INTRO POR TECLADO*/
void eliminar_ficha( char nomf[] )
{
struct Tficha ficha;
char clave[MAXCAD];
int encontrada = 0;
FILE *f, *faux;
f = fopen( nomf, "rt");
faux = fopen( "faux","wt" );
if ( (f == NULL) || (faux == NULL) )
printf("ERROR AL ABRIR FICHERO, NO SE PUEDE ELIMINAR FICHA");
else
{
printf("\n INTRODUZCA EL DNI DE LA FICHA A ELIMINAR: ");
scanf(" %s", clave);
printf("\n ESPERE, SE ESTA BUSCANDO LA FICHA");
ficha = leer_ficha(f);
while ( !feof(f) )
{
if ( strcmp( ficha.dni, clave ) != 0 )
escribir_ficha( ficha, faux );
else
encontrada = 1;
ficha = leer_ficha(f);
}
if ( !encontrada )
printf("\n ¡¡¡¡ FICHA NO EXISTENTE !!!!");
else
printf("\n FICHA ELIMINADA");
fclose(f);
fclose(faux);
remove(nomf);
rename("faux", nomf );
}
}
Descargar