Programming
Examen unidades 4 y 5
Enunciado
Añade al menú las siguientes líneas:
System.out.println("GESTIONAR FAMILIAS DE ACOGIDA"); System.out.println("--------------------"); System.out.println("\t4. Nueva familia de acogida"); System.out.println("\t5. Eliminar familia de acogida"); System.out.println("\t6. Listar familias de acogida");Implementa el método
private static void nuevaFamiliaAcogida(LinkedList <FamiliaAcogida> familias).
Este método:
Debe solicitar los 3 datos que se necesitan para añadir a la familia:
“Nombre del tutor: “
“Municipio: “
“Numero maximo de acogidas: “
Invocará al constructor de la clase FamiliaAcogida, teniendo la precaución de capturar la posible excepción IllegalArgumentException.
El constructor de la clase FamiliaAcogida lanzará la excepción IllegalArgumentException si el número máximo de acogidas no está entre 1 y 5.
Se añadirá la familia recién creada a la lista de familias de acogida.
Solución
package acogimientos;
import java.util.Iterator;
import java.util.Scanner;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Objects;
public class Acogimientos {
private static final int NUMERO_ACOGIDOS = 5;
static String[] acogidos = new String[NUMERO_ACOGIDOS];
static int numAcogidos = 0;
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
LinkedList familiasAcogida = new LinkedList();
LinkedHashMap acogimientos = new LinkedHashMap();
int opcion;
do {
opcion = imprimirMenu();
switch (opcion) {
case 1:
nuevoAcogido(); break;
case 2:
eliminarAcogido(); break;
case 3:
listarAcogidos(); break;
case 4:
nuevaFamiliaAcogida(familiasAcogida); break;
case 5:
eliminarFamiliaAcogida(familiasAcogida); break;
case 6:
listarFamiliasAcogida(familiasAcogida); break;
case 7:
insertarAcogimiento(acogimientos, familiasAcogida); break;
case 8:
disolverAcogimiento(acogimientos); break;
case 9:
imprimirAcogimientos(acogimientos, familiasAcogida);
}
} while (opcion != 0);
familiasAcogida.clear();
}
private static void nuevoAcogido() {
System.out.println("NUEVO ACOGIDO");
System.out.println("-------------");
System.out.print("Nombre del acogido: ");
try {
acogidos[numAcogidos++] = sc.nextLine();
} catch (ArrayIndexOutOfBoundsException ex) {
System.out.println("ERROR: En estos momentos, no hay capacidad para otra acogida");
}
}
private static void eliminarAcogido() {
System.out.println("ELIMINAR ACOGIDO");
System.out.println("----------------");
System.out.print("Nombre del acogido: ");
String nombreAcogido = sc.nextLine();
int indiceAcogido = buscarAcogido(nombreAcogido);
if (indiceAcogido >= 0) {
while (indiceAcogido < acogidos.length && acogidos[indiceAcogido]!= null ) {
if (indiceAcogido < acogidos.length - 1) {
acogidos[indiceAcogido] = acogidos[indiceAcogido + 1];
}
indiceAcogido++;
}
acogidos[indiceAcogido - 1] = null;
System.out.println("Acogido eliminado de la lista.");
} else {
System.out.println("ERROR: El acogido no existe");
}
}
private static void listarAcogidos() {
System.out.println("LISTAR ACOGIDOS");
System.out.println("-------------------");
for (int i = 0; i < acogidos.length && acogidos[i]!= null ; i++) {
System.out.print(acogidos[i] + "_-_");
}
System.out.println("");
}
private static void nuevaFamiliaAcogida(LinkedList familias) {
System.out.println("NUEVA FAMILIA DE ACOGIDA");
System.out.println("------------------------");
System.out.print("Nombre del tutor: ");
String nombreTutor = sc.nextLine();
System.out.print("Municipio: ");
String municipio = sc.nextLine();
System.out.println("Numero maximo de acogidas: ");
int plazas = Integer.parseInt(sc.nextLine());
try {
familias.add(new FamiliaAcogida(nombreTutor, municipio, plazas));
} catch(IllegalArgumentException iae) {
System.out.println("Las plazas deben estar entre 1 y 5.");
}
}
private static void eliminarFamiliaAcogida(LinkedList familias) {
System.out.println("ELIMINAR FAMILIA DE ACOGIDA");
System.out.println("---------------------------");
System.out.print("Nombre del tutor: ");
String nombreTutor = sc.nextLine();
FamiliaAcogida familiaParaBorrar = buscarFamilia(familias, nombreTutor);
if(familiaParaBorrar != null) {
familias.remove(familiaParaBorrar);
}
}
private static void listarFamiliasAcogida(LinkedList familias) {
System.out.println("LISTAR FAMILIAS DE ACOGIDA");
System.out.println("-------------------");
for (FamiliaAcogida familia : familias) {
System.out.println(familia);
}
}
private static void insertarAcogimiento(LinkedHashMap acogimientos, LinkedList familias) {
System.out.println("INSERTAR ACOGIMIENTO");
System.out.println("--------------------");
System.out.print("Nombre del acogido: ");
boolean acogimientoRealizado = false;
String nombreAcogido = sc.nextLine();
int indiceAcogido = buscarAcogido(nombreAcogido);
if (indiceAcogido >= 0) {
System.out.print("Nombre del tutor: ");
String nombreTutor = sc.nextLine();
FamiliaAcogida familiaAcogida = buscarFamilia(familias, nombreTutor);
if (familiaAcogida != null) {
try {
acogimientoRealizado = familiaAcogida.acoger(acogimientos, acogidos[indiceAcogido]);
} catch (Exception ex) {
System.out.println("ERROR: La familia no tiene plazas libres");
}
}
}
if(!acogimientoRealizado) {
System.out.println("El acogimiento no se ha podido tramitar.");
}
}
private static void disolverAcogimiento(LinkedHashMap acogimientos) {
System.out.println("ELIMINAR ACOGIMIENTO");
System.out.println("--------------------");
boolean disolucionRealizada = false;
System.out.println("Nombre del acogido: ");
String nombreAcogido = sc.nextLine();
FamiliaAcogida familiaAcogida = acogimientos.remove(nombreAcogido);
if (familiaAcogida != null) {
familiaAcogida.setNumPlazasAcogida(familiaAcogida.getNumPlazasAcogida() + 1);
}
}
private static void imprimirAcogimientos(LinkedHashMap acogimientos, LinkedList familias) {
for (String acogido: acogidos) {
FamiliaAcogida familia = acogimientos.get(acogido);
if(familia != null) {
System.out.println(acogido + " - " + familia);
}
}
}
private static void imprimirAcogimientosBidimensional(LinkedHashMap acogimientos, LinkedList familias) {
char[][] matrizAcogimientos = new char[acogidos.length][familias.size()];
System.out.println("IMPRIMIR ACOGIMIENTOS");
System.out.println("---------------------");
for (int i = 0; i < acogidos.length ; i++) {
if (acogimientos.containsKey(acogidos[i])) {
FamiliaAcogida familiaAcogida = acogimientos.get(acogidos[i]);
int j = familias.indexOf(familiaAcogida);
if(j >= 0) {
matrizAcogimientos[i][j] = 'X';
}
}
}
System.out.print("\t\t");
for (int j = 0; j < familias.size(); j++) {
System.out.print(familias.get(j) + "\t");
}
System.out.println("");
for (int i = 0; i < acogidos.length; i++) {
System.out.print(acogidos[i] + "\t");
for (int j = 0; j < familias.size(); j++) {
System.out.print("\t" + matrizAcogimientos[i][j] + "\t");
}
System.out.println("");
}
}
private static FamiliaAcogida buscarFamilia(LinkedList familias, String nombreTutor) {
FamiliaAcogida familiaBuscada = null;
for (FamiliaAcogida familia : familias) {
if (familia.getNombreTutor().equals(nombreTutor)) {
familiaBuscada = familia;
}
}
return familiaBuscada;
}
private static int buscarAcogido(String nombreAcogido) {
int indiceEncontrado = -1;
var i = 0;
while (indiceEncontrado < 0 && i < acogidos.length && acogidos[i] != null) {
if (acogidos[i].equals(nombreAcogido)) {
indiceEncontrado = i;
} else {
i++;
}
}
return indiceEncontrado;
}
public static int imprimirMenu() {
int opcion;
do {
System.out.println("0. Salir");
System.out.println("GESTIONAR ACOGIDOS");
System.out.println("--------------------");
System.out.println("\t1. Nuevo acogido");
System.out.println("\t2. Eliminar acogido");
System.out.println("\t3. Listar acogidos");
System.out.println("GESTIONAR FAMILIAS DE ACOGIDA");
System.out.println("--------------------");
System.out.println("\t4. Nueva familia de acogida");
System.out.println("\t5. Eliminar familia de acogida");
System.out.println("\t6. Listar familias de acogida");
System.out.print("Elija una opcion: ");
opcion = sc.nextInt();
System.out.println();
} while (opcion < 0 || opcion > 9);
sc.nextLine();
return opcion;
}
}
class FamiliaAcogida {
private String nombreTutor;
private String municipio;
private int numPlazasAcogida;
public FamiliaAcogida(String nombreTutor, String municipio, int numPlazasAcogida) {
if(numPlazasAcogida <= 0 || numPlazasAcogida > 5) throw new IllegalArgumentException();
this.nombreTutor = nombreTutor;
this.municipio = municipio;
this.numPlazasAcogida = numPlazasAcogida;
}
public String getNombreTutor() {
return nombreTutor;
}
public int getNumPlazasAcogida() {
return numPlazasAcogida;
}
public void setNumPlazasAcogida(int numPlazasAcogida) {
this.numPlazasAcogida = numPlazasAcogida;
}
public boolean acoger(LinkedHashMap acogimientos, String nombreAcogido) {
if(this.numPlazasAcogida <= 0) {
throw new IllegalArgumentException();
}
acogimientos.put(nombreAcogido, this);
this.setNumPlazasAcogida(this.getNumPlazasAcogida() - 1);
return true;
}
@Override
public String toString() {
return nombreTutor + "(" + municipio + "):" + numPlazasAcogida;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof FamiliaAcogida)) {
return false;
}
FamiliaAcogida c = (FamiliaAcogida) obj;
return this.nombreTutor.equals(c.nombreTutor);
}
}
Input
4 t1 m1 1 4 t-1 m-1 -1 4 t2 m2 2 6 0
4 t1 m1 1 4 t2 m2 2 4 t-1 m-1 -1 4 t3 m3 3 6 0
Output
0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: Las plazas deben estar entre 1 y 5. 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: LISTAR FAMILIAS DE ACOGIDA ------------------- t1(m1):1 t2(m2):2 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion:
0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: Las plazas deben estar entre 1 y 5. 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion: LISTAR FAMILIAS DE ACOGIDA ------------------- t1(m1):1 t2(m2):2 t3(m3):3 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida Elija una opcion:

