Está en la página 1de 32

FACULTAD DE INGENIERIA Y ARQUITECTURA

ESCUELA PROFESIONAL DE INGENIERIA DE


SISTEMAS

Creación de una base de datos para el hotel “Las


Palmeras”

AUTOR (ES):
Gutierrez Huingo Lucio Fabricio (orcid.org/0000-0003-0514-9536)
Jacobo Sulla Jerson Johan (orcid.org/0000-0003-1950-9416)
Lozano Cachay Fabricio (orcid.org/0000-0003-3118-1978)

ASESOR(A)(ES):
Ing. Victor Fernando Luque Sanchez

LÍNEA DE INVESTIGACIÓN:
Sistemas de Información

TRUJILLO — PERÚ

2023

1
Índice
I. INTRODUCCION 3
a. Breve Historia de la empresa 3
b. Problematica actual de la empresa 3
II. DESCRIPCION Y ANALISIS DEL ESTUDIO 4
a. Diagrama de actividades 4
b. Modelo de Datos 5
c. Lista de 10 requerimientos 6
d. Implementación de requerimientos 7
e. Implementar 1 función 13
f. Implementar 3 vistas 14
g. Implementar 1 disparador 17
h. Implementar índices 18
i. Implementación de Cursores 19
j. Integración de Datos 20
ANEXOS 24

2
I. INTRODUCCION

a. Breve historia de la empresa:


El hotel Las Palmeras es un establecimiento caracterizado por su
hospitalaria y acogedor servicio brindado por sus empleados y local. Se
encuentra ubicado en la ciudad de Chocope, en una zona conocida como
Campodónico Niño. Su existencia data desde el año de 2010 y durante
este tiempo, el establecimiento ha ofrecido variados servicios del cual
más prominente es el hospedaje, por el cual reciben regularmente
distintos tipos de huéspedes. Debido a su longeva historia en la
ubicación, los clientes esperan un servicio de calidad y que satisfaga sus
necesidades. Este hotel ofrece distintos tipos de habitaciones, desde las
más comunes que cumplirán con los requerimientos que los clientes
comunes posean hasta las más premium que agrega un plus inmenso a
la experiencia que el hotel puede brindar a su clientela. Todo lo anterior
sumado a que brinda un servicio de las 24 horas todos los días del año.
Es por esto que Las Palmeras se caracteriza por su buen trato a los
clientes y su disponibilidad, lo que lo vuelve uno de los hoteles más
populares de la ciudad de Chocope.

b. Problemática actual de la empresa


Si bien el establecimiento goza de renombre por sus años de servicio y
hospitalidad, esto no lo exime de presentar problemas característicos de
su área profesional. Esto nos lleva al principal problema que presenta
este negocio, el cual es la falta de una base de datos que permita la
correcta administración y organización de los registros, esto genera un
déficit en los distintos procesos de gestión del hotel, además confusiones
debido a la ambigüedad de los datos, que en algunas ocasionas genera
cierta incomodidad en los clientes al no tener un sistema actualizado que

3
permita eficacia y velocidad al registrarse, acarreando que disminuya la
clientela y opten por acudir a la competencia.
Otro de los problemas a destacar es la dificultad para generar resúmenes
de ganancias y pérdidas para permitir la correcta administración del
negocio y generar así estrategias que contribuyan a la mejoría del
servicio.

II. DESCRIPCION Y ANALISIS DEL ESTUDIO


a. Objetivos de la investigación
 Implementar una base de datos en SQL Server Management
Studio.
 Implementar una interfaz y diseño de aplicativo de base de
datos en Visual Studio.
 Hacer uso de los requerimientos de elaboración del informe
académico para contestar las necesidades del negocio a
trabajar.

4
b. Acerca del proceso del negocio (diagrama: BIZAGI).
Diagrama de Actividades

5
c. Modelo de Datos (E-R)

6
d. Lista de 10 requerimientos
1. Conocer que recepcionistas han realizado reservas y
cuáles no (Left Join)
2. Conocer que habitaciones han sido reservadas y
cuáles no en el año 2021(Right Join)
3. Conocer las reservas de cada mes por habitacion en
el año 2022. (Pivote)
4. Conocer el pago de la reserva realizadas (Group by) .
5. Conocer el resumen de reservas realizadas (Group
by).
6. Conocer la gestión de reservas realizadas en el año
2021(Having)
7. Conocer a que personal de mantenimiento está
asignado a cada habitación (Inner Join)
8. Conocer que Gabinete tiene el personal del área de
mantenimiento (Inner Join)
9. Conocer que habitaciones han sido las más
reservadas (Inner Join)
10. Conocer que tipo de comprobante se le ha entregado
a los huéspedes (Inner Join)

