La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

PROYECTO DE BASE DE DATOS José Jesús Marente Florín Daniel Payán Alcedo GESTIÓN DE RESERVAS DE HOTEL Tecnología Avanzada de Bases de Datos Universidad.

Presentaciones similares


Presentación del tema: "PROYECTO DE BASE DE DATOS José Jesús Marente Florín Daniel Payán Alcedo GESTIÓN DE RESERVAS DE HOTEL Tecnología Avanzada de Bases de Datos Universidad."— Transcripción de la presentación:

1 PROYECTO DE BASE DE DATOS José Jesús Marente Florín Daniel Payán Alcedo GESTIÓN DE RESERVAS DE HOTEL Tecnología Avanzada de Bases de Datos Universidad de Cádiz

2 PUNTOS A TRATAR Especificaciones funcionales Diagrama de clases persistentes (UML) Tipos y métodos Disparadores y procedimientos Interfaces de usuario – despliegue CONCLUSIONES

3 ESPECIFICACIONES FUNCIONALES El sistema a modelar trata de la reserva de habitaciones de un hotel por parte de personas, las cuales serán empleados (personal del hotel) y clientes (no empleados que hayan realizado alguna vez alguna reserva). Estas personas podrán realizar reservas de habitaciones, cada una con diferentes ventajas económicas: Empleados: se beneficiarán del 30% de descuento por cada reserva Clientes, deben tener almacenado un descuento, que lo asignará el sistema dependiendo del número de reservas que haya realizado, es decir, entre 2 y 3, un 5%, entre 4 y 8 el 10% más de 8 reservas, el 20 %.

4 ESPECIFICACIONES FUNCIONALES El hotel envía ofertas tanto a empleados como a clientes, dichas ofertas deberán guardar las fechas de ésta, su descripción y el precio. El hotel dispone de habitaciones, las cuales se caracterizan por: el número (el cual será único en el hotel), la planta donde se encuentra (será el primer dígito del número de habitación, pues solo tenemos 5 plantas), la categoría, que será simple, doble o suit, la descripción de ese tipo de habitación y el precio de la misma al día.

5 ESPECIFICACIONES FUNCIONALES Respecto a las reservas de habitaciones por las personas (máximo 5 por reserva), se guardarán las siguientes características, la fecha de inicio, la de fin, algún comentario sobre preferencias del cliente de esa reserva y el precio de la reserva, al cual se le aplicará el descuento de la persona que haya realizado la reserva. Para cancelar la reserva, el cliente deberá hacerlo como máximo un día antes de la fecha de inicio de la reserva, con el motivo de la misma. En este caso, la reserva de dicho cliente no se debe contabilizar como posible descuento en otras reservas. Una vez que se cancele, ésta no se podrá habilitar de nuevo, permanecerá cancelada.

6 DIAGRAMA DE CLASES PERSISTENTES Generalización / especialización Atributo Compuesto Atributo Multievaluado Polimorfismo

7 DIAGRAMA DE CLASES PERSISTENTES Asociación N:N Asociación 1:N getPrecio() = descuento de persona * días de reserva * precio habitaciones

8 DIAGRAMA DE CLASES PERSISTENTES Agregación Composición 1:1

9 TIPOS CREADOS Tipo Dirección Necesario para almacenar la dirección completa en Persona. Tipo Habitación Tipo Cancelación Tipo Persona Tipo Empleado Tipo Cliente Tipo Reserva

10 MÉTODOS Obtener descuento en Cliente Devuelve el descuento que posee el cliente, según el número de reservas no canceladas que haya realizado Obtener descuento de Empleado Devuelve el descuento que posee el empleado. Siempre será del 30%. Obtener precio en reserva Devuelve el precio de la reserva, teniendo en cuenta todas las habitaciones reservadas, días de la duración de la reserva y el descuento aplicado, según que persona realizó la reserva. Obtener planta en habitación Devuelve la planta en la que se encuentra la habitación según el número de esta.

11 DISPARADORES Disparador cancelación no permitida Una reserva se puede cancelar con un día de antelación como máximo. Este disparador controlará que dicha cancelación se realice dentro del plazo. Disparador Reserva sin cancelar No permite crear en el sistema una nueva reserva que ya esté cancelada desde un principio

