CMSC132 Summer 2018

Project: Media Rental Manager

Due Date: Jun 8, 2018 11:59 pm

Overview

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 :)).

You must implement this project by yourself. DO NOT POST ANY INFORMATION in Piazza regarding the classes/interfaces you are planning to use in your design. If you post any information you will be violating academic integrity rules.

Objectives

To practice design, inheritance, ArrayList and javadoc.

Grading

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 and use 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. These clases must support the functionality of the system otherwise you will not receive any credit.
  5. One of your classes must define an equals method that has as parameter an Object parameter.
  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. Notice you do not need to run the javadoc utility.
  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