-1

this my Library.h file, before the Library used to do All the dirty work: in term of manipulating the arrays and stuff, but now I am trying to make the Library the middle man that just invoke the call that has to do with any array manipulations. My problem is I am trying to have one instance of Patron array, that would hold all the patrons in the Library.

#ifndef LIBRARY_H
#define LIBRARY_H

#include <string>
#include "types.h"
#include "Book.h"
#include "Patron.h"
#include "PatronArray.h"

//class PatronArray
class Library
{
  public:
    Library();
    ~Library();
    void    init();
    int     addBook(Book*);
    int     addPatron(Patron*);
    int     remPatron(int);
    int     findBook(int, Book**, int*);
    int     findPatron(string, string, Patron**, int*);
    int     getMaxCollIndex();
    int     getMaxPatronsIndex();
    Book*   getBook(int);
    Patron* getPatron(int);
  private:
    Book*   collection[MAX_COLL_SIZE];
    PatronArray* patrons;
    int     maxCollIndex;
    int     maxPatronsIndex;
};

#endif

This is my Library.cc file

#include "Library.h"

Library::Library()
  : maxCollIndex(0)
{ 
  patrons = new PatronArray;
  for (int i=0; i<MAX_COLL_SIZE; ++i) {
    collection[i] = 0;
  }
}

Library::~Library()
{
  delete patrons;
  for (int i=0; i<maxCollIndex; ++i)
    delete collection[i];

}

int Library::getMaxCollIndex()    { return maxCollIndex; }
int Library::getMaxPatronsIndex() 
{ 
  return patrons->getMaxPatronsIndex(); 

}

Book* Library::getBook(int index) 
{ 
  if (index < 0 || index >= maxCollIndex)
    return 0;
  return collection[index]; 
}

Patron* Library::getPatron(int index) 
{ 
  return patrons->getPatron(index); 
}

void Library::init()
{
  Book*   newBook;
  Patron* newPatron;

  newBook = new Book("Ender's Game", "Orson Scott Card", 1985);
  addBook(newBook);

  newBook = new Book("Dune", "Frank Herbert", 1965);
  newBook->setStatus(LOST);
  addBook(newBook);

  newBook = new Book("Foundation", "Isaac Asimov", 1951);
  addBook(newBook);

  newBook = new Book("Hitch Hiker's Guide to the Galaxy", "Douglas Adams", 1979);
  addBook(newBook);

  newPatron = new Patron("Jack", "Shephard");
  addPatron(newPatron);

}

int Library::addBook(Book* book)
{
  if (maxCollIndex >= MAX_COLL_SIZE - 1) {
    return C_NOK;
  }

  collection[maxCollIndex++] = book;

  return C_OK;
}

int Library::addPatron(Patron* patron)
{
// the lbrary is the middle ma that invokesthe calls
//return patronArray->addPatron(patron);
  return patrons->addPatron(patron);
}

int Library::remPatron(int index)
{
  return patrons->remPatron(index);
}

int Library::findPatron(string fn, string ln, Patron** patron, int* index)
{
  return patrons->findPatron(fn,ln,patron,index);
}

int Library::findBook(int id, Book** book, int* index)
{
  for (int i=0; i<maxCollIndex; ++i) {
    if (collection[i] == 0)
      continue;
    if (collection[i]->getId() == id) {
      *book  = collection[i];
      *index = i;
      return C_OK;
    }
  }
  *book  =  0;
  *index = -1;
  return C_NOK;
}

This is my PatronArray.h that holds all the Patrons registered within the Library.

#ifndef PATRONARRAY_H
#define PATRONARRAY_H
#include "Patron.h"
#include "Book.h"
#include "types.h"

//class Patron;

class PatronArray
{
 public:
    PatronArray();
    ~PatronArray();
    int     addPatron(Patron*);
    int     remPatron(int);
    int     findPatron(string, string, Patron**, int*);
    int     getMaxPatronsIndex();
    Patron* getPatron(int);
  private:
    Patron* patrons[MAX_COLL_SIZE];
    int     maxPatronsIndex;
};

#endif

and this is the PatronArray.cc file and please, I know there is better way of doing this by doing templating which I currently dont understand yet plus this way helps me understand the whole object oriented style.

#include<iostream>
#include<string>
#include "PatronArray.h"

/*
 *  Default constructor: recheck this later
 */ 
PatronArray::PatronArray()
  :maxPatronsIndex(0)
{
    for (int i = 0; i < MAX_COLL_SIZE; ++i) {
    patrons[i] = 0; 
    }

}

/*
 * Destructor: recheck this later
 */
PatronArray::~PatronArray()
{
    for (int i = 0; i < maxPatronsIndex; ++i)
      delete patrons[i];
}

//get the maxindex
int PatronArray::getMaxPatronsIndex() { return maxPatronsIndex; } 


/*
 *  Adds the given Patron to the given patrons Array
 */ 
int PatronArray::addPatron(Patron* patron)
{
    if (maxPatronsIndex >= MAX_COLL_SIZE - 1) {
        return C_NOK;
    }
    patrons[maxPatronsIndex++] = patron;
    return C_OK;    
}

/*
 *  Used for removing a patron in the patrons array
 */
int PatronArray::remPatron(int index)
{
    if (index < 0 || index >= maxPatronsIndex)
      return C_NOK;

    delete patrons[index];
    patrons[index] = 0;
    return C_OK;
}

/*
 * Searches for the patron; if found, sets the contents of the second
 * parameter to that patron pointer, sets the contents of the third parameter to
 * its index in the collection, and returns C_OK; if not found, sets the
 * contents of the second parameter to zero, the theird to -1, and returns C_NOK
 */
int PatronArray::findPatron( string fn, string ln, Patron** patron, int* index)
{ 
    for (int i = 0; i < maxPatronsIndex; ++i) {
        if (patrons[i] == 0)
          continue;
        if (patrons[i]->getFname() == fn && patrons[i]->getLname() == ln) {
            *patron = patrons[i];
            *index = i;
            return C_OK;
        }
    }
    *patron = 0;
    *index  = -1;
    return C_NOK;

}

Patron* PatronArray::getPatron(int index) 
{ 
  if (index < 0 || index >= maxPatronsIndex)
    return 0;
  return patrons[index]; 
}
mvitagames
  • 413
  • 3
  • 6
  • 16

1 Answers1

0

I forgot to link my PatronArray.cc to Library.cc in my makefile, thank you Jack!

mvitagames
  • 413
  • 3
  • 6
  • 16