An example using string and vector classes


///////////////////////////////////////////////
// Library holdings                          //
// Roger Hartley, Fall 1996                  //
// (modified for vectors, Spring 1997        //
///////////////////////////////////////////////

#include <string>
#include <vector>
#include <iostream.h>

// a book consists of a title and author
class Book {
private:
  string title;
  string author;
public:
  Book() { title = author = ""; }
  Book(string t, string a) { title = t; author = a; }
  bool operator==(Book b) { return title == b.title && author == b.author; }
  string getTitle() { return title; }
  string getAuthor() { return author; }
};

// a library is a number of books, stored in a vector
class Library {
private:
  vector<Book> collection;
  int number;
public:
  Library() : collection(100) { number = 0; }
  void Add(Book b);
  void Delete(Book b);
  void PrintHoldings();
};

// collection is the application class, it contains
// a library
class Collection {
private:
  Library lib;
public:
  void run();
};

// adding a book to the collection increases the number held by one
void Library::Add(Book b) {
  collection[number++] = b;
}

// deleting a book is a search through the vector
// if the book is found, it is deleted and the number held
// decreased by one
void Library::Delete(Book b) {
  for (int n = 0; n < number; n++)
    if (collection[n] == b) {
      for (int nn = n + 1; nn < number; nn++)
	collection[nn - 1] = collection[nn];
      cout << b.getTitle() << " by " << b.getAuthor() << " deleted" << endl;
      --number;
      return;
    }
  cout << b.getTitle() << " not found" << endl;
}

// printing the library is a single pass through
// the elements of the vector
void Library::PrintHoldings() {
  cout << endl << "There are " << number << " books" << endl;
  for (int n = 0; n < number; n++)
    cout << collection[n].getTitle() << " by " <<
            collection[n].getAuthor() << endl;
}

// books are added to the library from title and author
// typed in by the user
void Collection::run() {
  Library lib;
  string title, author;
  cout << "Type title and author, separated by a space: ";
  cin >> title >> author;
  while (!cin.eof()) {
    lib.Add(Book(title, author));
    cout << "Type title and author, separated by a space: ";
    cin >> title >> author;
  }
  lib.PrintHoldings();  // print the library holdings
  lib.Delete(Book("Relativity", "Einstein"));  // delete if present
  lib.Delete(Book("MyLife", "Hartley"));      // delete if present
  lib.PrintHoldings();  // print holdings again to verify deletions
}

// the main function just calls the run function of the application
int main() {
  Collection c;
  c.run();
}