Colabora
 

Caso práctico - Administración hotelera con Visual Basic 2005

Alquiler de habitaciones y mantenimiento de clientes, habitaciones y hoteles

 

Fecha: 23/Ago/2007 (03:22 p.m. 22/08/2007)
Actualizado: 28/Ago/2007

Autor: Emilio "Richard Karl" Mayhua Espinoza - rkarl_x86[a]hotmail.com

Célula Académica .NET Tingo María - http://www.unas.edu.pe/netcell
Desde la ciudad de la bella durmiente: Tingo María...

 


Introducción

Este artículo muestra un caso práctico de programación de Visual Basic .NET 2005 con SQL Server 2005 Express, específicamente una aplicación pequeña para el registro de clientes y alquiler de habitaciones de un hotel.
También el mantenimiento respectivo de hoteles (es multihotel), habitaciones por hotel y clientes.
Dentro de la aplicación, tiene tratamiento de errores con Try/Catch, Binding de controles como DataGridView y ComboBox.
Dentro del acceso a datos, contiene llamadas a procedimientos almacenados y consultas embebidas.

 

Consideraciones previas...

Soy un (asiduo) programador en Visual C#, así que Visual Basic 2005 no me "compila" (osea, no me gusta mucho, esto no quiere decir que no sepa, solo es una preferencia mía), y para tratar de parecerlo mas a C#, hago ciertas modificaciones a la página de propiedades del proyecto creado en Visual Basic 2005:

En la ficha [Application], Borro el texto de "Root Namespace" y quito el check a "Enable application framework", en la imagen lo verán mejor:


Ficha [Application]


En la ficha [Compile], Establezco en "On" a Option Strict y establezco a "Error" todas las condiciones en la que Visual Basic es muy permisivo, que -según yo- son malas practicas de programación.


Ficha [Compile]


Y por ultimo, en l ficha [References], quito el check a "Microsoft.VisualBasic" esa bendita librería que no ayuda en nada, bueno.. es decir, si queremos programar en .NET, esta librería de compatibilidad está por demás.


Ficha [References]

 

Creando la clase principal

Continuando con el modelo que propone Visual C# 2005, agrego una clase llamada Program.vb a mi proyecto e indico en la ficha de propiedades que será el objeto de inicio.
A continuación mostramos el código:

Imports Jewel.Data
Imports Jewel.Data.SqlServer
Imports System.Configuration
Imports System.Globalization
Imports System.Threading

Namespace AdminHotel
    Public Class Program
        Public Shared ReadOnly Property Data() As SqlDatabase
            Get
                If mdata Is Nothing Then
                    mdata = New SqlDatabase(ConfigurationManager.AppSettings("connectionString"))
                End If
                Return mdata
            End Get
        End Property

        Private Shared mdata As SqlDatabase

        Public Shared Sub Main()
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture
            Application.EnableVisualStyles()
            Application.Run(New PrincipalForm)
        End Sub
    End Class
End Namespace

 

Diagrama de base de datos

Consta de 6 tablas:
- Alquiler: Almacena los registros de alquiler de habitaciones por los clientes
- ActividadHotel: Ofrece una lista de las actividades, comodidades extra y otras cosas que puede tener un hotel
- Cliente: Guarda los detalles de los clientes
- Habitacion: Guarda los detalles de la habitación, su tipo o capacidad y numero
- Hotel: Guarda las características de los hoteles administrados
- Actividad: Guarda la lista de actividades disponibles que se puede asignar a los hoteles

Veamos el diagrama completo y sus relaciones entre tablas, Si no se nota bien, descargar la imagen, lo he reducido por cuestiones de espacio:


Diagrama de la base de datos

Nota:
La instancia de SQL Server 2005 utilizada para la aplicación es ".\SQL2005", si tu instancia tiene otro nombre, modificar el valor del Servidor en el fichero app.config

 

Formulario de alquiler de habitaciones

En esta vez solo veremos el formualario principal del proyecto, el alquiler de una habitación a un cliente. Consta de tres listas desplegables (ComboBox!), primero se selecciona al cliente, luego el hotel en donde se alojará y finalmente especificamos la habitacion. Opcionalmente podemos aumentar los días que alquilará mediante un control NumericUpDown, su valor predeterminado es 1. El ComboBox de habitaciones es dependiente del ComboBox de hoteles, al seleccionar un determiando hotel, recién se muestra la lista de habitaciones disponibles (Estado = 'Libre' en la base de datos), en caso de no haber habitaciones libres se muestra un mensaje de advertencia.

Al guardar el alquiler, se almacena un registro en la tabla [Alquiler] y se actualiza en campo Estado de la tabla [Habitacion] a 'Ocupado'.

Veamos unas captura de pantalla:


Formulario de alquiler de habitaciones

Alerta de alquiler correcto

Alerta de Hotel sin habitaciones disponibles


 

TO DO: (A Hacer)

Algunas adiciones extras que se pueden hacer son: - Arreglar los mensajes de información y error para que sean mas impactantes, básicamente agregar los iconos predeterminados de Windows.
- Pasar a procedimientos almacenados las consultas embedidas en la aplicación.
- "Finalizar el alquiler", mejor dicho, un formulario en donde se establezca nuevamente a 'Libre' la habitación ocupada

 

Nota:
El proyecto original fue hecho para un trabajo de la universidad.
Como parte del examen de un curso, se desarrollo esta aplicación y adicionando mas detalles, poniendo especial cuidado en que el código sea claro y fácil de entender por otras personas (profesor incluido). La razón de la publicación del presente articulo (es decir, la segunda razón) es asegurar la autoría del proyecto, en vista de que hay mucho plagio en los proyectos de trabajo del curso.
La primera razón -claro esta- es poder compartir unas "demos", ofreciendo un código sencillo, buenas practicas de programación, tanto de escritura de código como de diseño de base de datos.
Gracias por su atención. Richard Karl

 

Nota 2:
Si ocurren errores al momento de adjuntar la base de datos, elimina la referencia al archivo de log inexistente que fue borrado por razones de espacio:

Adjuntar la base de datos


Espacios de nombres usados en el código de este artículo:

System
System.Threading
System.Data
System.Data.SqlClient
System.Windows.Forms
System.Configuration
System.Globalization

 


Código de ejemplo (comprimido):

 

Fichero con el código de ejemplo: RichardKarl_DemoAlquilerHotel.zip - 410 KB

(MD5 checksum: 16A865D4D6A745A86455B11893EF3A75)

 


Acerca del autor

Richard Karl Emilio "Richard Karl" Mayhua Espinoza es estudiante de Ingeniería en Informática y Sistemas de la Universidad Nacional Agraría de la Selva en Tingo María - Perú.
Tiene 23 años y se dedica al desarrollo de componentes de software para acceso a datos, controles en Windows Forms y servicios Web XML con ASP.net.
Es fundador y líder de la Célula Académica .NET Tingo María.
Cuando está programando, sus lenguajes favoritos son C#, VB .net, C++ y también Java.
Ha obtenido 4 estrellas del programa Desarrollador Cinco Estrellas 2005. Actualmente está estudiando para la certificación "Microsoft Certified Technology Specialist" en Windows y Web Aplications.

 


Ir al índice principal de el Guille