A simple mailing list example using an array of structures. - C Structure

C examples for Structure:Structure Definition

Description

A simple mailing list example using an array of structures.

Demo Code

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

#define MAX 100// w  ww. ja v a  2s  . c om

struct addr {
   char name[30];
   char street[40];
   char city[20];
   char state[3];
   unsigned long int zip;
} addr_list[MAX];

void init_list(void), enter(void);
void deletef(void), list(void);
int menu_select(void), find_free(void);

int main(void)
{
   char choice;

   init_list(); /* initialize the structure array */
   for (;;) {
      choice = menu_select();
      switch (choice) {
      case 1: enter();
         break;
      case 2: deletef();
         break;
      case 3: list();
         break;
      case 4: exit(0);
      }
   }

   return 0;
}

/* Initialize the list. */
void init_list(void)
{
   register int t;

   for (t = 0; t<MAX; ++t) addr_list[t].name[0] = '\0';
}

/* Get a menu selection. */
int menu_select(void)
{
   char s[80];
   int c;

   printf("1. Enter a name\n");
   printf("2. Delete a name\n");
   printf("3. List the file\n");
   printf("4. Quit\n");
   do {
      printf("\nEnter your choice: ");
      gets_s(s);
      c = atoi(s);
   } while (c<0 || c>4);
   return c;

}

/* Input addresses into the list. */
void enter(void)
{
   int slot;
   char s[80];

   slot = find_free();

   if (slot == -1) {
      printf("\nList Full");
      return;
   }

   printf("Enter name: ");
   gets_s(addr_list[slot].name);

   printf("Enter street: ");
   gets_s(addr_list[slot].street);

   printf("Enter city: ");
   gets_s(addr_list[slot].city);

   printf("Enter state: ");
   gets_s(addr_list[slot].state);

   printf("Enter zip: ");
   gets_s(s);
   addr_list[slot].zip = strtoul(s, '\0', 10);
}

/* Find an unused structure. */
int find_free(void)
{
   register int t;

   for (t = 0; addr_list[t].name[0] && t<MAX; ++t);

   if (t == MAX) return -1; /* no slots free */
   return t;
}

/* Delete an address. */
void deletef(void)
{
   register int slot;
   char s[80];

   printf("enter record #: ");
   gets_s(s);
   slot = atoi(s);

   if (slot >= 0 && slot < MAX)
      addr_list[slot].name
      [0] = '\0';
}

/* Display the list on the screen. */
void list(void)
{
   register int t;

   for (t = 0; t<MAX; ++t) {
      if (addr_list[t].name[0]) {
         printf("%s\n", addr_list[t].name);
         printf("%s\n", addr_list[t].street);
         printf("%s\n", addr_list[t].city);
         printf("%s\n", addr_list[t].state);
         printf("%lu\n\n", addr_list[t].zip);
      }
   }
   printf("\n\n");
}

Result


Related Tutorials