#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 ); } }