public class NeoIngreso {
private ArrayList<Madre> madres;
private Scanner teclado;
public NeoIngreso() {
teclado = new Scanner(System.in);
madres = new ArrayList<Madre>();
//Intentamos recuperar datos guardados en disco
leerFichero("d:/ManchaCentro/neomancha.dat");
//Arrancamos menu
menu();
}
public void addMadreBebes(Madre nuevamadre, ArrayList<Persona> bebes) {
//Aseguramos que los bebes están ordenados
bebes.sort(null);
/*
* Puede que la madre ya este registrada sin bebes asociados todavía.
* Comprobamos si madre ya existe en registro, en cuyo caso solo
* habrá que añadir los bebes asociados
*/
if (madres.contains(nuevamadre)) {
/*
* Madre ya registrada, buscamos su posición
* para añadirle los bebés
*/
for (Madre md: madres)
if (md.equals(nuevamadre))
md.setBebes(bebes);
}
else {
//Madre no registrada
nuevamadre.setBebes(bebes);
madres.add(nuevamadre);
}
}
public void addPacientes() throws ManchaException {
System.out.println("# Datos de la madre #");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Codigo: ");
int codigo = Integer.parseInt(teclado.nextLine());
System.out.print("Habitacion: ");
int habitacion = Integer.parseInt(teclado.nextLine());
Madre madre = new Madre(nombre, codigo, habitacion);
ArrayList<Persona> bebes = new ArrayList<Persona>();
char agregar = ' ';
System.out.print("\n¿Desea agregar bebés ahora?[s/n]: ");
agregar = teclado.nextLine().toLowerCase().charAt(0);
while (agregar == 's') {
System.out.println("\n# Datos del bebé #");
System.out.print("Nombre: ");
String nomBebe = teclado.nextLine();
System.out.print("Codigo: ");
int codBebe = Integer.parseInt(teclado.nextLine());
System.out.print("Habitacion(100=incubadora): ");
int habBebe = Integer.parseInt(teclado.nextLine());
bebes.add(new Persona(nomBebe, codBebe, habBebe));
System.out.print("\n¿Desea agregar otro bebé?[s/n]: ");
agregar = teclado.nextLine().toLowerCase().charAt(0);
}
//Tenemos todos los datos para registrar
addMadreBebes(madre, bebes);
}
public void listPacientes() {
//Primero ordenamos
madres.sort(null);
//Y ahora mostramos
System.out.println("\n# Listado de Pacientes #");
for (Madre md: madres)
System.out.println(md);
}
public void escribirFichero(String ruta) {
try {
File fichero = new File(ruta);
if (!fichero.exists()) { //Si no existe
File carpeta = new File(fichero.getParent()); //Creamos carpeta
carpeta.mkdir();
fichero.createNewFile(); //Creamos archivo
}
ObjectOutputStream escritor = new ObjectOutputStream(new FileOutputStream(ruta));
escritor.writeObject(madres); //Guardamos arraylist madres
escritor.close();
} catch (Exception e) {
System.out.println("No se pudo crear/guardar fichero: " + ruta);
}
}
public void leerFichero(String ruta) {
try {
ObjectInputStream lector = new ObjectInputStream(new FileInputStream(ruta));
madres = (ArrayList<Madre>) lector.readObject(); //Recuperamos ArrayList madres
lector.close();
} catch (IOException e) {
System.out.println("No se pudo leer fichero: " + ruta);
} catch (ClassNotFoundException e) {
System.out.println("No se reconocen los datos del fichero: " + ruta);
}
}
public double mediaBebes() {
float contadorMadres = 0;
float contadorBebes = 0;
for (Madre md: madres)
if (md.getBebes().size() != 0) {//Esta madre SÍ tiene bebes
contadorMadres++;
contadorBebes += md.getBebes().size();
}
return contadorBebes / contadorMadres;
}
public int encontrarMadre(int codigo) throws ManchaException {
for (Madre md: madres)
if (md.getCodigo() == codigo)
return md.getHabitacion();
//Si el bucle anterior no ha retornado nada, es que la madre no está registrada
throw new ManchaException("No hay ninguna madre ingresada con CODIGO: " + codigo);
}
public void menu() {
int opcion = 0;
while (opcion != 5) {
System.out.println("\n\t\tHospital Mancha Centro");
System.out.println("\t\t-------- ------ ------\n");
System.out.println("[1] --- Añadir Pacientes");
System.out.println("[2] --- Listar Pacientes");
System.out.println("[3] --- Obtener media de Bebes/Madres");
System.out.println("[4] --- Encontrar Madre");
System.out.println("[5] --- TERMINAR PROGRAMA");
System.out.print("Opcion: ");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
try {
addPacientes();
} catch (ManchaException e) {
System.out.println(e.getMessage());
}
break;
case 2:
listPacientes();
break;
case 3:
System.out.printf("Media de bebes/madre: %.2f\n", mediaBebes());
break;
case 4:
System.out.println("\n# Buscar Madre #");
System.out.print("Codigo: ");
int codigo = Integer.parseInt(teclado.nextLine());
try {
System.out.println("Habitacion: " + encontrarMadre(codigo));
} catch (ManchaException e) {
System.out.println(e.getMessage());
}
break;
case 5:
//Guardamos antes de cerrar
escribirFichero("d:/ManchaCentro/neomancha.dat");
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("Opción equivocada");
}
}
}
public static void main(String[] args) {
new NeoIngreso(); //Al invocar constructor, se cargan datos del disco y comienza el menu()
}
}