Tips Java

Siempre surgen dudas cuando empiezas a adentrarte en java y por eso he hecho este

Ejemplo práctico de serialización, de ficheros y de uso de GregorianCalendar:

El centro de salud de Valdecasas de Arriba desea llevar una gestión informatizada de
las citas programadas:

De cada cita se almacena el día, la hora y el no de sala.
Si la cita es para una consulta, se almacena el nombre del doctor y la especialidad.
Si la cita es para una prueba, se almacena el tiempo estimado de duración.

Para mejorar el seguimiento, todas las pruebas llevan asignada una referencia única.
Por supuesto, cada cita se refiere a un paciente, del que se conoce el nombre, sexo y número de afiliación a la Seguridad Social.
La única funcionalidad requerida es poder crear citas y consultarlas.
Se pide:
a) Implementar las clases
b) Escribir un programa que:

a. Cree una colección de objetos Cita que contenga pruebas y consultas.

b. Almacene la información de todas las citas (incluido el paciente al que se refieren en un archivo en disco.

c) Escribir un programa que:

a. Abra el archivo creado, copie a una colección los objetos y muestre su información

b. Téngase en cuenta que después de haber leído de disco se deben poder seguir dando citas, y las pruebas deben tener una referencia única.

Práctica optativa propuesta por Elisa García en 3º de ITIG en la UPSAM en enero de 2008

**************************************************************************

Primero: elaboración de un diagrama de clases…

diagserializacion.png

Segundo, implementación:

CITA.JAVA

package optativa3;
import java.util.GregorianCalendar;
import java.io.*;

public class Cita implements Serializable{

private GregorianCalendar fecha;
private int hora; //TO DO: aprender a manaejar horas con GregorianCalendar…
private int sala;
private Paciente paciente;

public Cita(GregorianCalendar f, int h, int s, Paciente p) {
fecha =f;
hora = h;
sala=s;
paciente = p;
}
public GregorianCalendar getFecha(){
return fecha;
}
public int getHora(){
return hora;
}
public int getSala(){
return hora;
}
public Paciente getPaciente(){
return paciente;
}
}

CITACONSULTA.JAVA

package optativa3;
import java.util.GregorianCalendar;
import java.io.*;

public class CitaConsulta extends Cita implements Serializable{

private String doctor;
private String especialidad;
public CitaConsulta(GregorianCalendar f, int h, int s, Paciente p, String d, String e) {
super (f,h,s,p);
doctor = d;
especialidad=e;
}
public String getDoctor(){
return doctor;
}
public String getEspecialidad(){
return especialidad;
}
}

CITAINPUT.JAVA

package optativa3;
import java.io.*;

public class CitaInput {

private FileInputStream file;
private ObjectInputStream input;

public CitaInput() {
}
public void Abrir() throws IOException{
file = new FileInputStream(“C:/Citas.data”);
input = new ObjectInputStream (file);
}

public void cerrar()throws IOException{
if(input!=null)
input.close();

}
public Cita leer() throws IOException, ClassNotFoundException{
Cita cit= null;
if (input !=null){
try{
cit = (Cita) input.readObject();
}catch(Exception ex){

}
}
return cit;
}

}

CITAOUTPUT.JAVA

package optativa3;
import java.io.*;

public class CitaOutput {
private FileOutputStream file;
private ObjectOutputStream output;

public CitaOutput() {
}
public void Abrir() throws IOException{
file = new FileOutputStream(“C:/Citas.data”);
output = new ObjectOutputStream (file);
}
public void cerrar()throws IOException{
if(output!=null)
output.close();
}
public void escribir(Cita cit) throws IOException{
if(output!=null)
output.writeObject(cit);
}
}

CITAPRUEBA.JAVA

package optativa3;
import java.util.GregorianCalendar;
import java.io.*;

public class CitaPrueba extends Cita implements Serializable{

private double tiempoEstimado;
private Prueba referencia;
public CitaPrueba(GregorianCalendar f, int h, int s, Paciente p, double t , Prueba r) {
super (f,h,s,p);
tiempoEstimado = t;
referencia = r;
}

}

PACIENTE.JAVA

package optativa3;
import java.io.*;

public class Paciente implements Serializable{

private String nombre;
private String sexo;
private long numSS;
public Paciente(String nom, String s,long num) {
nombre = nom;
sexo = s;
numSS=num;
}
public String getNumbre() {
return nombre;
}
public String getSexo() {
return sexo;
}
public long getNumSS() {
return numSS;
}
}

PRUEBA.JAVA

package optativa3;
import java.io.*;

