December 1998
OP216: OBJECT ORIENTED PROGRAMMING

QUESTION 4

Total Marks: 20 Marks

Click here to access other questions

SUGGESTED SOLUTIONS
Solutions and allocated marks are indicated in green.
Return to Question 4

 

(a) You are to design a C++ program for creating and manipulating entries in a telephone book. Consider the following class definition for a Person entry in a telephone book.

class Person {
public:
  char *name;   // the last name of the person in
                   the book
  int number;   // the telephone number of the
                   person

  Person()  {number = 0; name = 0;}  // Constructor
  Person(char *s, int n) {          // Constructor
  number = n;
  name = s;
  }

void display() {   // Display a person
  cout << name << " has number " << number << endl;
  }
};

 

(a) The telephone book is an array of 10,000 Person entries and also an integer that records the number of entries in the telephone book.

Give the definition of a class Telephone_book that contains: (1) the private data items listed above and (2) a default constructor that initialises the number of entries to 0.

[3]
class Telephone_book {
private:
   Person book[10000]; [1]
   int n; [1]
public:
   Telephone_book() { n = 0; }
};

 

[1]
(b) Give the implementation of a methof display that displays the details of every person in the telephone book. [3]
void display() {
  for (int i = 0; i < n; i++) [2]
    book[i].display(); [1]
};

(1 mark) for using a loop and (1 mark) for correct loop guard; (1 mark) for correctly displaying each entry.

 

(c) Give the implementation of a method add_person that reads a last name and a telephone number from the user, creates a new person, and adds the person to the end of the array if there is a space. [8]
void add_person() {
   char *name = new char[50]; [1]
   int m; [1]
   cout << "Enter name: ";
   cin >> name; [1]
   cout << "Enter number: ";
   cin >> m; [1]
   if (entries < 10000) { [1]
      Person e = Person(name, n); [1]
      book[entries++] = e; [2]
   }
};

(1 mark) for each correct local variable declaration; (1 mark) for each correct input statement; (1 mark) for testing that there is space; (1 mark) for constructing the new Person; (1 mark) for assigning to book; (1 mark) for updating the number of entries.

 

(d) Give the implementation of a method find that takes a telephone number and displays the person with the corresponding telephone number. If the telephone number does not exist in the telephone book, give an appropriate error message [6]
void find(int m) {
  for (int i=0; i < entries; i++) [2]
    if (book[i].number == m) { [1]
      book[i].display(); [1]
      return; [1]
    }
  }
  cout << "Error: no such number" << endl; [1]
};

(2 marks) for correct use of a loop with increment and test; (1 mark) for checking numbers against m; (1 mark) for displaying the entry of the book; (1 mark) for terminating loop; (1 mark) for appropriate error message.