GithubHelp home page GithubHelp logo

reservashotel_v1's Introduction

Tarea: Reservas Hotel V1

Profesor: Andrés Rubio del Río

Alumno: José Francisco Hernández Allen

En este segundo sprint de la tarea consistente en modelar la gestión de las reservas del hotel IES Al-Ándalus, se va a continuar usando la implementación basada en arrays para la gestión de las colecciones. Pero añadiremos el patrón MVC, haciendo una primera aproximación al mismo que poco a poco iremos mejorando cuando se vayan adquiriendo los conocimientos necesarios. Por tal motivo, haremos una distinción entre la vista, encargada de interactuar con el usuario, el modelo, encargado de gestionar los datos y de interactuar con las colecciones y que dividiremos entre clases de dominio y clases de negocio. Por último, pero no menos importante, el controlador que será el encargado de dirigir toda esta orquesta.

Debes tener en cuenta el problema existente con las referencias, por lo que, al igual que en el primer sprint, para cada clase que sea cliente de otra deberás devolver referencias a objetos nuevos en los métodos de acceso. También crear nuevas referencias a nuevos objetos cuando los vayamos a asignar a atributos. Además, en los métodos de las clases de dominio deberás devolver una copia profunda de los elementos de la colección en dicho método de acceso.

Por otro lado, dado el buen hacer en la primera entrega, el cliente ha decidido que se añada al menú de usuario la posibilidad de realizar operación de Check-in y Check-out.

Primeros Pasos

  1. Realiza un fork del repositorio de tu tarea anterior en otro nuevo llamado ReservasHotel_v1. Dicho repositorio lo clonarás localmente y realizarás las diferentes modificaciones que se piden en esta tarea.
  2. Modifica el archivo README.md. Realiza tu primer commit.

Reservas

  1. Agrega el método realizarCheckin para que se establezca la fecha de check-in de la reserva indicada como parámetro.
  2. Agrega el método realizarCheckout para que se establezca la fecha de check-out de la reserva indicada como parámetro.
  3. Realiza el commit correspondiente.

Opción

  1. Modifica el enumerado Opción creado en el sprint anterior para que se añadan las operaciones realizar check-in y realizar check-out, tal y como aparece en el diagrama de clases.
  2. Realiza un commit con la modificación de este enumerado.

Consola

  1. Modifica la clase Consola para que se incluya el método leerFechaHora que nos pedirá que introduzcamos una cadena correspondiente a una fecha y hora en el formato adecuado y devolverá el objeto LocalDateTime correspondiente. Esto se repetirá mientras la fecha introducida no sea válida.
  2. Realiza el commit correspondiente.

Modelo

  1. Crea la clase Modelo en el paquete indicado en el diagrama. Esta clase gestionará todo el modelo de nuestra aplicación. Será la encargada de comunicarse con las tres clases que hacen referencia a las colecciones de datos (huéspedes, habitaciones y reservas).
  2. Crea el método comenzar que creará la instancia de las clases de negocio.
  3. Crea el método terminar que simplemente mostrará un mensaje informativo indicando que el modelo ha terminado.
  4. Crea los diferentes métodos insertar (para huésped, habitación y reserva).
  5. Crea los diferentes métodos buscar, cada uno de los cuales devolverá una nueva instancia del elemento encontrado si este existe.
  6. Crea los diferentes métodos borrar (para huésped, habitación y reserva).
  7. Crea los diferentes métodos get, que deben devolver una nueva lista conteniendo nuevas instancias no una copia de los elementos.
  8. Crea los métodos realizarCheckin y realizarCheckout.
  9. Realiza un commit con la nueva clase creada.

Controlador

  1. Crea la clase Controlador en el paquete indicado en el diagrama. Esta clase será la encargada de hacer de intermediario entre la vista y el modelo.
  2. Crea los atributos con la visibilidad adecuados.
  3. Crea el constructor con parámetros que comprobará que no son nulos y los asignará a los atributos. Además, debe llamar al método setControlador de la vista con una instancia suya.
  4. Crea los métodos comenzar y terminar, que llamarán a los correspondientes métodos en el modelo y en la vista.
  5. Crea los demás métodos, los cuales simplemente harán una llamada al correspondiente método del modelo.
  6. Realiza un commit con la nueva clase creada.

Vista

  1. Crea la clase Vista, en el paquete adecuado.
  2. Crea los diferentes atributos que se indican en el diagrama de clases con su visibilidad adecuada.
  3. Excepto el método main, mueve todos los métodos existentes en la clase MainApp del sprint anterior a la clase Vista.
  4. Crea el método setControlador que asignará el controlador pasado al atributo si este no es nulo.
  5. Crea el método comenzar que mostrará el menú, leerá una opción de consola y la ejecutará. Repetirá este proceso mientras la opción elegida no sea la correspondiente a salir. Utilizará los correspondientes métodos de la clase Consola.
  6. Crea el método terminar que simplemente mostrará un mensaje de despedida por consola.
  7. Modifica el método ejecutarOpción para que permita realizar las operaciones realizar check-in y realizar check-out.
  8. Crea el método realizarCheckin, que una vez localizada la reserva a la que realizar el check-in, deberá llamar al método correspondiente del controlador. Para localizar la reserva deberá preguntarse por el huésped de la misma, obtener su lista de reservas y establecer la fecha y hora de check-in de la reserva correspondiente. Hay que tener en cuenta que un huésped puede haber realizado varias reservas para el mismo día. Además, en caso de intentar hacer check-in de una reserva no existente en el día indicado para el huésped, la aplicación deberá informar con algún mensaje de lo sucedido.
  9. Crea el método realizarCheckout, que una vez localizada la reserva a la que realizar el check-out, deberá llamar al método correspondiente del controlador. Para localizar la reserva deberá preguntarse por el huésped de la misma, obtener su lista de reservas y establecer la fecha y hora de check-out de la reserva correspondiente. Hay que tener en cuenta que un huésped puede haber realizado varias reservas para el mismo día. Además, en caso de intentar hacer check-out de una reserva no existente en el día indicado para el huésped, la aplicación deberá informar con algún mensaje de lo sucedido.
  10. Realiza un commit con la nueva clase creada.

Main App

  1. Modifica la clase MainApp para que tenga un único método main que será el método de entrada a nuestra aplicación. Este método simplemente creará una vista, un modelo y un controlador, pasándoles las instancias antes creadas. Luego simplemente invocará al método comenzar del controlador.
  2. Realiza las pruebas que estimes oportunas y cuando consideres que todo es correcto, realiza el último commit y seguidamente realiza el push a tu repositorio remoto.

Se valorará:

  • La indentación debe ser correcta en cada uno de los apartados.
  • El nombre de las variables debe ser adecuado.
  • Se debe utilizar la clase Entrada para realizar la entrada por teclado.
  • El programa debe pasar todas las pruebas que van en el esqueleto del proyecto y toda entrada del programa será validada, para evitar que el programa termine abruptamente debido a una excepción. Además, que ni decir tiene, el programa no debe contener ningún error léxico, sintáctico, de dependencias, etc.
  • La corrección ortográfica tanto en los comentarios como en los mensajes que se muestren al usuario.

reservashotel_v1's People

Contributors

darthvlader13 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.