Catálogo revistas

DROP TABLE IF EXISTS `revista` ;

CREATE TABLE IF NOT EXISTS `revista` (
`idrevista` INT NOT NULL AUTO_INCREMENT,
`titulo` VARCHAR(100) NOT NULL,
`issn` CHAR(9) NOT NULL,
`numero` INT NOT NULL,
`anyo` YEAR NOT NULL,
PRIMARY KEY (`idrevista`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

DROP TABLE IF EXISTS `articulo` ;

CREATE TABLE IF NOT EXISTS `articulo` (
`idarticulo` INT NOT NULL AUTO_INCREMENT,
`titulo` VARCHAR(100) NOT NULL,
`inicio` INT NOT NULL,
`final` INT NOT NULL,
`idrevista` INT NOT NULL,
PRIMARY KEY (`idarticulo`),
CONSTRAINT `idrevista`
FOREIGN KEY (`idrevista`)
REFERENCES `revista` (`idrevista`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

CREATE INDEX `idrevista_idx` ON `articulo` (`idrevista` ASC) VISIBLE;

DROP TABLE IF EXISTS `autor` ;

CREATE TABLE IF NOT EXISTS `autor` (
`idautor` INT NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`pais` VARCHAR(45) NOT NULL,
PRIMARY KEY (`idautor`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

DROP TABLE IF EXISTS `articulo_autor` ;

CREATE TABLE IF NOT EXISTS `articulo_autor` (
`idarticulo_autor` INT NOT NULL AUTO_INCREMENT,
`idautor` INT NOT NULL,
`idarticulo` INT NOT NULL,
`posicion` INT NOT NULL,
PRIMARY KEY (`idarticulo_autor`),
CONSTRAINT `idarticulo`
FOREIGN KEY (`idarticulo`)
REFERENCES `articulo` (`idarticulo`),
CONSTRAINT `idautor`
FOREIGN KEY (`idautor`)
REFERENCES `autor` (`idautor`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

CREATE INDEX `idarticulo_idx` ON `articulo_autor` (`idarticulo` ASC) VISIBLE;

CREATE INDEX `idautor_idx` ON `articulo_autor` (`idautor` ASC) VISIBLE;

Modelos ER

Se desea crear una base de datos que contenga información sobre las revistas a las que estás suscrito o compras habitualmente. De cada revista, se pide su título, el ISSN (un código que identifica a la publicación), el número y el año de publicación. También se desea almacenar información de cada uno de los artículos publicados: el título, la página de inicio y la página de fin. Se asume que no hay dos artículos con el mismo título.
Cada artículo puede estar escrito por varios autores, de quienes interesa conocer su nombre, una dirección de correo electrónico y su país de nacimiento, así como un número que indique la posición en la que aparece en cada artículo: un 1 si es el primer autor, un 2 si aparece en segundo lugar, etc.
revista 1—–N   articulo N–|–N     autor
id int id int posicion id
titulo varchar(100) titulo nombre
issn char(9) inicio mail
numero int fin pais
anyo  year
Un parque zoológico quiere construir una BD para organizar las especies que posee y los distintos itinerarios para visitar el parque. La información se estructura de la siguiente forma. De las especies, se desea conocer su nombre común y su nombre científico, así como una descripción general y una fotografía. Cada especie puede vivir en distintos hábitats naturales, definidos por su nombre, clima y vegetación predominante. Cada especie tiene asociado un índice de vulnerabilidad dentro de cada hábitat, que mide el riesgo de extinción de la especie en el dicho hábitat. Para organizar las visitas, y en función de los hábitats que desee recorrer un visitante, el parque le ofrece una serie de recorridos por los hábitats, que se identifican por su código y se caracterizan por su duración estimada, longitud y número máximo de visitantes permitidos. Un hábitat sólo puede formar parte de un itinerario.
especie N——-|—–N habitat N—1 itinerario
id vulnerabil. id id
nombrecomun nombre codigo
nombrecientifico clima duracion
descripcion vegetacion longitud
fotografia capacidad
Una empresa vende productos a varios clientes. Se necesita conocer los  datos personales de los clientes (nombre, apellidos, dni, dirección y  fecha de nacimiento). Cada producto tiene un nombre y un código, así  como un precio unitario. Un cliente puede comprar varios productos a la  empresa, y un mismo producto puede ser comprado por varios clientes.
Los productos son suministrados por diferentes proveedores. Se debe  tener en cuenta que un producto sólo puede ser suministrado por un proveedor, y que un proveedor puede suministrar diferentes productos. De cada proveedor se desea conocer el NIF, nombre y dirección.
cliente N—-|—-N producto N—-1 proveedor
id precio id id
nombre cant. nombre nif
apellidos codigo nombre
dni precio direccion
direccion
fechanacimiento
Una compañía aérea necesita una base de datos para registrar la información de sus vuelos. Los vuelos están caracterizados por un Id, la fecha y los aeropuertos de origen y destino. Cada vuelo es realizado por un avión. Los aviones tienen una matrícula que los identifica, el fabricante, un modelo e información sobre su capacidad (número máximo de pasajeros) y autonomía de vuelo (en horas). La tripulación asignada al vuelo está formada por el personal de la propia compañía. De cada trabajador se conoce su id, su nombre y su categoría profesional, así como el puesto que ocupa en cada vuelo en particular.
Por último, para cada vuelo, se almacena la lista completa de pasajeros, con su dni, el nombre, el asiento que ocupa y su clase (turista, primera o business).
asiento,clase
|–N—————|————–N–|
avion 1—N vuelo N-|–N trajadores pasajeros
id id puesto id id
matricula fecha nombre dni
fabricante origen categoria nombre
modelo destino
capacidad
autonomia
Una ONG desea elaborar una base de datos para llevar el seguimiento de todos sus proyectos. Tiene diversas sedes en varios países que se encargan de gestionar y coordinar los proyectos de ese país, cada uno de los cuales puede afectar a una o varias poblaciones.
Sobre la sedes se desea mantener un identificador, la ciudad y país en el que se encuentra, junto con su dirección, un teléfono de contacto y el nombre del director. Cada sede gestiona un conjunto de proyectos, con un código, un título, fechas de inicio y finalización, el presupuesto asignado y el nombre del responsable.
De cada proyecto es necesario conocer qué actuaciones se realizan en cada población, almacenando el nombre, país y nº de habitantes y un identificador para diferenciarlas. Además se desea la inversión del proyecto que corresponde a la población y una pequeña descripción de la actuación.
sede 1—N proyecto 1—N  actuacion N–1 poblacion
id id id id
ciudad codigo inversion nombre
pais titulo descripcion pais
direccion inicio habitantes
telefono fin
director presupuesto
responsable

Solucion Solid

package com.trifulcas.juegoPPTLSID;

import java.util.Arrays;

public class JuegoColores implements ILogica{
	private String[] jugadas = { "verde","azul","amarillo","naranja","rojo" };

	public JuegoColores() {

	}

	@Override
	public int comprobar(String jugada1, String jugada2) {
		int pos1 = Arrays.asList(jugadas).indexOf(jugada1.toLowerCase());
		int pos2 = Arrays.asList(jugadas).indexOf(jugada2.toLowerCase());
		if ((pos1 + 1) % jugadas.length == pos2)
			return 1;
		if ((pos2 + 1) % jugadas.length == pos1)
			return 2;
		return 0;
	}

	@Override
	public String[] validas() {

		return this.jugadas;
	}
}


package com.trifulcas.juegoPPTLSID;

public interface IMostrar {
	 void mostrar(String res);
}


package com.trifulcas.juegoPPTLSID;

public class Juego {
	private Jugador jugador1;
	private Jugador jugador2;
	private ILogica _iLogica;
	private IMostrar _iMostrar;

	private String[] jugadas;

	public String[] getJugadas() {
		return jugadas;
	}

	public void setJugadas(String[] jugadas) {
		this.jugadas = jugadas;
	}

	public Jugador getJugador1() {
		return jugador1;
	}

	public void setJugador1(Jugador jugador1) {
		this.jugador1 = jugador1;
	}

	public Jugador getJugador2() {
		return jugador2;
	}

	public void setJugador2(Jugador jugador2) {
		this.jugador2 = jugador2;
	}

	public Juego(Jugador jugador1, Jugador jugador2, ILogica ilogica, IMostrar imostrar) {
		this.jugador1 = jugador1;
		this.jugador2 = jugador2;
		_iLogica = ilogica;
		jugadas = _iLogica.validas();
		_iMostrar = imostrar;
	}

	public Juego(Jugador jugador1, Jugador jugador2, ILogica ilogica) {
		this(jugador1, jugador2, ilogica, new Consola());
	}

	public String jugar() {
		jugador1.pedirJugada(jugadas);
		jugador2.pedirJugada(jugadas);
		_iMostrar.mostrar(jugador1.getNombre() + " elige " + jugador1.getJugada());
		_iMostrar.mostrar(jugador2.getNombre() + " elige " + jugador2.getJugada());
		int res = _iLogica.comprobar(jugador1.getJugada(), jugador2.getJugada());
		String resultado="Empate";
		if (res == 1) {
			resultado= jugador1.getNombre();
		}
		if (res == 2) {
			resultado= jugador2.getNombre();
		}
		_iMostrar.mostrar(resultado);
		return resultado;
	}
}

package com.trifulcas.juegoPPTLSID;

public class Consola implements IMostrar {

	@Override
	public void mostrar(String res) {
		System.out.println(res);
	}

}


package com.trifulcas.juegoPPTLSID;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class Fichero implements IMostrar {

	@Override
	public void mostrar(String res) {
		Path path = Paths.get("resultado.txt");
		try {
			if (!Files.exists(path))
				Files.createFile(path);
			Files.writeString(path, res+"\r\n", StandardOpenOption.APPEND);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

Soluciones ejercicios SOLID

package com.trifulcas.ejerciciosSolid;

public class Article {
	private String Title;
	private String Content;

	public void setTitle(String title) {
		this.Title = title;
	}

	public void setContent(String content) {
		this.Content = content;
	}
}


package com.trifulcas.ejerciciosSolid;

public class GenerateSummary {
	
	public String generateSummary(String content) {
		// Logic to generate a summary from the content
		return content.substring(0, 100) + "..."; // just a simple example
	}
}

package com.trifulcas.ejerciciosSolid;

import com.trifulcas.juego.Enemigo;

public class SaveToDatabase {
	// Cosas del tipo conexión a BD
	// etc...

	public void saveToDatabase(Article article) {
		// Logic to save the article to a database
	}
	public void saveToDatabase(Enemigo enemigo) {
		// Logic to save the article to a database
	}
}


package com.trifulcas.ejerciciosSolid;

public abstract class ReportGenerator {
	public abstract void generateReport(String data); 
}

package com.trifulcas.ejerciciosSolid;

public class ReportGeneratorPDF extends ReportGenerator {

	@Override
	public void generateReport(String data) {
		System.out.println("Aquí va el código de generar PDF");
	}

}

package com.trifulcas.ejerciciosSolid;

public class ReportGeneratorCSV extends ReportGenerator {

	@Override
	public void generateReport(String data) {
		System.out.println("Código para generar CSV");
	}

}


package com.trifulcas.ejerciciosSolid;

public interface IReportGenerator {
	public void generateReport(String data); 
}


package com.trifulcas.ejerciciosSolid;

public class ReportGeneratorXML implements IReportGenerator {

	@Override
	public void generateReport(String data) {
		System.out.println("Lógica para generar XML");
	}

}


package com.trifulcas.ejerciciosSolid;

public class ReportGeneratorID {
	IReportGenerator reportGenerator;
	
	public ReportGeneratorID(IReportGenerator reportGenerator) {
		this.reportGenerator = reportGenerator;
	}
	
	public void generateReport(String data) {
		reportGenerator.generateReport(data);
	}
	
}


package com.trifulcas.ejerciciosSolid;

public class ProbarReports {

	public static void main(String[] args) {
		String datos="Hola que tal";
		
		// Generar un PDF
		ReportGeneratorPDF rgp=new ReportGeneratorPDF();
		rgp.generateReport(datos);
		
		// Generar un XML con ID
		ReportGeneratorXML rgx=new ReportGeneratorXML();
		
		ReportGeneratorID rgid=new ReportGeneratorID(rgx);
		
		rgid.generateReport(datos);
		
		rgid=new ReportGeneratorID(rgx);
		
		rgid.generateReport(datos);
	}

}


package com.trifulcas.ejerciciosSolid;

public interface IClean {
	 void Clean();
}


package com.trifulcas.ejerciciosSolid;

public class Apartment implements IClean {

	@Override
	public void Clean() {
	       System.out.println("Apartment cleaned.");
	}

}

package com.trifulcas.ejerciciosSolid;

import java.util.Date;

public interface IRoom 	{
	void Reserve(Date from, Date to);
    void CheckInventory();
}

package com.trifulcas.ejerciciosSolid;

public interface IInventory {
	void CheckInventory();
}

package com.trifulcas.ejerciciosSolid;

import java.util.Date;

public interface IReserve {
	void Reserve(Date from, Date to);
	   
}

Ejercicios Files

public class Alumno {
	// El public es un modificador de acceso
	// Quiere decir que cualquiera puede acceder al valor
	public String nombre;
	// Tenemos tres sabores de protección
	// public, protected y private
	private ArrayList<Integer> notas;

	// Los parámetros que queremos poner al crear la clase
	public Alumno(String nombre) {
		// Las cosas que queremos que se ejecuten
		// cuando creamos la clase
		// this.nombre es el nombre del objeto
		// nombre es el parámetro que le pasamos
		this.nombre = nombre;
		notas = new ArrayList<Integer>();
	}

	public Alumno() {
		// Llamando a la sobrecarga del constructor
		this("anonimo");

	}

	public int ponNota(int nota) {
		// Me aseguro de que mis notas están entre 0  10
		if (nota > 0 && nota <= 10) {
			notas.add(nota);
		}
		return notas.size();
	}

	public double media() {

		double total = 0;
		// Desde dentro de la clase si que puedo acceder
		for (int nota : notas) {
			total += nota;
		}
		return total / this.notas.size();
	}
}
public static void main(String[] args) {
		ArrayList<Alumno> alumnos=importar("archivo.txt");
		System.out.println(estadoCarpeta("c:\\pepe"));
		ArrayList<String> nombres = new ArrayList<>();
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 5; i++) {
			System.out.println("Introduce nombre " + i);
			nombres.add(sc.next());
		}

		Path path = Paths.get("nombres.txt");

		try {
			Files.write(path, nombres, StandardOpenOption.CREATE);
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}

	public static int estadoCarpeta(String ruta) {
		Path path = Paths.get(ruta);
		if (!Files.isDirectory(path)) {
			return -1;
		}
		try {
			List<Path> ficheros = Files.list(path).collect(Collectors.toList());
			if (ficheros.size() == 0) {
				return 0;
			}
			// TODO: Crear un método aparte
			for (Path fichero : ficheros) {
				if (Files.isDirectory(fichero)) {
					return 2;
				}
			}
			return 1;

		} catch (IOException e) {
			System.out.println(e.getMessage());
			return -1;
		}

	}

	public static ArrayList<Alumno> importar(String ruta) {
		List<String> contenido;
		// Leer fichero
		Path path = Paths.get(ruta);
		try {
			contenido = Files.readAllLines(path);
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			return null;
		}
		// Crear arraylist
		/*
		 * Nombre;nota Ana;5;6;7 Pep;3;3 Eva;5;5
		 */
		ArrayList<Alumno> alumnos= new ArrayList<Alumno>();
		for(int i=1;i<contenido.size();i++) {
			String[] elementos=contenido.get(i).split(";");
			Alumno temp=new Alumno(elementos[0]);
			for(int j=1;j<elementos.length;j++) {
				temp.ponNota(Integer.parseInt(elementos[j]));
			}
			alumnos.add(temp);
		}
		return alumnos;
	}
public class Jugador {
	private String nombre;
	private ArrayList<Carta> mano;

	public Jugador(String nombre) {
		super();
		this.nombre = nombre;
		mano = new ArrayList<>();
	}

	protected String getNombre() {
		return nombre;
	}

	protected void setNombre(String nombre) {
		this.nombre = nombre;
	}

	protected ArrayList<Carta> getMano() {
		return mano;
	}

	protected void setMano(ArrayList<Carta> mano) {
		this.mano = mano;
	}

	protected void setMano(Carta carta) {
		this.mano.add(carta);
	}

	@Override
	public String toString() {
		return "Jugador [nombre=" + nombre + ", mano=" + mano + "]";
	}

	public void logFichero(String ruta) {

		ArrayList<String> resultado = new ArrayList<>();
		// Un arraylist con los datos que quiero escribir
		resultado.add("Nombre jugador: " + this.getNombre());
		resultado.add("Cartas:");
		for (Carta carta : mano) {
			resultado.add(carta.toString());
		}
		// Escribir los datos
		try {
			Path path = Paths.get(ruta);
			if (!Files.exists(path)) {
				Files.createFile(path);
			}
			if (Files.isWritable(path)) {
				Files.write(path, resultado, StandardOpenOption.TRUNCATE_EXISTING);
			}else {
				// TODO: Lanzar excepción
				System.out.println("No se puede escribir");
			}
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}

}
	public static void main(String[] args) {
		Jugador ana=new Jugador("Ana Pi");
		ana.setMano(new Espanyola("oros",12));
		ana.setMano(new Espanyola("espadas",6));
		ana.setMano(new Espanyola("copas",8));
		ana.setMano(new Espanyola("oros",10));
		ana.logFichero("cartas_ana.txt");
		
	}

File, Files y Path

public static void main(String[] args) {
		File carpeta = new File("c:\\xampp");
		exploreDirectory(carpeta);
	}
	public static void exploreDirectory(File directory) {
        // Obtiene una lista de los archivos y directorios contenidos en el directorio
        File[] files = directory.listFiles();
        // Recorre cada archivo o directorio
        for (File file : files) {
            if (file.isFile()) {
                // Si es un archivo, imprime su nombre
                System.out.println(file.getName());
            } else if (file.isDirectory()) {
                // Si es un directorio, llama recursivamente al método
                exploreDirectory(file);
            }
        }
    }

	Path path = Paths.get("C:/pepe/ejemplo.jpeg");
		System.out.println(path.getFileName());
		System.out.println(path.getName(0));
		System.out.println(path.getParent());
		System.out.println(path.getRoot());
		 path = Paths.get("archivo.txt");
		 System.out.println(path.getFileName());
			System.out.println(path.getName(0));
			System.out.println(path.getParent());
			System.out.println(path.toAbsolutePath());


public static void main(String[] args) throws IOException {
		Path path = Paths.get("c:\\pepe\\archivo.txt");
		String cadena="o muy bien\n";
		Files.writeString(path, cadena,StandardOpenOption.APPEND );
		ArrayList<String> texto=new ArrayList<>(Arrays.asList("adios","hola","que tal"));
		Files.write(path, texto, StandardCharsets.ISO_8859_1,StandardOpenOption.TRUNCATE_EXISTING);
		try {

			List<String> contenido = Files.readAllLines(path);
			for(String linea:contenido)
			{
				System.out.println(linea);
			}
		} catch (IOException e) {
			System.out.println(e);
		}
	}

public static void main(String[] args) {
		Path path = Paths.get("c:\\pepe\\archivo2.txt");
			ArrayList<String> texto=new ArrayList<>(Arrays.asList("adios","hola","qué tal"));
		try {
			Files.write(path, texto, StandardCharsets.ISO_8859_1,StandardOpenOption.CREATE_NEW);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

public static void main(String[] args) {
		try {
		Path path = Paths.get("c:\\pepe\\archivo.txt");
		List<String> contenido=Files.readAllLines(path,StandardCharsets.ISO_8859_1);
		for(String linea:contenido)
		{
			System.out.println(linea);
		}
		}catch(Exception ex) {
			System.out.println(ex.getMessage());
		}
	}

Ejercicio Cartas


package com.trifulcas.cartas;

public abstract class Carta {
	private String palo;

	private int numero;

	
	public Carta(String palo, int numero) {
		this.palo = palo;
		this.numero = numero;
	}

	protected String getPalo() {
		return palo;
	}

	protected void setPalo(String palo) {
		this.palo = palo;
	}

	public int getNumero() {
		return numero;
	}

	protected void setNumero(int numero) {
		this.numero = numero;
	}
	
	public abstract int getValor();

	@Override
	public String toString() {
		return getNumero()+" de "+getPalo();
	}
	
}


package com.trifulcas.cartas;

public class Espanyola extends Carta {

	
	public Espanyola(String palo, int numero) {
		super(palo, numero);
		// TODO Auto-generated constructor stub
	}

	@Override
	public int getValor() {
		return getNumero()<10?getNumero():10;
	}

}


package com.trifulcas.cartas;

public class Francesa extends Carta {

	
	public Francesa(String palo, int numero) {
		super(palo, numero);
		// TODO Auto-generated constructor stub
	}

	@Override
	public int getValor() {
		// TODO Auto-generated method stub
		return getNumero();
	}

}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Collections;

public abstract class Baraja {
	protected ArrayList<Carta> baraja = new ArrayList<>();
	
	public Baraja() {
		/*
		baraja.add(new Espanyola("oros",1));
		baraja.add(new Espanyola("oros",2));
		baraja.add(new Espanyola("oros",3));
		baraja.add(new Espanyola("oros",4));
		baraja.add(new Espanyola("copas",7));
		*/
	}
	public void desordenar() {
		Collections.shuffle(baraja);
	}

	public Carta repartir() {
		if (baraja.isEmpty()) {
			return null;
		} else {
			return baraja.removeFirst();
		}
	}
	@Override
	public String toString() {
		return "Baraja [baraja=" + baraja + "]";
	}

	public abstract void crearMazo();
}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Arrays;

public class BarajaEspanyola extends Baraja {
	
	@Override
	public void crearMazo() {
		ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,10,11,12));
		ArrayList<String> palos=new ArrayList<>(Arrays.asList("Oros","Copas","Espadas","Bastos"));
		
		baraja.clear();
		for(int numero: numeros) {
			for(String palo: palos) {
				baraja.add(new Espanyola(palo,numero));
			}
		}
		
	}

}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Arrays;

public class BarajaFrancesa extends Baraja {
	
	@Override
	public void crearMazo() {
		ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13));
		ArrayList<String> palos=new ArrayList<>(Arrays.asList("Picas","Tréboles","Corazones","Diamantes"));
		
		baraja.clear();
		for(int numero: numeros) {
			for(String palo: palos) {
				baraja.add(new Francesa(palo,numero));
			}
		}
		
	}

}


package com.trifulcas.cartas;

import java.util.ArrayList;

public class Jugador {
	private String nombre;
	private ArrayList<Carta> mano;
	public Jugador(String nombre) {
		super();
		this.nombre = nombre;
		mano=new ArrayList<>();
	}
	protected String getNombre() {
		return nombre;
	}
	protected void setNombre(String nombre) {
		this.nombre = nombre;
	}
	protected ArrayList<Carta> getMano() {
		return mano;
	}
	protected void setMano(ArrayList<Carta> mano) {
		this.mano = mano;
	}
	protected void setMano(Carta carta) {
		this.mano.add(carta);
	}
	@Override
	public String toString() {
		return "Jugador [nombre=" + nombre + ", mano=" + mano + "]";
	}
	
	
	
}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class Poquer {
	ArrayList<Jugador> jugadores;
	BarajaFrancesa baraja;
	
	public Poquer(ArrayList<Jugador> jugadores) throws Exception {
		if (jugadores.size()>10 || jugadores.size()<2) {
			throw new Exception("Número de jugadores incorrecto");
		}
		this.jugadores=jugadores;
		baraja=new BarajaFrancesa();
		baraja.crearMazo();
	}
	
	public Jugador jugar() {
		baraja.desordenar();
		for(Jugador j:jugadores) {
			for(int i=0;i<5;i++) {
				j.setMano(baraja.repartir());
			}
		}
		return getGanador();
	}
	public Jugador getGanador() {
		// poker: 4 cartas iguales 
		// full: 3 cartas iguales y dos iguales
		// trio: 3 cartas iguales
		// doble pareja: 2 y 2
		// pareja: 2 cartas iguales
		for (Jugador j:jugadores) {
			System.out.println(j);
			System.out.println(contarCartas(j.getMano()));
		}
		return jugadores.get(0);
		
	}
	public HashMap<Integer,Integer> contarCartas(ArrayList<Carta> cartas){
		HashMap<Integer,Integer> res=new HashMap<Integer,Integer>();
		
		for(Carta c:cartas) {
			res.put(c.getValor(), Collections.frequency(cartas.stream().map(Carta::getValor).toList(), c.getValor()));
		}
		
		return res;
	}
}
package com.trifulcas.cartas;

import java.util.ArrayList;

public class ProbarCartas {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		Baraja miBaraja=new BarajaFrancesa();
		miBaraja.crearMazo();
		System.out.println(miBaraja);
		Carta c=miBaraja.repartir()	;
		Jugador j=new Jugador("Ana");
		System.out.println(j);
		System.out.println(c);
		System.out.println(miBaraja);
		miBaraja.desordenar()	;
		ArrayList<Jugador> jugadores=new ArrayList<>();
		jugadores.add(j);
		jugadores.add(new Jugador("Eva"));
		try {
			Poquer test=new Poquer(jugadores);
			test.jugar();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(miBaraja);
	}

}


Ejercicios Interfaces

package com.trifulcas.Interfaces;

public interface ISaludo {
	public String saludar();
}

package com.trifulcas.Interfaces;

public interface IDespedida {
	public String adios();
}

package com.trifulcas.Interfaces;

public class Amigo1 implements ISaludo {

	@Override
	public String saludar() {
		// TODO Auto-generated method stub
		return "Ola k ase???";
	}

}

package com.trifulcas.Interfaces;

public class Amigo2 implements IDespedida{

	@Override
	public String adios() {
		// TODO Auto-generated method stub
		return "Adios con el corazón";
	}

}

package com.trifulcas.Interfaces;

public class Amigo1 implements ISaludo {

	@Override
	public String saludar() {
		// TODO Auto-generated method stub
		return "Ola k ase???";
	}

}

package com.trifulcas.Interfaces;

public class Amigo2 implements IDespedida{

	@Override
	public String adios() {
		// TODO Auto-generated method stub
		return "Adios con el corazón";
	}

}

package com.trifulcas.Interfaces;

public class Amigo3 implements ISaludo, IDespedida {

	@Override
	public String adios() {
		// TODO Auto-generated method stub
		return "Hasta luego Lucas";
	}

	@Override
	public String saludar() {
		// TODO Auto-generated method stub
		return "Como están los máquinas?";
	}

}

package com.trifulcas.Interfaces;

public interface ITotal {
	public int total();
}

package com.trifulcas.Interfaces;

import java.util.ArrayList;

import com.trifulcas.cartas.Carta;

public class Notas implements ITotal {
	private ArrayList<Integer> notas;
	
	public Notas() {
		notas=new ArrayList<>();
	}
	
	public int addNumero(int nota) {
		notas.add(nota);
		return notas.size();
	}

	@Override
	public int total() {
		int total=0;
		for(int nota:notas) {
			total+=nota;
		}
		return total;
	}
}

package com.trifulcas.Interfaces;

import java.util.ArrayList;

public class Alumno implements ITotal, ISaludo {
	public ArrayList<String> alumnos;
	
	public Alumno() {
		alumnos=new ArrayList<>();
	}

	@Override
	public String saludar() {
		
		return "Hola "+(alumnos.size()>0?alumnos.get(0):"");
	}

	@Override
	public int total() {
		// TODO Auto-generated method stub
		return alumnos.size();
	}
}

package com.trifulcas.Interfaces;

public interface IFigura {
	public void dibujar();
}

package com.trifulcas.Interfaces;

public interface IFigura2D extends IFigura {
	public double area();
}


package com.trifulcas.Interfaces;

public interface IFigura3D extends IFigura2D{
	public double volumen();
}


package com.trifulcas.Interfaces;

public class Cuadrado implements IFigura2D {
	private double lado;
	
	protected double getLado() {
		return lado;
	}
	protected void setLado(double lado) {
		this.lado = lado;
	}
	public Cuadrado(double lado) {
		this.lado=lado;
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return lado*lado;
	}

	@Override
	public void dibujar() {
		System.out.println("Cuadrado");

	}

}

Cartas Java

package com.trifulcas.cartas;

public abstract class Carta {
	private String palo;

	private int numero;

	protected String getPalo() {
		return palo;
	}

	protected void setPalo(String palo) {
		this.palo = palo;
	}

	public int getNumero() {
		return numero;
	}

	protected void setNumero(int numero) {
		this.numero = numero;
	}
	
	public abstract int getValor();

	@Override
	public String toString() {
		return getNumero()+" de "+getPalo();
	}
	
}


package com.trifulcas.cartas;

public class Espanyola extends Carta {

	
	@Override
	public int getValor() {
		return getNumero()<10?getNumero():10;
	}

}

package com.trifulcas.cartas;

public class Francesa extends Carta {

	@Override
	public int getValor() {
		// TODO Auto-generated method stub
		return getNumero();
	}

}


package com.trifulcas.cartas;

import java.util.ArrayList;

public class Baraja {
	private ArrayList<Carta> baraja=new ArrayList<>();
	
	public int addCarta(Carta carta) {
		baraja.add(carta);
		return baraja.size();
	}
	public int totalValor() {
		int total=0;
		for(Carta c:baraja) {
			total+=c.getValor();
		}
		return total;
	}
}

package com.trifulcas.cartas;

public class ProbarCartas {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Francesa f= new Francesa();
		f.setPalo("Picas");
		f.setNumero(8);
		System.out.println(f);
		
		Baraja miBaraja=new Baraja();
		
		miBaraja.addCarta(f);
		Espanyola e=new Espanyola();
		e.setPalo("Oros");
		e.setNumero(12);
		miBaraja.addCarta(e);
		
		System.out.println(miBaraja.totalValor());
	}

}