IMDb--

Programming III: Final Project (2025-0)

A CLI application for searching movies, reading synopses, browsing genres, and managing personal watch lists.

PRs welcome badge Linux support badge macOS support badge Windows support badge
Lead marco badge Maintainer stiffis badge Maintainer abel badge
IMDb-- logo

Introduction

Goal

The goal of IMDb-- is to build a movie-focused platform centered on searching and viewing movie synopses. Beyond the technical challenge, the project was also used as a workflow exercise, simulating a more realistic development environment with fixed meetings, progress sharing, weekly planning, and feedback sessions.

Motivation

The team was motivated by the complexity of the problem. The project required data structures, algorithms, parallel programming, and teamwork, which helped improve both technical depth and communication skills.

Scope

IMDb-- supports searches by prefix or keyword, displays synopses and genres, and lets users keep a liked movies list and a watch later list.

Requirements

Software Requirements

  • C++ compiler
    • g++ (GCC) version 11.2.0 or later is recommended.
    • clang++ version 13.0.0 or later also works.
  • Operating systems
    • Linux (Ubuntu, Fedora, Arch, etc.)
    • macOS
    • Windows

Hardware Requirements

No special hardware is required. The program is not especially demanding in terms of resources.

Installation

If a C++ compiler is not installed yet, it can be installed with:

sudo apt-get install g++

Clone the repository and move into the project directory:

git clone <url>
cd imdb--/

Compile the project with:

g++ -o main main.cpp

Run it with:

./main

User Guide

When the program starts, the main menu includes the following options:

You have no movies in Likes.
You have no movies in Watch Later.

=== Main Menu ===
1. View Watch Later movies
2. View liked movies
3. Search movies
4. View search history
5. Save state
6. Restore state
7. Recommended movies
0. Exit
--------------------------
| Select an option:      |
--------------------------

Main actions

View Watch Later movies

Shows the movies saved in the Watch Later list. If the list is empty, the program displays a message.

You have no movies in Watch Later.

View liked movies

Shows the movies saved in the Likes list. If the list is empty, the program displays a message.

You have no movies in Likes.

Search movies

The user can search by full title or partial keyword:

-----------------------------------
| Enter a search term:           |
-----------------------------------
Wolverine

If there are no matches, the program reports it:

No results were found for 'Wolverine'.

If matches are found, the user can optionally filter them by genre:

----------------------------------------------------
| Do you want to filter results by genre? (y/n):  |
----------------------------------------------------

Then the user can provide a genre such as:

-----------------------
| Enter the genre:    |
-----------------------
comedy

The results are shown with pagination and extra options:

Showing page 1 of 1
1. fear and loathing in las vegas
2. logan
-------------------------------------
| Options:                          |
| 'n' NEXT PAGE                     |
| 'g' FILTER BY GENRE               |
| 'r' REMOVE LAST FILTER            |
| '0' EXIT                          |
-------------------------------------
  • n: show the next page of results, if one exists
  • g: apply a genre filter
  • r: remove the most recent filter
  • 0: leave the search flow

View search history

Shows previous searches. If there is no history, the program reports it.

There is no search history.

Save state

Saves the current application state.

State saved.

Restore state

Restores the previously saved application state.

State restored.

Recommended movies

Displays recommended movies. If there are none, the program shows a message.

There are no recommended movies.

Exit

Leaves the program.

Documentation

Class Diagram

The class diagram shows the program structure and the relationships between its classes:

Class Diagram

Data Cleaning

The dataset was cleaned using R. The process included:

  1. Loading the required libraries:
library(dplyr)
library(stringr)
  1. Loading the dataset:
data <- read.csv("C:/Users/Marco/Desktop/Prp/Data.csv")
  1. Defining a text-cleaning function to remove non-Latin characters and unnecessary symbols:
clean_text <- function(text) {
cleaned <- str_replace_all(text, "[^a-zA-Z0-9\\s.!?-]", "")
return(cleaned)
}
  1. Applying the function:
cleaned_data <- data %>%
mutate(across(everything(), ~ sapply(., clean_text)))
  1. Saving the cleaned data:
write.csv(cleaned_data, "C:/Users/Marco/Desktop/Prp/CleanedData.csv", row.names = FALSE)