Autor Tema: Ejercicio resuelto Java Paciente Historial Clinico menú JOptionPane #codigoJava  (Leído 42073 veces)

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
A ver, recapitulemos desde el principio.
Teníamos 3 entidades a gestionar.

Clase Paciente
Código: [Seleccionar]
import javax.swing.JOptionPane;

public final class Paciente {

private String id;
private String nombre;
private String apellidos;
private int edad;
private String genero;

public Paciente(String id, String nombre, String apellidos, int edad, String genero) {
this.id = id;
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
this.genero = genero;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

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 int getEdad() {
return edad;
}

public void setEdad(int edad) {
this.edad = edad;
}

public String getGenero() {
return genero;
}

public void setGenero(String genero) {
this.genero = genero;
}

/**
* Muestra en un panel todos los datos del Paciente
*/
public void mostrar() {
String mensaje = "ID Paciente: " + id + "\nNombre: " + nombre
+ "\nApellidos: " + apellidos + "\nEdad: " + edad
+ "\nGenero: " + genero;
JOptionPane.showMessageDialog(null, mensaje, "Mostrar Paciente", JOptionPane.INFORMATION_MESSAGE);
}

@Override
public boolean equals(Object objeto) {
if (objeto instanceof Paciente) {
Paciente otroPaciente = (Paciente) objeto;
return id.equals(otroPaciente.id);
}
else
return false;
}

}

Clase Medico
Código: [Seleccionar]
import javax.swing.JOptionPane;

public final class Medico {

private String id;
private String nombre;
private String apellidos;
private String especialidad;

public Medico(String id, String nombre, String apellidos, String especialidad) {
this.id = id;
this.nombre = nombre;
this.apellidos = apellidos;
this.especialidad = especialidad;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

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 getEspecialidad() {
return especialidad;
}

public void setEspecialidad(String especialidad) {
this.especialidad = especialidad;
}

/**
* Muestra por panel todos los datos del Medico
*/
public void mostrar() {
String mensaje = "ID Medico: " + id + "\nNombre: " + nombre
+ "\nApellidos: " + apellidos + "\nEspecialidad: " + especialidad;
JOptionPane.showMessageDialog(null, mensaje, "Mostrar Medico", JOptionPane.INFORMATION_MESSAGE);
}

@Override
public boolean equals(Object objeto) {
if (objeto instanceof Medico) {
Medico otroMedico = (Medico) objeto;
return id.equals(otroMedico.id);
}
else
return false;
}

}

Y clase HistorialClinico
Código: [Seleccionar]
import javax.swing.JOptionPane;

public final class HistorialClinico {

private String codigo;
private String fecha;
private String idPaciente;
private String idMedico;
private String observaciones;

public HistorialClinico(String codigo, String fecha, String idPaciente,
String idMedico, String observaciones) {
this.codigo = codigo;
this.fecha = fecha;
this.idPaciente = idPaciente;
this.idMedico = idMedico;
this.observaciones = observaciones;
}

public String getCodigo() {
return codigo;
}

public void setCodigo(String codigo) {
this.codigo = codigo;
}

public String getFecha() {
return fecha;
}

public void setFecha(String fecha) {
this.fecha = fecha;
}

public String getIdPaciente() {
return idPaciente;
}

public void setIdPaciente(String idPaciente) {
this.idPaciente = idPaciente;
}

public String getIdMedico() {
return idMedico;
}

public void setIdMedico(String idMedico) {
this.idMedico = idMedico;
}

public String getObservaciones() {
return observaciones;
}

public void setObservaciones(String observaciones) {
this.observaciones = observaciones;
}

/**
* Muestra por panel todos los datos del Historial Clinico
*/
public void mostrar() {
String mensaje = "Codigo Historial: " + codigo + "\nFecha: " + fecha
+ "\nID Paciente: " + idPaciente + "\nID Medico: " + idMedico
+ "\nObservaciones:\n" + observaciones;
JOptionPane.showMessageDialog(null, mensaje, "Mostrar Medico", JOptionPane.INFORMATION_MESSAGE);
}

@Override
public boolean equals(Object objeto) {
if (objeto instanceof HistorialClinico) {
HistorialClinico otroHistorial = (HistorialClinico) objeto;
return codigo.equals(otroHistorial.codigo);
}
else
return false;
}

}

Para gestionar esas 3 entidades, hicimos 3 clase "gestoras", en las que cada una disponía de un ArrayList para albergar objetos de esas entidades y unos métodos para operar con ellos.

Esas tres clases son muy similares, solo cambia el tipo de dato del que se están ocupando cada una.
Así pues, podemos crear una interfaz declarando los métodos que toda clase "gestora" de nuestro proyecto debería tener y usar un genérico para así no "obligar" a que se ocupen de un tipo de dato (una clase) en concreto, si no que cuando las clases "gestoras" que vayan a implementar esta interfaz podrán escoger el tipo de dato del que se van a ocupar.

Así pues, la interfaz genérica es tan sencilla como esto:
Código: [Seleccionar]
public interface Gestion<T> {

//Métodos de gestión comunes
boolean agregar(T valor);
void modificar(T valor);
boolean eliminar(T valor);
T obtener();
void listar();

}

Ahí usamos el genérico T (de Type, o sea, Tipo) para indicar que se va a trabajar con algún tipo de dato. El que sea, uno cualquiera, y con ese tipo de dato haremos las mismas operaciones.
Podremos agregar un objeto de ese tipo de dato, podremos modificarlo, podremos eliminarlo, podremos obtener un objeto de ese tipo y además podremos hacer un listado.
En este último método no es necesario indicarle ningún genérico, ya que lo que hará será mostrar el contenido de un ArrayList que será declarado en la clase "gestora".


Bien, vamos a ver una clase gestora. Comencemos con GestionPacientes.
Al empezar a escribir esta clase, vamos a implementar la interfaz Gestion indicándole que ha de ocuparse del tipo de dato Paciente.

Al implementar esta interfaz, veremos que nos sale un aviso (ya depende del IDE que use cada uno) indicando que estamos OBLIGADOS a sobrescribir los métodos que estamos heredando la interfaz implementada.

Código: [Seleccionar]
public class GestorPacientes implements Gestion<Paciente> {

@Override
public boolean agregar(Paciente valor) {

return false;
}

@Override
public void modificar(Paciente valor) {

}

@Override
public boolean eliminar(Paciente valor) {

return false;
}

@Override
public Paciente obtener() {

return null;
}

@Override
public void listar() {


}

}

Bien, a esta clase habrá que añadirle ahora un ArrayList y escribir el código necesario para que cada método implementado cumpla con su función.
Además, añadiremos un método que permita crear un Paciente pidiendo datos al usuario.
Código: [Seleccionar]
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class GestorPacientes implements Gestion<Paciente> {

private ArrayList<Paciente> pacientes = new ArrayList<Paciente>();

//Métodos implementados por interfaz
@Override
public boolean agregar(Paciente valor) {
if (pacientes.contains(valor)) {
JOptionPane.showMessageDialog(null,
"Ya existe un Paciente con este ID", "Agregar Paciente", JOptionPane.WARNING_MESSAGE);
return false;
}
else
return pacientes.add(valor);
}

@Override
public void modificar(Paciente valor) {

valor.setId(JOptionPane.showInputDialog(null, "ID actual: " + valor.getId()
+ "\nIntroduzca nuevo identificador:", "Modificar Paciente", JOptionPane.QUESTION_MESSAGE));

valor.setNombre(JOptionPane.showInputDialog(null, "Nombre actual: " + valor.getNombre()
+ "\nIntroduzca nuevo nombre:", "Modificar Paciente", JOptionPane.QUESTION_MESSAGE));

valor.setApellidos(JOptionPane.showInputDialog(null, "Apellidos actuales: " + valor.getApellidos()
+ "\nIntroduzca nuevos apellidos:", "Modificar Paciente", JOptionPane.QUESTION_MESSAGE));

valor.setGenero(JOptionPane.showInputDialog(null, "Genero actual: " + valor.getGenero()
+ "\nIntroduzca nuevo genero:", "Modificar Paciente", JOptionPane.QUESTION_MESSAGE));

try {
valor.setEdad(Integer.parseInt(JOptionPane.showInputDialog(null, "Edad actual: " + valor.getEdad()
+ "\nIntroduzca nueva edad:", "Modificar Paciente", JOptionPane.QUESTION_MESSAGE)));
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Solo se admite introducir numeros para la edad\nNo se ha registrado el valor introducido",
"Error", JOptionPane.WARNING_MESSAGE);
}
}

@Override
public boolean eliminar(Paciente valor) {
if (pacientes.contains(valor))
return pacientes.remove(valor);
else {
JOptionPane.showMessageDialog(null,
"No existe Paciente con este ID", "Eliminar Paciente", JOptionPane.WARNING_MESSAGE);
return false;
}
}

@Override
public Paciente obtener() {
if (pacientes.isEmpty()) {
JOptionPane.showMessageDialog(null, "No hay Pacientes registrados", "Obtener Paciente",
JOptionPane.WARNING_MESSAGE);
return null;
}
else {
String id = JOptionPane.showInputDialog(null, "Introduzca Identificador del paciente:",
"Obtener Paciente", JOptionPane.QUESTION_MESSAGE);
//Buscamos paciente
for (Paciente paci: pacientes)
if (paci.getId().equals(id))
return paci; //Encontrado, lo retornamos y aquí termina el método

//Bucle FOR ha finalizado sin retornar nada, significa que no hay paciente con ese id
JOptionPane.showMessageDialog(null, "No existe Paciente con este ID", "Obtener Paciente",
JOptionPane.WARNING_MESSAGE);
return null;
}
}

@Override
public void listar() {
if (pacientes.isEmpty())
JOptionPane.showMessageDialog(null, "No hay Pacientes registrados", "Listar Pacientes",
JOptionPane.WARNING_MESSAGE);
else
for (Paciente paci: pacientes)
paci.mostrar();

}

//Método propio de esta clase

public Paciente crearPaciente() {
String id = JOptionPane.showInputDialog(null, "Introduzca Identificador:", "Nuevo Paciente", JOptionPane.QUESTION_MESSAGE);
String nombre = JOptionPane.showInputDialog(null, "Nombre:", "Nuevo Paciente", JOptionPane.QUESTION_MESSAGE);
String apellidos = JOptionPane.showInputDialog(null, "Apellidos:", "Nuevo Paciente", JOptionPane.QUESTION_MESSAGE);
String genero = JOptionPane.showInputDialog(null, "Genero:", "Nuevo Paciente", JOptionPane.QUESTION_MESSAGE);
int edad = 0;
try {
edad = Integer.parseInt(JOptionPane.showInputDialog(null, "Edad:", "Nuevo Paciente", JOptionPane.QUESTION_MESSAGE));
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Solo se admite introducir numeros para la edad\nNo se ha registrado el valor introducido",
"Error", JOptionPane.WARNING_MESSAGE);
}
return new Paciente(id, nombre, apellidos, edad, genero);
}

}

