Escribir un nombre concreto en un directorio informático

Ya tengo casi el proyecto(directorio), lo que me hace falta es pedir el nombre de una persona especifica, me podrías decir por favor que sentencia y donde va dentro del programa
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct informacion
{
char nombre[64];
char direccion[256];
char telefono[10];
};
void pedir_informacion(struct informacion*);
void ver_informacion(struct informacion*);
main()
{
char nombre[64];
char op;
FILE*fichero;
fichero=fopen("informacion.dat","ab");
if(fichero==NULL)
{
printf("\nError al intentar abrir el fichero informacion.dat");
exit(0);
}
struct informacion persona;
printf("\n¿Desea introducir registros al directorio(S/N):");
op=(char)getch();
while(op!='n'&&op!='N')
{
pedir_informacion(&persona);
fwrite(&persona,sizeof(persona),1,fichero);
printf("\Desea introducir otro registro(S/N):");
op=(char)getch();
}
printf("\nDesea leer los registros del directorio(S/N):");
op=(char)getch();
fclose(fichero);
printf("\nIngrese el nombre a buscar:\n");
scanf("%d",&nombre);
fichero=fopen("informacion.dat","rb");
while(!feof(fichero))
{
fread(&persona,sizeof(struct informacion),1,fichero);
break;
}
while(op!='n'&&op!='N')
{
if(fread(&persona,sizeof(persona),1,fichero)==0)
break;
ver_informacion(&persona);
printf("\nDesea consultar otro registro(S/N):");
op=(char)getch();
printf("\nIngrese el nombre a buscar:\n");
scanf("%s",&nombre);
}
printf("\nPresione una tecla para finalizar:");
fclose(fichero);
getch();
return 0;
}
void pedir_informacion(struct informacion*persona)
{
printf("\nNombre:");
scanf("%s",persona->nombre);
printf("\nDireccion:");
scanf("%s",persona->direccion);
printf("\nTelefono:");
scanf("%s",persona->telefono);
}
void ver_informacion(struct informacion*persona)
{
printf("\nNombre:%s",persona->nombre);
printf("\nDireccion:%s",persona->direccion);
printf("\nTelefono:%s",persona->telefono);
}
Gracias

1 Respuesta

Respuesta
1
He modificado tu programa; ahora funciona correctamente.
Perdona que te haya cambiado casi todo el código, pero creo que lo entenderás.
Un saludo.
Aquí te lo paso:
/* OBSERVACIONES:
He modificado bastante el programa que me diste.
Lo he hecho a mi manera, luego tú lo haces como quieras.
He cambiado las funciones GETCH por GETCHAR, ya que mi compilador no tiene el
componente CONIO.H.
He estructurado el programa en un menú de 3 opciones.
Las funciones VER_INFORMACION y PEDIR_INFORMACION las he respetado, así como
Algunas instrucciones.
Es importante tener en cuenta que a la hora de buscar a una persona por su
Nombre, no se toma en cuenta que varias personas tengan el mismo nombre. Si hay
Varias, se encontrará la primera que se introdujo.
Este programa puede complicarse o simplificarse según las necesidades.
Si algo no te queda claro, puedes decírmelo.
*/
#include<stdio.h>
// #include<conio.h>
#include<stdlib.h>
struct informacion
{
char nombre[64];
char direccion[256];
char telefono[10];
};
void pedir_informacion(struct informacion *); // pide los datos
void ver_informacion(struct informacion); // imprime los datos
int menu(void); // pide la operacion deseada
void grabar_datos(struct informacion *); // añade al fichero nuevos registros
void pedir_nombre(char *); // pide el nombre deseado
struct informacion buscar_persona(char *); // devuelve los datos de la persona buscada
void cargar_datos(void); // recoge todos los registros del fichero y los imprime
main()
{
struct informacion persona; // almacenará momentáneamente la información
char nombre[64]; // almacenará el nombre a buscar
int opcion=0; // almacena la opción del menu
do
{
system("clear");
opcion=menu();
printf("\n");
switch (opcion)
{
case 1:
grabar_datos(&persona);
break;
case 2:
pedir_nombre(nombre);
persona=buscar_persona(nombre);
break;
case 3:
cargar_datos();
break;
case 4:
break;
}
}
while(opcion!=4);
}
void pedir_informacion(struct informacion *persona)
{
printf("Nombre: ");
gets((*persona).nombre);
printf("Direccion: ");
gets((*persona).direccion);
printf("Telefono: ");
gets((*persona).telefono);
}
void ver_informacion(struct informacion persona)
{
printf("Nombre: %s\n", persona.nombre);
printf("Direccion: %s\n", persona.direccion);
printf("Telefono: %s\n", persona.telefono);
}
int menu(void)
{
int opcion=0;
do
{
printf("\nSeleccione la opción deseada:\n");
printf("1.Añadir contacto\n");
printf("2.Buscar contacto\n");
printf("3.Ver directorio\n");
printf("4.Salir\n\n");
printf("==> ");
scanf("%d", &opcion);
getchar();
}
while (opcion<1 && opcion>5);
return opcion;
}
void grabar_datos(struct informacion *persona)
{
FILE *fichero=NULL;
char salir='s';
if((fichero=fopen("informacion.dat", "ab"))==NULL)
{
printf("\nError al intentar abrir el fichero informacion.dat");
exit(0);
}
while((salir!='n')&&(salir!='N'))
{
pedir_informacion(persona);
fwrite(persona,sizeof(struct informacion),1,fichero);
printf("¿Desea introducir otro registro (S/N)? ");
scanf("%c", &salir);
getchar();
printf("\n");
}
fclose(fichero);
}
void cargar_datos (void)
{
struct informacion aux;
int n=0;
FILE *fichero=NULL;
if((fichero=fopen("informacion.dat", "rb"))==NULL)
{
printf("\nError al intentar abrir el fichero informacion.dat");
exit(0);
}
while((fread(&aux,sizeof(struct informacion),1,fichero))==1) // recoge datos mientras los haya
{
printf("* PERSONA Nº%d *\n", n+1);
ver_informacion(aux);
printf("(Pulse Intro)");
getchar();
n++;
printf("\n");
}
fclose(fichero);
}
void pedir_nombre (char *nombre)
{
printf("Nombre: ");
gets(nombre);
}
struct informacion buscar_persona (char *nombre)
{
int n=0;
int encontrado=0;
struct informacion aux;
FILE *fichero=NULL;
if((fichero=fopen("informacion.dat", "rb"))==NULL)
{
printf("\nError al intentar abrir el fichero informacion.dat");
exit(0);
}
while(((fread(&aux,sizeof(struct informacion),1,fichero))==1)&&(!encontrado)) // se saldrá cuando se llegue al final del fichero o se encuentre la persona
{
n++;
if (!(strcmp(aux.nombre, nombre)))
{
encontrado=1;
printf("* PERSONA Nº%d *\n", n);
ver_informacion(aux);
printf("(Pulse Intro)");
getchar();
printf("\n");
}
}
if(!encontrado)
{
printf("NO ENCONTRADO\n");
printf("(Pulse Intro)");
getchar();
printf("\n");
}
fclose(fichero);
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas