Overview

This project is considered "CLOSED". Please visit the course web page for information regarding the open/closed policy for projects of this course.

For this project you will implement a simplified version of a system that allows people to rent movies and music albums (similar to Netflix) and receive them via mail. For this project you will define all the classes needed (yes it is your design :)).

Objectives

To practice class design, inheritance, ArrayList, and javadoc.

Grading

Clarifications

Any clarifications or corrections associated with this project will be available at Clarifications

Code Distribution

The project's code distribution is available by checking out the project named MediaRentalManager. The code distribution provides you with the following:

Specifications

What You Must Implement

You must define a class named MediaRentalManager (we did not provide it) that implements the MediaRentalManagerInt interface functionality. You must define classes that support the functionality specified by the interface. The following specifications are associated with the project:

  1. You should study the public tests and the output (files with .txt extension) to familiarize yourself with the expected system functionality.

  2. Define a class named MediaRentalManager. Feel free to add any instance variables you understand are needed or any private methods. Do not add any public methods (beyond the ones specified in the MediaRentalManagerInt interface).

  3. The media rental system keeps track of customers, and media (movies and music albums). A customer has a name, address, a plan and two lists (queues). One queue represent the media the customer is interested in receiving, and the second one represents the media already received (rented) by the customer. There are two plans a customer can have: UNLIMITED and LIMITED. UNLIMITED allows a customer to receive as many media as they want. LIMITED restricts the media to a default value of 2 (this value can be change via a manager method).

    A movie has a title, a number of copies available and a rating (e.g., "PG"). An album has a title, number of copies available, an artist and the songs that are part of the album.

  4. You must define at least four classes (not including MediaRentalManager)as part of your design. At least two of those classes must be in a superclass/subclass relationship (Inheritance Requirement). The other two can be defined as you wish. Feel free to define as many classes as you want.

  5. One of your classes must define an equals method.

  6. The database for your system needs to be represented using two ArrayList objects. One ArrayList will represent the customers present in the database; the second will represent the media (movies and albums). This is the ArrayList Requirement provided in the Grading section.

  7. You must define javadoc for the classes you implement. You do not need to provide javadoc comments for the MediaRentalManager class.

  8. Regarding the searchMedia method: The songs parameter represents a substring (fragment) or the full list of songs associated with the album. If the full list is provided, you can assume commas will be part of the string. Hint: you may want to consider using the indexOf method of the String class.

  9. Feel free to use Collections.sort to sort your data.

  10. Although you are not require to write student tests, you are encourage to do so.

  11. Not all the details associated with the project can be fully specified in this description. The sooner you start working on the project, the sooner you will be able to address any doubts you may have.

Requirements

Additional Requirements for Students in Honors Section

Modify the searchMedia method, so media files are matched when any case or any space between words is associated with the provided string (songs parameter).