Using a structure representing a person's name : Struct Define « Structure « C / ANSI-C






Using a structure representing a person's name

/*
Beginning C, Third Edition
 By Ivor Horton
 ISBN: 1-59059-253-0
 Published: Apr 2004
 Publisher: apress

*/


#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define FIRST_NAME_LEN  31
#define SECOND_NAME_LEN 51
#define NUMBER_LEN      16
#define MAX_NUMBERS     50
#define TRUE             1
#define FALSE            0

/* Structure defining a name */
struct Name
{
  char firstname[FIRST_NAME_LEN];
  char secondname[SECOND_NAME_LEN];
};

/* Structure defining a phone record */
struct PhoneRecord
{
  struct Name name;
  char number[NUMBER_LEN];
};

struct Name read_name();               /* Read a name from the keyboard */               
void show(struct PhoneRecord record);  /* Output a phone record         */
int has_name(struct PhoneRecord record, struct Name name); /* Test for a name */

void main()
{
  char answer = 'n';
  struct PhoneRecord records[MAX_NUMBERS];  /* Array of phone records  */
  struct Name aName;                        /* Stores a name           */
  int count = 0;                            /* Number of phone records */
  int found = FALSE;                        /* Records when a name has been found */
  int i = 0;                                /* Loop control variable   */
 
  /* Read an arbitrary number of phone records from the keyboard */  
  do
  {
    records[count].name = read_name();                 /* Read the name */      
    printf("Enter the number for this name: ");
    scanf(" %[ 0123456789]",records[count++].number);  /* Read the number - including spaces */

    printf("Do you want to enter another(y or n)?: ");
    scanf(" %c", &answer);
  }while(count<=MAX_NUMBERS && tolower(answer) == 'y');

  /* Search the array of phone records for a number */
  do
  {
    printf("Enter a name for which you want the number.");
    aName =read_name();
    for(i = 0 ; i<count ; i++)
    {
      if(has_name(records[i], aName))                 /* Test for the name */
      {
        if(!found)                                    /* If this is the first time */
        {
          found = TRUE;                               /* Reset found flag       */
          printf("The numbers for this name are:\n"); /* and output the heading */
        }
        printf("%s\n", records[i].number);            /* Output the number for the name */
      }
    }
    if(found)                                         /* If the name was found */
      found = FALSE;                                  /* Reset the found flag  */
    else                                              /* Otherwise output message */
      printf("No numbers found for this name.\n");
    printf("Do you want to search for another (y or n)? ");
    scanf(" %c" , &answer);
  }while(tolower(answer) == 'y');

  for(i = 0 ; i<count ; i++)
    show(records[i]);
  printf("\n");

}

/* Function to read a name and store it in a Name structure */
struct Name read_name()
{
  struct Name name;
    printf("Enter a first name: ");
    scanf(" %s", &name.firstname);
    printf("Enter a second name: ");
    scanf(" %s", &name.secondname);
  return name;
}

/* Function to output a record */
void show(struct PhoneRecord record)
{
  printf("\n%s %s   %s", record.name.firstname,record.name.secondname, record.number);
}

/* Function to test whether the name is the same as in a record */
int has_name(struct PhoneRecord record, struct Name name)
{
  return (strcmp(name.firstname, record.name.firstname)==0 && strcmp(name.secondname, record.name.secondname)==0);
}

 

           
       








Related examples in the same category

1.Using a structure representing a length
2.Using a structure to record the count of occurrences of a word
3.How to use struct
4.Exercising the horse: Structure declaration
5.Pointing out the horses: allocate memory for struct
6.Define a simplest struct
7.Define and use a struct