Mi Mama Me Ama
Enviado por flower92sam • 26 de Diciembre de 2012 • 509 Palabras (3 Páginas) • 522 Visitas
#include <stdio.h>
#include <stdlib.h>
#define MAXCADENA 200
enum { Ver=1, Alta, Buscar, Salir };
struct Entrada {
char * nombre;
char * direccion;
char * telefono;
};
struct NodoAgenda {
struct Entrada datos;
struct NodoAgenda * sig;
};
typedef struct NodoAgenda * TipoAgenda;
void quita_fin_de_linea(char linea[])
{
int i;
for (i=0; linea[i] != ’\0’; i++)
if (linea[i] == ’\n’) {
linea[i] = ’\0’;
break;
}
}
void muestra_entrada(struct NodoAgenda * e)
// Podr´iamos haber pasado e por valor, pero resulta m´as eficiente (y no mucho m´as
// inc´omodo) hacerlo por referencia: pasamos as´i s´olo 4 bytes en lugar de 12.
{
printf ("Nombre : %s\n", e->datos.nombre);
printf ("Direcci´on: %s\n", e->datos.direccion);
printf ("Tel´efono : %s\n", e->datos.telefono);
}
void libera_entrada(struct NodoAgenda * e)
{
int i;
free(e->datos.nombre);
free(e->datos.direccion);
free(e->datos.telefono);
free(e);
}
TipoAgenda crea_agenda(void)
{
return NULL;
}
TipoAgenda anyadir_entrada(TipoAgenda agenda, char nombre[],
char direccion[], char telefono[])
{
struct NodoAgenda * aux, * e;
/* Averiguar si ya tenemos una persona con ese nombre */
if (buscar_entrada_por_nombre(agenda, nombre) != NULL)
return agenda;
/* Si llegamos aqu´i, es porque no ten´iamos registrada a esa persona. */
e = malloc(sizeof(struct NodoAgenda));
e->datos.nombre = malloc((strlen(nombre)+1)*sizeof(char));
strcpy(e->datos.nombre, nombre);
e->datos.direccion = malloc((strlen(direccion)+1)*sizeof(char));
strcpy(e->datos.direccion, direccion);
e->datos.telefono = malloc((strlen(telefono)+1)*sizeof(char));
strcpy(e->datos.telefono, telefono);
e->sig = agenda;
agenda = e;
return agenda;
}
void muestra_agenda(TipoAgenda agenda)
{
struct NodoAgenda * aux;
for (aux = agenda; aux != NULL; aux = aux->sig)
muestra_entrada(aux);
}
struct NodoAgenda * buscar_entrada_por_nombre(TipoAgenda agenda, char nombre[])
{
struct NodoAgenda * aux;
for (aux = agenda; aux != NULL; aux = aux->sig)
if (strcmp(aux->datos.nombre, nombre) == 0)
return aux;
return NULL;
}
void libera_agenda(TipoAgenda agenda)
{
struct NodoAgenda * aux, *siguiente;
aux = agenda;
while (aux != NULL) {
siguiente = aux->sig;
libera_entrada(aux);
...