841
Aprender a programar desde cero / Re:Ayuda URGENTE
« en: 14 de Septiembre 2018, 01:49 »
Hola.
Quizás sería más interesante que mostraras lo que tienes hecho y donde te has atascado para poder ayudarte.
O bien volver a empezar desde el principio y rehacer el programa juntos..
En fin, vamos paso a paso.
Estas serían las clases básicas conforme a lo que pide el enunciado. No creo que aquí hayas tenido ningún problema.
Clase Paciente
Clase Medico
Clase HistorialClinico
Fíjate que en cada clase, les he creado un metodo llamado mostrar() que se encargaría de mostrar por pantalla todos los datos de la clase en cuestión.
Bueno, esta es la parte fácil.
La otra parte, en realidad no es nada difícil, pero si tiene el inconveniente de que requiere mucho código.
Hay que escribir un menu principal, un menu para las opciones del Paciente, Medico e Historial, submenus para crear y modificar Pacientes, Medicos e Historiales...
Repito que no es nada dificil, pero tantas líneas de código, si no se organizan correctamente, tendremos un código enooooorme, muy caótico, dificil de comprender y de mantener.. que solo mirarlo ya nos dará dolor de cabeza.
Y es entonces cuando yo te pregunto: ¿Sabes si hay que ceñirse únicamente a esas clases?
¿O podríamos crear otras clases que nos ayuden a facilitar la tarea?
De hecho, sería lo lógico y lo que cualquier programador haría para encarar este ejercicio.
Podríamos hacer tres nuevas clases, las cuáles cada una se encargaría de la gestión de cada una de las anteriores.
Por ejemplo, una clase llamada GestorPacientes, tendría como atributo un ArrayList donde se guardarían los Pacientes.
Y tendría unos métodos para cada una de las acciones necesarias para gestionar esta base de datos.
Un metodo para dar de alta un nuevo Paciente, otro para mostrar listado de pacientes, otro para modificar, otro para borrar...
De este modo, todo el código necesario para gestionar Pacientes, estaría concentrado en su propia clase y separado de todo el código necesario para gestionar Medicos y de todo el código necesario para gestionar Historiales, los cuáles estarían en sus respectivas clases de Gestion.
La clase GestorPacientes podría ser como la que pongo a continuación. Aunque no está completa, solo incluye los metodos para crear nuevo Paciente y para mostrar todo el listado de pacientes.
Faltarían los metodos para modificar y borrar pacientes.
Clase GestorPacientes
Si crees que es posible enfocar el ejercicio de esta manera, podemos seguir adelante a partir de aquí.
Intenta completar los dos métodos que faltarían para esta clase y tomandola como ejemplo, intenta escribir las clases GestorMedicos y GestorHistoriales
Fíjate que tienen un segundo atributo, un Scanner para pedir datos por pantalla.
Cada clase tendrá su propio Scanner
He usado un Scanner porque es lo habitual para pedir datos por consola. Si estas acostumbrado a pedir datos al usuario usando otras formas como la clase JOptionPane que muestra pequeñas ventanas de dialogo para que el usuario meta datos, podemos modificarlo.
Insisto en que lo ideal e inteligente sería crear estas tres nuevas clases para separa la gestión de las tres entidades principales.
Crear estas tres nuevas clases no supone escribir más código. La cantidad de código será la misma, solo que de este modo está mejor organizado.
Si no usamos estas tres clases para la gestión, todo este código estará escrito en la clase donde pongamos el metodo main(), con lo cuál será una clases muy sobrecargada de código...![Indeciso :-\](https://aprenderaprogramar.com/foros/Smileys/default/undecided.gif)
Un saludo
Quizás sería más interesante que mostraras lo que tienes hecho y donde te has atascado para poder ayudarte.
O bien volver a empezar desde el principio y rehacer el programa juntos..
En fin, vamos paso a paso.
Estas serían las clases básicas conforme a lo que pide el enunciado. No creo que aquí hayas tenido ningún problema.
Clase Paciente
Código: [Seleccionar]
package clinica;
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 por consola todos los datos del Paciente
*/
public void mostrar() {
System.out.println("\n\t---------------");
System.out.println("ID Paciente: " + id);
System.out.println("Nombre: " + nombre);
System.out.println("Apellidos: " + apellidos);
System.out.println("Edad: " + edad);
System.out.println("Genero: " + genero);
System.out.println("\t---------------");
}
}
Clase Medico
Código: [Seleccionar]
package clinica;
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 consola todos los datos del Medico
*/
public void mostrar() {
System.out.println("\n\t---------------");
System.out.println("ID Medico: " + id);
System.out.println("Nombre: " + nombre);
System.out.println("Apellidos: " + apellidos);
System.out.println("Especialidad: " + especialidad);
System.out.println("\t---------------");
}
}
Clase HistorialClinico
Código: [Seleccionar]
package clinica;
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 consola todos los datos del Historial Clinico
*/
public void mostrar() {
System.out.println("\n\t---------------");
System.out.println("Codigo Historial: " + codigo);
System.out.println("Fecha: " + fecha);
System.out.println("ID Pacielnte: " + idPaciente);
System.out.println("ID Medico: " + idMedico);
System.out.println("Observaciones:\n" + observaciones);
System.out.println("\t---------------");
}
}
Fíjate que en cada clase, les he creado un metodo llamado mostrar() que se encargaría de mostrar por pantalla todos los datos de la clase en cuestión.
Bueno, esta es la parte fácil.
La otra parte, en realidad no es nada difícil, pero si tiene el inconveniente de que requiere mucho código.
Hay que escribir un menu principal, un menu para las opciones del Paciente, Medico e Historial, submenus para crear y modificar Pacientes, Medicos e Historiales...
Repito que no es nada dificil, pero tantas líneas de código, si no se organizan correctamente, tendremos un código enooooorme, muy caótico, dificil de comprender y de mantener.. que solo mirarlo ya nos dará dolor de cabeza.
Y es entonces cuando yo te pregunto: ¿Sabes si hay que ceñirse únicamente a esas clases?
¿O podríamos crear otras clases que nos ayuden a facilitar la tarea?
De hecho, sería lo lógico y lo que cualquier programador haría para encarar este ejercicio.
Podríamos hacer tres nuevas clases, las cuáles cada una se encargaría de la gestión de cada una de las anteriores.
Por ejemplo, una clase llamada GestorPacientes, tendría como atributo un ArrayList donde se guardarían los Pacientes.
Y tendría unos métodos para cada una de las acciones necesarias para gestionar esta base de datos.
Un metodo para dar de alta un nuevo Paciente, otro para mostrar listado de pacientes, otro para modificar, otro para borrar...
De este modo, todo el código necesario para gestionar Pacientes, estaría concentrado en su propia clase y separado de todo el código necesario para gestionar Medicos y de todo el código necesario para gestionar Historiales, los cuáles estarían en sus respectivas clases de Gestion.
La clase GestorPacientes podría ser como la que pongo a continuación. Aunque no está completa, solo incluye los metodos para crear nuevo Paciente y para mostrar todo el listado de pacientes.
Faltarían los metodos para modificar y borrar pacientes.
Clase GestorPacientes
Código: [Seleccionar]
package clinica;
import java.util.ArrayList;
import java.util.Scanner;
public final class GestorPacientes {
private ArrayList<Paciente> pacientes;
private Scanner teclado;
public GestorPacientes() {
pacientes = new ArrayList<Paciente>();
teclado = new Scanner(System.in);
}
/**
* Crea y registra un nuevo paciente.
* @return True si se pudo registrar con éxito el nuevo paciente.
* False si no fue posible registrarlo.
*/
public boolean nuevoPaciente() {
System.out.println("\n\tALTA NUEVO PACIENTE");
System.out.print("Introduzca Identificador: ");
String id = teclado.nextLine();
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Apellidos: ");
String apellidos = teclado.nextLine();
System.out.print("Genero: ");
String genero = teclado.nextLine();
System.out.print("Edad: ");
int edad = teclado.nextInt();
teclado.nextLine();//Tras leer un int, conviene "limpiar" el stream de entrada, para evitar problemas al querer leer luego datos String
Paciente nuevoPaciente = new Paciente(id, nombre, apellidos, edad, genero);
return pacientes.add(nuevoPaciente);//Devuelve TRUE si se insertó correctamente, FALSE si no se pudo insertar
}
/**
* Lista por pantalla los datos de todos los pacientes registrados.
*/
public void mostrarPacientes() {
for (Paciente p: pacientes)
p.mostrar();
}
}
Si crees que es posible enfocar el ejercicio de esta manera, podemos seguir adelante a partir de aquí.
Intenta completar los dos métodos que faltarían para esta clase y tomandola como ejemplo, intenta escribir las clases GestorMedicos y GestorHistoriales
Fíjate que tienen un segundo atributo, un Scanner para pedir datos por pantalla.
Cada clase tendrá su propio Scanner
He usado un Scanner porque es lo habitual para pedir datos por consola. Si estas acostumbrado a pedir datos al usuario usando otras formas como la clase JOptionPane que muestra pequeñas ventanas de dialogo para que el usuario meta datos, podemos modificarlo.
Insisto en que lo ideal e inteligente sería crear estas tres nuevas clases para separa la gestión de las tres entidades principales.
Crear estas tres nuevas clases no supone escribir más código. La cantidad de código será la misma, solo que de este modo está mejor organizado.
Si no usamos estas tres clases para la gestión, todo este código estará escrito en la clase donde pongamos el metodo main(), con lo cuál será una clases muy sobrecargada de código...
![Indeciso :-\](https://aprenderaprogramar.com/foros/Smileys/default/undecided.gif)
Un saludo