Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <time.h>
- //Definicion de Estructuras
- struct estructura_amigo {
- int numero_registro;
- char nombre_completo[50];
- char direccion[50];
- int validar_visualizacion;
- struct tm *obtener_fecha;
- char fecha_ingreso[11];
- };
- struct estructura_amigo amigo;
- //Definicion de Funciones
- int ingresar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
- int listar_todos(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
- int busqueda_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
- int eliminar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
- int listar_eliminados(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
- int copia_seguridad(FILE **p_arch1, FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2);
- int restaurar_copia_seguridad(FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2, struct estructura_amigo *p_amigo);
- void manejo_archivos_avanzado(void)
- {
- FILE *p_arch1, *p_arch2;
- char ruta_arch1[70]= { "/home/brandford/.learnc/ingreso-struct.dat" };
- char ruta_arch2[70]= { "/home/brandford/.learnc/respaldo-ingreso-struct.dat" };
- char selector[2];
- system("clear");
- printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
- printf("\nlearnc - Aprendizaje de C con IDE Anjuta\n");
- printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
- printf("\n\nModulo: Manejo de Archivos Avanzado");
- printf( "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n" );
- printf("-\n");
- printf("1. Nuevo Amigo\n");
- printf("2. Listar Todos\n");
- printf("3. Buscar Amigo\n");
- printf("4. Eliminar Amigo\n");
- printf("5. Listar Eliminados\n");
- printf("6. Copia de Seguridad\n");
- printf("7. Restaurar Copia de Seguridad\n\n");
- do{
- fflush(stdin);
- printf("Seleccione opcion\t\t: ");
- fflush(stdout);
- gets(selector);
- if( ! ( ( atoi(selector) > 0 ) && ( atoi(selector) < 8 ) ) )
- printf("#Error en la opcion seleccionada\n");
- }while( ! ( ( atoi(selector) > 0 ) && ( atoi(selector) < 8 ) ) );
- if(atoi(selector) == 1)
- ingresar_amigo(&p_arch1, ruta_arch1, &amigo);
- else if(atoi(selector) == 2)
- listar_todos(&p_arch1, ruta_arch1, &amigo);
- else if(atoi(selector) == 3)
- busqueda_amigo(&p_arch1, ruta_arch1, &amigo);
- else if(atoi(selector) == 4)
- eliminar_amigo(&p_arch1, ruta_arch1, &amigo);
- else if(atoi(selector) == 5)
- listar_eliminados(&p_arch1, ruta_arch1, &amigo);
- else if(atoi(selector) == 6)
- copia_seguridad(&p_arch1, &p_arch2, ruta_arch1, ruta_arch2);
- else if(atoi(selector) == 7)
- restaurar_copia_seguridad(&p_arch2, ruta_arch1, ruta_arch2, &amigo);
- printf("-\n\n\n");
- printf("Presione <ENTER> para continuar . . .");
- fflush(stdin);
- getchar();
- system("clear");
- }
- //Ingreso a archivo informacion
- int ingresar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
- {
- time_t fecha;
- int count= 0;
- fecha= time(NULL);
- p_amigo -> obtener_fecha= localtime(&fecha);
- strftime(p_amigo -> fecha_ingreso, 11, "%d-%m-%Y", p_amigo -> obtener_fecha);
- printf("\nIngreso:\n");
- *p_arch1= fopen(p_ruta_arch1, "a+b");
- if(*p_arch1 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- while(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
- {
- count++;
- }
- p_amigo -> numero_registro= count +1;
- do{
- fflush(stdin);
- printf("Ingrese Nombre Completo\t\t: ");
- fflush(stdout);
- gets(p_amigo -> nombre_completo);
- if( ! ( ( p_amigo -> nombre_completo[0] != 0 ) && ( p_amigo -> nombre_completo[0] != ' ' ) ) )
- {
- printf("#Debe ingresar un valor\n");
- }
- }while( ! ( ( p_amigo -> nombre_completo[0] != 0 ) && ( p_amigo -> nombre_completo[0] != ' ' ) ) );
- do{
- fflush(stdin);
- printf("Ingrese Direccion\t\t: ");
- fflush(stdout);
- gets(amigo.direccion);
- if( ! ( ( p_amigo -> direccion[0] != 0 ) && ( p_amigo -> direccion[0] != ' ' ) ) )
- {
- printf("#Debe ingresar un valor\n");
- }
- }while( ! ( ( p_amigo -> direccion[0] != 0 ) && ( p_amigo -> direccion[0] != ' ' ) ) );
- p_amigo -> validar_visualizacion= 1;
- fseek(*p_arch1, 0, SEEK_END);
- fwrite(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1);
- if(fclose(*p_arch1) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- return(0);
- }
- //Listar informacion desde el archivo
- int listar_todos(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
- {
- printf("\nListado:\n");
- *p_arch1= fopen(p_ruta_arch1, "r+b");
- if(*p_arch1 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- while(feof(*p_arch1) == 0)
- {
- if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
- {
- if(p_amigo -> validar_visualizacion == 1)
- {
- printf("Registro: %d. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);
- }
- }
- }
- if(fclose(*p_arch1) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- return(0);
- }
- //Buscar amigo en archivo
- int busqueda_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
- {
- char selector_registro[2];
- char registros_validados[10];
- int count;
- int validar_registro_busqueda;
- printf("\nBusqueda:\n");
- *p_arch1= fopen(p_ruta_arch1, "r+b");
- if(p_arch1 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- count= 0;
- rewind(*p_arch1);
- while(feof(*p_arch1) == 0)
- {
- if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
- {
- if(p_amigo -> validar_visualizacion == 1)
- {
- printf("Registro: [%d]. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);
- registros_validados[count]= p_amigo -> numero_registro;
- count++;
- }
- }
- }
- do{
- fflush(stdin);
- printf("\nSeleccione registro\t\t: ");
- fflush(stdout);
- gets(selector_registro);
- for(count= 0 ; count < strlen(registros_validados) ; count++)
- {
- if( atoi(selector_registro) == registros_validados[count] )
- {
- validar_registro_busqueda= 1;
- }
- }
- if( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) )
- {
- printf("#Debe ingresar un valor");
- }
- }while( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) );
- fseek(*p_arch1, (atoi(selector_registro) - 1)*sizeof(struct estructura_amigo), SEEK_SET);
- fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1);
- printf("\nNumero de Registro\t\t: %d\n", p_amigo -> numero_registro);
- printf("Nombre Completo\t\t\t: %s\n", p_amigo -> nombre_completo);
- printf("Direccion\t\t\t: %s\n", p_amigo -> direccion);
- printf("Validar Visualizacion\t\t: %d\n", p_amigo -> validar_visualizacion);
- printf("Fecha de Ingreso\t\t: %s\n", p_amigo -> fecha_ingreso);
- if(fclose(*p_arch1) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- return(0);
- }
- //Eliminar amigo en archivo
- int eliminar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
- {
- int count;
- char selector_registro[2];
- char registros_validados[10];
- int validar_registro_busqueda;
- printf("\nBusqueda:\n");
- *p_arch1= fopen(p_ruta_arch1, "r+b");
- if(p_arch1 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- count= 1;
- rewind(*p_arch1);
- while(feof(*p_arch1) == 0)
- {
- if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
- {
- if(p_amigo -> validar_visualizacion == 1)
- {
- printf("Registro: [%d]. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);
- registros_validados[count]= p_amigo -> numero_registro;
- count++;
- }
- }
- }
- do{
- fflush(stdin);
- printf("\nSeleccione registro\t\t: ");
- fflush(stdout);
- gets(selector_registro);
- for(count= 0 ; count < strlen(registros_validados) ; count++)
- {
- if( atoi(selector_registro) == registros_validados[count] )
- {
- validar_registro_busqueda= 1;
- }
- }
- if( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) )
- {
- printf("#Debe ingresar un valor");
- }
- }while( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) );
- fseek(*p_arch1, (atoi(selector_registro) - 1)*sizeof(amigo), SEEK_SET);
- fread(&amigo, sizeof(amigo), 1, *p_arch1);
- p_amigo -> validar_visualizacion= 0;
- fseek(*p_arch1, (atoi(selector_registro) - 1)*sizeof(amigo), SEEK_SET);
- fwrite(&amigo, sizeof(amigo), 1, *p_arch1);
- if(fclose(*p_arch1) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- *p_arch1= fopen(p_ruta_arch1, "r+b");
- if(p_arch1 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- return(0);
- }
- //Listar amigos marcado como eliminados
- int listar_eliminados(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
- {
- printf("\nEliminados:\n");
- *p_arch1= fopen(p_ruta_arch1, "r+b");
- if(*p_arch1 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- while(feof(*p_arch1) == 0)
- {
- if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
- {
- if(p_amigo -> validar_visualizacion == 0)
- {
- printf("Registro: %d. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);
- }
- }
- }
- if(fclose(*p_arch1) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- return(0);
- }
- //Copia de Seguridad
- int copia_seguridad(FILE **p_arch1, FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2)
- {
- printf("\nCopia de Seguridad:\n");
- *p_arch1= fopen(p_ruta_arch1, "r+b");
- if(*p_arch1 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- remove(p_ruta_arch2);
- *p_arch2= fopen(p_ruta_arch2, "w+b");
- if(p_arch2 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- while(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
- {
- fwrite(&amigo, sizeof(struct estructura_amigo), 1, *p_arch2);
- }
- if(fclose(*p_arch1) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- if(fclose(*p_arch2) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- printf("La copia de seguridad se ha creado correctamente\n");
- return(0);
- }
- //Restaurar Copia de Seguridad
- int restaurar_copia_seguridad(FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2, struct estructura_amigo *p_amigo)
- {
- char selector[2];
- int count;
- int validar_letras;
- printf("\nListado Copia Seguridad:\n");
- *p_arch2= fopen(p_ruta_arch2, "r+b");
- if(*p_arch2 == NULL)
- {
- printf("Error al abrir el archivo\n");
- exit(1);
- }
- while(feof(*p_arch2) == 0)
- {
- if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch2))
- {
- printf("Registro: %d. Valido: %d. %s\n", p_amigo -> numero_registro, p_amigo -> validar_visualizacion, p_amigo -> nombre_completo);
- }
- }
- if(fclose(*p_arch2) != 0)
- {
- printf("Error al cerrar el archivo\n");
- exit(1);
- }
- do{
- fflush(stdin);
- printf("\n¿Desea restaurar la Copia de Seguridad (s/n): ");
- fflush(stdout);
- gets(selector);
- for( ( count= 0, validar_letras= 0 ) ; count < strlen( selector ) ; count ++ )
- {
- if( isdigit( selector[count] ) )
- {
- validar_letras= 1;
- printf("#Debe solo debe ingresar letras\n");
- }
- }
- if( ! ( ( ( tolower(selector[0]) == 's' ) || ( tolower(selector[0]) == 'n' ) ) && ( validar_letras != 1 ) ) )
- printf("#Error en la opcion seleccionada");
- }while( ! ( ( ( tolower(selector[0]) == 's' ) || ( tolower(selector[0]) == 'n' ) ) && ( validar_letras != 1 ) ) );
- if(selector[0] == 's')
- {
- remove(p_ruta_arch1);
- rename(p_ruta_arch2, p_ruta_arch1);
- printf("La copia de seguridad se ha cargado correctamente\n");
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement