GithubHelp home page GithubHelp logo

reserva-ya's Introduction

Sistema de Reservas de un Hotel

El segundo ejercicio integrador de Laboratorio II es un sistema de atención al público en .NET y C# que se encargará de gestionar las reservas de un hotel.

Formulario de Registro de datos

El sistema debe permitir agregar tanto las reservas como sus respectivos huéspedes a la base de datos del hotel a través de un formulario o importando los datos desde un archivo JSON o XML. Ademas, debe permitir modificar, eliminar y buscar registro. Esto ultimo lo hace a través de un buscador por ID.

Formulario de Búsquedas

Se utilizarán los contenidos vistos en clase en la segunda parte de la materia:

Antes de empezar

Para poder utilizar el sistema, es necesario tener instalado SQL Server y SQL Server Management Studio.

Tanto la clave como el usuario de al ingresar el formulario de registro son Admin.

Diagrama de Clases

Las clases del sistema se encuentran en los siguientes diagramas:

Modelos

El programa principal parte de dos entidades base: Reserva y Huesped. Ambas clases son tablas de la base de datos.

La clase Huesped representa a una persona que se hospeda en el hotel. Esta clase contiene los datos personales del huésped, como su nombre, apellido, fecha de nacimiento, etc. Además, contiene un numero de reserva que representa la reserva que el huésped realizó en el hotel.

La clase Reserva representa a una reserva que se realizó en el hotel. Esta clase contiene los datos de la reserva, como la fecha de ingreso y egreso, el numero de la habitación (Id), etc. Ademas, cuenta con un enumerado EFormaDePago que será utilizado para indicar la forma de pago de la misma.

Modelos

De momento solo hay validaciones para las fechas ingresadas y que los datos no sean nulos o vacíos, pero se pueden agregar más validaciones en el futuro.

Base de Datos

El sistema cuenta con una base de datos Hotel que se encarga de almacenar tanto las reservas como los huéspedes en sus respectivas tablas.

La clase HotelContext se encarga de realizar la conexión a la base de datos y de crear las tablas en caso de que no existan. Además, se encarga de realizar las consultas a la base de datos como:

  • Agregar una reserva o un huésped.
  • Modificar una reserva o un huésped.
  • Eliminar una reserva o un huésped.
  • Seleccionar una reserva o un huésped por su Id, o todos los registros de la tabla.

Implementa la interfaz IComandosDb que contiene los métodos que se utilizarán para realizar las consultas a la base de datos.

También cuenta con una clase ComandosExtended que contiene métodos de extensión para la clase HotelContext que se encargan de realizar consultas más complejas a la base de datos.

Base de Datos

Archivos

El sistema cuenta con un ManejadorDeArchivos que se encarga de guardar y leer los datos de las reservas y los huéspedes en un archivo JSON o XML.

Archivos

La clase cuenta con clases tanto para serializar como deserializar los datos de los registros que son llamados en los métodos ExportarArchivo e ImportarArchivo respectivamente según el formato de archivo elegido.

switch (extension.TrimStart('.').ToLower())
{
    case "json":
        SerializarJson(path, elementos);
        break;

    case "xml":
        SerializarXml(path, elementos);
        break;

    case "csv":
        SerializarCsv(path, elementos);
        break;

    default:
        throw new ExtensionNoPermitidaException();
}

Próximamente se agregara la opción de exportar los datos a un archivo Excel (xlsx).

Excepciones

El sistema cuenta con una serie de excepciones que se lanzan en caso de que ocurra algún error en el programa. Estas excepciones se encuentran en el namespace Excepciones.

Excepciones

Hay excepciones para los siguientes casos:

  • Base De Datos: Se lanza cuando ocurre un error en la base de datos.
  • Fecha Invalida: Hereda de DatoInvalidoException. Se lanza según la fecha a validar, la fecha de nacimiento, por ejemplo.
  • Archivo no encontrado: Se lanza cuando el archivo no se encuentra en el directorio especificado.
  • Extension no permitida: Se lanza cuando la extensión del archivo no es ni JSON ni XML.

Ambas heredan de ArchivoInvalidoException.

Hilos y Concurrencia

El sistema cuenta con un manejador de hilos que se encarga de realizar las consultas a la base de datos en un hilo aparte para no bloquear la interfaz del usuario.

Se implementa en FrmBusqueda para que la búsqueda de los registros se realice en un hilo aparte.

private void CargarDatos()
{
    if (InvokeRequired)
    {
        BeginInvoke(ActualizarGrilla);
    }
    else
    {
        reservas = gdb.Reservas.ToList();
        huespedes = gdb.Huespedes.ToList();
    }
}

Si requiere invocar el hilo principal para actualizar la grilla, se llama al método BeginInvoke que se encarga de llamar al método ActualizarGrilla en el hilo principal.

private void ActualizarGrilla()
{
    CargarDatos();
    
    if (rdbHuespedes.Checked)
    {
        dgvHotel.DataSource = huespedes;
    }

    else if (rdbReservas.Checked)
    {
        dgvHotel.DataSource = reservas;
    }
}

Eventos

El sistema cuenta con un manejador de eventos que se encarga de manejar las excepciones que ocurren durante el funcionamiento del programa.

Eventos

La clase ManejarExcepcion, que será utilizada en los formularios, tiene un método LanzarExcepcion que se encarga lanzar el evento con la excepción llamando a OnExcepcionOcurre que es la encargada en invocar al evento.

ExcepcionEventArgs hereda de EventArgs y contiene la excepción que se lanzó en el programa.


Anexos

reserva-ya's People

Contributors

em40a avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

seh-04

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.