12 PROCEDIMIENTOS Todas las operaciones sobre la Base de Datos, se realizan usando procedimientos. Insertar Cliente Insertar Empleado Inserta nuevos clientes y empleados. Modificar Cliente Modificar Empleado Procedimientos que modifican únicamente los datos de los empleados y clientes Eliminar Persona Elimina a la persona y a todas las reservas realizada por esa persona

13 PROCEDIMIENTOS Procedimientos encargados de controlar la bidireccionalidad entre persona y reserva. Insertar Reserva Inserta la nueva reserva, la relaciona con la persona y a su vez relaciona a la persona con esa reserva. Modificar Reserva Modifica los datos de la reserva y si se da el caso, modificar la persona con la que se relaciona y desvincula a la persona anterior. Eliminar Reserva Elimina la reserva y la relación que existía entre la persona y la reserva

14 PROCEDIMIENTO MODIFICAR RESERVA /* CREATE OR REPLACE PROCEDURE ModificaReserva ( idRes VARCHAR2, nuevafechaInicio VARCHAR2, nuevafechaFin VARCHAR2, nuevoscomentarios CLOB, DNIPer VARCHAR2, IdHabbitaciones Tipo_VectorCadenas ) IS RefPersona REF Tipo_Persona; RefReserva REF Tipo_Reserva; ListaRefHab Tipo_ListaHabitaciones; RefHab1 REF Tipo_Habitacion; realizada_por Tipo_Persona; realizadas Tipo_Realiza; realizadas_actualizadas Tipo_Realiza; reserva Tipo_Reserva; i NUMBER; indice NUMBER; cambiarPersona boolean; BEGIN /* DESVINCULAMOS A LA PERSONA */ SELECT DEREF(realizadaPor) INTO realizada_por FROM Tabla_Reserva WHERE IdReserva = to_number(idRes); cambiarPersona := false;

15 PROCEDIMIENTO MODIFICAR RESERVA IF realizada_por.DNI != DNIPer THEN cambiarPersona := true; -- realizadas almacena el nested tabla de ref a reservas de esa persona select realiza into realizadas from Tabla_Persona where idPersona = realizada_por.idpersona; -- var de tipo nested table de ref de reservas realizadas_actualizadas := Tipo_Realiza(); indice := 1; -- creamos en el nested table de ref a reservas temporal -- las mismas reservas que tenía pero sin la actual FOR i IN 1..realizadas.count LOOP UTL_REF.SELECT_OBJECT(realizada s(i), reserva); IF reserva.idReserva != to_number(idRes) THEN realizadas_actualizadas.EXTEND(); realizadas_actualizadas(indice) := realizadas(i); indice := indice + 1; END IF; END LOOP; END IF;

16 PROCEDIMIENTO MODIFICAR RESERVA /* MODIFICAMOS LA RESERVA */ -- Seleccionamos persona select REF(t) into RefPersona from Tabla_Persona t Where t.DNI = DNIPer; -- var que almacenará la lista de ref a habitaciones de esa reserva ListaRefHab := Tipo_ListaHabitaciones(); FOR i IN 1..IdHabbitaciones.count LOOP SELECT REF(H) INTO RefHab1 FROM Tabla_Habitacion H WHERE H.IDHabitacion = IdHabbitaciones(i); ListaRefHab.extend(); ListaRefHab(i) := RefHab1; END LOOP; -- actualizamos la reserva UPDATE Tabla_Reserva set FechaInicio = to_date(nuevafechaInicio,'DD/MM/YYYY'), FechaFin = to_date(nuevafechaFin,'DD/MM/YYYY'), -- Fecha Fin comentarios = nuevoscomentarios, -- Comentarios RealizadaPor = RefPersona, -- Referencia a Row de Tabla_Persona SeCancela = NULL, -- Cancelaciones TieneHabitaciones = ListaRefHab -- refs a habitaciones WHERE IdReserva = to_number(idRes);

