//Importanción de las librerías necesarias para el programa.
#include<iostream>
#include<locale.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
/*
Azul Web acaba de sacar una nueva plataforma de video, donde se van a publicar películas. Las películas tiene los siguientes atributos; Nombre de la película y Fecha de lanzamiento.
autor: Kevin Elián Valarezo Guamán
date: 14/03/2024
*/
int main(){
setlocale(LC_CTYPE, "Spanish");
//Variable de la cantidad máxima de películas a ingresar.
int n = 0;
std::cout<<"Ingrese la cantida de películas que va ingresar: "; std::cin>>n;
std::cin.ignore(10000, '\n');
system("cls"); //Limpiador de pantalla.
//Variables 'char' a utilizar
/*
movies: Sirve para almacenar las peliculas que quiera ingresar el usuario.
orden: Sirve para ordenar a las películas para luego elegir si queremos presentarlas de manera ascendente o descendente.
movies2: Almacenará los valores de las películas, pero solo servirá para ordenarlas.
*/
char movies[n][20], movies2[n][20]; //Cadenas
char orden[n] = "", buscar[20] = "", buscar2[20] = "";
//Variables 'int' a utilizar
/*
date: Sirve para almacenar el año de las películas ingresadas.
date2: Almacenerá los valores de 'date' para solo ordenarlos.
option: Permitirá al usuario salir o seguir en el programa
menu: Se usa para elegir una de las opciones del programa.
pos: Será la posición que cambiará de las peliculas almacenadas en 'movies'.
aux: Servirá para ordenar a las películas.
dateM: Sirve para buscar a una película por su año.
vrf: Verifica si se ha encontrado o no la película.
k: Servirá para que el usuario si o si elija una película entre 1896 y el año actual (En este caso 2024).
j: Sirve para la posición de las películas y así no hayas errores en la posición.
*/
int date[n] = {}, date2[n] = {}; //Vectores
int option = 0, menu = 0, pos = 0, aux = 0, dateM = 0, vrf = 0, k = 0, j = 0;
//Ingreso de películas por parte del usuario.
std::cout<<"INGRESO DE PELÍCULAS\n";
for(int i = 0; i<n; i++){
k = i-1;
j = i;
std::cout<<"\nPelícula N°"<<i+1<<"\n Nombre\n -"; std::cin.getline(movies[i], 20, '\n');
strcpy(movies2[i], movies[i]);
while(k<i){
std::cout<<"Año de lanzamiento\n -"; std::cin>>date[j];
if(date[j]<1896 || date[j]>2024){
std::cout<<"Ingrese el año de una película existente";
std::cout<<"\n";
} else{
date2[pos] = date[j];
k = i;
}
}
std::cin.ignore(10000, '\n'); //Corrije error para que se pueda ingresar otra pelicula con su nombre.
pos++;
}
//Ordenar a las películas por el año. Sirve tanto para de manera Asecendente como Descendente.
for(int i = 0; i<n; i++){
strcpy(orden, movies2[i]);
aux = date2[i];
int pos = i;
while((date2[pos-1]>aux) && pos > 0){
date2[pos] = date2[pos - 1];
strcpy(movies2[pos], movies2[pos-1]);
pos--;
}
date2[pos] = aux;
strcpy(movies2[pos], orden);
}
system("cls"); //Limpiador de pantalla.
do{
//Menú de opciones del programa.
do{
//En una sola línea el menú de opciones del programa para no usar tantas líneas de código.
std::cout<<"Menú de opciones\n 1 - Mostrar peliculas\n 2 - Mostrar películas desde las más viejas a las más nuevas\n 3 - Mostrar películas desde las más nuevas a las más viejas\n 4 - Mostrar películas de un año en concreto\n 5 - Salir del programa\n\nOpción: "; std::cin>>menu;
if(menu<=0 || menu>5){ //if para mostrar un mensaje de error en caso de que el usuario elija una opción menor que 0 o mayor a la cantidad de opciones máximas del programa.
system("cls"); //Limpiador de pantalla.
std::cout<<"Opcion no disponible\n";
}
else if(menu == 5){ //else if para salir del programa.
std::cout<<"\nGracias por usar este programa :D";
getch();
return 0;
}
else{ //else que sirve para cuando el usuario haya elegido unas de las opciones.
system("cls"); //Limpiador de pantalla.
}
}while(menu<=0 || menu>5); //do while siempre y cuando el usuario elija una opción no establecida en el parametro de opciones disponibles. En este caso máximo tiene 5 opciones donde no esta disponible el 0 o menor a este.
pos = 0;
switch(menu){ //switch que permite entrar en una de las opciones elegidas por el usuario.
case 1: //Presenta las películas ingresadas.
std::cout<<"PELÍCULAS\n";
//Ciclo 'for' en una sola línea que preseentará todas le películas ingresadas con su respectivo año.
for(int i = 0; i<n; i++) std::cout<<"\nPelícula N°"<<i+1<<"\n Nombre\n -"<<movies[pos++]<<"\n Año de lanzamiento\n -"<<date[i]<<"\n";
break;
case 2: //Presenta las películas de manera ascendente.
std::cout<<"Películas en orden Ascendente:\n";
for(int i = 0; i<n; i++){
std::cout<<movies2[pos];
std::cout<<": "<<date2[i];
pos++;
std::cout<<"\n";
}
break;
case 3: //Presenta las películas de manera descendente.
std::cout<<"Películas en orden Descendente:\n";
for(int i = n-1; i>=0; i--){
pos = i;
std::cout<<movies2[pos];
std::cout<<": "<<date2[i];
pos++;
std::cout<<"\n";
}
break;
case 4: //Permite la búsqueda de películas.
do{
std::cout<<"Métodos de búsqueda\n 1 - Literal\n 2 - Nombre\n 3 - Fecha\n\nOpción: "; std::cin>>dateM;
if(dateM<=0 || dateM>3){
system("cls"); //Limpiador de pantalla.
std::cout<<"Error: Opción no disponible\n"; //if para mostrar un mensaje de error en caso de que el usuario elija una opción no existente.
} else{
system("cls"); //Limpiador de pantalla.
}
}while(dateM<=0 || dateM>3);
vrf = 0;
switch(dateM){
case 1:
dateM = 0;
std::cout<<"Ingrese el literal de la película\nLiteral: "; std::cin>>dateM;
for(int i = 0; i<n; i++){
if(dateM == (i+1)){
pos = i; //Se toma la posición encontrada de la búsqueda que hizo el usuario.
vrf = 1; //Si se encuentra se verifica con la variable 'vrf'.
i = n; //Hará detener búsqueda innecesarias.
}
}
break;
case 2:
j = 0;
pos = 0;
std::cin.ignore(10000, '\n');
std::cout<<"Ingrese el nombre de la película\nNombre: "; std::cin.getline(buscar, 20, '\n');
for(int i = 0; i<n; i++){
strcpy(buscar2, movies[j]);
if(strcmp(buscar, buscar2) == 0){
pos = i; //Se toma la posición encontrada de la búsqueda que hizo el usuario.
vrf = 1; //Si se encuentra se verifica con la variable 'vrf'.
i = n; //Hará detener búsqueda innecesarias.
}
j++;
}
break;
case 3:
dateM = 0;
std::cout<<"Ingrese el año de la película\nFecha: "; std::cin>>dateM;
for(int i = 0; i<n; i++){
if(dateM == date[i]){
pos = i; //Se toma la posición encontrada de la búsqueda que hizo el usuario.
vrf = 1; //Si se encuentra se verifica con la variable 'vrf'.
i = n; //Hará detener búsqueda innecesarias.
}
}
break;
default: //Default en caso de que haya un problema con el programa se cerrerá inmediatamente.
std::cout<<"\nERROR: Opcion no disponible";
return 0;
break;
}
//Se presentará en pantalla la película encontrada, si no, saldrá que no se ha encontrado.
if(vrf == 1){
std::cout<<movies[pos];
std::cout<<": "<<date[pos];
} else{
std::cout<<"Pelicula no encontrada.";
}
std::cout<<std::endl;
break;
default: //Default en caso de que haya un problema con el programa se cerrerá inmediatamente.
std::cout<<"\nERROR: Opcion no disponible";
return 0;
break;
}
//Menú de opciones para salir o volver al menú de inicio.
do{
std::cout<<"\nVolver al menú de inicio[1] || Salir del programa[2]\nOpcion: "; std::cin>>option;
if(option<=0 || option>2) std::cout<<"\nError: Opción no disponible\n"; //if para mostrar un mensaje de error en caso de que el usuario elija una opción no existente.
else if(option == 2){ //else if para salir del programa.
std::cout<<"\nGracias por usar este programa :D";
getch();
return 0;
}
else{ //else que permite volver al menú de opciones de manera limpia
system("cls"); //Limpiador de pantalla.
}
}while(option<=0 || option>2); //do while siempre y cuando el usuario elija una opción no establecida en el parametro de opciones disponibles. En este caso solo tenemos la opción de volver (1) o salir (2).
}while(option==1); //El menú de opciones solamente se presentará si el usuario elijo la primera opción el segundo ciclo do while
return 0;
}