Muestra las diferencias entre dos versiones de la página.
ejercicios:unidad04 [2012/09/05 22:08] admin [Ejercicio02] |
ejercicios:unidad04 [2016/07/03 20:02] (actual) |
||
---|---|---|---|
Línea 3: | Línea 3: | ||
En los ejercicios de esta unidad se van a usar la siguientes clases Java (entidades). | En los ejercicios de esta unidad se van a usar la siguientes clases Java (entidades). | ||
+ | |||
<uml> | <uml> | ||
- | class Cliente | + | class Seguro |
- | Cliente : int IdCliente | + | Seguro : int idSeguro |
- | Cliente : String nombre | + | Seguro : NIF nif |
- | Cliente : String ape1 | + | Seguro : String nombre |
- | Cliente : String ape2 | + | Seguro : String ape1 |
- | Cliente : Date fechaNacimiento | + | Seguro : String ape2 |
- | Cliente : NIF nif | + | Seguro : int edad |
- | Cliente : String telefonoFijo | + | Seguro : Sexo sexo |
- | Cliente : String telefonoMovil | + | Seguro : boolean casado |
- | Cliente : String correoElectronico | + | Seguro : int numHijos |
- | Cliente : String comentario | + | Seguro : boolean embarazada |
- | Cliente : Domicilio domicilio | + | Seguro : Coberturas coberturas |
- | Cliente : Set<Cuenta> cuentas | + | Seguro : Enfermedades enfermedades |
+ | Seguro : Date fechaCreacion | ||
- | class Cuenta | + | class Coberturas |
- | Cuenta : int idCuenta | + | Coberturas : boolean oftalmologia |
- | Cuenta : CodigoCuentaCliente ccc | + | Coberturas : boolean dental |
- | Cuenta : BigDecimal saldo | + | Coberturas : boolean fecundacionInVitro |
- | Cuenta : Set<Cliente> titulares | + | |
- | Cuenta : List<Movimiento> movimientos | + | |
- | class Domicilio | + | class Enfermedades |
- | Domicilio : int idDomicilio | + | Enfermedades: boolean corazon |
- | Domicilio : TipoVia tipoVia | + | Enfermedades: boolean estomacal |
- | Domicilio : String nombreVia | + | Enfermedades: boolean rinyones |
- | Domicilio : String numero | + | Enfermedades: boolean alergia |
- | Domicilio : String puerta | + | Enfermedades: String nombreAlergia |
- | Domicilio : String poblacion | + | |
- | Domicilio : String provincia | + | |
- | Domicilio : String codigoPostal | + | |
- | class Movimiento | + | class NIF |
- | Movimiento : int idMovimiento | + | NIF:nif |
- | Movimiento : TipoMovimiento tipoMovimiento | + | |
- | Movimiento : BigDecimal importe | + | |
- | Movimiento : Date fecha | + | |
- | Movimiento : String descripcion | + | |
+ | class Sexo <<Enumeration>> | ||
+ | Sexo : Hombre | ||
+ | Sexo : Mujer | ||
- | class NIF | + | class AsistenciaMedica |
- | NIF : nif | + | AsistenciaMedica: int idAsistenciaMedica |
+ | AsistenciaMedica: Seguro seguro | ||
+ | AsistenciaMedica: String breveDescripcion | ||
+ | AsistenciaMedica: String lugar | ||
+ | AsistenciaMedica: String explicacion | ||
+ | AsistenciaMedica: TipoAsistencia tipoAsistencia | ||
+ | AsistenciaMedica: Date fecha | ||
+ | AsistenciaMedica: Date hora | ||
+ | AsistenciaMedica: BigDecimal importe | ||
- | class TipoMovimiento <<Enumeration>> | + | class TipoAsistencia <<Enumeration>> |
- | TipoMovimiento : Debe | + | TipoAsistencia : Hospitalaria |
- | TipoMovimiento : Haber | + | TipoAsistencia : Ambulatoria |
+ | TipoAsistencia : CentroSalud | ||
+ | TipoAsistencia : Domiciliaria | ||
- | class CodigoCuentaCliente | + | Coberturas "1"-"1" Seguro |
- | CodigoCuentaCliente : ccc | + | NIF "1"--"1" Seguro |
+ | Sexo "1" -- "*" Seguro | ||
+ | Seguro "1"-"1" Enfermedades | ||
- | class TipoVia <<Enumeration>> | ||
- | TipoVia : Calle | ||
- | TipoVia : Avenida | ||
- | TipoVia : Plaza | ||
- | TipoVia : Carretera | ||
- | NIF "1" - "1" Cliente | + | Seguro "1"--"*" AsistenciaMedica |
- | Cliente "1" - "1" Domicilio | + | |
- | Domicilio "*" - "1" TipoVia | + | |
- | Cliente "*" -- "*" Cuenta | + | |
- | CodigoCuentaCliente "1" - "1" Cuenta | + | |
- | Cuenta "1" -- "*" Movimiento | + | |
- | Movimiento "*" - "1" TipoMovimiento | + | |
+ | AsistenciaMedica "*" - "1" TipoAsistencia | ||
</uml> | </uml> | ||
El modelo de tablas asociado a las entidades es el siguiente: | El modelo de tablas asociado a las entidades es el siguiente: | ||
+ | |||
<uml> | <uml> | ||
- | class Cliente <<Table>> | + | class Seguro <<Table>> |
- | Cliente : INTEGER idCliente | + | Seguro : INTEGER idSeguro |
- | Cliente : VARCHAR nombre | + | Seguro : VARCHAR nif |
- | Cliente : VARCHAR ape1 | + | Seguro : VARCHAR nombre |
- | Cliente : VARCHAR ape2 | + | Seguro : VARCHAR ape1 |
- | Cliente : DATETIME fechaNacimiento | + | Seguro : VARCHAR ape2 |
- | Cliente : VARCHAR nif | + | Seguro : INTEGER edad |
- | Cliente : VARCHAR telefonoFijo | + | Seguro : INTEGER sexo |
- | Cliente : VARCHAR telefonoMovil | + | Seguro : TINYINT casado |
- | Cliente : VARCHAR correoElectronico | + | Seguro : INTEGER numHijos |
- | Cliente : TEXT comentario | + | Seguro : TINYINT embarazada |
+ | Seguro : TINYINT oftalmologia | ||
+ | Seguro : TINYINT dental | ||
+ | Seguro : TINYINT fecundacionInVitro | ||
+ | Seguro : TINYINT corazon | ||
+ | Seguro : TINYINT estomacal | ||
+ | Seguro : TINYINT rinyones | ||
+ | Seguro : TINYINT alergia | ||
+ | Seguro : VARCHAR nombreAlergia | ||
+ | Seguro : TIMESTAMP fechaCreacion | ||
- | class Cuenta <<Table>> | + | class AsistenciaMedica <<Table>> |
- | Cuenta : INTEGER idCuenta | + | AsistenciaMedica : INTEGER IdAsistenciaMedica |
- | Cuenta : VARCHAR ccc | + | AsistenciaMedica : INTEGER IdSeguro |
- | Cuenta : DECIMAL saldo | + | AsistenciaMedica : VARCHAR breveDescripcion |
- | + | AsistenciaMedica : VARCHAR lugar | |
- | class Domicilio <<Table>> | + | AsistenciaMedica : TEXT explicacion |
- | Domicilio : INTEGER idDomicilio | + | AsistenciaMedica : VARCHAR TipoAsistencia |
- | Domicilio : INTEGER tipoVia | + | AsistenciaMedica : DATE fecha |
- | Domicilio : VARCHAR nombreVia | + | AsistenciaMedica : TIME hora |
- | Domicilio : VARCHAR numero | + | AsistenciaMedica : DECIMAL(10,2) importe |
- | Domicilio : VARCHAR puerta | + | AsistenciaMedica : INTEGER idx |
- | Domicilio : VARCHAR poblacion | + | |
- | Domicilio : VARCHAR provincia | + | |
- | Domicilio : VARCHAR codigoPostal | + | |
- | + | ||
- | class Movimiento <<Table>> | + | |
- | Movimiento : INTEGER idMovimiento | + | |
- | Movimiento : INTEGER tipoMovimiento | + | |
- | Movimiento : DECIMAL importe | + | |
- | Movimiento : DATETIME fecha | + | |
- | Movimiento : VARCHAR descripcion | + | |
- | + | ||
- | class ClienteCuenta | + | |
- | ClienteCuenta : idCliente | + | |
- | ClienteCuenta : idCuenta | + | |
- | + | ||
- | Cliente "1" - "1" Domicilio | + | |
- | Cliente "1" -- "*" ClienteCuenta | + | |
- | ClienteCuenta "*" -- "1" Cuenta | + | |
- | Cuenta "1" -- "*" Movimiento | + | |
+ | Seguro "1" -- "*" AsistenciaMedica | ||
</uml> | </uml> | ||
- | |||
- | |||
===== Ejercicio01 ===== | ===== Ejercicio01 ===== | ||
Modifica el **Ejercicio01** de la unidad anterior para incluir las siguientes tareas: | Modifica el **Ejercicio01** de la unidad anterior para incluir las siguientes tareas: | ||
- | * Crea el enumerado TipoVia | + | |
- | * Crea el enumerado TipoMovimiento | + | Siguiendo el diagrama de clases Java anterior: |
- | * Crea la clase NIF | + | * Crea el enumerado ''TipoAsistencia'' y sus valores |
- | * Crea la clase CodigoCuentaCliente | + | * Crea el enumerado ''Sexo'' y sus valores |
- | * Añade a la clase ''Domicilio'' la propiedad ''tipoVia'' | + | * Crea la clase ''NIF'' , su propiedad y los métodos //get/set// |
- | * Añade a la clase ''Movimiento'' la propiedad ''tipoMovimiento'' | + | * Crea la clase ''Coberturas'' , sus propiedades y los métodos //get/set// |
- | * En la clase ''Cliente'' haz que la propiedad ''nif'' sea del tipo ''NIF'' pero que en Hibernate sea un componente en vez de una nueva entidad. | + | * Crea la clase ''Enfermedades'' , sus propiedades y los métodos //get/set// |
- | * En la clase ''Cuenta'' haz que la propiedad ''ccc'' sea del tipo ''CodigoCuentaCliente'' pero que en Hibernate sea un componente en vez de una nueva entidad. | + | * Modifica la clase ''Seguro'' para incluir las nuevas propiedades y los nuevos métodos //get/set// |
- | * Modifica las clases ''Movimiento'' y ''Domicilio'' para que Hibernate genere automáticamente las claves primarias haciendo un SELECT MAX() para obtener la nueva clave primaria. | + | * En la clase ''Seguro'' haz que la propiedad ''nif'' sea del tipo ''NIF'' pero que en Hibernate sea un componente en vez de una nueva entidad. |
- | * Modifica también las clases ''Cliente'' y ''Domicilio'' para que se genere también automáticamente la clave primaria pero teniendo en cuenta que la clave primaria de una clase **siempre** debe ser igual a la de la otra. | + | * Haz que las propiedades ''enfermedades'' y ''coberturas'' sean componentes de la clase ''Seguro''. |
- | * Haz que en la propiedad ''fechaNacimiento'' de la clase ''Cliente'' solo se guarde la fecha y **no** la hora. | + | * Modifica la clase ''AsistenciaMedica'' para incluir las nuevas propiedades y los nuevos métodos //get/set// |
- | * Haz que en la propiedad ''comentario'' de la clase ''Cliente'' se puedan guardar más de 255 caracteres. | + | * Modifica la configuración de Hibernate de las clases ''Seguro'' y ''AsistenciaMedica'' para indicar a Hibernate que la base de datos genera automáticamente las claves primarias usando un autonumérico. |
+ | * Haz que en la propiedad ''fecha'' de la clase ''AsistenciaMedica'' solo se guarde la fecha y **no** la hora. | ||
+ | * Haz que en la propiedad ''hora'' de la clase ''AsistenciaMedica'' solo se guarde la hora y **no** la fecha. | ||
+ | * Haz que en la propiedad ''explicacion'' de la clase ''AsistenciaMedica'' se puedan guardar más de 255 caracteres. | ||
+ | * Haz que en la propiedad ''importe'' de la clase ''AsistenciaMedica'' se guarde como un ''BigDecimal''. | ||
+ | * Al configurar los enumerados ten en cuenta el tipo de datos que se ha definido en la base de datos. | ||
Para ello usa los ficheros "''.hbm.xml''" de Hibernate. | Para ello usa los ficheros "''.hbm.xml''" de Hibernate. | ||
Línea 136: | Línea 129: | ||
La clase ''Main'' deberá incluir el siguiente código de creación de los distintos objetos: | La clase ''Main'' deberá incluir el siguiente código de creación de los distintos objetos: | ||
<code java 1> | <code java 1> | ||
- | Cliente cliente1 = new Cliente("Sara", "Ortega", "Martínez", new Date(), new NIF("23454345Z"), "963654567", "626345765", "saraortega@gmail.com", "La diractora de la sucursal", new Domicilio(TipoVia.Avenida, "Avenidad Tres Forques", "56", "9", "Morella", "Castellon", "12300")); | + | SimpleDateFormat sdfFecha=new SimpleDateFormat("dd/MM/yyyy"); |
- | Cliente cliente2 = new Cliente("Marcos", "Tortosa", "Oltra", new Date(), new NIF("76567654X"), "963346578", "626678345", "mtortosa@gmail.com", "Sin comentarios", new Domicilio(TipoVia.Calle, "Calle San Juan", "4", "1", "Torrente", "Valencia", "46011")); | + | sdfFecha.setLenient(false); |
- | Cuenta cuenta = new Cuenta(new CodigoCuentaCliente("56783456123454698045"), new BigDecimal("30000")); | + | SimpleDateFormat sdfHora=new SimpleDateFormat("HH:mm:ss"); |
- | cuenta.getTitulares().add(cliente1); | + | sdfHora.setLenient(false); |
- | cuenta.getTitulares().add(cliente2); | + | Seguro seguro = new Seguro(new Nif("36254784E"), "Rosa", "Ramirez", "Arellano", 41, Sexo.Mujer, true, 1, false, new Coberturas(false, true, false), new Enfermedades(true, false, true, false, null), new Date()); |
- | cuenta.getMovimientos().add(new Movimiento(TipoMovimiento.Haber, new BigDecimal("12000"), new Date(), "Pagar el coche")); | + | AsistenciaMedica asistenciaMedica1 = new AsistenciaMedica(seguro, "Golpe en el brazo", "Madrid", "Fractura del radio derecho de la mano debido a golpe contundente con el suelo. Se escayola el brazo", TipoAsistencia.Hospitalaria, sdfFecha.parse("31/12/2013"),sdfHora.parse("11:21:45"), new BigDecimal("700.31")); |
- | cuenta.getMovimientos().add(new Movimiento(TipoMovimiento.Debe,new BigDecimal("1500"), new Date(), "Ingreso nómina")); | + | AsistenciaMedica asistenciaMedica2 = new AsistenciaMedica(seguro, "Fiebre alta", "Alzira", "El paciente presenta cuadro alto de fiabre con deficultad para respirar. Se recetan antibioticos.", TipoAsistencia.Ambulatoria, sdfFecha.parse("27/02/2013"), sdfHora.parse("12:34:16"), new BigDecimal("81.14")); |
+ | seguro.getAsistenciasMedicas().add(asistenciaMedica1); | ||
+ | seguro.getAsistenciasMedicas().add(asistenciaMedica2); | ||
</code> | </code> | ||
- | Ahora añade a la clase ''Main'' el código de hibernate necesario para que al guardar el objeto ''cuenta'' se guarde todo en la base de datos. | + | Ahora añade a la clase ''Main'' el código de hibernate necesario para que al guardar el objeto ''seguro'' se guarde todo en la base de datos. |
- | + | ||
===== Ejercicio02 ===== | ===== Ejercicio02 ===== | ||
Modifica el **Ejercicio02** de la unidad anterior para incluir las siguientes tareas: | Modifica el **Ejercicio02** de la unidad anterior para incluir las siguientes tareas: | ||
- | * Crea el enumerado TipoVia | + | |
- | * Crea el enumerado TipoMovimiento | + | Siguiendo el diagrama de clases Java anterior: |
- | * Crea la clase NIF | + | * Crea el enumerado ''TipoAsistencia'' y sus valores |
- | * Crea la clase CodigoCuentaCliente | + | * Crea el enumerado ''Sexo'' y sus valores |
- | * Añade a la clase ''Domicilio'' la propiedad ''tipoVia'' | + | * Crea la clase ''NIF'' , su propiedad y los métodos //get/set// |
- | * Añade a la clase ''Movimiento'' la propiedad ''tipoMovimiento'' | + | * Crea la clase ''Coberturas'' , sus propiedades y los métodos //get/set// |
- | * En la clase ''Cliente'' haz que la propiedad ''nif'' sea del tipo ''NIF'' pero que en Hibernate sea un componente en vez de una nueva entidad. | + | * Crea la clase ''Enfermedades'' , sus propiedades y los métodos //get/set// |
- | * En la clase ''Cuenta'' haz que la propiedad ''ccc'' sea del tipo ''CodigoCuentaCliente'' pero que en Hibernate sea un componente en vez de una nueva entidad. | + | * Modifica la clase ''Seguro'' para incluir las nuevas propiedades y los nuevos métodos //get/set// |
- | * Modifica las clases ''Movimiento'' y ''Domicilio'' para que Hibernate genere automáticamente las claves primarias haciendo un SELECT MAX() para obtener la nueva clave primaria. | + | * En la clase ''Seguro'' haz que la propiedad ''nif'' sea del tipo ''NIF'' pero que en Hibernate sea un componente en vez de una nueva entidad. |
- | * Modifica también las clases ''Cliente'' y ''Domicilio'' para que se genere también automáticamente la clave primaria pero teniendo en cuenta que la clave primaria de una clase **siempre** debe ser igual a la de la otra. | + | * Haz que las propiedades ''enfermedades'' y ''coberturas'' sean componentes de la clase ''Seguro''. |
- | * Haz que en la propiedad ''fechaNacimiento'' de la clase ''Cliente'' sólo se guarde la fecha y **no** la hora. | + | * Modifica la clase ''AsistenciaMedica'' para incluir las nuevas propiedades y los nuevos métodos //get/set// |
- | * Haz que en la propiedad ''comentario'' de la clase ''Cliente'' se puedan guardar más de 255 caracteres. | + | * Modifica la configuración de Hibernate de las clases ''Seguro'' y ''AsistenciaMedica'' para indicar a Hibernate que la base de datos genera automáticamente las claves primarias usando un autonumérico. |
+ | * Haz que en la propiedad ''fecha'' de la clase ''AsistenciaMedica'' solo se guarde la fecha y **no** la hora. | ||
+ | * Haz que en la propiedad ''hora'' de la clase ''AsistenciaMedica'' solo se guarde la hora y **no** la fecha. | ||
+ | * Haz que en la propiedad ''explicacion'' de la clase ''AsistenciaMedica'' se puedan guardar más de 255 caracteres. | ||
+ | * Haz que en la propiedad ''importe'' de la clase ''AsistenciaMedica'' se guarde como un ''BigDecimal''. | ||
+ | * Al configurar los enumerados ten en cuenta el tipo de datos que se ha definido en la base de datos. | ||
Para ello usa las anotaciones de JPA. | Para ello usa las anotaciones de JPA. | ||
Línea 168: | Línea 165: | ||
La clase ''Main'' deberá incluir el siguiente código de creación de los distintos objetos: | La clase ''Main'' deberá incluir el siguiente código de creación de los distintos objetos: | ||
<code java 1> | <code java 1> | ||
- | Cliente cliente1 = new Cliente("Rosa", "Vivó", "Cano", new Date(), new NIF("45698765Z"), "963459807", "626456765", "rvivo@gmail.com", "La asesora fiscal", new Domicilio(TipoVia.Avenida, "Avenidad de los naranjos", "67", "76", "Valencia", "Valencia", "46056")); | + | SimpleDateFormat sdfFecha=new SimpleDateFormat("dd/MM/yyyy"); |
- | Cliente cliente2 = new Cliente("Elias", "Rubio", "Muñoz", new Date(), new NIF("23098765X"), "963345654", "626198234", "erubio@gmail.com", "El peluquero", new Domicilio(TipoVia.Calle, "Calle Calvo Sotelo", "56", "23", "Requena", "Valencia", "46023")); | + | sdfFecha.setLenient(false); |
- | Cuenta cuenta = new Cuenta(new CodigoCuentaCliente("34568768983456767898"), new BigDecimal("5000")); | + | SimpleDateFormat sdfHora=new SimpleDateFormat("HH:mm:ss"); |
- | cuenta.getTitulares().add(cliente1); | + | sdfHora.setLenient(false); |
- | cuenta.getTitulares().add(cliente2); | + | Seguro seguro = new Seguro(new Nif("48573562T"), "Sara", "Tomas", "Martínez", 31, Sexo.Mujer, true, 1, true, new Coberturas(true, true, true), new Enfermedades(false, true, false, true, "Acaros"), new Date()); |
- | cuenta.getMovimientos().add(new Movimiento(TipoMovimiento.Haber, new BigDecimal("1500"), new Date(), "Ingreso la nómina")); | + | AsistenciaMedica asistenciaMedica1 = new AsistenciaMedica(seguro, "Operación de miopía", "Barcelona", "El paciente es operado de miopía en los dos ojos.", TipoAsistencia.Hospitalaria, sdfFecha.parse("18/04/2013"),sdfHora.parse("08:30:00"), new BigDecimal("10400.20")); |
- | cuenta.getMovimientos().add(new Movimiento(TipoMovimiento.Debe,new BigDecimal("23"), new Date(), "Recibo del Agua")); | + | AsistenciaMedica asistenciaMedica2 = new AsistenciaMedica(seguro, "Analisis de alergia", "Alzira", "Se realizan analisis de sangre para determinar el tipo de alergia que padece el paciente.", TipoAsistencia.Ambulatoria, sdfFecha.parse("12/02/2012"), sdfHora.parse("18:30:00"), new BigDecimal("31.15")); |
+ | seguro.getAsistenciasMedicas().add(asistenciaMedica1); | ||
+ | seguro.getAsistenciasMedicas().add(asistenciaMedica2); | ||
</code> | </code> | ||
- | Ahora añade a la clase ''Main'' el código de hibernate necesario para que al guardar el objeto ''cuenta'' se guarde todo en la base de datos. | + | Ahora añade a la clase ''Main'' el código de hibernate necesario para que al guardar el objeto ''seguro'' se guarde todo en la base de datos. |