
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 existsg: apply a genre filterr: remove the most recent filter0: 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:
Data Cleaning
The dataset was cleaned using R. The process included:
- Loading the required libraries:
library(dplyr)
library(stringr) - Loading the dataset:
data <- read.csv("C:/Users/Marco/Desktop/Prp/Data.csv") - 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)
} - Applying the function:
cleaned_data <- data %>%
mutate(across(everything(), ~ sapply(., clean_text))) - Saving the cleaned data:
write.csv(cleaned_data, "C:/Users/Marco/Desktop/Prp/CleanedData.csv", row.names = FALSE)