viernes, 24 de mayo de 2013

Programa de lista de correos (arrays de estructuras)


/*Un sencillo programa de lista de correos que ilustra el uso de
arrays de estructuras. */

#include<stdio.h>
#include<stdlib.h>

#define MAX 100

struct dir {
      char nombre[30];
      char calle[40];
      char ciudad[20];
      char provincia[3];
      unsigned long int codigo;
} lista_dir[MAX];

/* Prototipo de funciones **************/
void inic_lista(void), intro(void);
void borrar(void), listar(void);   
int menu(void), busca_libre(void); 
/***************************************/

int main(void)
{
      char opcion;
     
      inic_lista();     // inicializar el array de estructuras
     
      for(;;)
      {
            opcion = menu();
            switch(opcion)
            {
                  case 1: intro();
                        break;
                  case 2: borrar();
                        break;
                  case 3: listar();
                        break;
                  case 4:     exit(0);
            } //fin de switch
      } //fin de for
     
      system("PAUSE");
      return 0; //terminacion exitosa
}// fin de main

/****************************************************************/
/* Inicializar la lista. ****************************************/
/****************************************************************/
void inic_lista(void)
{
      register int t;
     
      for(t = 0; t < MAX; ++t)     lista_dir[t].nombre[0] = '\0';
}
/****************************************************************/

/*************************************************/
/* Seleccionar una operacion. ********************/
/*************************************************/
int menu(void)
{
      char s[80];
      int c;
     
      printf("1. Introducir un nombre\n");
      printf("2. Borrar un nombre\n");
      printf("3. Listar el archivo\n");
      printf("4. Salir\n");
     
      do
      {
            printf("\nIntroduce tu opcion:  ");
            gets(s);
            c = atoi(s);
      }while(c < 0 || c > 4);  //fin de do_while
     
      return c;
} //fin de menu
/***************************************************/

/**************************************/
/* Introducir direcciones en la lista */
/**************************************/

void intro(void)
{
      int sitio;
      char s[80];
     
      sitio = busca_libre();
     
      if(sitio == -1)
      {
            printf("\nLista llena");
            return;
      }
     
      printf("Introduce el nombre: ");
      gets(lista_dir[sitio].nombre);
     
      printf("Introduce la calle: ");
      gets(lista_dir[sitio].calle);
     
      printf("Introduce la ciudad: ");
      gets(lista_dir[sitio].ciudad);
     
      printf("Introduce las siglas de la provincia:  ");
      gets(lista_dir[sitio].provincia);
     
      printf("Introduzca el codigo postal:  ");
      gets(s);
      lista_dir[sitio].codigo = strtoul(s, '\0', 10);
     
} // fin de intro
/*********************************************************/

/************************************/
/* Buscar una estructura no usada ***/
/************************************/

int busca_libre(void)
{
      register int t;
     
      for( t = 0; lista_dir[t].nombre[0] && t < MAX; ++t);
     
      if(t == MAX) return -1; // no hay sitio libre
      return t;
     
} // fin de busca_libre
/*********************************************************/

/*****************************************************/
/* Eliminar una direccion ****************************/
/*****************************************************/

void borrar(void)
{
      register int sitio;
      char s[80];
     
      printf("Introduce el numero de registro:  ");
      gets(s);
      sitio = atoi(s);
     
      if(sitio >= 0 && sitio < MAX)
            lista_dir[sitio].nombre[0] = '\0';
     
} // fin de borrar
/*****************************************************/

/*****************************************************/
/*  Mostrar la lista en la pantalla ******************/
/*****************************************************/

void listar(void)
{
      register int t;
     
      for(t = 0; t < MAX; ++t)
      {
            if(lista_dir[t].nombre[0])
            {
                  printf("%s\n", lista_dir[t].nombre);
                  printf("%s\n", lista_dir[t].calle);
                  printf("%s\n", lista_dir[t].ciudad);
                  printf("%s\n", lista_dir[t].provincia);
                  printf("%lu\n\n", lista_dir[t].codigo);
           
            }//fin de if
      }//fin de for
      printf("\n\n");
}//fin de listar

/******************************************************/

No hay comentarios:

Publicar un comentario