Question: Overview: The first library on Mars is about to be established.. Unfortunately, physical books are too heavy to send to Marsa. The library needs a

Overview: The first library on Mars is about to be established.. Unfortunately, physical books
are too heavy to send to Marsa. The library needs a system for tracking the virtual books and
users so that new Martians can browse, check-in/out, and reserve books (the books will be
delivered electronically). The head of the library has asked you, an esteemed software engineer,
to create such a system.
1. Book class: create a book class that stores all details of a single book, such as the title, genre,
author, availability status, size, and ID number.
1. The class should have getters and setters for each of the attributes
2. Make sure that the ID number is unique for each book.
2. User class: create a user class that stores all details of a persons library account, such as
their name, ID, balance, loyalty tier, the status of their account (like if they have any overdue
items, fees, etc.), and their transaction history.
1. The class should have getters and setters for each of the attributes
2. Make sure that the ID number is unique for each user.
3. Perhaps use the number of years the user has been a member for calculating tier.
4. The number of books a person can borrow should be differentiated by their tier
level.
3. Transaction class: Create a transaction class that stores all the details of a single transaction
made between the library and a specific user. Details include the transaction ID, the date and
time of the transaction, the book(s) involved in the transaction, the type of transaction
(borrow, renew, return), and the user involved with their identifying information.
1. The class should have getters and setters for each of the attributes
2. Make sure the ID is unique for each transaction.
1. Remember, a user can have multiple transactions, but a transaction cannot
have multiple users.
4. Library class: create a library class that allows the staff to do tasks such as adding new
books, removing books, adding a new user, removing a user, and letting both users and
admins search the library for books. The library should also have a name, total number of
books, and total bandwidth used.
1. The class should have getters and setters for each of the attributes
2. Make sure that patrons cannot do admin-only tasks, to avoid accidental
modification of the library.
5. Admin class: create a class that stores all details of a library admin, such as name, ID, years
with the library, salary, add worker, remove worker, and reward worker/user.
1. The class should have getters and setters for each of the attributes
2. Make sure that the ID number is unique for each book.
3. An admin cannot reward themself. Only admins with a different ID from the
former can.
6. Transaction report: create a feature that allows admins and users to run a report of all
transactions they made with the library (during a specified time period), with a grand total of
the number of books read, bandwidth used, etc.
1. Users should only be able to run their own transaction reports (they cannot run a
report on another persons ID and view that persons report).
2. Admins can run reports on themselves (if they are also a library user) and also
other users.
7. Rewards: Create a feature that rewards users and admins based on their library tenure. The
type of reward can range from a free gift card to a free book, extra check-out bandwidth, etc.
1. For users, there should be different rewards for each tier.
2. For admins, there should be different rewards based on years of working with the
library.
3. The user or admin should be notified that they got a reward.
Technical Requirements:
You must use files to save and load data between different sessions (file I/O).
You must use inheritance.
You must use more than two classes.
You must use pointers and dynamic allocation.
You must use comments in your program to explain what each class/section of code
does.
Use polymorphism.
Use text styling (ASCII) to create an aesthetic menu system.
Submission (made to Canvas):
Mid-project report. The mid-project report should include a description of how the
program is (or will be) designed, including the design of the classes and their inheritance
relation. Please describe the process of critical functionality (in the form of pseudo-code
or step-by-step instructions). Please also provide the use cases of your program. You can
refer to zyBooks 11.8 to learn how to use UML to describe your OOP design.
Two-page (or more if necessary) final report explaining how the program was designed
(can be different from the mid-term report), what classes were used and implemented,
and the instructions to operate the program (some use cases).
A link to a video clip (must be no longer than 10 minutes) showing the class design and
implementation (by showing source code), and demonstrating all the required
functionality listed above.
Source code (including .h,.cpp and other necessary project files only) as a single .zip file.
DO NOT include Debug or Release fi
Overview: The first library on Mars is about to

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!