/*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
/******************************************************/