Skip to content

Commit

Permalink
Refactor y optimize de todo el proyecto
Browse files Browse the repository at this point in the history
  • Loading branch information
pixelpercebe committed Oct 26, 2022
1 parent 93d1f5d commit d10d529
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 92 deletions.
131 changes: 61 additions & 70 deletions src/AplicacionIMDB.java
Original file line number Diff line number Diff line change
@@ -1,77 +1,68 @@

import java.sql.Time;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.Timer;

public class AplicacionIMDB {

public static CatalogoIMDB catalogo;
public static void main(String[] args){
catalogo = CatalogoIMDB.getInstance();
//TO DO: ...

//TO DO: Cargar películas
catalogo.cargarPeliculas("films.txt");

//TO DO Cargar intérpretes
catalogo.cargarInterpretes("cast.txt");

//Menú

Scanner sc = new Scanner(System.in);
int opcion=-1;

while(opcion!=0) {
System.out.println("Escoja una opción:");
System.out.println("1. Mostrar información de película");
System.out.println("2. Mostrar información de intérprete");
System.out.println("3. Añadir voto a película");

System.out.println("0. Salir");

try {
opcion = Integer.parseInt(sc.nextLine());
switch(opcion) {
//TODO Gestionar excepciones

case 1:
System.out.println("Introduce el nombre de una película: ");
String tituloPelicula = sc.nextLine();
catalogo.imprimirInfoPelicula(tituloPelicula);
break;

case 2:
System.out.println("Introduce el nombre de un interprete: ");
String nombreInterprete = sc.nextLine();
catalogo.imprimirInfoInterprete(nombreInterprete);
break;

case 3:
System.out.println("Introduce el nombre de la película que deseas puntuar: ");
tituloPelicula = sc.nextLine();
System.out.printf("Introduce la punctuation que quieres darle a %s :", tituloPelicula);
float puntuacion = Float.parseFloat(sc.nextLine());
catalogo.anadirVoto(tituloPelicula, puntuacion);
System.out.printf("Has votado a %s con un %s",tituloPelicula,puntuacion);

break;

default:break;
}
}
catch(NumberFormatException e)
{
System.out.println("#ERROR# Dato introducido no valido, Vuelve a Introducir el numero de la opción deseada. ");
}
catch(NoSuchElementException | IllegalStateException e)
{
System.out.println("#ERROR# Imposible recorrer la linea");
}
}
sc.close();


}
public static CatalogoIMDB catalogo;

public static void main(String[] args) {
catalogo = CatalogoIMDB.getInstance();
catalogo.cargarPeliculas("films.txt");

catalogo.cargarInterpretes("cast.txt");

//Menú

Scanner sc = new Scanner(System.in);
int opcion = -1;

while (opcion != 0) {
System.out.println("Escoja una opción:");
System.out.println("1. Mostrar información de película");
System.out.println("2. Mostrar información de intérprete");
System.out.println("3. Añadir voto a película");

System.out.println("0. Salir");

try {
opcion = Integer.parseInt(sc.nextLine());
switch (opcion) {


case 1:
System.out.println("Introduce el nombre de una película: ");
String tituloPelicula = sc.nextLine();
catalogo.imprimirInfoPelicula(tituloPelicula);
break;

case 2:
System.out.println("Introduce el nombre de un interprete: ");
String nombreInterprete = sc.nextLine();
catalogo.imprimirInfoInterprete(nombreInterprete);
break;

case 3:
System.out.println("Introduce el nombre de la película que deseas puntuar: ");
tituloPelicula = sc.nextLine();
System.out.printf("Introduce la punctuation que quieres darle a %s :", tituloPelicula);
float puntuacion = Float.parseFloat(sc.nextLine());
catalogo.anadirVoto(tituloPelicula, puntuacion);
System.out.printf("Has votado a %s con un %s", tituloPelicula, puntuacion);

break;

default:
break;
}
} catch (NumberFormatException e) {
System.out.println("#ERROR# Dato introducido no valido, Vuelve a Introducir el numero de la opción deseada. ");
} catch (NoSuchElementException | IllegalStateException e) {
System.out.println("#ERROR# Imposible recorrer la linea");
}
}
sc.close();


}

}
20 changes: 15 additions & 5 deletions src/CatalogoIMDB.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@ public class CatalogoIMDB {
ListaInterpretes interpretes = new ListaInterpretes();


private CatalogoIMDB() {}
private CatalogoIMDB() {
}

public static CatalogoIMDB getInstance() {
if (miCatalogo == null) miCatalogo = new CatalogoIMDB();
return miCatalogo;
}

/**
* Carga las películas del catálogo desde el fichero indicado. Es de orden O(n)
*
* @param nomF Nombre del fichero que contiene las películas
*/
public void cargarPeliculas(String nomF) {
Expand All @@ -39,9 +42,11 @@ public void cargarPeliculas(String nomF) {
e.printStackTrace();
}
}

/**
* Carga los intérpretes del catálogo desde el fichero indicado. Es de orden O(n*m*log(l))
* POST: se han cargado los intérpretes y se han calculado sus ratings
*
* @param nomF Nombre del fichero que contiene los intérpretes
*/
public void cargarInterpretes(String nomF) {
Expand All @@ -67,15 +72,16 @@ public void cargarInterpretes(String nomF) {
inter.calcularRating();
interpretes.anadirInterprete(inter);
}
}
catch (IOException e) {
} catch (IOException e) {
System.out.println("Error en la lectura del archivo");
} catch (IndexOutOfBoundsException | NumberFormatException e) {
System.out.println("Error en el formato del archivo");
}
}

/**
* Imprime por pantalla el nº de intérpretes de una película y sus nombres. Es de orden O(log(n))
*
* @param titulo Título de la película
*/
public void imprimirInfoPelicula(String titulo) {
Expand All @@ -87,26 +93,30 @@ public void imprimirInfoPelicula(String titulo) {
else
System.out.println("Película no encontrada en la base de datos.");
}

/**
* Imprime por pantalla el nombre del intérprete, su rating y los títulos
* de sus películas. Es de orden O(n)
*
* @param nombre Nombre del intérprete
*/
public void imprimirInfoInterprete(String nombre) {

Interprete inter = interpretes.buscarInterprete(nombre);
if (inter != null)
System.out.printf("%s (Rating: %s) -> %s%n",
inter.getNombre() ,inter.getRating(), inter.getFilmografia());
inter.getNombre(), inter.getRating(), inter.getFilmografia());
else
System.out.println("Actor no encontrado en la base de datos.");
}

/**
* Añade un nuevo voto a una película
* PRE: el valor del voto está entre 0.0 y 10.0.
* Es de orden O(log(n)*m*l)
*
* @param titulo Título de la película
* @param voto Valor del voto
* @param voto Valor del voto
*/
public void anadirVoto(String titulo, float voto) {
Pelicula pelicula = peliculas.buscarPelicula(titulo);
Expand Down
14 changes: 10 additions & 4 deletions src/Interprete.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,27 @@ public class Interprete {
private String nombre;
private float rating;
private final ListaPeliculas filmografia;

/**
* Calcula y asigna el rating del intérprete basándose en el rating de sus películas
* Es de orden O(n).
*/

public void calcularRating() {
float sumRating = 0; int numvotos = 0;
for (Pelicula pel: filmografia.getLista()) {
float sumRating = 0;
int numvotos = 0;
for (Pelicula pel : filmografia.getLista()) {
sumRating += pel.getRating() * pel.getNumvotos();
numvotos += pel.getNumvotos();
}
setRating(sumRating / numvotos);
}

/**
* Añade una película al intérprete. Es de orden O(1)
*
* @param pel Película a añadir
* POST: El rating del intérprete NO se modifica en este momento
* POST: El rating del intérprete NO se modifica en este momento
*/
public void anadirPelicula(Pelicula pel) {
filmografia.anadirPelicula(pel);
Expand Down Expand Up @@ -50,5 +54,7 @@ public ListaPeliculas getFilmografia() {
return filmografia;
}

public String toString() {return getNombre();}
public String toString() {
return getNombre();
}
}
11 changes: 8 additions & 3 deletions src/ListaInterpretes.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,24 @@

public class ListaInterpretes {
private final ArrayList<Interprete> lista = new ArrayList<>();

/**
* Añade un intérprete a la lista. Es de orden O(1), el coste de añadir un elemento a un ArrayList
*
* @param inter Intérprete a añadir
*/
public void anadirInterprete(Interprete inter) {
lista.add(inter);
}

/**
* Busca un intérprete en la lista y lo devuelve. Es de orden O(n)
*
* @param nombre Nombre del intérprete a buscar
* @return el intérprete (si está en la lista), null en caso contrario
*/
public Interprete buscarInterprete(String nombre) {
for (Interprete inter: lista)
for (Interprete inter : lista)
if (inter.getNombre().equalsIgnoreCase(nombre)) return inter;
return null;
}
Expand All @@ -29,9 +33,10 @@ public String toString() {
if (lista.size() == 0) return "";
StringBuilder str = new StringBuilder();
for (int i = 0; i < lista.size() - 1; i++) {
str.append(lista.get(i)); str.append("; ");
str.append(lista.get(i));
str.append("; ");
}
str.append(lista.get(lista.size()-1));
str.append(lista.get(lista.size() - 1));
return str.toString();
}
}
17 changes: 11 additions & 6 deletions src/ListaPeliculas.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,36 @@ public class ListaPeliculas {

/**
* Añade una película a la lista. Es de orden O(1), el coste de añadir un elemento a un ArrayList
*
* @param pel Película a añadir
*/

public void anadirPelicula(Pelicula pel) {
lista.add(pel);
}

/**
* Busca una película en la lista y la devuelve. Es de orden O(log(n)), se ha usado la busqueda dicotomica.
*
* @param titulo Título de la película a buscar
* @return la Película (si está en la lista), null en caso contrario
*/
public Pelicula buscarPelicula(String titulo) {
int lower = 0;
int upper = lista.size() - 1;
int pos; String tituloActual;
int pos;
String tituloActual;

while (lower <= upper) {
pos = (upper + lower) / 2;
tituloActual = lista.get(pos).getTitulo();

if (titulo.compareTo(tituloActual) < 0) upper = pos - 1;
if (titulo.compareTo(tituloActual) < 0) upper = pos - 1;
else if (titulo.compareTo(tituloActual) > 0) lower = pos + 1;
else return lista.get(pos);
}
return null;
}
return null;
}

public ArrayList<Pelicula> getLista() {
return lista;
Expand All @@ -46,9 +50,10 @@ public ArrayList<Pelicula> getLista() {
public String toString() {
StringBuilder str = new StringBuilder();
for (int i = 0; i < lista.size() - 1; i++) {
str.append(lista.get(i).getTitulo()); str.append("||");
str.append(lista.get(i).getTitulo());
str.append("||");
}
str.append(lista.get(lista.size()-1).getTitulo());
str.append(lista.get(lista.size() - 1).getTitulo());
return str.toString();
}
}
10 changes: 6 additions & 4 deletions src/Pelicula.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,17 @@ public Pelicula(String titulo, int ano, float rating, int votos) {

/**
* Añade un intérprete a la película. Es de orden O(1)
*
* @param inter Intérprete a añadir
*/
public void anadirInterprete(Interprete inter)
{
public void anadirInterprete(Interprete inter) {
reparto.anadirInterprete(inter);
}

/**
* Añade un nuevo voto a la película. Es de orden O(n*m)
* POST: se han recalculado los ratings de sus intérpretes
*
* @param voto Voto entre 0.0 y 10.0
*/
public void anadirVoto(float voto) {
Expand All @@ -36,7 +37,6 @@ public void anadirVoto(float voto) {
}



// Getters y Setters

public String getTitulo() {
Expand Down Expand Up @@ -71,5 +71,7 @@ public void setAno(int ano) {
this.ano = ano;
}

public ListaInterpretes getReparto() {return reparto;}
public ListaInterpretes getReparto() {
return reparto;
}
}

0 comments on commit d10d529

Please sign in to comment.