public class Prueba implements Serializable{

private int referencia;
private String resultados;
public Prueba(int ref, String res) {
referencia=ref;
resultados = res;
}
public int getReferencia(){
return referencia;
}
public String resultados(){
return resultados;
}

}

MAIN.JAVA

package optativa3;
import java.util.*;
import java.io.*;
import java.util.Random; //para generar aleatoriamente el numero de sala

public class Main {

public Main() {
}
public static void main(String[] args) {
Random rnd = new Random(TUDNI); // ;) :p
int cuantasLeidas=0;
int cuantasEscritas =0;
ArrayList<Cita> Citas = new ArrayList<Cita>();
System.out.println(“LEEMOS LO QUE HAYA EN C:/Citas.data”);
try{ //RECUPERAMOS TODAS LAS CITAS…
CitaInput entrada;
entrada = new CitaInput();
Cita c;
entrada.Abrir();
c = entrada.leer();
cuantasLeidas+=1;
while (c!=null){
// System.out.println(“Cita leída: “+ c.getFecha().get(Calendar.DAY_OF_MONTH)+”/”+c.getFecha().get(Calendar.MONTH)+”/”+c.getFecha().get(Calendar.YEAR));
Citas.add(c);
c = entrada.leer();
cuantasLeidas+=1;
}

entrada.cerrar();
}
catch (Exception ex){
}
if (cuantasLeidas !=0)
cuantasLeidas -= 1;
System.out.println(“*******************************************************************”);
System.out.println(“Recuperadas “+ cuantasLeidas + ” citas. \n”);
System.out.println(“*******************************************************************”);
//Voy a añadir una cita para consulta (casi) todos los días del año.. es algo genérico
for (int m = 1; m<13; m++){
for (int d = 1; d<28; d++){
GregorianCalendar f = new GregorianCalendar (2008,m,d);
int s = (int)(rnd.nextDouble() * 10.0);
Paciente p = new Paciente (“NOMBRE”+m*d+m+d, “SIN DETERMINAR”,m*d+m+d);
CitaConsulta cc = new CitaConsulta (f, 12, s, p, “DOCTOR “+m, “ESPECIALIDAD”);
Citas.add(cc);
}
}
//Voy a añadir una cita para pruebas (casi) todos los días del año.. es algo genérico
for (int m = 1; m<13; m++){
for (int d = 1; d<28; d++){
GregorianCalendar f = new GregorianCalendar (2008,m,d);
int s = (int)(rnd.nextDouble() * 10.0);
int ref = (int)(rnd.nextDouble() * 1000.0);
Paciente p = new Paciente (“NOMBRE”+d, “SIN DETERMINAR”,m*d+m+d);
Prueba pru = new Prueba (ref,”RESULTADOS SIN DETERMINAR”);
CitaPrueba cc = new CitaPrueba (f, 12, s, p, 0.25 /*horas => 15 minutos*/, pru);
Citas.add(cc);
}
}
//Una vez tendo todos esos datos creados los serializaremos a un fichero…
try{
CitaOutput salida;
salida = new CitaOutput();
salida.Abrir();
for (Cita c: Citas){
// System.out.println(“Cita escrita: “+ c.getFecha().get(Calendar.DAY_OF_MONTH)+”/”+c.getFecha().get(Calendar.MONTH)+”/”+c.getFecha().get(Calendar.YEAR));
salida.escribir(c);
cuantasEscritas +=1;
}
salida.cerrar();
}catch (Exception ex){
ex.getMessage();
}
System.out.println(“*******************************************************************”);
System.out.println(“Guardadas “+ cuantasEscritas + ” citas. \n”);
System.out.println(“*******************************************************************”);
System.out.println(“ACLARACIÓN FINAL:”);
System.out.println(“Este programa es una prueba de funcionalidad…”);
System.out.println(“Por comodidad en cada ejecución:”);
System.out.println(“\t 1.- Se rellena un ArrayList<Cita> con lo guardado en la ejecución anterior.”);
System.out.println(“\t 2.- Se crean 324 citas para consulta y 324 citas para pruebas.”);
System.out.println(“\t 3.- Se guardan todas las citas, las leidas y las “+ 2*12*28 + ” gerneradas en esta ejecución.”);
System.out.println(“Fin de la optativa 3: TIEMPO DE IMPLEMENTACIÓN: 1:45 h (mas o menos, he reutilizado mucho código)”);
}
}

OS HA SIDO UTIL????

Saludos.

JxXx

PD:

Gracias a todos mis profesores por el material didáctico y las ganas puestas en clase y gracias también a los compañeros que han peleado asignaturas dificiles como Redes, Ingeniería del Software (I), Metodología de la POO Avanzada o Estadística, codo con codo. Suerte con las notas y a seguir palante. Queda dicho.

Escribe un comentario