Proyecto Agenda
Ingeniería en ciencias de la computación
Programación 1
Canto Gómez Ángel Bernardo
Proyecto: Agenda
Mejía Hernández Miguel
//El Programa consiste en almacenar datos personales
//como una agenda virtual con las opciones de:
//1-ver el contenido de la agenda ya con los nombres ordenados
//2-dar de alta una persona con sus datos personales//3-buscar el telefono anotando el nombre de la persona
#include
#include
#include
#define MAXCADENA 200
enum { Ver=1, Alta, Buscar, Salir };
struct Entrada {
char * nombre;
char * direccion;
char * telefono;
char * correo;
char * celular;
};
struct NodoAgenda {
struct Entrada datos;
struct NodoAgenda * sig;
};
typedef struct NodoAgenda * TipoAgenda;
voidquita_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´ýamos haber pasado e por valor, pero resulta mas eficiente (y no mucho mas
// incomodo) hacerlo por referencia: pasamos asi solo 4 bytes en lugar de 12.
{
printf ("Nombre : %s\n", e->datos.nombre);
printf ("Direccion:%s\n", e->datos.direccion);
printf ("Telefono : %s\n", e->datos.telefono);
printf ("Correo : %s\n", e->datos.correo);
printf ("Celular : %s\n", e->datos.celular);
}
void libera_entrada(struct NodoAgenda * e)
{
int i;
free(e->datos.nombre);
free(e->datos.direccion);
free(e->datos.telefono);
free(e->datos.correo);
free(e->datos.celular);
free(e);
}
TipoAgenda crea_agenda(void)
{
return NULL;
}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;
}
//En esta parte del codigo se ordenan alfabeticamente
TipoAgenda busca_posicion_insertar (TipoAgenda agenda, char nombre[],TipoAgenda e){
struct NodoAgenda * aux, *siguiente, * anterior;
int cont;
aux = agenda;
anterior = aux;
cont = 0;
while (aux != NULL) {
cont++;
if ((strcmp(aux ->datos.nombre, nombre))>0) break;
anterior = aux;
siguiente = aux->sig;
aux = siguiente;
};
if (anterior == agenda)
{
//printf("Anterior == Agenda %d \n", cont);
if (( cont > 0) && (aux !=anterior )) {
e->sig = anterior->sig;
anterior->sig = e;
}
else
{
e->sig = agenda;
agenda = e;
}
}
else {
e->sig=anterior->sig;
anterior->sig = e;
}
//printf("Nodos: %d \n", cont);
return agenda;
}
TipoAgenda anyadir_entrada(TipoAgenda agenda, charnombre[],
char direccion[], char telefono[], char correo[],char celular[])
{
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 aqui, es porque no teniamos 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->datos.correo = malloc((strlen(correo)+1)*sizeof(char));
strcpy(e->datos.correo, correo);
e->datos.celular = malloc((strlen(celular)+1)*sizeof(char));strcpy(e->datos.celular, celular);
agenda = busca_posicion_insertar(agenda, nombre, e);
//e->sig= aux;
//agenda->sig = e;
//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);
}
void libera_agenda(TipoAgenda agenda)
{
struct NodoAgenda * aux, *siguiente;
aux = agenda;...
Regístrate para leer el documento completo.