mostrar contactos de una agenda por equipo

Iniciado por attackers, 24 Noviembre 2011, 18:01 PM

0 Miembros y 1 Visitante están viendo este tema.

attackers

amigos tengo una agenda pero quiero una opcion de mostrar todos los contactos que sean del equipo caraquista

aqui le dejo el codig paa ver si me pueden ayudar




#include <stdio.h>

struct _agenda {
       char nombre[20];
       char telefono[12];
       char equipo[20];
       struct _agenda *siguiente;
       };

struct _agenda *primero, *ultimo;

void mostrar_menu() {
     system("cls");
     printf("\n\nMenu:\n=====\n\n");
     printf("1.- Agregar elementos\n");
     printf("2.- Borrar elementos\n");
     printf("3.- Mostrar contacto\n");
     printf("4.- Mostrar contacto magallanero\n");
     printf("5.- Salir\n\n");
     printf("Escoge una opcion: ");fflush(stdout);
}

void anadir_elemento() {
     struct _agenda *nuevo;

     /* reservamos memoria para el nuevo elemento */
     nuevo = (struct _agenda *) malloc(sizeof(struct _agenda));
     if (nuevo==NULL) printf( "No hay memoria disponible!\n");

     printf("\nNuevo elemento:\n");
     printf("Nombre: "); fflush(stdout);
     gets(nuevo->nombre);
     printf("Telefono: "); fflush(stdout);
     gets(nuevo->telefono);
     printf("Equipo: "); fflush(stdout);
     gets(nuevo->equipo);

     /* el campo siguiente va a ser NULL por ser el último elemento
        de la lista */
     nuevo->siguiente = NULL;


     if (primero==NULL) {
        printf( "Primer elemento\n");
        primero = nuevo;
        ultimo = nuevo;
        }
     else {
          /* el que hasta ahora era el último tiene que apuntar al nuevo */
          ultimo->siguiente = nuevo;
          /* hacemos que el nuevo sea ahora el último */
          ultimo = nuevo;
     }
}



void mostrar_lista() {
     struct _agenda *auxiliar;
     int i;

     i=0;
     auxiliar = primero;
     printf("\nMostrando la lista completa:\n");
     while (auxiliar!=NULL) {
           printf( "Nombre: %s \n Telefono: %s \n equipo: %s\n",
                   auxiliar->nombre,auxiliar->telefono,auxiliar->equipo);
           auxiliar = auxiliar->siguiente;
           i++;
     }
     if (i==0) printf( "\nLa agenda esta vacia!!\n" );
}



void mostrar_magallanes() {

     int x;
           struct _agenda *auxiliar;
     printf("\nLos contacto magallaneros son: \n");
     
     for(x=0; x < 5; x++)
         {
     if(strcmp(primero->equipo[x],"magallanero") == 0)
        {
     printf("los contactos magallanero son");
   printf("\nEl nombre es: %s \n",auxiliar->nombre[x]);
   printf ("el telefono: %s  \n",auxiliar->telefono[x]);
   
          }
          }
          }


void borrar_elemento(){

 free(primero=NULL);

                    }

int main() {
    char opcion;

    primero = (struct _agenda *) NULL;
    ultimo = (struct _agenda *) NULL;
    do {
        mostrar_menu();
        opcion = getch();
            switch ( opcion ) {
               case '1': anadir_elemento();
                      break;
               case '2':  borrar_elemento();
                       break;
               case '3': mostrar_lista(primero);
                       break;
               case '4': mostrar_magallanes();
               break;
               
               case '5': exit( 1 );
               default: printf( "Opción no válida\n" );
                        break;
            }
    } while (opcion!='5');
}





http://pastebin.com/SvxGbaRZ

en la linea 75 a 91 esta la funcion que mas o menos quiero pero no se trabajar con punteros

satu

Hola

Te pongo sólo el código de la función

void mostrar_magallanes()
{
    struct _agenda *auxiliar = primero;
    printf("\nLos contacto magallaneros son: \n");

    while(auxiliar != NULL)
    {
        if(strcmp(auxiliar->equipo,"magallanero") == 0)
        {
            printf("\nEl nombre es: %s \n",auxiliar->nombre);
            printf ("el telefono: %s  \n",auxiliar->telefono);
        }
        auxiliar = auxiliar->siguiente;
    }
}


Saludos
Breakbeat como forma de vida

attackers

amigo y para eliminar un contacto en especifico por que como yo lo tengo borra TODOS los contactos  me podrias pasar esa funcion ??

satu

Hola

Para borrar un único elemento sería algo así:


void borrar_elemento()
{
    int borrado = 0;
    char nombre[20];
    struct _agenda *auxiliar1 = primero, *auxiliar2 = NULL;

    printf("Introduce el nombre:");
    scanf("%s", nombre);
    while(getchar() != '\n'); //Limpiamos el buffer

    while((auxiliar1 != NULL) && (borrado == 0))
    {
        if(strcmp(auxiliar1->nombre, nombre) == 0)
            borrado = 1;
        else
        {
            auxiliar2 = auxiliar1;
            auxiliar1 = auxiliar1->siguiente;
        }
    }

    if(borrado == 1)
    {
        if(auxiliar1 == primero)
        {
            primero = primero->siguiente;
            auxiliar1->siguiente = NULL;
            free(auxiliar1);
        }
        else
            if(auxiliar1 == ultimo)
            {
                ultimo = auxiliar2;
                ultimo->siguiente = NULL;
                free(auxiliar1);
            }
            else
            {
                auxiliar2->siguiente = auxiliar1->siguiente;
                auxiliar1->siguiente = NULL;
                free(auxiliar1);
            }
        printf("El elemento con nombre %s ha sido borrado\n", nombre);
    }
    else
        printf("El elemento con nombre %s no se encuentra\n", nombre);
}


Lo he hecho a ojo sin probarlo pero los tiros van por ahí.

Saludos
Breakbeat como forma de vida