( 2: left, right join), (1) PIVOTE (3) GROUP BY y HAVING (4) LIBRE:
JOIN )

7
d. Implementación de Requerimientos (4)
1.
ii. Enunciado del requerimiento
Conocer que recepcionistas han administrado reservas y
cuáles no (Left Join)
iii. Orden SQL
SELECT R.RecepcionistaNombreCompleto, ESTADO = (CASE WHEN
S.ReservaCodigo is null then 'NO ADMINISTRÓ RESERVAS' ELSE 'SI
ADMINISTRÓ RESERVAS' END)
FROM Recepcion.Recepcionista AS R LEFT JOIN Recepcion.Reserva AS S
ON R.RecepcionistaCodigo= S.ReservaCodigoRecepcionista
GROUP BY R.RecepcionistaNombreCompleto, (CASE WHEN S.ReservaCodigo
is null then 'NO ADMINISTRÓ RESERVAS' ELSE 'SI ADMINISTRÓ RESERVAS'
END)
go
iv. Datos como resultado de aplicar la orden SQL

2.
i. Enunciado del requerimiento
Conocer que habitaciones han sido reservadas y cuáles no
en el año 2021
ii. Orden SQL
SELECT H.HabitacionCodigo, ESTADO =(Case When R.ReservaCodigo is null
then 'La Habitación no fue Reservada'ELSE 'La Habitación fue
Reservada 'END)
FROM Recepcion.Reserva AS R RIGHT JOIN Recepcion.Habitacion AS H
ON R.ReservaCodigoHabitacion=H.HabitacionCodigo
where YEAR(R.ReservaFecha) = 2021
Group by H.HabitacionCodigo, (Case When R.ReservaCodigo is null then
'La Habitación no fue Reservada'ELSE 'La Habitación fue Reservada
'END)
go

8
iii. Datos como resultado de aplicar la orden SQL

3.
i. Enunciado del requerimiento
Conocer las reservas de cada mes por habitación en el año
2022. (Pivote)
ii. Orden SQL
SELECT h.HabitacionCodigo, R.ReservaPago as Pago,
MONTH(R.ReservaFecha) AS Mes
INTO #resumen
FROM Recepcion.Reserva AS R INNER JOIN Recepcion.Habitacion AS H
ON R.ReservaCodigoHabitacion=h.HabitacionCodigo
Where year(R.ReservaFecha) =2022
SELECT *
FROM #resumen p
PIVOT (SUM(p.Pago) FOR Mes IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],
[10],[11],[12])) As pvt
go

iii. Datos como resultado de aplicar la orden SQL

4.
i. Enunciado del requerimiento
Conocer el pago de la reserva realizadas
ii. Orden SQL

9
SELECT R.ReservaCodigo, H.HuespedNombreCompleto, R.ReservaPago
from Recepcion.Reserva R inner join Recepcion.Huesped H on
R.ReservaCodigoHuesped=H.HuespedCodigo
group by R.ReservaCodigo, H.HuespedNombreCompleto, R.ReservaPago
iii. Datos como resultado de aplicar la orden SQL

5.
i. Enunciado del requerimiento
Conocer el resumen de reservas totales e ingresos
generados por cada recepcionista
ii. Orden SQL
SELECT Re.RecepcionistaNombreCompleto, SUM(R.ReservaPago) as Ventas,
COUNT(R.ReservaCodigo) as 'Reservas Totales'
from Recepcion.Reserva R INNER JOIN Recepcion.Recepcionista Re on
R.ReservaCodigoRecepcionista=Re.RecepcionistaCodigo
GROUP BY Re.RecepcionistaNombreCompleto
go

iii. Datos como resultado de aplicar la orden SQL

10
6.
i. Enunciado del requerimiento
Conocer la gestión de reservas realizadas en el año 2021
ii. Orden SQL
SELECT
R.ReservaCodigo,H.HuespedNombreCompleto,Re.RecepcionistaNombreCompleto,
CAST(R.ReservaFecha AS date) AS Fecha, R.ReservaPago as Venta, Año =
year(R.ReservaFecha), Mes = Month(R.ReservaFecha)
from Recepcion.Reserva R INNER JOIN Recepcion.Huesped H on
R.ReservaCodigoHuesped=H.HuespedCodigo
INNER JOIN Recepcion.Recepcionista Re on
R.ReservaCodigoRecepcionista=Re.RecepcionistaCodigo
GROUP BY
R.ReservaCodigo,H.HuespedNombreCompleto,Re.RecepcionistaNombreCompleto,
CAST(R.ReservaFecha AS date),R.ReservaPago
Having YEAR (R.ReservaFecha)= 2021
iii. Datos como resultado de aplicar la orden SQL

7.
i. Enunciado del requerimiento
Conocer a que personal de mantenimiento está asignado a
cada habitación (Inner Join)

ii. Orden SQL


SELECT R.PersonalMantenimientoNombreCompleto, H.HabitacionCodigo,
h.HabitacionDescripcion
FROM Recepcion. PersonalMantenimiento AS R INNER JOIN
Recepcion.Habitacion H
ON R. PersonalMantenimientoCodigo = H.HabitacionPersonalCodigo
GROUP BY R. PersonalMantenimientoNombreCompleto, H.HabitacionCodigo,
h.HabitacionDescripcion
iii. Datos como resultado de aplicar la orden SQL

11
8.
i. Enunciado del requerimiento
Conocer que Gabinete tiene el personal del área de
mantenimiento (Inner Join)
ii. Orden SQL
SELECT R. PersonalMantenimientoNombreCompleto, G.GabineteNombre
FROM Recepcion. PersonalMantenimiento AS R INNER JOIN Recepcion.Gabinete
AS G
ON R. PersonalMantenimientoGabinete=G.GabineteCodigo
GROUP BY R. PersonalMantenimientoNombreCompleto, G.GabineteNombre
iii. Datos como resultado de aplicar la orden SQL

9.
i. Enunciado del requerimiento
Conocer que habitaciones han sido las más reservadas
(Inner Join)
ii. Orden SQL
SELECT H.HabitacionCodigo, COUNT(R.ReservaCodigoHabitacion) AS
Nreservas
FROM Recepcion.Habitacion AS H INNER JOIN Recepcion.Reserva AS R
ON H.HabitacionCodigo=R.ReservaCodigoHabitacion
GROUP BY H.HabitacionCodigo
ORDER BY Nreservas DESC

12
iii. Datos como resultado de aplicar la orden SQL

10.
i. Enunciado del requerimiento
Conocer que tipo de comprobante se le ha entregado a los
huespedes
ii. Orden SQL
select res.ReservaCodigoHuesped, h.HuespedNombreCompleto, COMPROBANTE
= (CASE WHEN com.ComprobanteTipo = 'B' then 'BOLETA' ELSE 'FACTURA'
END)
from Recepcion.Reserva res INNER JOIN Recepcion.ComprobanteDePago
com on res.ReservaCodigo =com.ComprobanteReservaCodigo
INNER JOIN Recepcion.Huesped h on res.ReservaCodigoHuesped =
h.HuespedCodigo
GROUP BY res.ReservaCodigoHuesped, h.HuespedNombreCompleto,
com.ComprobanteTipo
GO

iii. Datos como resultado de aplicar la orden SQL

13
e. Implementar 1 función
Función que se basa en una política de descuento:
Si la estadía consta de mas de 5 personas se aplicará un descuento
de 5 soles por cada persona adicional. El método calcula el monto a
pagar aplicando el descuento del huésped del que se ingresa el
código
1. Script function
CREATE OR ALTER FUNCTION
dbo.Calculando_MontoConDcto(@codigoHuesped nchar(6)) RETURNS
decimal(9,2)
AS
BEGIN
DECLARE @dcto numeric(9,2)=0
DECLARE @npersonas numeric(9,2)=0
DECLARE @montototal numeric(9,2)=0
DECLARE @montodcto numeric(9,2)=0
SELECT @npersonas = r.ReservaNroPersonas, @montototal =
r.ReservaPago
FROM Recepcion.Huesped h INNER JOIN Recepcion.Reserva r
ON h.HuespedCodigo = r.ReservaCodigoHuesped
WHERE r.ReservaCodigoHuesped = @codigoHuesped
IF(@npersonas>5)
BEGIN
SET @dcto=5*(@npersonas-5)

END
ELSE
SET @dcto = 0
SET @montodcto = @montototal-@dcto
RETURN @montodcto
END
GO
2. Probar función

3. Mostrar Datos como resultado de la función

Se descontaron 5 soles al monto a pagar del cliente numero


17 debido a que este hizo reserva para 6 personas
f. Implementar 3 vistas

14
a.
4. Poner vista (CREATE VIEW)
Create or alter view VISTA1
AS
SELECT h.HuespedNombreCompleto As Huesped, r.ReservaFecha As Fecha,
b.HabitacionCodigo As 'Codigo de habitacion', b.HabitacionDescripcion
AS 'Descripcion de habitacion', t.TipoNombre AS 'Tipo de Habitacion',
r.ReservaCantidadDeDias AS 'Estancia',
Monto = sum(r.ReservaPrecioPorDia*r.ReservaCantidadDeDias)
FROM Recepcion.Reserva r inner join Recepcion.Huesped h ON
h.HuespedCodigo = r.ReservaCodigoHuesped
INNER JOIN Recepcion.Habitacion b ON b.HabitacionCodigo =
r.ReservaCodigoHabitacion
INNER JOIN Recepcion.TipoHabitacion t ON t.TipoCodigo =
b.HabitacionTipoCodigo
GROUP BY h.HuespedNombreCompleto, r.ReservaFecha,
b.HabitacionCodigo, b.HabitacionDescripcion, t.TipoNombre,
r.ReservaCantidadDeDias
go

5. Excel de cada vista

15
2.
 Poner vista (CREATE VIEW)
create or alter view vista2
as
SELECT H.HabitacionCodigo, COUNT(R.ReservaCodigoHabitacion) AS
Nreservas
FROM Recepcion.Habitacion AS H INNER JOIN Recepcion.Reserva AS R
ON H.HabitacionCodigo=R.ReservaCodigoHabitacion
GROUP BY H.HabitacionCodigo
go

 Excel de cada vista

3.
 Poner vista (CREATE VIEW)
create or alter view vista3
AS
SELECT h.HabitacionCodigo ,
Enero = sum(CASE WHEN MONTH(R.ReservaFecha) =1 then R.ReservaPago
ELSE 0 END),

16
Febrero = sum(CASE WHEN MONTH(R.ReservaFecha) =2 then R.ReservaPago
ELSE 0 END),
Marzo = sum(CASE WHEN MONTH(R.ReservaFecha) =3 then R.ReservaPago
ELSE 0 END),
Abril = sum(CASE WHEN MONTH(R.ReservaFecha) =4 then R.ReservaPago
ELSE 0 END),
Mayo = sum(CASE WHEN MONTH(R.ReservaFecha) =5 then R.ReservaPago ELSE
0 END),
Junio = sum(CASE WHEN MONTH(R.ReservaFecha) =6 then R.ReservaPago
ELSE 0 END) ,
Julio = sum(CASE WHEN MONTH(R.ReservaFecha) =7 then R.ReservaPago
ELSE 0 END) ,
Agosto = sum(CASE WHEN MONTH(R.ReservaFecha) =8 then R.ReservaPago
ELSE 0 END) ,
Septiembre = sum(CASE WHEN MONTH(R.ReservaFecha) =9 then
R.ReservaPago ELSE 0 END) ,
Octubre = sum(CASE WHEN MONTH(R.ReservaFecha) =10 then R.ReservaPago
ELSE 0 END),
Noviembre = sum(CASE WHEN MONTH(R.ReservaFecha) =11 then
R.ReservaPago ELSE 0 END) ,
Diciembre = sum(CASE WHEN MONTH(R.ReservaFecha) =12 then
R.ReservaPago ELSE 0 END)
FROM Recepcion.Reserva AS R INNER JOIN Recepcion.Habitacion AS H
ON R.ReservaCodigoHabitacion=h.HabitacionCodigo
Where year(R.ReservaFecha) =2022
GROUP BY h.HabitacionCodigo
Go

 Excel de cada vista

17
g. Implementar 1 disparadores
6. Script TRIGGER
CREATE TRIGGER ti_habitacion ON Recepcion.Reserva
FOR INSERT
AS
UPDATE h SET HabitacionEstado = 'O'
FROM habitacion h INNER JOIN inserted r ON
r.ReservaCodigoHabitacion = h.HabitacionCodigo
GO
7. Prueba (Pegar pantalla de las pruebas
Como se aprecia en la habitación 7 su estado es “L”
(Libre)

Si se agrega una nueva reserva a la habitación

El estado de la habitación cambiara a “O” (Ocupada)

18
h. Implementar índices
i. Tablas movimientos
-- INDICES PARA COLUMNAS DE CONSULTAS FRECUENTES

-- GABINETE (GabineteNombre)
create nonclustered index idxx_gabinetenombre on
Recepcion.Gabinete(GabineteNombre)

-- PERSONAL MANTENIMIENTO (PersonalMantenimientoNombreCompleto)


create nonclustered index idxx_personalnombre on
Recepcion.PersonalMantenimiento(PersonalMantenimientoNombreCompleto)

-- RESERVA (ReservaFecha)
create nonclustered index idxx_reservafecha on
Recepcion.Reserva(ReservaFecha)

-- COMPROBANTE (ComprobanteNroComp)
create nonclustered index idxx_comprobantenro on
Recepcion.ComprobanteDePago(ComprobanteNroComp)

-- RECEPCIONISTA (RecepcionistaNombreCompleto)
create nonclustered index idxx_recepcionistanombre on
Recepcion.Recepcionista(RecepcionistaNombreCompleto)

-- HUESPED (HuespedNombreCompleto)
create nonclustered index idxx_huespednombre on
Recepcion.Huesped(HuespedNombreCompleto)

ii. Tablas FK
Tabla Orden Indexado
Reserva Recepcionista:
create nonclustered index idxx_reservarecepcionista on
Recepcion.Reserva(ReservaCodigoRecepcionista)
GO
Huesped:
create nonclustered index idxx_reservahuesped on
Recepcion.Reserva(ReservaCodigoHuesped)
GO
Habitación:
create nonclustered index idxx_reservahabitación on
Recepcion.Reserva(ReservaCodigoHabitacion)
GO
Habitación Personal de Limpieza:
create nonclustered index idxx_habitacionpersonal on
Recepcion.Habitacion(HabitacionPersonalCodigo)
GO
Tipo de habitación:
create nonclustered index idxx_habitaciontipo on
Recepcion.Habitacion(HabitacionTipoCodigo)
GO
Personal Gabinete:
create nonclustered index idxx_personalGabinete on
Recepcion.PersonalMantenimiento(PersonalMantenimientoGabinet
e)
GO

19
Comprobant Reserva:
create nonclustered index idxx_comprobantereserva on
e Recepcion.ComprobanteDePago(ComprobanteReservaCodigo)

i. Implementar de Cursores
Cursor para otorgar un cupón de descuento del 5% del pago a
aquellas reservas que cumplan con las siguientes condiciones:
 Tener a huéspedes de tipo natural
 Ser de más de 5 días
 Incluir más de 3 personas
CREATE OR ALTER PROCEDURE _CalcularDcto1 @codigo nchar(6)
AS

DECLARE @dcto1 numeric(9,2)=0


DECLARE @ReservaCodigo nchar(6) ,@ReservaPago numeric(16,2),@HuespedCodigo
nchar(6) ,@Huespedtipo nchar(1), @NDias int, @NPersonas int,@HabCodigo
nchar(6)
-- PREPARANDO DATOS
SELECT R.ReservaCodigo, r.ReservaPago, h.HuespedCodigo,h.HuespedTipo,
r.ReservaCantidadDeDias, @dcto1 as dcto1,
r.ReservaNroPersonas,b.HabitacionCodigo
INTO #dcto
FROM Recepcion.Reserva r INNER JOIN Recepcion.Huesped h ON
r.ReservaCodigoHuesped = h.HuespedCodigo
INNER JOIN Recepcion.Habitacion b
ON b.HabitacionCodigo= r.ReservaCodigoHabitacion
WHERE h.HuespedCodigo = @codigo
ORDER BY ReservaCantidadDeDias DESC
CREATE INDEX idx_dcto ON
#dcto(ReservaCodigo,HuespedCodigo,HabitacionCodigo)
-- crear cursor
DECLARE c_dcto CURSOR FOR SELECT ReservaCodigo,ReservaPago,HuespedCodigo,
HuespedTipo, ReservaCantidadDeDias, ReservaNroPersonas, HabitacionCodigo
FROM #dcto
ORDER BY ReservaCantidadDeDias DESC
-- ABRIR CURSOR
OPEN c_dcto
-- LEER CURSOR
FETCH c_dcto INTO @ReservaCodigo,@ReservaPago,@HuespedCodigo,
@HuespedTipo,@NDias,@NPersonas,@HabCodigo
-- PROCESAR CURSOR
WHILE @@FETCH_STATUS =0
BEGIN
SET @dcto1 = (IIF(@Huespedtipo = 'N' AND @NDias>5 AND @NPersonas>3,
@ReservaPago*0.05, 0 ))

update #dcto SET dcto1 = @dcto1


WHERE ReservaCodigo = @ReservaCodigo and HuespedCodigo =
@HuespedCodigo and HabitacionCodigo = @HabCodigo

FETCH c_dcto INTO @ReservaCodigo,@ReservaPago,@HuespedCodigo,


@HuespedTipo,@NDias,@NPersonas,@HabCodigo

END

20
CLOSE c_dcto
DEALLOCATE c_dcto
SELECT d.HuespedCodigo, d.ReservaCodigo,d.ReservaNroPersonas ,
d.ReservaCantidadDeDias, d.HuespedTipo ,IIF(d.dcto1>0, 'SI RECIBE','NO
RECIBE') as CuponEstado, d.dcto1
from #dcto d
ORDER BY d.ReservaCantidadDeDias
Go

-- ejecucion
exec _CalcularDcto1 @codigo='C00001'

Como se puede observar, el cliente ha realizado 2 reservas en


distintas fechas de las cuales una cumple con las condiciones para
recibir un descuento y la otra, no.
j. Integración de Datos
i. Pantalla del Modelo

21
ii. Scripts de 3 dimensiones
SCRIPT DimHuesped:
DELETE from [ProyectoResumen].[dbo].[DimHuesped] -- borrar datos
go
INSERT [ProyectoResumen].[dbo].[DimHuesped] -- subida de datos
(Huesped, TipoHuesped, Telefono)
SELECT h.HuespedNombreCompleto as Huesped,h.HuespedTipo as
TipoHuesped,h.HuespedTelefono as Telefono
FROM Recepcion.Huesped h
go
select * from [ProyectoResumen].[dbo].[DimHuesped] -- consulta

SCRIPT DimHabitacion:
DELETE from [ProyectoResumen].[dbo].[DimHabitacion] -- borrar datos
go
INSERT [ProyectoResumen].[dbo].[DimHabitacion] -- subida de datos
(Habitacion, TipoHabitacion)
SELECT h.HabitacionDescripcion as Habitacion,th.TipoNombre as
TipoHabitacion
FROM Recepcion.Habitacion h inner join Recepcion.TipoHabitacion th ON
h.HabitacionTipoCodigo=th.TipoCodigo
go
select * from [ProyectoResumen].[dbo].[DimHabitacion] -- consulta

22
SCRIPT DimPersonalDeMantenimiento:
DELETE from [ProyectoResumen].[dbo].[DimPersonalDeMantenimiento] -- borrar
datos
go
INSERT [ProyectoResumen].[dbo].[DimPersonalDeMantenimiento] -- subida de
datos
(PersonalMantenimiento, Gabinete)
SELECT p.PersonalMantenimientoNombreCompleto as
PersonalMantenimiento,g.GabineteNombre as Gabinete
FROM Recepcion.PersonalMantenimiento p inner join Recepcion.Gabinete g ON
p.PersonalMantenimientoGabinete=g.GabineteCodigo
go
select * from [ProyectoResumen].[dbo].[DimPersonalDeMantenimiento] --
consulta

k. Implementar Seguridad
db_owner

23
db_datareader

db_datawriter

24
db_denydatawriter

l. Implementar 5 Procedimientos Almacenados


-- PROCEDIMIENTO HABITACION

CREATE OR ALTER PROCEDURE _RegistrarHabitacion


@HabitacionCodigo char(6)=null, @HabitacionPersonal char(6)=null,
@HabitacionTipoCodigo char(6)=null, @HabitacionDescripcion varchar(100)=null,
@HabitacionNumeroCamas int=0, @HabitacionEstado char(1)='L', @HabitacionFoto
image=null, @tipo tinyint=1
AS
IF @tipo = 1
BEGIN
INSERT Recepcion.Habitacion (HabitacionCodigo, HabitacionPersonalCodigo,
HabitacionTipoCodigo, HabitacionDescripcion, HabitacionNumeroCamas, HabitacionEstado,
HabitacionFoto )
VALUES (@HabitacionCodigo, @HabitacionPersonal, @HabitacionTipoCodigo,
@HabitacionDescripcion, @HabitacionNumeroCamas, @HabitacionEstado, @HabitacionFoto)
END

IF @tipo = 5
SELECT h.HabitacionCodigo,t.TipoNombre as Tipo , h.HabitacionDescripcion as
Descripcion, h.HabitacionNumeroCamas as
NumCamas,IIF(h.HabitacionEstado='L','Libre','OCUPADO') as Estado
FROM Recepcion.Habitacion h inner join Recepcion.TipoHabitacion t on
h.HabitacionTipoCodigo=t.TipoCodigo
WHERE HabitacionCodigo LIKE + '%' +@HabitacionCodigo + '%'

-- PROCEDIMIENTO PERSONAL
create or alter procedure _PersonalMantenimiento

@PersonalMantenimientoCodigo nchar(6)=null, @PersonalMantenimientoGabinete


nchar(6)=null, @PersonalMantenimientoNombre nvarchar(30)=null,

25
@PersonalMantenimientoPaterno nvarchar(30)=null, @PersonalMantenimientoMaterno
nvarchar(30)=null, @PersonalMantenimientoTelefono nvarchar(13)=null,
@PersonalMantenimientoDireccion nvarchar(100)=null, @PersonalMantenimientoSueldo
numeric(9,2)=null, @PersonalMantenimientoFechaEntrada datetime=null, @tipo tinyint=1

as
if @tipo=1
begin
insert Recepcion.PersonalMantenimiento(PersonalMantenimientoCodigo,
PersonalMantenimientoGabinete, PersonalMantenimientoNombre,

PersonalMantenimientoPaterno, PersonalMantenimientoMaterno,
PersonalMantenimientoTelefono,

PersonalMantenimientoDireccion, PersonalMantenimientoSueldo,
PersonalMantenimientoFechaEntrada)
values (@PersonalMantenimientoCodigo, @PersonalMantenimientoGabinete,
@PersonalMantenimientoNombre,
@PersonalMantenimientoPaterno, @PersonalMantenimientoMaterno,
@PersonalMantenimientoTelefono,
@PersonalMantenimientoDireccion, @PersonalMantenimientoSueldo,
@PersonalMantenimientoFechaEntrada)
end

if @tipo=5
select pm.PersonalMantenimientoCodigo as CodigoPersonal, g.GabineteNombre as
NombreGabinete, pm.PersonalMantenimientoNombreCompleto as NombreCompleto,
pm.PersonalMantenimientoTelefono as Telefono,
pm.PersonalMantenimientoDireccion as Direccion,
pm.PersonalMantenimientoSueldo as Sueldo, pm.PersonalMantenimientoFechaEntrada as
FechaEntrada
from Recepcion.PersonalMantenimiento pm inner join
Recepcion.Gabinete g on pm.PersonalMantenimientoGabinete = g.GabineteCodigo
where pm.PersonalMantenimientoCodigo LIKE + '%' +
@PersonalMantenimientoCodigo + '%'

-- PROCEDIMIENTO COMPROBANTE
CREATE OR ALTER PROCEDURE _ComprobanteDePago

@ComprobanteNroSerie nchar(7)=null, @ComprobanteReservaCodigo nchar(6)=null,


@ComprobanteNroComp nchar(4)=null, @ComprobanteTipo nchar(1)= 'B', @tipo tinyint=1

AS
IF @tipo = 1
BEGIN
INSERT Recepcion.ComprobanteDePago (ComprobanteNroSerie, ComprobanteReservaCodigo,
ComprobanteNroComp, ComprobanteTipo)
VALUES (@ComprobanteNroSerie, @ComprobanteReservaCodigo , @ComprobanteNroComp,
@ComprobanteTipo)
END

IF @tipo = 5
SELECT c.ComprobanteNroSerie as N_Serie, c.ComprobanteReservaCodigo as
ReservaCodigo, h.HuespedNombreCompleto as NombreCompleto, b.HabitacionCodigo as
N_Habitacion, c.ComprobanteNroComp as N_Comprobante,IIF(c.ComprobanteTipo
='B','Boleta','Factura') as Estado FROM Recepcion.ComprobanteDePago c inner join
Recepcion.Reserva r on c.ComprobanteReservaCodigo= r.ReservaCodigo inner join

26
Recepcion.Huesped h on h.HuespedCodigo=r.ReservaCodigoHuesped inner join
Recepcion.Habitacion b on b.HabitacionCodigo = r.ReservaCodigoHabitacion WHERE
c.ComprobanteNroSerie LIKE + '%' +@ComprobanteNroSerie + '%'

-- PROCEDIMIENTO RESERVA

CREATE OR ALTER PROCEDURE _CalcularReserva

@ReservaCodigo nchar(6)=null, @ReservaCodigoRecepcionsta


nchar(6)=null,@ReservaCodigoHuesped nchar(6)=null,@reservaCodigoHabitacion
nchar(6)=null,@ReservaFecha date=null,@ReservaHora time=null,@ReservaNroPersonas
int=null, @ReservaPrecioPorDia numeric(5,2)=0,@ReservaCantidadDeDias int=0, @tipo
tinyint = 1

AS
IF @tipo = 1
BEGIN
INSERT Recepcion.Reserva
(ReservaCodigo,ReservaCodigoRecepcionista,ReservaCodigoHuesped,reservaCodigoHabitacion
,ReservaFecha,ReservaHora,ReservaNroPersonas,ReservaPrecioPorDia,ReservaCantidadDeDias
)
VALUES (@ReservaCodigo, @ReservaCodigoRecepcionsta, @ReservaCodigoHuesped,
@reservaCodigoHabitacion, @ReservaFecha, @ReservaHora, @ReservaNroPersonas,
@ReservaPrecioPorDia, @ReservaCantidadDeDias)
END

IF @tipo = 5
SELECT r.ReservaCodigo as CodigoReserva , c.RecepcionistaNombreCompleto as
Recepcionista, h.HuespedNombreCompleto as Huesped,b.HabitacionCodigo as
Habitacion,r.ReservaFecha as Fecha,r.ReservaHora as Hora,r.ReservaNroPersonas as
N_Personas,r.ReservaPrecioPorDia as Precio,r.ReservaCantidadDeDias as
Días,r.ReservaPago as PagoTotal
FROM Recepcion.Recepcionista c inner join Recepcion.Reserva r on
c.RecepcionistaCodigo= r.ReservaCodigoRecepcionista
inner join Recepcion.Huesped h on h.HuespedCodigo = r.ReservaCodigoHuesped inner
join Recepcion.Habitacion b on b.HabitacionCodigo = r.ReservaCodigoHabitacion
WHERE r.ReservaCodigo LIKE + '%' +@ReservaCodigo + '%'

-- PROCEDIMIENTO PERSONAL
create or alter procedure _RegistrarHuesped

@HuespedCodigo nchar(6)=null, @HuespedNombre nvarchar(30)=null,


@HuespedPaterno nvarchar(30)=null, @HuespedMaterno nvarchar(30)=null, @HuespedTelefono
nvarchar(13)=null,
@HuespedTipo char(1)='N', @tipo tinyint=1

as
if @tipo=1
begin
insert Recepcion.Huesped(HuespedCodigo, HuespedNombre,HuespedPaterno,
HuespedMaterno, HuespedTelefono,HuespedTipo)
values (@HuespedCodigo, @HuespedNombre, @HuespedPaterno,@HuespedMaterno,
@HuespedTelefono, @HuespedTipo)
end

if @tipo=5
select HuespedCodigo as Codigo, HuespedNombreCompleto as NombreCompleto,
HuespedTelefono as Telefono,IIF(HuespedTipo ='N','Natural','Jurídico')as Tipo

27
from Recepcion.Huesped where HuespedCodigo LIKE + '%' + @HuespedCodigo + '%'
m. Implementar 3 mantenedores.NET
Mantenedor Reserva

Mantenedor Habitación

Mantenedor Huesped

28
Mantenedor Personal

Mantenedor Comprobante

29
n. Implementar 3 Consultas en .NET
Reserva entre Fechas

Huesped por Tipo

30
Reserva por Trimestre

4. CONCLUSIONES
 Se logró implementar la base de datos en SQL Server Management Studio
gracias a las diferentes metodologías impartidas en clase que se procedieron a
utilizar para satisfacer las distintas necesidades del hotel “Las Palmeras.”
 Se logró implementar la interfaz y diseño de aplicativo de base de datos en
Visual Studio gracias a las diferentes metodologías impartidas en clase que se
procedieron a utilizar complementándolas con las metodologías de SQL con la
que se procedió a realizar la conexión del aplicativo siguiendo la estructura
necesaria del hotel “Las Palmeras.”
 Se logró contestar las distintas necesidades del hotel “Las Palmeras” al
implementar todas las necesidades de su estructura al momento de desarrollar
todos los requerimientos necesarios para el informe académico.
5. RECOMENDACIONES

31
 Se recomienda hacer uso de este informe para futuras investigaciones que
involucren la gestión de cualquier tipo de hospedaje o que contengan reservas
en general.
 Se recomienda hacer uso de todas las medidas de seguridad para los futuros
investigadores para prevenir cualquier ataque o error de gestión por parte del
usuario del aplicativo.
 Se recomienda hacer uso de las necesidades de la estructura del negocio con el
que el investigador esté trabajando para dictaminar la estructura del aplicativo a
desarrollar para sí lograr un fácil entendimiento por parte del destinatario del
programa.
ANEXOS
1. Esquema de la base de datos

32

También podría gustarte