Autor Tema: Java ejercicio programar lista de espera simulación hospital pacientes prioridad  (Leído 1742 veces)

Leidy

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Hola, necesito ayuda para desarrollar un programa que muestre una lista de espera de 10 pacientes, simulando un hospital. Pero también teniendo en cuenta como prioridad a tres tipos de pacientes:

1.- Terapia intensiva
2.- Gravedad
3.- Atención médica


Con las siguientes especificaciones

· El hospital cuenta con un espacio para 10 pacientes
· Tiene la capacidad de atender a pacientes de acuerdo a sus 3 prioridades
· Si llega un paciente nuevo la lista de espera se mueve, según sea la prioridad de atención
· Los que son PRIORIDAD 1 (Terapia Intensiva), deberán ser atendidos SIEMPRE, a menos que se hayan ocupado los 10 lugares.
· Si hay 10 pacientes PRIORIDAD 1 o 2 y en lista hay pacientes PRIORIDAD 3, deberán salir de la lista, únicamente se QUEDAD PRIORIDAD 1 y 2.

Y todo esto mostrado en forma de tabla.

¿Alguien me podría ayudar? :(

« Última modificación: 12 de Marzo 2022, 18:11 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 983
    • Ver Perfil
Re: Lista de espera de hospital
« Respuesta #1 en: 09 de Enero 2022, 00:14 »
Mmmhh..
Vamos a ver si lo conseguimos.

Así a bote pronto, se me ocurre comenzar una clase Paciente lo más sencilla posible: nombre, apellidos y un int entre 1 y 3 para indicar la prioridad.

Una constante en forma de array de Strings, podría contener los nombres de las tres prioridades.
Así podemos usar el int del atributo "prioridad" para saber cuál es el nombre de prioridad que le corresponde a este Paciente.

Sobreescribimos su método toString() para tener una forma rápida de mostrar los datos en pantalla.

Código: [Seleccionar]
public class Paciente {

private String nombre;
private String apellidos;
private int prioridad;

private final String[] PRIORIDADES;

public Paciente(String nombre, String apellidos, int prioridad) {
this.nombre = nombre;
this.apellidos = apellidos;
//Nos aseguramos que la prioridad solo sea entre 1 y 3
if (prioridad >= 3)
this.prioridad = 3;
else if (prioridad <= 1)
this.prioridad = 1;
else
this.prioridad = 2;
//Nombres de las prioridades
PRIORIDADES = new String[] {"Terapia Intensiva", "Gravedad", "Atención Médica"};
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellidos() {
return apellidos;
}

public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}

public String getPrioridad() {
return PRIORIDADES[prioridad - 1];
}

@Override
public String toString() {
return String.format("\t%-25s\t%s", (nombre + " " + apellidos), getPrioridad());
}

}

Bien, la intención es que luego haya una cola de pacientes y se respete el "orden de prioridad".
Pues deberíamos enseñarle a esta clase como ha de compararse con otros pacientes para determinar quien tiene prioridad o no.
Esto lo facilitamos implementando la interfaz Comparable y a través de ella le enseñaremos a la clase como se ha de comparar, que básicamente será que lo haga en función del orden natural de su atributo prioridad.
Es decir, el 1 irá delante del 2, y este delante del 3.

Apenas hay que añadir 4 líneas para esto:
Código: [Seleccionar]
public class Paciente implements Comparable<Paciente>{

private String nombre;
private String apellidos;
private int prioridad;

private final String[] PRIORIDADES;

public Paciente(String nombre, String apellidos, int prioridad) {
this.nombre = nombre;
this.apellidos = apellidos;
//Nos aseguramos que la prioridad solo sea entre 1 y 3
if (prioridad >= 3)
this.prioridad = 3;
else if (prioridad <= 1)
this.prioridad = 1;
else
this.prioridad = 2;
//Nombres de las prioridades
PRIORIDADES = new String[] {"Terapia Intensiva", "Gravedad", "Atención Médica"};
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellidos() {
return apellidos;
}

public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}

public String getPrioridad() {
return PRIORIDADES[prioridad - 1];
}

@Override
public String toString() {
return String.format("\t%-25s\t%s", (nombre + " " + apellidos), getPrioridad());
}

@Override
public int compareTo(Paciente otroPaciente) {
return Integer.compare(prioridad, otroPaciente.prioridad);
}

}


Ya tenemos una clase Paciente.
Con ellos hay que formar una Cola, así que vamos a crear la clase Cola.

Podemos usar un ArrayList, tiene la ventaja de que podemos añadir todos los pacientes que queramos y gracias a que hemos implementado la interfaz Comparable, podremos mantener el ArrayList en todo momento ordenado según la prioridad.

Como digo, podremos añadir Pacientes sin limite, pero la cola de pacientes real es de solo 10 Pacientes.
Así que para mostrar el listado, lo que haremos será crear un array con los primeros 10 pacientes del ArrayList, que ya estarán ordenados.
Código: [Seleccionar]
import java.util.ArrayList;

public class Cola {

private ArrayList<Paciente> cola;

public Cola() {
cola = new ArrayList<Paciente>();
}

public void addPaciente(Paciente p) {
cola.add(p);
cola.sort(null); //Ordenamos según prioridad de pacientes
}

public Paciente[] getColaPacientes() {
/*
* La cola tendrá un límite de 10 pacientes.
* Da igual cuántos hayan almacenados en el ArrayList,
* la cola "definitiva" será solo de 10 pacientes.
* Así que construiremos un array de hasta 10 pacientes.
* Añadiremos los primeros pacientes que contiene el arraylist
* el cuál ya estará ordenado por prioridades.
*/
Paciente[] pacientes;
if (cola.size() >= 10)
pacientes = new Paciente[10];
else
pacientes = new Paciente[cola.size()];

for (int i = 0; i < pacientes.length; i++)
pacientes[i] = cola.get(i);

return pacientes;
}

}


Pues vamos a ponerlo a prueba.
Una clase con main() para testear.
Creamos un objeto Cola y con Scanner vamos pidiendo datos para crear Pacientes.

Cada Paciente creado, pedimos a la "cola" que nos de la lista de pacientes y la mostramos. Y preguntamos si se quiere seguir añadiendo más pacientes o terminar el programa.

Código: [Seleccionar]
import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Cola colaPacientes = new Cola();
Scanner teclado = new Scanner(System.in);

do {
System.out.println("\n\nNuevo Paciente.");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Apellidos: ");
String apellidos = teclado.nextLine();
System.out.print("Prioridad[1-3]: ");
int prioridad = Integer.parseInt(teclado.nextLine());
//Añadimos a la cola
colaPacientes.addPaciente(new Paciente(nombre, apellidos, prioridad));

//Generamos y mostramos lista
Paciente[] lista = colaPacientes.getColaPacientes();
System.out.println("\n\t\tCOLA DE PACIENTES");
System.out.println("\t\t---- -- ---------\n");
System.out.println("\t    NOMBRE\t\t\t  PRIORIDAD");
System.out.println("\t    ------\t\t\t  ---------");
for (Paciente p: lista)
System.out.println(p);

//Preguntamos si queremos continuar
System.out.println("\n\n¿Seguir añadiendo pacientes?(s/n)");

}while(teclado.nextLine().toLowerCase().charAt(0) == 's');

teclado.close();

}

}

