[SOLVED] CS161-Week 10

30.00 $

Category:
Click Category Button to View Your Next Assignment | Homework

You will receive the following solution file(s) instantly after successful payment:

zip file icon week10-sstpvw.zip (95.7 KB)
Assignment Instructions Updated Recently? Submit Below and we will provide new Solution!
Submit New Instructions
🔒 Securely Powered by:
Secure Checkout
Rate this product

You will be writing a Library simulator. It will have three classes: Book, Patron and Library.  To make things a little simpler for you, I am supplying you with the three .hpp files. You will write the three implementation files.  You should not alter the provided .hpp files.

 

A couple of notes:

  • The vector::erase() function lets you delete an element of a vector, shifting over all the elements after it.
  • You’ll see in Book.hpp a line that says “class Patron;”. That is a forward declaration. It doesn’t say anything about the definition of the Paton class, but it promises the compiler that there will be a type named Patron.  The reason we don’t just say “#include Patron.hpp” is that both Book and Patron need to know about each other, but they can’t both #include the other because that would create a cyclic dependency.

 

Here are the .hpp files: Book.hpp,Patron.hpp​ and ​Library.hpp

 

Here are descriptions of the three classes:

Book:

  • idCode – a unique identifier for a Book (think library bar code, not ISBN)
  • title – cannot be assumed to be unique
  • author – the idCode, title and author don’t need set methods, since they will never change after the object has been created, therefore these fields can be initialized directly within the constructor
  • location – a Book can be either on the shelf, on the hold shelf, or checked out
  • checkedOutBy – pointer to the Patron who has it checked out (if any)
  • requestedBy – pointer to the Patron who has requested it (if any); a Book can only be requested by one Patron at a time
  • dateCheckedOut – when a book is checked out, this will be set to the currentDate of the Library
  • CHECK_OUT_LENGTH – constant that gives how long a Book can be checked out for
  • constructor – takes an idCode, title and author; checkedOutBy and requestedBy should be initialized to NULL; a new Book should be on the shelf
  • some get and set methods

 

Patron:

  • idNum – a unique identifier for a Patron
  • name – cannot be assumed to be unique
  • checkedOutBooks – a vector of pointers to Books that Patron currently has checkedOut
  • fineAmount – how much the Patron owes the Library in late fines (measured in dollars); this is allowed to go negative
  • a constructor that takes an idNum and name and initializes fineAmount to zero
  • some get and set methods
  • addBook – adds the specified Book to checkedOutBooks
  • removeBook – removes the specified Book from checkedOutBooks
  • amendFine – a positive argument increases the fineAmount, a negative one decreases it

 

Library:

  • holdings – a vector of pointers to Books in the Library
  • members – a vector of pointers to Patrons in the Library
  • currentDate – stores the current date represented as an integer number of “days” since the Library object was created
  • a constructor that initializes the currentDate to zero
  • addBook – adds the parameter to holdings
  • addPatron – adds the parameter to members
  • getBook – returns a pointer to the Book corresponding to the ID parameter, or NULL if no such Book is in the holdings
  • getPatron – returns a pointer to the Patron corresponding to the ID parameter, or NULL if no such Patron is a member
  • checkOutBook
    • if the specified Book is not in the Library, return “book not found”

○       if the specified Patron is not in the Library, return “patron not found”

○   if the specified Book is already checked out, return “book already checked out”

○   if the specified Book is on hold by another Patron, return “book on hold by other patron”

○   otherwise update the Book’s checkedOutBy, dateCheckedOut and Location; if the Book was on hold for this Patron, update requestedBy; update the Patron’s checkedOutBooks; return “check out successful”

  • returnBook
    • if the specified Book is not in the Library, return “book not found”

○   if the Book is not checked out, return “book already in library”

○   update the Patron’s checkedOutBooks; update the Book’s location depending on whether another Patron has requested it; update the

Book’s checkedOutBy; return “return successful”

  • requestBook
    • if the specified Book is not in the Library, return “book not found”

○       if the specified Patron is not in the Library, return “patron not found”

○   if the specified Book is already requested, return “book already on hold”

○   update the Book’s requestedBy; if the Book is on the shelf, update its location to on hold; return “request successful”

  • payFine
    • takes as a parameter the amount that is being paid (not the negative of that amount)

○       if the specified Patron is not in the Library, return “patron not found”

○        use amendFine to update the Patron’s fine; return “payment successful”

  • incrementCurrentDate
    • increment current date; increase each Patron’s fines by 10 cents for each overdue Book they have checked out (using amendFine)

○   If a book is checked out on day 0, then on day 1, the patron has had it for 1 day.  On day 21, the patron has had it for 21 days, so it is still not overdue.  On day 22, the book is overdue and fines will be charged.

  • be careful – a Book can be on request without its location being the hold shelf (if another Patron has it checked out);

 

One limited​ example of how your classes might be used is:​

Book b1(“123”, “War and Peace”, “Tolstoy”);

Book b2(“234”, “Moby Dick”, “Melville”);

Book b3(“345”, “Phantom Tollbooth”, “Juster”);

Patron p1(“abc”, “Felicity”);

Patron p2(“bcd”, “Waldo”);

Library lib;  lib.addBook(&b1);  lib.addBook(&b2);  lib.addBook(&b3);  lib.addPatron(&p1);  lib.addPatron(&p2);  lib.checkOutBook(“bcd”, “234”);  for (int i=0; i<7; i++)  lib.incrementCurrentDate();  lib.checkOutBook(“bcd”, “123”);  lib.checkOutBook(“abc”, “345”);  for (int i=0; i<24; i++)  lib.incrementCurrentDate();  lib.payFine(“bcd”, 0.4);      double p1Fine = p1.getFineAmount();      double p2Fine = p2.getFineAmount();

This example obviously doesn’t include all of the functions described above.  You are responsible for testing all​ ​ of the required functions to make sure they operate as specified.

 

 

  • week10-sstpvw.zip