2026-04-24 15:59:27 +03:30
2026-04-24 15:43:05 +03:30
2026-04-24 15:43:05 +03:30

Third Assignment: Movie Explorer 🎬 + Rational Calculator 🧮


Welcome to Your Third Assignment in the Advanced Programming Course!

This assignment consists of two separate parts. You must complete both parts.


Part 1: Rational Class (Rational Numbers)

In this part, you will implement a Rational class that supports basic mathematical operations.

A RationalTest class is provided. +You can run it to verify that your implementation works correctly. +Use it to test your logic before submitting.

Tasks: Define fields for numerator and denominator

Implement addition, subtraction, multiplication, and division as instance methods

Implement addition, subtraction, multiplication, and division as static methods

Note: Detailed TODO comments are provided inside Rational.java. Do NOT modify the constructor, simplify logic, or completed methods. Only complete the TODO methods.


Part 2: Movie Explorer 🎬 (Using API)

In this part, you will develop a Java application that fetches movie data from an API and allows users to browse and search movies.

Files Provided

  • Movie.java
  • Genre.java
  • MovieService.java
  • Main.java

The Genre class is already implemented as a sample. You must design and implement the Movie class yourself (fields, constructors, getters, setters, toString if needed).

We have already implemented two methods that call the API and return the raw JSON response as a String:

  • getGenresList() → calls the API and returns the list of genres in JSON format.
  • getMoviesByGenreList(Long genreId, Long page) → calls the API and returns the list of movies for a specific genre and page in JSON format.

Do NOT modify: API URLs getGenresList() getMoviesByGenreList()

Only complete the TODO methods.

Your Tasks

  1. Complete the Genre class (fields, constructor, getters, and setters).

  2. Complete the Movie class (fields, constructor, getters, and setters).

  3. Write a method that receives the JSON string returned by getGenresList() and converts it into a List<Genre>.

  4. Write another method that prints the list of genres in a clean and readable format for the user.

  5. Write a method that receives the JSON string returned by getMoviesByGenreList() and converts it into a List<Movie>.

  6. Write another method that displays the list of movies in a clean and readable format.

  7. Implement a console menu in Main that allows the user to:

    • View the list of genres
    • Select a genre
    • View movies for the selected genre (with pagination) After completing MovieService, you must also complete the Main class so the menu works correctly.

Note

To understand what fields should exist in the Genre and Movie classes, it is recommended that you first call the two API methods once and inspect the raw JSON response. This will help you determine the exact structure of the data and define the appropriate class fields. We implemented JSON parsing using Gson in the project. However, the Jackson dependency is also included. If you prefer, you are allowed to use Jackson instead of Gson.


Objectives ✏️

By completing this assignment, you will:

Reinforce OOP concepts: class design, constructors, encapsulation, collections

Practice instance methods vs. static methods

Work with JSON parsing and REST APIs

Design a simple console-based menu

Improve Git workflow and project management


Prerequisites

Git

Java (version 23 or 25)

Maven as a package manager


Tasks Summary 📝

Fork the repository and clone it locally

Create and switch to a development branch

Complete Part 1 (Rational.java) following the TODO comments

Complete Part 2 (Movie.java, Genre.java, MovieService.java, Main.java) following the TODO comments

Ensure the code compiles and runs correctly

Commit and push regularly

Submit a pull request from development to main


Evaluation Criteria ⚖️

Functionality: Code compiles and runs without errors; all features work correctly

Code Quality: Clean, readable, well-structured code with proper naming

Understanding: You must be able to explain your implementation


Bonus Tasks ✒️

Parse the JSON returned by getMovieInfo into a MovieInfo entity and display structured movie details based on user-provided movie ID.

Advanced search (title, genre, year, rating, etc.)

Sorting options for movies

Save/load favorite movies to/from a file

Improved console menu design

GUI version using JavaFX


References 📚

API Base: https://api.meshcomp.ir/api/v1/genres

Video Tutorials (compressed versions): https://drive.meshcomp.ir/d/a29a5f6ea6484834bcf0/

Gson Tutorial: (Gson) Reading and Parsing Data from a JSONObject
https://drive.meshcomp.ir/f/e8dea01f31b24cbca152/

Jackson Tutorial: (Jackson) Parsing Json in Java Tutorial - Part 1 Jackson and Simple Objects
https://drive.meshcomp.ir/f/005d8f8fc19a44f4927b/


Submission

Deadline: May 1st (11 Ordibehesht)

S
Description
No description provided
Readme
149 KiB
Languages
Java 100%