Programming
Examen unidades 4 y 5
Enunciado
Añade al menú las siguientes líneas:
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");El método insertarAcogimiento() hace uso del método acoger() de la clase FamiliaAcogida. Implementa dicho método, sabiendo que:
Si el número de plazas de las que dispone la familia que va a coger es menor o igual que 0, debe lanzar la excepción IllegalArgumentException.
En caso contrario,
se incluirá, en acogimientos, la asociación entre el acogido y la familia.
Se decrementará el número de plazas de acogida disponibles para esa familia.
Se devolverá true.
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 4 t1 m1 1 4 t2 m2 2 7 a1 t1 7 a2 t1 7 a2 t2 9 0
1 a1 1 a3 4 t1 m1 1 4 t2 m2 2 7 a1 t1 7 a3 t1 7 a3 t2 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: 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: ERROR: La familia no tiene plazas libres El acogimiento no se ha podido tramitar. 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: 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:
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: ERROR: La familia no tiene plazas libres El acogimiento no se ha podido tramitar. 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: 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:

