Programming

Examen unidades 4 y 5

Enunciado

Crea un proyecto en NetBeans llamado acogimientos e incluye en él el contenido del archivo Acogimientos.java. Posteriormente, resuelve los ejercicios que se solicitan a continuación

Implementa el método
  private static void nuevoAcogido().
Este método:

  • Insertará, en el array acogidos[], el nombre de un nuevo acogido introducido por teclado.

  • La posición en la que se debe insertar será la que indique la variable numAcogidos. Esta variable se deberá incrementar por cada acogido almacenado en el array acogidos[].

  • Tanto el array acogidos[] como la variable numAcogidos deberán ser visibles en todos los métodos de la clase Acogimientos. El tamaño del array será el indicado por la constante NUMERO_ACOGIDOS.

  • Hay que tener en cuenta que la capacidad máxima inicial del array es la que indica la constante NUMERO_ACOGIDOS y que hay que controlar la excepción ArrayIndexOutOfBoundsException en el caso de que se quieran almacenar más acogidos de los que permite el array acogidos[].

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.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 1 a4 1 a5 1 a6 3 0
1 a2 1 a1 1 a4 1 a5 1 a3 1 a6 3 0

Output

0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: ERROR: En estos momentos, no hay capacidad para otra acogida 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: LISTAR ACOGIDOS ------------------- a1_-_a2_-_a3_-_a4_-_a5_-_ 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion:
0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: ERROR: En estos momentos, no hay capacidad para otra acogida 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: LISTAR ACOGIDOS ------------------- a2_-_a1_-_a4_-_a5_-_a3_-_ 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: