Gestión de Reservas de V l Vuelos Modelo de Casos de Uso Modelo del Dominio Flujo de Eventos Diagramas de Secuencia MODELO DE CASOS DE USO Devolver Billete Banco Iniciador Cliente Realizar Reserva <<extend>> Ofrecer a la Lista Espera Anular Reserva <<include>> Comprar Billete Eliminar Reservas Caducadas C Compañia ñi Aérea é Obtener Estadísticas <<extend>> MODELO DEL DOMINIO Vuelo Concreto +horaSalida: String +horaLlegada: String +fecha: Date +n mB siness int +numBusiness: +numPrimera: int +numTurista: int Vuelo +código: ódi String St i +cuidadSalida: String +ciudadLlegada: String +aeropuertoSalida: String +aeropuertoLlegada: String +terminalSalida: int +terminalLlegada: int SusVuelosConcretos > * 1 1 susReservassinConfirmar> +billetesLibres() +getbilleteLibre() +setBillete() +getNumeroBillete() +setVueloConcreto() +getNumBilletes(tarifa)() +getReservas() +getReservasSinConfirmar() +getPrimeraReservaSinConfirmar() +getNumBilletesReservados() 1 * * billetes> Reserva Sin Confirmar Billete +tarifa: {business,primera,turista} +numero: int +fecha: Date +numero: int +tarifa: {business,primera,turista} +estado: string = {libre,reservado,comprado} +fechaReserva: Date +fechaCOmpra: Date +precio: Float +new() +getViajero() * < quiereReservar * +setBillete() +getPrecio() +setViajero(viajero: Viajero) +setEstado() +setFechaReserva() +getVueloConcreto() +getTarifa() 1 Viajero +nombre: String +telefono: String +direccion: String +getEmail() +new() +new() +sendEmail() 0..1 compradoOreservado Flujo de Eventos: REALIZAR RESERVA ********************************************* - El cliente dará la tarifa, ciudades de salida y llegada, y fecha de salida - El sistema mostrará los datos de los vuelos que en esa fecha salen desde la ciudad de salida a la de llegada (horas, números, aeropuertos,...) - El cliente escogerá un vuelo - El sistema buscará si hay billetes libres en ese vuelo con esa tarifa - Si los hay, se pondrá el billete como reservado, con la fecha actual como fecha de reserva y se devolverá el número de billete - Si no hay billetes libres, se meterá al cliente en una lista de espera para ese vuelo (si así lo desea). Flujo de Eventos Alternativo ************************************* -Si no hay billetes libres para el vuelo, el cliente podrá escoger otro de los vuelos mostrados por el sistema Flujo de Eventos: ANULAR RESERVA **************************************************************** - El cliente da el número del billete reservado - El sistema quita la fecha de la reserva y el billete se pone con el estado “libre” - El sistema busca si hay reservas sin confirmar para el vuelo de la reserva anulada y si las hay EXTENDS OFRECER RESERVA A LISTA DE ESPERA Flujo de Eventos Alternativo ************************************* - Si el número no es de un billete reservado no se podrá cancelar Flujo de Eventos: DEVOLVER BILLETE ********************************************** - El cliente da el número de un billete comprado - Se devuelve el precio del billete al cliente - Se quitan las fechas de la reserva y de la compra y se pone el estado a "libre" - El sistema busca si hay reservas sin confirmar para el vuelo de la reserva anulada y si las hay EXTENDS OFRECER RESERVA A LISTA DE ESPERA Flujo de Eventos Alternativo ************************************* - Si el número no es de un billete reservado no se podrá devolver Flujo de Eventos: COMPRAR BILLETE ********************************************* - El cliente dará el número de la reserva - El cliente pagará el precio del billete - Se pondrá la fecha actual y el estado del billete como “comprado" Flujo de Eventos Alternativo ************************************* - Si el número no es de un billete reservado no se podrá comprar Flujo de Eventos: OFRECER A LA LISTA DE ESPERA **************************************************************** - PRECONDICIÓN: el vuelo concreto al que se refiere será conocido - Se buscará la primera reserva sin confirmar correspondiente al vuelo - Se pondrá el billete correspondiente como reservado - Se obtendrá la dirección electrónica del cliente que realizó la reserva y se le enviará un correo electrónico avisándole de que tiene reserva Flujo de Eventos: OBTENER ESTADÍSTICAS **************************************************************** - El sistema buscará todos los vuelos concretos - Para cada vuelo concreto y tarifa se mostrarán los siguientes datos: Cantidad de billetes vendidos y porcentaje, porcentaje de reservas, y cantidad de reservas en lista de espera Flujo de Eventos: ELIMINAR RESERVAS CADUCADAS ***************************************************************** - El sistema buscará todos los billetes reservados - Para cada billete, calculará la diferencia entre la fecha de la reserva y la fecha de salida del vuelo reservado reservado, y si hay menos de 15 días EXTENDS CANCELAR RESERVA Requisitos NO FUNCIONALES ************************************ Este caso de uso se ejecutará diariamente, y será configurado por el actor “Compañía Aérea" FLUJOS DE EVENTOS REALIZAR RESERVA : Controlador : AccesoBD : IU vci : Vuelo Concreto C : Cliente datos: tarifa, csalida,cllegada, fsalida BL : Bill Billete t vc1,vc2,...,vcn := obtenerVuelos(csalida,cllegada,fsalida) vc1, vc2,...,vcn := getVuelos(csalida,cllegada,fsalida) loop mientras no hay billete vci buscarBilleteLibre(tarifa,vci): Billete BL := getbilleteLibre(tarifa) [hay billete] : BL alt reservar [BL es un billete para reservar] n,tfno,dir setClienteABillete(BL,n,tfno,dir): void setClienteABillete(BL,n,tfno,dir): void VJ := getOrCreateViajero(n,tfno,dir) setViajero(VJ): void RSC : Reserva Sin Confirmar setEstado("reservado", fechaactual): void store(BL) [no hay billetes libres y se quiere entrar en lista de espera] n, tfno, dir,vci añadirListaEspera(n,tfno,dir,tarifa,vci): void RSC := newReservaSinConfirmar(n, tfno,dir,tarifa,vci) VJ := getOrCreateViajero(n,tfno,dir) RSC := new(tarifa,fechaactual, vci, VJ) store(RSC) Se asignarán números de reserva correlativos ANULAR RESERVA : IU : Controlador : AccesoBD C : Cliente B : Billete V : Viajero VC : Vuelo Concreto numbillete anularReserva(numbillete) B := liberarBillete(numbillete) b := getBillete(numbillete) setViajero(null): void setEstado("libre"): void setFechaReserva(): void store(B): void RSC : Reserva Sin Confirmar VC := getVueloConcreto() tarifa := getTarifa() RSC := getPrimeraReservaSinConfirmar(tarifa) VJ := getViajero() deleteReservaSinConfirmar(RSC): void delete(RSC): void VC := sendEmail(B) extends RESERVAR VUELO Al viajero VJ se le reserva el vuelo VC OBTENER ESTADÍSTICAS : Compañia Aérea : IU : Controlador : AccesoBD VCi : Vuelo Concreto Pedir Estadísticas obtenerEstadisticas(): void VC1,VC2,...,VCn := getVuelosConcretos() Estadistica es una CLASE sin PERSISTENCIA. Desde la :IU se podrá acceder a sus valores. loop VCi loop cada tarifa NBC := getNumBilletesComprados(tarifa) NBL := getNumBilletesLibres(tarifa) Ei : Estadistica NR := getReservas(tarifa) NRSC := getReservasSinConfirmar(tarifa) new(VCi,NBC,NBL,NR,NRSC,tarifa) E1,E2,...Em getNumBilletesVendidos(): void getNumBilletesReservados(): void getNumBilletesTotales(): void getNumReservasListaEspera() DEVOLVER BILLETE Banco es un ACTOR que es un sistema. : IU : AccesoBD : Controlador : Cliente B : Billete Se invocará a su API API. En este caso suponemos que se llama "devolverDinero(cantidad,numCuenta)" numbillete,numCuenta d devolverBillete(numbillete,numCuenta): l Bill t ( bill t C t ) void id B := getBillete(numbillete) : Banco Valor := getPrecio() devolverDinero(valor,numCuenta) liberarBillete(numbillete): void Se hace liberarBillete y ofrecer billete a lista de espera igual que en el caso de uso "Anular Reserva"