Objectives

you will develop a library management program that maintains the library book list and the library client (i.e., customer) list, as well as the interactions between the two lists. The program allows the librarian to add copies of books, add clients, let a client check out (i.e., borrow) books, and let a client check in (i.e., return) books.

Problem Description

In this programming assignment, you will develop a project that implements an engineering library (or any other library; engineering library is mentioned because all the books I currently include are engineering textbooks). You will implement and test four classes in this assignment. They are the BookType, BookRecord, ClientType, and LibraryType classes. You are to write the four implementation files: BookType.cpp, BookRecord.cpp, ClientType.cpp, and LibraryType.cpp. In the following, we will discuss each class in more detail.

The BookType Class

Each object of the BookType class contains the related information of a book. The BookType.h file is given to you. Carefully read the class definition in BookType.h. The BookType class has five protected data members. They are: a string ISBN13 to store the 13-digit ISBN of a book; a string primaryAuthor to store the primary authors last name; a string title to store the book title; a string publisher to store the publishers name; and an integer key to indicate the key member used for searching and sorting.

You are to implement and test the following operations for the BookType class. Detailed description and precondition/postcondition for all the BookTypes member functions are specified in the given header file.

  • A constructor.
  • Five set functions: setISBN13, setPrimaryAuthor, setTitle, setPublisher, setKey.
  • A setBookInfo function.
  • Five get functions: getISBN13, getPrimaryAuthor, getTitle, getPublisher, getKey.
  • The six comparison operators.
  • The operator << (as a friend function).

The BookType class objects are used to represent books borrowed by a client (this will be discussed in the ClientType class).

The BookRecord Class

The BookRecord class is a subclass inherited from the BookType class. The BookRecord.h file is given to you. Carefully read the class definition in BookRecord.h. In addition to the protected data members of the BookType class, the BookRecord class has two additional protected data members: an integer copiesTotal to store the total number of copies of a book in the library (note that a library book may have multiple copies); an integer copiesAvailable to store the available (i.e., unchecked-out) number of copies of a book in the library.

You are to implement and test the following operations for the BookRecord class. Detailed description and precondition/postcondition for all the BookRecords member functions are specified in the given header file.

  • A constructor.
  • Two set functions: setCopiesTotal, setCopiesAvailable.
  • A setBookRecord function.
  • Two get functions: getCopiesTotal, getCopiesAvailable.
  • The operator << (as a friend function).

The BookRecord class objects are used to represent books possessed by the library (this will be discussed in the LibraryType class).

The ClientType Class

Each object of the ClientType class contains the related information of a library client. The ClientType.h file is given to you. Carefully read the class definition in ClientType.h. The ClientType class has five protected data members. They are: a string ID7 to store the 7-digit ID number of a client; a string lastName to store the clients last name; a string firstName to store the clients first name; an integer key to indicate the key member used for searching and sorting clients; a sorted linked list bookList of BookType objects to store the books borrowed by the client.

You are to implement and test the following operations for the ClientType class. Detailed description and precondition/postcondition for all the ClientTypes member functions are specified in the given header file.

  • A constructor.
  • Five set functions: setID7, setLastName, setFirstName, setKey, setBookList.
  • A setClientInfo function.
  • Five get functions: getID7, getLastName, getFirstName, getKey, getBookList.
  • A borrowBook function.
  • A returnBook function.
  • The six comparison operators.
  • The assignment operator=.
  • The operator << (as a friend function).

The ClientType class objects are used to represent clients of the library (this will be discussed in the LibraryType class).

The LibraryType Class

Each object of the LibraryType class contains the related information of a library. The LibraryType.h file is given to you. Carefully read the class definition in LibraryType.h. The LibraryType class has two protected data members: a sorted linked list bookRecordList of BookRecord objects to store the books possessed by the library; a sorted linked list clientList of ClientType objects to store the clients of the library.

You are to implement and test the following operations for the LibraryType class. Detailed description and precondition/postcondition for all the LibraryTypes member functions are specified in the given header file.

  • A default constructor.
  • A parameterized constructor.
  • Two set functions: setBookRecordList, setClientList.
  • Two get functions: getBookRecordList, getClientList.
  • An addBook function.
  • An addClient function.
  • A getBookRecord function.
  • A getClient function.
  • A borrowBook function.
  • A returnBook function.

The LibraryType class is used to generate an engLib object which represents the School of Engineering Library.

Additional Requirements and Hints

The Header Files

Besides the aforementioned four header files, you are also to use the following header files in this project: NodeType.h, LinkedListIterator.h, LinkedListType.h, SortedLinkedList.h. You have been supplied all eight header files

Note that the LinkedListType.h is slightly different from the LinkedListType.h we discussed in lectures. Here we have made the destructor a virtual function, and also added a template version of operator<<. For SortedLinkedList.h, here we have added a default and a copy constructors and a destructor.

Preconditions

For this assignment, you only need to check the precondition for the setBookRecord function of the BookRecord class. For all other functions, you may simply assume that the preconditions are satisfied.

Existing Book and Client Information

The existing books and clients are given in the files books.txt and clients.txt. They are loaded to initialize the two protected members of engLib at the beginning of the EngLibTest.cpp file.

Implement and Test Small Pieces

Don't tackle to whole project at once. Start by implementing what you can, using one or several member functions together with a simple test driver client program to test the functionality of the functions.

Test the Completed Programs

After you have tested your programs using your own test driver code, you may test your programs using the given testing program EngLibTest.cpp (available on Blackboard).

Make sure you name the .cpp files as BookType.cpp, BookRecord.cpp, ClientType.cpp, and LibraryType.cpp. Then zip these four files (if you have modified any other files, include them too)

Academic Honesty!
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference and should not be submitted as is. We are not held liable for any misuse of the solutions. Please see the frequently asked questions page for further questions and inquiries.
Kindly complete the form. Please provide a valid email address and we will get back to you within 24 hours. Payment is through PayPal, Buy me a Coffee or Cryptocurrency. We are a nonprofit organization however we need funds to keep this organization operating and to be able to complete our research and development projects.