17 PROCEDIMIENTO MODIFICAR RESERVA /* VINCULAMOS A LA NUEVA PERSONA EN CASO DE QUE SEA OTRA */ IF cambiarpersona = true THEN SELECT REF(t) INTO RefReserva FROM Tabla_Reserva t WHERE t.IdReserva = idRes; SELECT realiza INTO realizadas FROM Tabla_Persona WHERE DNI = DNIPer; -- En su nested table de ref a reservas de esa nueva persona -- incluimos esta reserva i := realizadas.count; realizadas.EXTEND(); realizadas(i+1) := RefReserva; UPDATE Tabla_Persona SET realiza = realizadas WHERE DNI = DNIPer; END IF; EXCEPTION -- Algún tipo de error en la consulta de datos agregados WHEN OTHERS THEN --Lanzamos excepción raise_application_error(-20010,'No se puede MODIFICAR reserva' ||SQLCODE||' -ERROR- '||SQLERRM); END ModificaReserva;

18 INTERFACES DE USUARIO Como interface de usuario se ha optado por JDBC y Java para aplicaciones de escritorio (uso de librería Swing,) con los clásicos formularios, botones, desplegables y ventanas. Para poder disponer de la API JDBC : import java.sql.*; Pero para disponer de las extensiones del modelo relacional de Oracle (implementación de JDBC para ORACLE con ojdbc6.jar): import oracle.jdbc.driver.*; import oracle.sql.*; Capturar las excepciones de PLSQL: } catch (SQLException ex) { JOptionPane.showMessageDialog(frame, "Error:" + ex.getMessage());

19 INTERFACES DE USUARIO Implementamos BD.java, clase singleton que controla en todo momento la conexión con Oracle, desde el logon, pasando por las sucesivas operaciones DML y su posterior desconexión. El siguiente fragmento muestra el núcleo principal de conexión : Connection conn; try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); String url = conn = DriverManager.getConnection(url,nombre,passwd); conn.setAutoCommit(false); } catch (SQLException e) { error = e.getMessage(); } La variable conn nos permita todas las operaciones de manejo de datos con Oracle.

20 INTERFACES DE USUARIO Aunque se permita las operaciones INSERT, UPDATE o DELETE desde código java, se establece hacer todo este tipo de operaciones DML a través de procedimientos almacenados. Ejemplo insertarcliente: private void insertarCliente(){ BD OraBD = BD.getInstance(); try { OraBD.conn.setAutoCommit(true); CallableStatement pstm1 = OraBD.conn.prepareCall ("{ call InsertaCliente(?,?,?,?,?,?,?,?,?,?,?,?) }"); //Controlamos el DNI if("".equals(DNI.getText())){ pstm1.setString(1, null); }else{ pstm1.setString(1, DNI.getText()); } //Controlamos el nombre ….. ………. Demás campos } pstm1.execute();

21 DESPLIEGUE 1. Crear usuario y dar permisos con grant 1. SQL> create user tabd 2. SQL> grant connect to tabd; 2. Ejecutar scripts de creación de tipos, tablas, secuencias, disparadores y procedimientos 1. SQL> connect tabd Lanzar la aplicación : 1. Ejecutar el fichero GUIDBD.jar desde escritorio 2. Desde consola: java –jar GUIDBD.jar

22 DEMOSTRACIÓN

23 CONCLUSIONES EL tratamiento de las extensiones del modelo objeto-relacional de Oracle conlleva un mayor esfuerzo si se compara con el modelo relacional (mayor curva de aprendizaje). Todavía se aprecia más dicha complejidad si se contempla la bidirección en las asociaciones (mantenimiento de referencias y nested tables en las diferentes clases relacionadas) Falta de IDEs que contemplen dichas extensiones. Triggers muy limitados por el problema de las tablas mutantes (para referenciar o desreferenciar el objeto se deben hacer consultas sobre la propia tabla a modificar o insertar). Como ventajas, el paso del diagrama de clases persistentes al modelo lógico es relativamente sencillo, se aumenta la semántica del problema a modelar. Java mediante librerías proporcionadas por Oracle permite el tratamiento de estas extensiones (CLOBs, BLOBs, Referencias, Varrays, etc) para su utilización en dicho lenguaje de programación orientado a objetos.

24 REFERENCIAS Oracle and Java Development – Bulusu Lakshman Transparencias de las asignatura, tema 2. Manual del desarollador de jDeveloper. Tutoriales Java y Swing


Descargar ppt "PROYECTO DE BASE DE DATOS José Jesús Marente Florín Daniel Payán Alcedo GESTIÓN DE RESERVAS DE HOTEL Tecnología Avanzada de Bases de Datos Universidad."

Presentaciones similares


Anuncios Google