Y ahora podemos ponerlo a prueba creando la clase con el programa principal.
En esta clase es donde declararemos las tres clases gestoras y mostraremos menús para que el usuario pueda elegir las gestiones que quiere realizar.
Ahora mismo, solo funcionará la gestión de pacientes:
Código: [Seleccionar]
import javax.swing.JOptionPane;

public final class TestClinica {

//Clases "gestoras"
static GestorPacientes pacientes = new GestorPacientes();
//static GestorMedicos medicos = new GestorMedicos();
//static GestorHistorial historiales = new GestorHistorial();


//Textos para los menus JOptionPane
static final String TEXTO_MENU_PR = "[1] - Gestionar Pacientes\n[2] - Gestionar Medicos"
+ "\n[3] - Gestionar Historiales\n[4] - Salir";
static final String TEXTO_MENU_GP = "[1] - Registrar Pacientes\n[2] - Mostrar Pacientes"
+ "\n[3] - Modificar Pacientes\n[4] - Eliminar Pacientes\n[5] - Volver";

//Programa principal
public static void main(String[] args) {

String opcion = "";

while (!opcion.equals("4")) {
opcion = JOptionPane.showInputDialog(null, TEXTO_MENU_PR,
"Menu Clinica", JOptionPane.QUESTION_MESSAGE);
switch(opcion) {
case "1":
gestionarPacientes();
break;
case "2":
//gestionarMedicos();
break;
case "3":
//gestionarHistoriales();
break;
case "4":
JOptionPane.showMessageDialog(null, "FIN DE PROGRAMA", "Menu Clinica",
JOptionPane.INFORMATION_MESSAGE);
break;
default:
JOptionPane.showMessageDialog(null, "Opción equivocada", "Menu Clinica",
JOptionPane.ERROR_MESSAGE);
}
}

}

//Métodos para mostrar los submenús
private static void gestionarPacientes() {
String opcion = "";

while (!opcion.equals("5")) {
opcion = JOptionPane.showInputDialog(null, TEXTO_MENU_GP,
"Gestion Pacientes", JOptionPane.QUESTION_MESSAGE);
switch(opcion) {
case "1":
Paciente nuevo = pacientes.crearPaciente();
if (pacientes.agregar(nuevo))
JOptionPane.showMessageDialog(null, "Nuevo Paciente agregado", "Agregar Paciente",
JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null, "No se pudo registrar Paciente", "Agregar Paciente",
JOptionPane.ERROR_MESSAGE);
break;
case "2":
pacientes.listar();
break;
case "3":
Paciente modificar = pacientes.obtener();
if (modificar != null)
pacientes.modificar(modificar);
break;
case "4":
Paciente borrar = pacientes.obtener();
if (borrar != null) {
if (pacientes.eliminar(borrar))
JOptionPane.showMessageDialog(null, "Paciente eliminado", "Eliminar Paciente",
JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null, "No se pudo eliminar Paciente", "Eliminar Paciente",
JOptionPane.ERROR_MESSAGE);
}
break;
case "5":
JOptionPane.showMessageDialog(null, "Volviendo al Menú Principal", "Gestion Pacientes",
JOptionPane.INFORMATION_MESSAGE);
break;
default:
JOptionPane.showMessageDialog(null, "Opción equivocada", "Menú Clínica",
JOptionPane.ERROR_MESSAGE);
}
}
}

}


Pues con esto, ya tienes un ejemplo de como usar una interfaz con datos genéricos.

Intenta escribir las clases gestoras para médicos e historiales siguiendo este ejemplo.
Si tienes dudas o te atascas, consulta por aquí.

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

 

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".