Si lo ejecutamos, veremos que la lista se va mostrando en todo momento, correctamente ordenada, desplazando a los de menor prioridad al fondo de la lista y dejándolos fuera cuando ya hay otros 10 pacientes de mayor prioridad que ellos.

Código: [Seleccionar]

Nuevo Paciente.
Nombre: Andres
Apellidos: Lopez
Prioridad[1-3]: 3

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Andres Lopez              Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Belinda
Apellidos: Sanchez
Prioridad[1-3]: 2

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Belinda Sanchez          Gravedad
Andres Lopez              Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Sara
Apellidos: Perez
Prioridad[1-3]: 3

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Belinda Sanchez          Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Javier
Apellidos: Quesada
Prioridad[1-3]: 1

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Belinda Sanchez          Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Loreto
Apellidos: Lopez
Prioridad[1-3]: 1

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Loreto Lopez              Terapia Intensiva
Belinda Sanchez          Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Sergio
Apellidos: Guasch
Prioridad[1-3]: 2

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Loreto Lopez              Terapia Intensiva
Belinda Sanchez          Gravedad
Sergio Guasch            Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Luis
Apellidos: Pereda
Prioridad[1-3]: 1

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Loreto Lopez              Terapia Intensiva
Luis Pereda              Terapia Intensiva
Belinda Sanchez          Gravedad
Sergio Guasch            Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Laura
Apellidos: Juan
Prioridad[1-3]: 1

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Loreto Lopez              Terapia Intensiva
Luis Pereda              Terapia Intensiva
Laura Juan                Terapia Intensiva
Belinda Sanchez          Gravedad
Sergio Guasch            Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Alicia
Apellidos: Ventura
Prioridad[1-3]: 3

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Loreto Lopez              Terapia Intensiva
Luis Pereda              Terapia Intensiva
Laura Juan                Terapia Intensiva
Belinda Sanchez          Gravedad
Sergio Guasch            Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica
Alicia Ventura            Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Jorge
Apellidos: Morales
Prioridad[1-3]: 2

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Loreto Lopez              Terapia Intensiva
Luis Pereda              Terapia Intensiva
Laura Juan                Terapia Intensiva
Belinda Sanchez          Gravedad
Sergio Guasch            Gravedad
Jorge Morales            Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica
Alicia Ventura            Atención Médica


¿Seguir añadiendo pacientes?(s/n)
s


Nuevo Paciente.
Nombre: Ana
Apellidos: Blanco
Prioridad[1-3]: 1

COLA DE PACIENTES
---- -- ---------

    NOMBRE   PRIORIDAD
    ------   ---------
Javier Quesada            Terapia Intensiva
Loreto Lopez              Terapia Intensiva
Luis Pereda              Terapia Intensiva
Laura Juan                Terapia Intensiva
Ana Blanco                Terapia Intensiva
Belinda Sanchez          Gravedad
Sergio Guasch            Gravedad
Jorge Morales            Gravedad
Andres Lopez              Atención Médica
Sara Perez                Atención Médica


¿Seguir añadiendo pacientes?(s/n)
n

Y con esto parece que ya tenemos al menos la parte lógica del programa.

Revísalo, pregunta lo que no entiendas y dinos si falta algo más por completar.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Leidy

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Lista de espera de hospital
« Respuesta #2 en: 09 de Enero 2022, 02:56 »
Hola muchísimas gracias por ayudarme con este programa:), mil gracias.
Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".