Programming
Examen unidades 4 y 5
Enunciado
Implementa el método
private static void disolverAcogimiento(LinkedHashMap<String, FamiliaAcogida> acogimientos).
Este método:
Leerá del teclado el nombre del acogido.
Eliminará del mapa la entrada correspondiente a ese acogido, si es que existiera dicha entrada.
En el caso de haberse disuelto un acogimiento, se incrementará el número de plazas que puede acoger la familia que tenía el acogimiento anterior.
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.println("GESTIONAR ACOGIMIENTOS");
System.out.println("--------------------");
System.out.println("\t7. Insertar acogimiento");
System.out.println("\t8. Disolver acogimiento");
System.out.println("\t9. Imprimir acogimientos");
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
1 a1 1 a2 1 a3 4 t1 m1 1 4 t2 m2 2 7 a1 t1 7 a2 t2 7 a3 t2 8 a2 9 0
1 a1 1 a2 1 a3 4 t1 m1 1 4 t2 m2 2 7 a1 t1 7 a2 t2 7 a3 t2 8 a3 9 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: ELIMINAR ACOGIMIENTO -------------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: a1 - t1(m1):0 a3 - t2(m2):1 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: ELIMINAR ACOGIMIENTO -------------------- Nombre del acogido: 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: a1 - t1(m1):0 a2 - t2(m2):1 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 GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion:

