Proyecto de directorio telefónico en c++. Sentencias en el programa

Ya tengo casi el proyecto(directorio tel.), 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);
}

1 respuesta

Respuesta
1
No veo las respuestas :(
Por lo que veo, no estas cargando la información del archivo en una lista por ende tienes dos opciones, la más rápida en (menos tiempo de maquina) es crear una función que cargue los datos del archivo en una lista, donde cada nodo contendría los mismos campos que información y se agregarían dos puntero anterior y puntero siguiente, en este caso el código para crear la lista sería.
struct nodo
{
char nombre[64];
char direccion[256];
char telefono[10];
nodo *pa,*ps;
}
nodo *actual,*nuevo,*primero;
FILE *fichero;
fichero=fopen("informacion.dat","ab");
while(!feof(fichero))
{
fread(&persona,sizeof(struct informacion),1,fichero);
if (primero==null)
{
primero=new nodo;
primero->ps=null;
primero->pa=null;
aqui copias el contenido de persona a primero, campo por campo
}
else
{
actual=primero;
while(actual->ps!=null)
{
actual=actual->ps;
}
nuevo=new nodo;
nuevo->ps=null;
nuevo->pa=actual;
actual->ps=nuevo;
aqui copias el contenido de persona campo por campo dentro de nuevo
}
para buscar dentro de la lista creada:
Actual=primero //después de la primera vez no toques primero porque sino perdés la lista en la mem.
while(actual!=NULL)
{
if(actual->nombre==requerido)//donde requerido es el nombre que ingresas
printf("\n Nombre:",actual->nombre);
printf("\n Direccion:",actual->direccion);
printf("\n Telefono:",actual->telefono);
}
else actual=actual->ps;
}
Te recomiendo incluir este código en una función aparte de esa manera el código es reutilizable ademas de quedar más claro, acordate siempre que en la programación estructurada tienes que intentar trabajar por módulos.
Fíjate en las sentencias ya que hace mucho que no agarro c++ (trabajo con Builder que es una herramienta RAD que te evita todos los printf y scanf)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas