#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<stdlib.h>
#include<string.h>
#define memoria (struct apellidos *)malloc(sizeof(struct apellidos))
struct datos_apellidos{
char apellido[20];
char nombre[20];
int fono;
char direccion[30];
};
struct apellidos{
char apellido[20];
struct apellidos *izq,*der;
struct datos_apellidos datos;
}*ap,*auxapellidos;
int fono;
//--------------------------------------------------------------------------------
//Nombre: inicializacion
//Tipo: constructora
//Entrada: Puntero Raiz
//Salida: raiz inicializada
void inicializa(struct apellidos **ap)
{
*ap=NULL;
}
//Nombre: insercion_binaria
//Tipo: modificadora
//Entrada: Puntero Raiz , valor nuevo
//Salida: arbol modificado
void insercion_apellidos(struct apellidos **ap, char apellid[20])
{
*ap=auxapellidos;
if((*ap)==NULL)
{
(*ap)=memoria;
if((*ap)!=NULL)
{
strcpy((*ap)->apellido,apellid);
(*ap)->der=NULL;
(*ap)->izq=NULL;
strcpy(auxapellidos->datos.apellido,(*ap)->apellido);
printf("\nIngrese Nombre: ");
gets(auxapellidos->datos.nombre);
fflush(stdin);
printf("\nIngrese fono: ");
scanf("%d",&fono);
fflush(stdin);
auxapellidos->datos.fono=fono;
printf("\nIngrese direccion: ");
gets(auxapellidos->datos.direccion);
fflush(stdin);
//imprime los datos para verificar si los graba
printf("\nfono> %d",auxapellidos->datos.fono);
printf("\napellidoap> %s",(*ap)->apellido);
printf("\napellidoaux> %s",auxapellidos->datos.apellido);
//se supone que guarda la estructura
FILE *stream;
if ((stream = fopen("guiatelef.dat", "wb")) == NULL) /* open file TEST.$$$ */
{
fprintf(stderr, "Cannot open output file.\n");
}
fwrite(&ap, sizeof(ap), 1, stream); /* write struct s to file */
fclose(stream); /* close file */
}
else{
printf("%s no insertado.\n",apellid);
}
}
else if(apellid>(*ap)->apellido)
insercion_apellidos(&(*ap)->der,apellid);
else if(apellid<(*ap)->apellido)
insercion_apellidos(&(*ap)->izq,apellid);
else printf("Dato duplicado.\n");
}
// -----------------------------------------------------------------------------
//Nombre: inorden
//Tipo: analizadora
//Entrada: Puntero Raiz
//Salida: vista del arbol
void inorden (struct apellidos *ap)
{
if(ap!=NULL)
{
inorden(ap->izq);
printf("%s ",ap->apellido);
inorden(ap->der);
}
}
//menu
char apellido[20];
char buscar[20];
int i=0;
void main()
{
clrscr();
inicializa(&ap);
for(i=0;i<3;i++){
printf("\nIngrese apellido: ");
gets(apellido);
fflush(stdin);
insercion_apellidos(&ap,apellido);
}
inorden(ap);
clrscr();
printf("\nBuscar fono por apellido\n");
auxapellidos=ap;
//queriamos buscar el numero de fono por el apellido
//pero no guarda los apellidos...
printf("\ningrese apellido a buscar: ");
gets(buscar);
fflush(stdin);
if (strcmp(ap->apellido,buscar)==0)
{
if(auxapellidos->apellido!=NULL)
{
printf("%s",auxapellidos->apellido);
printf("%s",ap->datos.fono);
}
}
else printf("no son iguales");
getch();
}