Documente Academic
Documente Profesional
Documente Cultură
Autor: (i"uel (on) Pastor Director: *lu+s Felip Hurtado ,liver Valencia- ./ de septie%0re de .01.
Resu%en
El proyecto consiste en una aplicacin sencilla y de fcil mane!o para la reserva de "a#itaciones de "otel$ %as operaciones &ue puede reali'ar el usuario son( )reacin * modificacin *eliminacin de reservas Visuali'acin de informacin de "oteles y tipos de "a#itacin por "otel +lta * #a!a de usuarios en el sistema de reservas$ Imprimir una reserva %a interfa' grfica se "a reali'ado en Visual ,asic $-ET .//0 con el entorno integrado de desarrollo 1I2E3 Visual Studio $-ET .//0 y el motor de ,ase de 2atos es S4% server .//0 5. E6press$
Ta0la de contenidos
1. INTRODUCCIN3 1.1 El proyecto software..3 1.2 El proceso software....7 2. PROYECTO EN VISUAL BASIC .NET : RESERVAS DE HOTEL 1.0.9 2.1 Introduccin terica: Definicin de proyecto9 2.2 Planificacin del proyecto con Microsoft Pro ect 2!!7....1! 2.3 "n#lisis...12 2.3.1 Especificacin de re$ueri%ientos..12 2.3.2 Modelado orientado a o& etos.13 2.3.2.1 'asos de (so..13 2.3.2.2 Dia)ra%as de *ecuencia.2! 2.3.2.3 Dia)ra%a est#tico de clases.....3+ 2.+ Dise,o......3 2.+.1 Dise,o de la -ase de Datos3. 2.+.1.1 Entradas y etapas del dise,o l)ico3. 2.+.1.2 Modelo conceptual de los datos: Modelo Entidad/0elacin...31 2.+.1.3 Modelo l)ico est#ndar: Modelo 0elacional... +1 2.+.1.+ Modelo l)ico especifico del *2-D: *34 *er5er 2!!6 02.++ 2.+.2 'onstruccin y uso de la interfa7 de usuario.....+ 2.+.2.1 "cceder al siste%a y darse de alta en el siste%a....+ 2.+.2.2 'onsultar infor%acin del 8otel y 8acer una reser5a....9 2.+.2.3 I%pri%ir una reser5a..79 2.+.2.+ 'onsultar infor%acin del 8otel y 8a&itacin de una reser5a..6! 2.+.2.. Modificar una reser5a.63 2.+.2.1 -orrar 9'ancelar: una reser5a.66 2.. I%ple%entacin91 2...1 Instalacin y confi)uracin del *2-D *34 *er5er 2!!6 02...91 2...2 'odificacin del pro)ra%a 9listado co%pleto y co%entado:..126 2.1 2.7 Prue&as...211 Instalacin..211
2.6
-i&lio)raf;a..........29!
1. INTRODUCCIN
Introduccin terica
Concepto de software
Pressman (2006): El software se forma con 1) las instrucciones (programas de computador) que al ejecutarse proporcionan caracter sticas! funciones " el grado de desempe#o deseados: 2) las estructuras de datos que permiten que los programas manipulen informaci$n e manera adecuada% " &) los documentos que descri'en la operaci$n " el uso de programas(
El software es un elemento l$gico! en lugar de f sico! de un sistema( Por lo tanto el software tiene caracter sticas mu" diferentes a las del )ardware: 1( El software se desarrolla o constru"e! no se manufactura en el sentido cl*sico( 2( El software no se estropea pero se deteriora &( + pesar de que la producci$n industrial tiene una tendencia )acia la construcci$n por componentes! la ma"or a del software a,n se constru"e sin componentes -( .nterdependencia rec proca con el )ardware( /( Posi'ilidad de reutili0arse para dise#ar " construir otro software (1eusa'ilidad)( 6( Posi'ilidad de reali0arle mantenimientos no correcti2os Aplicaciones del software
El software puede aplicarse en cualquier situaci$n en la que se )a"a definido un conjunto espec fico de pasos procedimentales (es decir! un algoritmo)( 3as siguientes *reas del software indican la amplitud de las aplicaciones potenciales: 4oftware de sistemas 4oftware de tiempo real 4oftware de gesti$n 4oftware de ingenier a " cient fico 4oftware empotrado
El pro"ecto consiste en aplicaci$n de reser2as de )a'itaciones de )otel (software de gesti$n)! con interfa0 gr*fica reali0ada en 5isual 6asic (7E8 2009! programando en el entorno integrado de desarrollo (.:E) 5isual 4tudio (7E8 2009 " con acceso a una 'ase de datos remota 4;3 4er2er 2009 12 E<press( 3a aplicaci$n accede remotamente al ser2idor 4;3 4er2er " permite reali0ar por parte de los usuarios de la aplicaci$n las siguientes operaciones: Creaci$n = modificaci$n = eliminaci$n de reser2as 5isuali0aci$n de informaci$n de )oteles " tipos de )a'itaci$n por )otel +lta = 'aja de usuario en el sistema de reser2a .mprimir una reser2a
3a reali0aci$n de este pro"ecto )a tenido como o'jeti2os: Practicar programaci$n en un lenguaje orientado a o'jetos que utili0a la plataforma (7E8 >ramewor? (5isual 6asic (7E8 2009) @tili0ar el entorno integrado de desarrollo (.:E) 5isual 4tudio (7E8 2009 para reducir el tiempo de desarrollo de la aplicaci$n Aanejo de sentencias 4;3 para inserci$n! eliminaci$n ! actuali0aci$n etc(( en la 'ase de datos( .nstalaci$n! configuraci$n " administraci$n '*sica del motor de 'ase de datos 4;3 4er2er 2009 12 E<press
8ecnolog as empleadas: B B B B B Entorno de definici$n de datos: 4;3 4er2er 2009 12 E<press :esarrollo de la interfa0: 5isual 6asic (7E8 2009 Plataforma para crear aplicaciones " el entorno de ejecuci$n de las mismas: (7E8 >ramewor? Aodelo de o'jetos de acceso a datos: +:C( 7E8 Aotor de 'ase de datos: 'ase de datos compati'le con C:6C Aicrosoft 4;3 4er2er
De elegido 5isual 6asic (7E8 2009 como lenguaje de programaci$n por di2ersos moti2os: a) Es un lenguaje orientado a o'jetos ') 3enguaje sencillo " f*cil de manejar
c) .nclu"e un nue2o modelo de acceso a datos mejorado: +:C (+cti2eE :ata C'jecto) d) Es un lenguaje que forma parte de la plataforma (7E8 >ramewor?! la cual permite el desarrollo de aplicaciones a tra2Fs de uso conjunto de )erramientas " ser2icios que proporciona( De elegido 5isual 4tudio (7E8 como entorno integrado de desarrollo por di2ersos moti2os: a) 5isual 4tudio 2009 nos pro2ee una serie de )erramientas para desarollo! asi como caracter sticas de de'ugging! funcionalidad en 'ase de datos " caracter sticas inno2adoras para la creaci$n de aplicaciones en una 2ariedad de plataformas( ') 5isual 4tudio 2009 tam'ien nos pro2ee a desarrolladores la )a'ilidad de poder escoger entre multiples 2ersiones del >ramewor? con el mismo entorno de desarrollo! asi nosotros podemos desarrollar en la 2ersi$n que queramos "a sea en (7E8 >ramewor? 2(0! &(0 o &(/! entiendo asi que soporta un gran 2ariedad de pro"ectos en la 2ersi$n E en el mismo entorno de desarrollo( c) @til para generar aplicaciones 'asadas en Gindows en poco tiempo: Con la )erencia 2isual! los programadores pueden simplificar enormemente la creaci$n de aplicaciones 'asadas en Gindows! centrali0ando en formularios primarios la l$gica com,n " la interfa0 de usuario para toda la soluci$n( d) 5isual 4tudio 2009 'rinda 2entajas al desarrollador en & pilares fundamentales: 1( Aejor producti2idad del desarrollador 2( +dministracion del ciclo de 2ida de las aplicaciones( &( :esarrollo so're ,ltimas tecnolog as( De elegido el motor de 6ases de datos 4;3 4er2er 2009 E<press por 2arios moti2os:
1( Es gratuito( Puede ser adecuado para una p"me( 1educiendo costes al ser gratuito( 2( Potente (Posee 'uenos registros de los 'enc)mar?s independientes tanto en transacciones totales como en coste por transacci$n( &( Escala'le( 4e adapta a las necesidades de cualquier empresa( -( Es el ser2idor de 'ases de datos m*s adecuado para tra'ajar con 5isual 4tudio 2009(4e encuentra completamente integrado en 5isual 4tudio 2009 )asta el punto que desde el propio interface gr*fico de 5isual 4tudio podemos reali0ar la ma"or a de las tareas de administraci$n de la 'ase de datos( /( :ise#ada desde su inicio para tra'ajar en entornos .nternet e .ntranet( 3a aplicaci$n de reser2a de )oteles puede ser empleada tanto en entornos de red local como en entornos .nternet! .ntranet o E<tranet( 6( 4encillo de instalar " con una 'uena )erramienta de gesti$n (4;3 4er2er management 4tudio)( H( :isponi'ilidad! fia'ilidad " tolerancia a fallos(
En un proceso de software se esta'lece: Un marco comn del proceso definiendo un peque#o n,mero de acti2idades del marco de tra'ajo que son aplica'les a todos los pro"ectos del software! con independencia de su tama#o o complejidad( @n n,mero de conjunto de tareas I cada uno es una colecci$n de tareas de tra'ajo de ingenier a del software! )itos de pro"ecto! productos de tra'ajo! " puntos de garant a de calidad I que permiten que la acti2idades del marco de tra'ajo se adapten a las caracter sticas del pro"ecto del software " a los requisitos del equipo del pro"ecto( >inalmente! las acti2idades de protecci$n I tales como garant a del software! gesti$n de configuraci$n del software " medici$n I a'arcan el modelo de procesos( 3a acti2idades de protecci$n son independientes de cualquier acti2idad del marco de tra'ajo " aparecen durante todo el proceso(
Para resol2er los pro'lemas reales de una industria! un ingeniero del software o un equipo de ingenieros de'e incorporar una estrategia de desarrollo que acompa#e al proceso! mFtodos " capas de )erramientas de la ingenier a del software( Esta estrategia a menudo se llama modelo de proceso o paradigma de ingenier a del software( Aodelos: Modelo lineal secuencial (ciclo de vida bsico o modelo en cascada): 4ugiere un enfoque sistem*tico! secuencial! para el desarrollo del software que comien0a con un ni2el de sistemas " progresa con el an*lisis! dise#o! codificaci$n! prue'as " mantenimiento( Modelo de construccin de prototipos: >ases: a) 1ecolecci$n de requisitos! escuc)ar al cliente( ') :ise#o r*pido: Construcci$n del prototipo c) El prototipo lo e2al,a el cliente=usuario " se utili0a para refinar los requisitos del software a desarrollar 3a iteraci$n ocurre cuando el prototipo se pone a punto para satisfacer las necesidades del cliente! permitiendo al mismo tiempo que el desarrollador comprenda mejor lo que se necesita )acer(
Modelo de Desarrollo Rpido de Aplicaciones (DRA): Es un modelo de proceso de desarrollo del software lineal secuencial que enfati0a un ciclo de desarrollo e<tremadamente corto( Es una adaptaci$n a JJalta 2elocidadKK del modelo lineal secuencial en el que se logra el desarrollo r*pido utili0ando una construcci$n 'asada en componentes: >ases: a) Aodelado de gesti$n ') Aodelado de datos c) Aodelado del proceso d) Leneraci$n de aplicaciones e) Prue'as " entrega
Modelos evolutivos: Es un modelo de proceso que se )a dise#ado para acomodarse a un producto que e2olucione con el tiempo( +dapta'le a requisitos cam'iantes(4e ela'oran 2ersiones cada 2e0 m*s completas del software( 3os modelos e2oluti2os son iterati2os! interacti2os " e2oluti2os( 4e caracteri0an por la forma en que permiten a los ingenieros del software desarrollar 2ersiones cada 2e0 m*s completas del software( 1( El modelo incremental com'ina elementos del modelo lineal secuencial con la filosof a interacti2a de construcci$n de prototipos( Es una secuencia de aplicaciones del ciclo cl*sico (secuencia lineal)( Cada secuencia lineal produce un JJincrementoKK del software( >inali0a cuando se entrega el producto final 2( El modelo espiral conjuga la naturale0a iterati2a de construcci$n de prototipos con los aspectos controlados " sistem*ticos del modelo lineal secuencial( En el modelo espiral! el software de desarrolla en una serie de 2ersiones incrementales( El modelo en espiral se di2ide en un numero de acti2idades de marco de tra'ajo! tam'iFn llamadas regiones de tareas( Leneralmente e<isten seis regiones de tareas: Comunicaci$n con el cliente Planificaci$n +n*lisis de riesgos .ngenier a Construcci$n " acci$n E2aluaci$n del cliente
Modelo de proceso del software utilizado e el proyecto Para el pro"ecto de 1eser2as de )otel 1(0 se )a utili0ado el modelo e2oluti2o incremental 1( 4ecuencia de aplicaciones de ciclo cl*sico 2( Cada iteraci$n produce un incremento del producto (1eser2as de )otel) &( >inali0a cuando se entrega el producto final (1eser2as de )otel 1(0) En cada iteraci$n realicF una funcionalidad completa (alta! 'aja! creaci$n reser2a! modificaci$n reser2a! 'orrado reser2a! etc()(
2. !RO"ECTO EN #I$U%& '%$IC .NET( RE$ER#%$ DE )OTE& 1.* 2.1 I troducci+ te+rica( Defi ici+ de proyecto
@n pro"ecto es un esfuer0o temporal acometido para crear un ,nico ser2icio o producto( 8emporal quiere decir que todo pro"ecto tiene un comien0o claro " un final claro( Mnico significa que el producto o ser2icio es diferente de alguna forma clara de todos los productos o ser2icios similares(
E<iste un o'jeti2o claro( 8iene principio " fin en el tiempo( 4e requiere un ni2el de calidad( 4e puede identificar un conjunto de tareas( Es necesario la inter2enci$n de especialistas( E<isten limitaciones en los recursos( 4e requiere una planificaci$n( "ases de un pro!ecto 4e distinguen dos grandes fases:
#laneacin: 4e distinguen dos su' fases: o :efinici$n del pro'lema: NCu*l es el pro'lemaO! N:$nde est* la oportunidadO(
Planificaci$n del pro"ecto: NCu*ndo se lle2a a ca'o el plan pre2istoO! NCu*les son los costesO! Ncon que recursosO(
Ejecucin: 4e distinguen tres su' fases: o o o Puesta en marc)a: N;uiFn )ace quFO( Producci$n: 4e lle2an a ca'o las tareas( Conclusi$n del pro"ecto: Entrega del producto o ser2icio
10
11
2.0 % 1lisis
1.
*a aplicacin de reserva de 7a0itaciones de 7otel tiene la si"uiente especi$icacin: ada 7otel se descri0ir& por sus caracter+sticas 0&sicas: no%0re- direccincate"or+a- tel#$ono- descripcin y o$recer& un con8unto de tipos de 7a0itaciones. ada tipo de 7a0itacin tendr& sus propias caracter+sticas 0&sicas. *as %&s relevantes para la "estin de reservas son: no%0re- n9%ero de 7a0itaciones disponi0les- capacidad %&:i%a y precio por noc7e 9nico ;sin pro%ociones o tari$as distintas para te%porada alta o 0a8a< *os clientes de la aplicacin podr&n reali)ar sus reservas en cual=uiera de los 7oteles =ue ten"an disponi0ilidad en las $ec7as =ue correspondan ada cliente tiene sus datos personales: no%0re- N!F- do%icilio etc.. *as operaciones per%itidas por parte de los usuarios son: reacin>%odi$icacin>eli%inacin de reservas Visuali)acin de in$or%acin de 7oteles y tipos de 7a0itacin por 7otel Alta>0a8a de usuarios en el siste%a de reservas. Para reali)ar una reserva- el cliente de0er& 7a0erse dado de alta previa%ente en el siste%a de reservas ;no%0re de usuario y contrase?a asociada< El proceso de con$eccin de una reserva por parte del cliente se or"ani)a en tres $ases: o @eleccin de 7otel ;09s=ueda por localidad o por no%0re< o o%pro0acin de la disponi0ilidad de 7a0itaciones de la capacidad deseada en las $ec7as indicadas. o @eleccin del tipo de 7a0itacin y con$eccin de la reserva. Para cada reserva se to%a nota de: 7 liente =ue la reali)a 7 Tipo de 7a0itacin reservada ;e i%pl+cita%ente el 7otel al =ue pertenece. 7 N9%ero de ocupantes e$ectivos ;ocupacin< 7 No%0re del cliente 7 !%porte por noc7e ;no se consideran pro%ociones o descuentos< El cliente puede "estionar sus reservas ;%odi$icar- eli%inar- i%pri%ir< sie%pre y cuando la "estin se realice antes del co%ien)o del periodo de reserva- co%o es l"ico. *as tareas de ad%inistracin ser&n 0&sicas y se reali)ar&n desde el propio servidor @A* @erver- %odi$icando los re"istros de las ta0las. *a con$i"uracin y %anteni%iento del servidor @A* @erver ta%0i#n ser& 0&sico y a0arcar& lo 8usto y necesario para llevar a 0uen $in la e8ecucin de la aplicacin. El ad%inistrador del servidor @A* @erver podr&: 7 (odi$icar los datos "enerales de los 7oteles. 7 Bar de alta nuevos 7oteles y "estionar los tipos de 7a0itacin por 7otel 7 onsultar- %odi$icar y eli%inar reservas. Por si%plicidad no se considera el uso de $unciones HA@H y ci$rado para prote"er las contrase?as de usuario ni las trans$erencias por la red.
1/
En el siguiente diagrama se muestra los escenarios principales que podemos identificar en el sistema( 4istema .dentificaci$n
+lta en el sistema
Usuario
6aja en el sistema
5isuali0aci$n de datos del )otel " sus tipos de )a'itaci$n 1eali0ar una reser2a
11
2u cio alidad 3e eral: 5erifica que el nom're de usuario " la contrase#a introducidos corresponden con un usuario registrado en el sistema(
!ostco dici+ ( El sistema )a 2alidado el usuario " el password " )a'ilita las funciones propias del perfil de usuario dado de alta (registrado)(
Esce ario pri cipal( 1( El usuario ejecuta la aplicaci$n 2( El usuario introduce un nom're de usuario " un password &( 4i el nom're de usuario " password son correctos el sistema presentar* los datos del usuario 2alidado &(1 4i el nom're de usuario no e<iste o el password es incorrecto! no se 2alidar* en el sistema " se mostrar* un mensaje de error(
2u cio alidad 3e eral: Permite al usuario darse de alta en el sistema (registrarse)! introduciendo sus datos personales(
!reco dici+ ( El usuario no est* dado de alta en el sistema o se quiere dar de alta con otros datos(
!ostco dici+ ( El usuario est* dado de alta (registrado) " puede las tareas permitidas(
Esce ario pri cipal( 1( Cualquier usuario puede darse de alta (registrarse) en el sistema( 2( El usuario ejecuta la aplicaci$n &( El usuario entra en el sistema en modo registro -( El usuario introduce los datos personales inclu"endo nom're de usuario " contrase#a /( El usuario guarda los datos: /(1 4i falta alg,n dato o'ligatorio se mostrar* un error " no se guardaran los datos ni se )a'ilitaran las opciones de usuario(
12
/(2 4i el usuario "a e<iste se mostrar* un error " no se guardaran los datos ni ser )a'ilitaran las opciones de usuario( /(& 4i no falta ning,n dato o'ligatorio " el usuario no e<iste se dar* de alta al usuario con los datos introducidos " se )a'ilitaran las opciones disponi'les para el usuario(
2u cio alidad 3e eral: Permite al usuario darse de 'aja en el sistema " consecuentemente 'orrar todos sus datos(
!reco dici+ ( El usuario est* dado de alta en el sistema (registrado) " 2alidado(
!ostco dici+ ( El usuario est* dado de 'aja en el sistema " sus datos se )an 'orrado(
Esce ario pri cipal( 1( 4i el usuario est* dado de alta en el sistema entonces se reali0a el Caso de uso .dentificaci$n 2( 4i el usuario no est* dado de alta en el sistema entonces se reali0a el Caso de uso +lta en el sistema &( El usuario selecciona la opci$n de darse de 'aja en el sistema -( 4e mostrar* un mensaje de confirmaci$n -(1 4i acepta la confirmaci$n se dar* de 'aja en el sistema " se 'orrar*n todos sus datos -(2 4i no acepta la confirmaci$n no se dar* de 'aja en el sistema
Caso de Uso: Visualizacin de los datos del hotel y sus tipos de habitacin
2u cio alidad 3e eral: Presenta al usuario las caracter sticas del )otel " de los tipos de )a'itaci$n de ese )otel seleccionado(
%ctor pri cipal( @suario( Casos de uso relacio ados( .dentificaci$n! +lta en el sistema(
!reco dici+ ( El usuario est* dado de alta en el sistema (registrado) " 2alidado(
13
!ostco dici+ ( 4e presenta en pantalla las caracter sticas del )otel " tipo de )a'itaci$n seleccionados(
Esce ario pri cipal( 1( 4i el usuario est* dado de alta en el sistema entonces se reali0a el Caso de uso .dentificaci$n 2( 4i el usuario no est* dado de alta en el sistema entonces se reali0a el Caso de uso +lta en el sistema &( El usuario selecciona un )otel mediante una de estas dos opciones: &(1 4e escri'e una localidad " a continuaci$n se muestran los )oteles que e<isten en dic)a localidad para seleccionar uno de ellos &(2 4e selecciona un )otel de la lista completa de )oteles -( 4e mostrar* informaci$n de las caracter sticas del )otel " se podr* seleccionar un tipo de )a'itaci$n de las disponi'les para el )otel seleccionado( /( 4e mostrar* informaci$n del tipo de )a'itaci$n seleccionado(
!reco dici+ ( El usuario est* dado de alta en el sistema (registrado) " 2alidado(
!ostco dici+ ( 4e reali0a una reser2a en el )otel " tipo de )a'itaci$n seleccionados(
Esce ario pri cipal( 1( 4i el usuario est* dado de alta en el sistema entonces se reali0a el Caso de uso .dentificaci$n 2( 4i el usuario no est* dado de alta en el sistema entonces se reali0a el Caso de uso +lta en el sistema &( El usuario selecciona un )otel mediante una de estas dos opciones: &(1 4e escri'e una localidad " a continuaci$n se muestran los )oteles que e<isten en dic)a localidad para seleccionar uno de ellos &(2 4e selecciona un )otel de la lista completa de )oteles -( 1eali0amos una consulta para 2er disponi'ilidad del )otel en las fec)as de entrada " salida -(1 4i la fec)a de entrada es igual o anterior a la fec)a actual se mostrar* un mensaje de error(
14
-(2 4i la fec)a de salida es igual o anterior a la fec)a de entrada se mostrar* un mensaje de error( /( 4elecci$n de tipo de )a'itaci$n! n,mero de )a'itaciones reser2adas " ocupaci$n( 6( El usuario guardar* la reser2a reali0ada(
Caso de Uso:
2u cio alidad 3e eral: 1eali0ar una modificaci$n de una reser2a reali0ada pre2iamente(
Casos de uso relacio ados( .dentificaci$n! +lta en el sistema! 1eali0ar una reser2a(
!reco dici+ ( El usuario est* dado de alta en el sistema (registrado) " 2alidado( De usuario )a reali0ado pre2iamente al menos una reser2a(
Esce ario pri cipal( 1( 4i el usuario est* dado de alta en el sistema entonces se reali0a el Caso de uso .dentificaci$n 2( 4i el usuario no est* dado de alta en el sistema entonces se reali0a el Caso de uso +lta en el sistema( &( 4i el usuario no )a reali0ado la reser2a entonces se reali0a el caso de uso 1eali0ar una reser2a( -( El usuario selecciona una reser2a( -(1 4i la reser2a tiene fec)a de inicio anterior o igual a la fec)a actual no se puede modificar la reser2a " se mostrar* un mensaje de error( /( 4eleccionamos la fec)a de entrada " de salida( /(1 4i la fec)a de entrada es igual o anterior a la fec)a actual se mostrar* un mensaje de error( /(2 4i la fec)a de salida es igual o anterior a la fec)a de entrada se mostrar* un mensaje de error( 6( 4elecci$n de tipo de )a'itaci$n! n,mero de )a'itaciones reser2adas " ocupaci$n( H( El usuario guardar* la reser2a modificada(
15
2u cio alidad 3e eral: 1eali0ar un 'orrado (cancelaci$n) de una reser2a reali0ada pre2iamente(
Casos de uso relacio ados( .dentificaci$n! +lta en el sistema! 1eali0ar una reser2a(
!reco dici+ ( El usuario est* dado de alta en el sistema (registrado) " 2alidado( De usuario )a reali0ado pre2iamente al menos una reser2a(
Esce ario pri cipal( 1( 4i el usuario est* dado de alta en el sistema entonces se reali0a el Caso de uso .dentificaci$n 2( 4i el usuario no est* dado de alta en el sistema entonces se reali0a el Caso de uso +lta en el sistema( &( 4i el usuario no )a reali0ado la reser2a entonces se reali0a el caso de uso 1eali0ar una reser2a( -( El usuario selecciona una reser2a -(1 4i la reser2a tiene fec)a de inicio anterior o igual a la fec)a actual no se puede 'orrar (cancelar) la reser2a " se mostrar* un mensaje de error( /( 4e muestra informaci$n de la reser2a " el usuario confirma el 'orrado de la reser2a
2u cio alidad 3e eral: Permite 2er caracter sticas del )otel " )a'itaci$n de una reser2a seleccionada de la lista de reser2as(
Casos de uso relacio ados( .dentificaci$n! +lta en el sistema! 1eali0ar una reser2a
!reco dici+ ( El usuario est* dado de alta en el sistema (registrado) " 2alidado( De usuario )a reali0ado pre2iamente al menos una reser2a(
!ostco dici+ ( 4e muestra informaci$n! de las caracter sticas del )otel " )a'itaci$n! de la reser2a seleccionada(
16
Esce ario pri cipal( 1( 4i el usuario est* dado de alta en el sistema entonces se reali0a el Caso de uso .dentificaci$n 2( 4i el usuario no est* dado de alta en el sistema entonces se reali0a el Caso de uso +lta en el sistema( &( 4i el usuario no )a reali0ado la reser2a entonces se reali0a el caso de uso 1eali0ar una reser2a( -( El usuario selecciona una reser2a de la lista de reser2as reali0adas /( 4e muestra informaci$n! de las caracter sticas del )otel " )a'itaci$n! de la reser2a seleccionada(
2u cio alidad 3e eral: Permite imprimir informaci$n de una reser2a en 2igor ! es decir de una reser2a cu"a fec)a de inicio es posterior a la fec)a actual(
Casos de uso relacio ados( .dentificaci$n! +lta en el sistema! 1eali0ar una reser2a
!reco dici+ ( El usuario est* dado de alta en el sistema (registrado) " 2alidado( De usuario )a reali0ado pre2iamente al menos una reser2a( 3a reser2a tiene que estar en 2igor (fec)a de inicio posterior a la fec)a actual)
Esce ario pri cipal( 1( 4i el usuario est* dado de alta en el sistema entonces se reali0a el Caso de uso .dentificaci$n 2( 4i el usuario no est* dado de alta en el sistema entonces se reali0a el Caso de uso +lta en el sistema( &( 4i el usuario no )a reali0ado la reser2a entonces se reali0a el caso de uso 1eali0ar una reser2a( -( El usuario selecciona una reser2a de la lista de reser2as reali0adas( -(1 4i la reser2a tiene fec)a de inicio anterior o igual a la fec)a actual no se puede imprimir la reser2a " se mostrar* un mensaje de error(
/( 4e muestra informaci$n de las caracter sticas del )otel " )a'itaci$n de la reser2a seleccionada( 6( El usuario imprime la reser2a(
.0
.1
..
./
.1
.2
.3
.4
.5
.6
/0
/1
/.
//
/1
/2
2.4 Dise5o
/3
/4
El modelo Entidad=1elaci$n proporciona conceptos que permiten representar la realidad en tFrminos de entidades (o'jetos)! atri'utos " relaciones entre entidades( @n o'jeto (entidad) es cualquier persona! concepto! suceso o e2ento! con e<istencia independiente! so're la cual se almacena informaci$n( @n o'jeto se define a tra2Fs de sus propiedades (o atri'utos)! es decir! a tra2Fs de cualquier informaci$n que interesa del o'jeto " que no tiene e<istencia independiente de Fl( @na relaci$n es una asociaci$n entre o'jetos( Cada ocurrencia de una relaci$n asocia una ocurrencia de cada uno de los o'jetos relacionados
/5
/6
Restriccio es est1ticas
E tidad )otel %tri7uto id)otel nom're descripcion categoria domicilio localidad pro2incia codpostal telefono Restricci+ de 8alor 9o Do.i io: entero largo cadena de )asta 100 caracteres cadena de )asta 1000 caracteres entero corto cadena de )asta 100 caracteres cadena de )asta /0 caracteres cadena de )asta /0 caracteres cadena de )asta /0 caracteres cadena de )asta /0 caracteres Restricci+ de 8alor o ulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo
E tidad Tipo)a7itacio %tri7uto descripcion precio num)a'itaciones Restricci+ de 8alor 9o Do.i io: cadena de )asta 1000 caracteres decimal entero corto Restricci+ de 8alor o ulo 2alor no nulo 2alor no nulo 2alor no nulo
E tidad )a7itaci+ %tri7uto id)a'itacion nom're capacidad Restricci+ de 8alor 9o Do.i io: entero largo cadena de )asta 100 caracteres entero corto Restricci+ de 8alor o ulo 2alor no nulo 2alor no nulo 2alor no nulo
10
E tidad Reser8a %tri7uto idreser2a fec)ainicio fec)afin precio ocupacion nom'retomador cantidad Restricci+ de 8alor 9o Do.i io: entero largo fec)a corta (ddBmmBaaaa) fec)a corta (ddBmmBaaaa) decimal entero corto cadena de )asta 100 caracteres entero Restricci+ de 8alor o ulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo
E tidad Usuario %tri7uto idusuario tipoPusuario login password email fec)aalta ultimoaceso nom're apellidos nif domicilio localidad codpostal Restricci+ de 8alor 9o Do.i io: entero largo ClienteQ o administradorQ cadena de )asta /0 caracteres cadena de )asta /0 caracteres cadena de )asta /0 caracteres fec)a corta (ddBmmBaaaa) fec)a corta (ddBmmBaaaa) cadena de )asta /0 caracteres cadena de )asta /0 caracteres cadena de )asta /0 caracteres cadena de )asta 100 caracteres cadena de )asta /0 caracteres cadena de )asta /0 caracteres Restricci+ de 8alor o ulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo permitir 2alor nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo 2alor no nulo permitir 2alor nulo permitir 2alor nulo permitir 2alor nulo
11
pro2incia telefono
7o puede )a'er dos )oteles con el mismo c$digo de )otel ni con el mismo nom're 7o puede )a'er dos tipos de )a'itaciones con el mismo c$digo de )otel " c$digo de )a'itaci$n 7o puede )a'er dos )a'itaciones con el mismo c$digo de )a'itaci$n ni con el mismo nom're 7o puede )a'er dos reser2as con el mismo c$digo de reser2a( 7o puede )a'er dos usuarios con el mismo c$digo de usuario ni con el mismo login
1.
@n )otel tiene cero $ muc)os tipos de )a'itaciones( @n )otel tiene cero $ muc)os usuarios( @na reser2a tiene una " s$lo una tipo de )a'itaci$n @na reser2a tiene uno " s$lo un cliente @n tipo de )a'itaci$n tiene uno " s$lo una )a'itaci$n @n tipo de )a'itaci$n pertenece a uno " s$lo un )otel @n tipo de )a'itaci$n puede tener cero o m*s reser2as @na )a'itaci$n pertenece a cero o m*s tipos de )a'itaci$n @n usuario reali0a cero o m*s reser2as
3a estructura '*sica! " ,nica! del modelo relacional es la relaci$n! que sir2e para representar tanto los o'jetos como las asociaciones entre ellos( 3os atri'utos son las propiedades de las relaciones! " se definen so're los dominios( @n dominio es un conjunto nominado! finito " )omogFneo de 2alores at$micos( @n atri'uto es la interpretaci$n de un determinado dominio en una relaci$n( @n atri'uto est* siempre asociado a una relaci$n! mientras que un dominio tiene e<istencia propia con indepencencia de las relaciones( @n atri'uto representa una propiedad de la relaci$n " toma 2alores de un dominio(
1/
@na relaci$n r(1) es un conjunto de elementos denominados tuplas RtPjS( Cada tuplaPj es un conjunto de pares (J+P1:5P1jKT(J+P1:5PijKTJ+Pn:5PnjK) donde cada +Pi es el nom're de un atri'uto " 5Pij es un 2alor correspondiente al dominio :Pi so're el que est* definido el atri'uto: r(1) U tPj R(J+P1:5P1jKT(J+P1:5PijKTJ+Pn:5PnjK) : 5Pij V :PiW El n,mero de atri'utos se llama grado de la relaci$n( El n,mero de tuplas se llama cardinalidad de la relaci$n( 3a cardinalidad 2ar a en el transcurso del tiempo(
1. Restricci+ de u icidad
3a definici$n de una restricci$n de unicidad so're un conjunto de atri'utos X de la relaci$n 1 e<presa la siguiente propiedad: no de'e de )a'er en 1 dos tuplas que tengan el mismo 2alor en todos los atri'utos del conjunto XQ(
3a definici$n de una restricci$n de 2alor no nulo so're un conjunto de atri'utos X de la relaci$n 1 e<presa la siguiente propiedad: no de'e de )a'er en 1 una tupla que tengan el 2alor nulo en alg,n atri'uto del XQ(
0. Cla8e pri.aria
3a cla2e primaria de una relaci$n es un conjunto de atri'utosde su esquema que son elegidos para ser2ir de identificador un 2oco de sus tuplas( :e'e cumplir: ser minimal (todos los atri'utos que lo forman sean necesarios para la funci$n de identificaci$n)! sus atri'utos no pueden tener 2alores nulos " adem*s este 2alor de'e ser un 2oco para cada tupla(
4. Cla8e a,e a 3as cla2es ajenas son el mecanismo que proporciona el modelo relacional para e<presar relaciones (como sin$nimo de asociaciones) entre o'jetos representados en el esquema de la 'ase de datos! la forma de )acerlo es incluir en el esquema de una relaci$n atri'utos de otra (siempre que estos atri'utos identifiquen de forma un 2oca a las tuplas de la relaci$n)( + este conjunto de atri'utos se le conoce como cla2e ajena de la relaci$n 1 que )ace referencia a la relaci$n 4(
11
4i una relaci$n 1 tiene una cla2e ajena C+ que )ace referencia a la cla2e primaria CP de la relaci$n 4! todo 2alor de C+ de coincidir con un 2alor de CP o ser nulo( Esta es condici$n de la restricci$n! la cual puede e<presarse como un predicado: 1(C+ U 4(CP 3as cla2e ajena " cla2e primaria )an de ser definidas so're el mismo dominio " se permite que so're la cla2e ajena se defina! si es necesario! la restricci$n de 2alor no nulo (si no se define! la cla2e admitir* 2alores nulos)( En cuanto a la acci$n! es de tipo espec fico( 4i se intenta insertar una tupla en la ta'la de refencia 1 que no cumpla la condici$n! la acci$n se rec)a0a( 4i la condici$n falla de'ido a una operaci$n de 'orrado de tuplas o modificaci$n de la cla2e primaria en la ta'la referenciada 4! e<iste la posi'ilidad de elegir entre cuatro opciones! tanto para la operaci$n de 'orrado como la de modificaci$n: B B B B 7o action (rec)a0a la operaci$n) Cascade (propagar la modificaci$n o 'orrar las tuplas de la ta'la que referencia) 4et null (poner a nulo en la cal2e ajena de la ta'la que referencia) 4et default (poner 2alor por defecto en C+ de la ta'la que referencia)
Tra sfor.aci+ del es<ue.a co ceptual 9.odelo E6R: al es<ue.a l+3ico est1 dar 9Modelo relacio al: 1eglas: 1( 8odo tipo de entidad se con2ierte en una relaci$n( 2( 8odo tipo de interrelaci$n 7:A se transforma en una relaci$n &( Para todo tipo de interrelaci$n 1:7 se reali0a lo que se denomina propagaci$n de cla2e (regla general) Propagaci$n de cla2e: Propagar los atri'utos identificadores del tipo de entidad que tiene cardinalidad m*<ima 1 a la de 7
12
13
2.4.1.4 Modelo l+3ico espec=fico del $>'D( $?& $er8er 2**@ R2 EApress
@n sistema de gesti$n de 'ases de datos es una )erramienta de software que permite la creaci$n " manipulaci$n de 'ases de datos definidas de acuerdo a las reglas del modelo su'"acente al sistema( 4L6: se 'asa modelo de datos se compone estructuras de datos " operadores asociados (o constructores de tipo)
3os sistemas de gesti$n de 'ases de datos proporcionan una interfa0 entre los programas de aplicaci$n que acceden a los datos " el sistema operati2o! caracteri0*ndose principalmente porque permiten una descripci$n unificada de los datos " la definici$n de 2istas parciales de los mismos para distintos usuarios(
O7,eti8os de las tCc icas de 'D :escripci$n unificada de los datos e independiente de las aplicaciones .ndependencia de las aplicaciones respecto a la representaci$n f sica de los datos :efinici$n de 2istas parciales de los datos para distintos usuarios
:efinici$n de la 'ase de datos a 2arios ni2eles: esquemas B esquema l$gico (definici$n de las estructuras de la 'ase de datos) B esquema interno (implementaci$n de las estructuras del esquema l$gico) B esquemas e<ternos (definici$n de las estructuras deri2adas) Esta'lecer la correspondencia entre los esquemas
Lesti$n de la informaci$n
3enguajes de manipulaci$n " traductores asociados Derramientas para: B reestructuraci$n B simulaci$n! estad sticas B impresi$n
14
Control de : B la integridad sem*ntica B los accesos concurrentes B la reconstrucci$n de la 'ase de datos en caso de fallo B la seguridad
SET QUOTED_IDENTIFIER ON GO
SET ANSI_PADDING ON GO
CREATE TABLE [dbo].[Habitacion]( [idhabitacion] [bigint] IDENTITY(1,1) NOT NULL, [nombre] [varchar](100) NOT NULL, [capacidad] [tinyint] NOT NULL, CONSTRAINT [PK_TipoHabitacion] PRIMARY KEY CLUSTERED ( [idhabitacion] ASC
15
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [IX_Habitacion] UNIQUE NONCLUSTERED ( [nombre] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
)OTE&
USE [Reservas_hotel] GO
SET QUOTED_IDENTIFIER ON GO
SET ANSI_PADDING ON GO
CREATE TABLE [dbo].[Hotel]( [idhotel] [bigint] IDENTITY(1,1) NOT NULL, [nombre] [varchar](100) NOT NULL,
16
[descripcion] [varchar](1000) NOT NULL, [categoria] [tinyint] NOT NULL, [domicilio] [varchar](100) NOT NULL, [localidad] [varchar](50) NOT NULL, [provincia] [varchar](50) NOT NULL, [codpostal] [varchar](50) NOT NULL, [telefono] [varchar](50) NOT NULL, [administrador_id] [bigint] NOT NULL, CONSTRAINT [PK_Hotel] PRIMARY KEY CLUSTERED ( [idhotel] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [IX_Hotel] UNIQUE NONCLUSTERED ( [nombre] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
RE$ER#%
USE [Reservas_hotel] GO
20
GO
SET QUOTED_IDENTIFIER ON GO
SET ANSI_PADDING ON GO
CREATE TABLE [dbo].[Reserva]( [idreserva] [bigint] IDENTITY(1,1) NOT NULL, [fechainicio] [datetime] NOT NULL, [fechafin] [datetime2](7) NOT NULL, [precio] [money] NOT NULL, [ocupacion] [tinyint] NOT NULL, [nombretomador] [varchar](100) NOT NULL, [cantidad] [int] NOT NULL, [cliente_id] [bigint] NULL, [hotel_id] [bigint] NULL, [habitacion_id] [bigint] NULL, CONSTRAINT [PK_Reserv] PRIMARY KEY CLUSTERED ( [idreserva] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
21
ALTER TABLE [dbo].[Reserva] WITH CHECK ADD CONSTRAINT [FK_Reserva_TipoHabitacion] FOREIGN KEY([hotel_id], [habitacion_id]) REFERENCES [dbo].[TipoHabitacion] ([hotel_id], [habitacion_id]) ON UPDATE CASCADE ON DELETE CASCADE GO
ALTER TABLE [dbo].[Reserva] WITH CHECK ADD CONSTRAINT [FK_Reserva_Usuario] FOREIGN KEY([cliente_id]) REFERENCES [dbo].[Usuario] ([idusuario]) ON UPDATE CASCADE ON DELETE CASCADE GO
TI!O)%'IT%CION
USE [Reservas_hotel] GO
Script Date:
SET QUOTED_IDENTIFIER ON
2.
GO
SET ANSI_PADDING ON GO
CREATE TABLE [dbo].[TipoHabitacion]( [hotel_id] [bigint] NOT NULL, [habitacion_id] [bigint] NOT NULL, [descripcion] [varchar](1000) NOT NULL, [precio] [money] NOT NULL, [numhabitaciones] [tinyint] NOT NULL, CONSTRAINT [PK_TipHabitacion] PRIMARY KEY CLUSTERED ( [hotel_id] ASC, [habitacion_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TipoHabitacion] WITH CHECK ADD CONSTRAINT [FK_TipoHabitacion_Habitacion] FOREIGN KEY([habitacion_id]) REFERENCES [dbo].[Habitacion] ([idhabitacion]) ON UPDATE CASCADE ON DELETE CASCADE GO
2/
ALTER TABLE [dbo].[TipoHabitacion] WITH CHECK ADD [FK_TipoHabitacion_Hotel] FOREIGN KEY([hotel_id]) REFERENCES [dbo].[Hotel] ([idhotel]) ON UPDATE CASCADE ON DELETE CASCADE GO
CONSTRAINT
U$U%RIO
USE [Reservas_hotel] GO
SET QUOTED_IDENTIFIER ON GO
SET ANSI_PADDING ON GO
21
[tipo_usuario] [varchar](50) NOT NULL, [login] [varchar](50) NOT NULL, [password] [varchar](50) NOT NULL, [email] [varchar](50) NULL, [fechaalta] [datetime] NOT NULL, [ultimoacceso] [datetime] NOT NULL, [nombre] [varchar](50) NOT NULL, [apellidos] [varchar](50) NOT NULL, [nif] [varchar](50) NOT NULL, [domicilio] [varchar](100) NULL, [localidad] [varchar](50) NULL, [codpostal] [varchar](50) NULL, [provincia] [varchar](50) NULL, [telefono] [varchar](50) NULL, CONSTRAINT [PK_Usuario] PRIMARY KEY CLUSTERED ( [idusuario] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [IX_Usuario] UNIQUE NONCLUSTERED ( [login] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
GO
22
23
2or.ulario %cceso
4i el usuario esta "a registrado introduce el nom're de @suario " el Password " pulsa +CEP8+1 para acceder al formulario @suario 4i el usuario desea salir del sistema pulsar so're CE11+1( 4i el usuario no est* registrado pulsa so're 1EL.481+14E para acceder al formulario @suario darse de alta en el sistema(
24
2or.ulario Usuario 9usuario re3istrado: +parecer*n las tres pesta#as @4@+1.CQ! 1E4E15+Q " 3.48+:C :E 1E4E15+4Q
!esta5a U$U%RIO
En la pesta#a @4@+1.CQ aparecen todos los datos personales de un usuario del sistema (Cliente) as como la fec)a de alta en el sistema " el ,ltimo acceso al sistema( En la pesta#a 1E4E15+Q podremos accede a la informaci$n del )otel " de sus )a'itaciones " tam'iFn reali0ar una reser2a( En la pesta#a 3.48+:C :E 1E4E15+4Q podremos 2er las el )istorial de reser2as reali0ado " si es posi'le modificar o 'orrar alguna reser2a(
25
Opcio es(
Pulsar so're el 'ot$n EditarQ para )a'ilitar los campos de datos de la pesta#a @suario( 3os campos 7om're! +pellidos! 7.>! 3ogin Y Password son o'ligatorios(
Pulsar so're el 'ot$n :arse de 'ajaQ para eliminar todos los datos de usuario del sistema( 4e pedir* confirmaci$n(
26
2or.ulario Usuario 9usuario o re3istrado: .nicialmente solo aparece la pesta#a @4@+1.CQ "a que el usuario no registrado inicialmente tiene que escri'ir sus datos " darse de alta en el sistema para poder reali0ar reser2as(
Opcio es(
Pulsar so're el 'ot$n EditarQ para )a'ilitar los campos de datos de la pesta#a @4@+1.CQ( 3os campos 7om're! +pellidos! 7.>! 3ogin " Password son o'ligatorios(
30
Opcio es(
@na 2e0 pulsado el 'ot$n EditarQ (para )a'ilitar los campos) " escrito los datos de usuario pulsaremos so're el 'ot$n LuardarQ para darse de alta en el sistema " almacenar los datos de usuario( +parecer*n las pesta#as de 1E4E15+Q " 3.48+:C :E 1E4E15+4Q
31
!esta5a RE$ER#%
En la pesta#a 1E4E15+Q podremos accede a la informaci$n del )otel " de sus )a'itaciones " tam'iFn reali0ar una reser2a(
3.
1( 'us<ueda por &ocalidad Pulsaremos en la opci$n 3ocalidad " se nos )a'ilitar* el campo para escri'ir la localidad donde 'uscar un )otel(
3/
Ao2emos el cursor )acia la lista de desplega'le de la derec)a para ',scar )oteles en dic)a localidad(
31
32
@na 2e0 seleccionado el )otel nos aparecer* informaci$n del )otel: 7om're! Categor a! :irecci$n! 8elFfono " :escripci$n(
33
+ continuaci$n se nos )a'ilitar* la lista desplega'le de tipos de )a'itaciones del )otel seleccionado(
34
@na 2e0 seleccionado un tipo de )a'itaci$n " se nos mostrar* informaci$n del tipo de )a'itaci$n: 7om're! Capacidad! .mporte por noc)e " :escripci$n(
35
2( 'us<ueda por o.7re de /otel Pulsaremos en la opci$n Dotel " se nos )a'ilitar* la lista desplega'le de la derec)a(
36
40
@na 2e0 seleccionado el )otel nos aparecer* informaci$n del )otel: 7om're! Categor a! :irecci$n! 8elFfono " :escripci$n(
41
+ continuaci$n se nos )a'ilitar* la lista desplega'le de tipos de )a'itaciones del )otel seleccionado(
4.
@na 2e0 seleccionado un tipo de )a'itaci$n " se nos mostrar* informaci$n del tipo de )a'itaci$n: 7om're! Capacidad! .mporte por noc)e " :escripci$n(
4/
41
2or.ulario I for.aci+ de la reser8a En el formulario .nformaci$n de la reser2aQ tenemos informaci$n del )otel " de la reser2a(
Opcio es(
42
4i pulsamos el 'ot$n .mprimirQ nos saldr* el formulario de selecci$n de impresora " caracter sticas de dic)a impresora(
4i pulsamos el 'ot$n Luardar reser2aQ se almacenar*n los datos de la nue2a reser2a en el sistema
4i pulsamos el 'ot$n Aodificar reser2aQ se almacenar*n los datos modificados de reser2a en el sistema(
la
Pasos para reali0ar una reser2a: 1( Primero tenemos que seleccionar un )otel (por localidad o por nom're)( 4e )a'ilitar* el 'ot$n
43
2( Pulsaremos el 'ot$n
44
-( Pulsamos el 'ot$n
4i las fec)as de entrada " salida son incorrectas se nos mostrar*n mensajes de error(
45
4i las fec)as de entrada " salida son correctas se nos )a'ilitar* la lista desplega'le de los tipos de )a'itaci$n disponi'les del )otel seleccionado para las fec)as introducidas(
46
4e nos )a'ilitar* las opciones Da'itaciones reser2adasQ " Ccupaci$nQ de la agrupaci$n :atos o'ligatorios(
6( 4e nos mostrar* informaci$n del tipo de )a'itaci$n seleccionado ,til para reali0ar la reser2a
50
(Da'itaciones li'res! .mporte de la )a'itaci$n por noc)e! Capacidad etc(() ( Escogeremos el n,mero de )a'itaciones que queremos reser2ar (Da'itaciones reser2adas) " la ocupaci$n de cada )a'itaci$n (Ccupaci$n)( El campo Precio por noc)e 8C8+3Q se actuali0ar* autom*ticamente(
H( Pulsaremos el 'ot$n
51
9( Pulsaremos el 'ot$n
4eleccionaremos la impresora " otros caracter sticas " pulsaremos el 'ot$n +ceptar( + continuaci$n se nos mostrar* la 5ista Preliminar(
4i estamos de acuerdo " todo es correcto pulsaremos en el 'ot$n .mprimir para imprimir la reser2a reali0ada(
5.
!esta5a &I$T%DO DE RE$ER#%$ En la pesta#a de 3.48+:C :E 1E4E15+4Q podremos acceder a la informaci$n '*sica de las reser2as que )emos reali0ado a lo largo del tiempo ()istorial) " que actualmente tenemos almacenadas en el sistema(
Podremos seleccionar una reser2a simplemente pulsando so're la fila correspondiente (se nos mostrar* en a0ul)
5/
Opcio es(
Pulsar so're el 'ot$n AodificarQ para mostrar el formulario .nformaci$n de 1eser2a " poder modificar una reser2a en 2igor( Podremos modificar la reser2a si la fec)a de inicio de la reser2a es posterior a la fec)a actual(
Pulsar so're el 'ot$n 6orrarQ para mostrar el formulario .nformaci$n de 1eser2a " poder 'orrar una reser2a en 2igor( Podremos 'orrar (anular) la reser2a si la fec)a de inicio de la reser2a es posterior a la fec)a actual
51
Para consultar informaci$n del Dotel " de la )a'itaci$n de una reser2a pulsaremos so're la fila deseada correspondiente a una reser2a " se nos mostrar* informaci$n en la pesta#a 1E4E15+Q
52
Para modificar una reser2a se tiene que cumplir que la fec)a de inicio de la reser2a sea posterior a la fec)a actual( 4i esta condici$n no se cumple se nos mostrar* un mensaje de error indicando que no se puede modificar la reser2a( Pasos para modificar una reser2a: 1( 4eleccionamos en la pesta#a 3.48+:C :E 1E4E15+4Q una reser2a que cumpla la condici$n para poder modificarla para ello )acemos clic en la fila correspondiente(
53
2( Pulsamos el 'ot$n
&( En el formulario .nformaci$n de la reser2aQ nos aparecer* informaci$n relati2a a la reser2a que queremos modificar( Procederemos a reali0ar una nue2a consulta 2er la disponi'ilidad del )otel en las fec)as indicadas entre la fec)a de entrada " la fec)a de salida(
54
Para ello seleccionamos la fec)a de entrada " la fec)a de salida (pueden ser las mismas fec)as que la reser2a original o no) " pulsaremos el 'ot$n ( 4e )a'ilitar* la lista desplega'le del tipo de )a'itaciones del )otel(
-( 4eleccionaremos un tipo de )a'itaci$n de la lista desplega'le (puede ser la misma que la reser2a original o no) " se nos )a'ilitar* las opciones de Da'itaciones reser2adasQ " Ccupaci$nQ( + continuaci$n podremos modificar dic)as opciones dependiendo de la disponi'ilidad del )otel (Da'itaciones li'res " Capacidad)(
55
o salir sin
56
2.4.2.F 'orrar 9ca celar: u a reser8a Para 'orrar (cancelar) una reser2a se tiene que cumplir que la fec)a de inicio de la reser2a sea posterior a la fec)a actual( 4i esta condici$n no se cumple se nos mostrar* un mensaje de error indicando que no se puede 'orrar (cancelar) la reser2a(
60
Pasos para 'orrar (cancelar) una reser2a: 1( 4eleccionamos en la pesta#a 3.48+:C :E 1E4E15+4Q una reser2a que cumpla la condici$n para poder 'orrar (cancelar) para ello )acemos clic en la fila correspondiente(
2( Pulsamos el 'ot$n
61
-( Como podremos o'ser2ar las opciones de :atos o'ligatoriosQ " :isponi'ilidad del )otelQ est*n des)a'ilitadas( Procederemos entonces a confirmar el 'orrado (cancelaci$n) de la reser2a pulsando el 'ot$n (
o salir sin
6.
6( En la pesta#a de 3.48+:C :E 1E4E15+4Q "a no aparecer* la l nea correspondiente a la reser2a 'orrada (cancelada)
2.; Codificaci+
2.;.1 I stalaci+ y co fi3uraci+ del $>'D $?& $er8er 2**@ R2 1 * IN$T%&%CION DE $?& $ER#ER 2**@ R2 EG!RE$$
6/
!aso 1: .niciamos el proceso de instalaci$n seleccionando la opci$n '(ueva instalacin o a)re)ar caracter sticas a una instalacin e*istente+,
61
62
!aso 4( 4e comprue'an! mediante reglas! que no )a" ning,n pro'lema al instalar los arc)i2os au<iliares de instalaci$n(
63
!aso ;( $elecci+ de caracter=sticas. 4eleccionamos las caracter sticas que queremos que se instalen (seleccionamos todas las caracter sticas) " pulsamos 4iguiente(
64
!aso F( Co fi3uraci+ de I sta cia( 4eleccionamos la opci$n .nstancia con nom're (4;3E<press)! el resto de opciones aparecen por defecto " pulsamos 4iguiente(
65
!aso -( Co fi3uraci+ del ser8idor( En la pesta#a cuentas de usuario pulsamos la opci$n @sar la misma cuenta para todos los ser2icios de 4;3 4er2erQ( + continuaci$n seleccionamos una cuenta de administrador dada de alta en el sistema (en el ejemplo Aiguel)! pulsamos el 'ot$n e<aminar " seleccionamos la cuenta( 4eguidamente introducimos una contrase#a " pulsamos +ceptar(
66
!aso @( En la pesta#a -ntercalacin! dejamos la opci$n por defecto AodernP4panis)PC.P+4 " pulsamos 4iguiente(
100
!aso H( Co fi3uraci+ del .otor de 7ase de datos. 4eleccionamos la pesta#a Aprovisionamiento de cuentas " en la opci$n Aodo de autenticaci$n seleccionamos Modo Mi*to (autenticacin de ./0 .erver ! de 1indo2s),+ continuaci$n escri'imos la contrase#a de la cuenta de administrador del sistema 4;3 4er2er (El resto de opciones no las modificamos( Pulsamos 4iguiente(
101
!aso 1*( I for.e de errores. Esta opci$n es optati2a " se deja a elecci$n del usuario( Pulsamos 4iguiente(
10.
!aso 11( !ro3reso de i stalaci+ . Comien0a el proceso de instalaci$n " configuraci$n de todos los arc)i2os(
10/
!aso 12( Operaci+ co.pletada. 4i no )a ocurrido ning,n error durante el proceso de instalaci$n " configuraci$n de los arc)i2os se nos muestra un mensaje de finali0aci$n de la instalaci$n completada correctamente( Pulsamos Cerrar(
101
102
!aso 1( 4eleccionamos en el men, de inicio! Microso3t ./0 .erver 4556 R4 78 $erramientas de con3i)uracin 78 Administrador de con3i)uracin de ./0 .erver
!aso 2( 5amos a la opci$n Con3i)uracin de red de ./0 .erver 78 #rotocolos de ./0E*press 78&C#9-#: pulsar 'ot$n derec)o " seleccionar la opci$n $abilitar 5amos a la opci$n Con3i)uracin de red de ./0 .erver 78 #rotocolos de ./0E*press 78Memoria compartida: pulsar 'ot$n derec)o " seleccionar la opci$n $abilitar
!aso 0( 5amos a la opci$n Con3i)uracin de red de ./0 .erver 78 #rotocolos de ./0E*press 78&C#9-#: pulsamos 'ot$n derec)o so're &C#9-# " seleccionamos la opci$n #ropiedades
103
!aso ;( En la pesta#a Direcciones -#( En la opcin -#All 78 #uerto &C# colocar 1-&&
104
!aso F( En la pesta#a Direcciones -#( En la opcin -#All 78 #uertos dinmicos 8CP dejarlo en 'lanco para no )a'ilitar los puertos din*micos( Pulsar +ceptar(
105
En Con3i)uracin de ./0 (ative Client <5,5 'ot$n derec)o " seleccionar $abilitar En Con3i)uracin de ./0 (ative Client <5,5 derec)o " seleccionar $abilitar
!aso @( 5emos que en Con3i)uracin de ./0 (ative Client <5,5 #rotocolos de cliente 78&C#9-#: 'ot$n derec)o ! en protocolo tenemos como puerto predeterminado el que )emos puesto anteriormente 1-&&
106
!aso H( @na 2e0 )ec)os los cam'ios reiniciamos el ser2icio 4;3 4er2er (4;3EEpress)( Para ello 2amos a la opci$n .ervicios de ./0 .erver 78 ./0 .erver (./0E*press): pulsamos 'ot$n derec)o ! seleccionamos la opcin Reiniciar para que se )agan efecti2os los cam'ios
!aso 1*( +)ora pro'aremos la conecti2idad con 4;3 4er2er E<press( Para ello a'riremos una 2entana de l nea ade comandos (comando cmd) " ejecutamos el comando: s<lc.d IE I$ Jser8idor$?&EApressK ( Jnom're de ser2idorZ.nstanciaK BK por ejemplo .ntelCoreZ4;3E<press) En el caso en que tengas seleccionado el Aodo mi<to como mFtodo de autenticaci$n a 4;3 4er2er E<press entonces tam'iFn se puede utili0ar el comando:
110
!aso 11( 4i el prompt de comando queda como 1K! es se#al de que una cone<i$n fue esta'lecida con F<ito
111
11.
!aso 10( +dem*s de la utilidad sqlcmd(e<e! tam'iFn podemos pro'ar la conecti2idad remota con 4;3 4er2er E<press utili0ando la utilidad Port ;r" L@.( Para ello ejecutamos la aplicaci$n portquer"ui(e<e para solucionar pro'lemas de conecti2idad con el protocolo 8CP=.P( +l ser ejecutado mostrar* el estado del puerto 8CP $ @:P! sea para una m*quina local o remota(
11/
Caso 1( M1<ui a local puerto UD! 1400 1eali0amos una petici$n manual al puerto @:P 1-&- en la maquina local (.P 12H(0(0(1) 4i se )a reali0ado correctamente se nos muestra informaci$n de respuesta del ser2idor (3.48E7.7L)
111
Caso 2( M1<ui a local puerto TC! 1400 1eali0amos una petici$n manual al puerto 8CP 1-&& en la maquina local (.P 12H(0(0(1) 4i se )a reali0ado correctamente se nos muestra informaci$n de respuesta del ser2idor (3.48E7.7L)
112
Caso 0( M1<ui a re.ota puerto TC! 1400 9e el e,e.plo .1<ui a re.ota .i.o pas.alias.or3: 1eali0amos una petici$n manual al puerto 8CP 1-&& en la maquina remota (mimonpas(dnsalias(org) BK en la intranet se resuel2e el nom're como 12H(0(0(1 " en .nternet se resuel2e el nom're con la ip din*mica que se tenga en ese momento proporcionada por el operador que proporciona acceso a internet 4i se )a reali0ado correctamente se nos muestra informaci$n de respuesta del ser2idor (3.48E7.7L)
113
0 I %!ERTUR% DE !UERTO$ EN E& ROUTER 9N%T: !%R% %CCE$O REMOTO MEDI%NTE TC!6I! % $?& $ER#ER 2**@ R2 EG!RE$$
Aediante 7+8 se dirige el tr*fico de entrada desde una G+7 (identificado por el protocolo " el puerto e<terno) a un ser2idor interno con una .P pri2ada dentro de una 3+7(
!aso 1( +'rimos el men, we' del router introduciendo la direcci$n .P del router en la red local (ejemplo 1[2(169(1(1) ( + continuaci$n 2amos a la opci$n 7+8 (8raducci$n de direcciones de red)
114
!aso 2: 5amos a a'rir el puerto 1-&- @:P en el router " direccionarlo a la direcci$n .P del ordenador donde se est* escuc)ando dic)o puerto (Para ello pulsamos so're el 'ot$n +dd (a#adir nue2a 7+8)( En la opci$n 7om're de ser2idor escri'imos 4;3P4E15E1P@:P( En .P 4er2er +ddress (direcci$n .P del ser2idor) ponemos la direcci$n .P local donde est* instalado el ser2idor 4;3 4er2er (en el ejemplo 1[2(169(1(-) En E<ternal Port 4tart ponemos el puerto de escuc)a e<terno: 1-&En E<ternal Port End ponemos el mismo puerto: 1-&En protocolo ponemos @:P 3a dem*s opciones se ponen autom*ticamente ( .nternal Port 4tart e .nternal Port End)(Pulsamos 4al2ar o +plicar " reiniciamos el 1outer
115
!aso 0( 5amos a a'rir el puerto 1-&& 8CP en el router " direccionarlo a la direcci$n .P del ordenador donde se est* escuc)ando dic)o puerto (Para ello pulsamos so're el 'ot$n +dd (a#adir nue2a 7+8)( En la opci$n 7om're de ser2idor escri'imos 4;3P4E15E1P8CP( En .P 4er2er +ddress (direcci$n .P del ser2idor) ponemos la direcci$n .P local donde est* instalado el ser2idor 4;3 4er2er (en el ejemplo 1[2(169(1(-) En E<ternal Port 4tart ponemos el puerto de escuc)a e<terno: 1-&& En E<ternal Port End ponemos el mismo puerto: 1-&& En protocolo ponemos 8CP 3a dem*s opciones se ponen autom*ticamente (.nternal Port 4tart e .nternal Port End)(Pulsamos 4al2ar o +plicar " reiniciamos el 1outer
116
5amos a utili0ar una )erramienta que nos permite administrar nuestra 'ase de datos! reali0ar compro'aciones! " otro tipo de tareas( Esta )erramienta es 4;3 4er2er Aanagement 4tudio! la cual )a" que instalarla a parte si no se )a instalado conjuntamente con 4;3 4er2er 2009 12 E<press( 8am'iFn est* la posi'ilidad de utili0ar un panel de e<ploraci$n de 'ase de datos en el entorno de 5isual 4tudio(
!aso 1: 5amos a ejecutar la )erramienta( Para ello 2amos al men, de inicio " seleccionamos Aicrosoft 4;3 4er2er 2009 12 " a continuaci$n 4;3 4er2er Aanagement 4tudio
!aso 2: 4e nos muestra una 2entana de cone<i$n con el ser2idor( 4elecccionamos lo siguiente: B B B 8ipo de ser2idor: Aotor de 'ase de datos 7om're del ser2idor: Elegiremos el ser2idor con el que conectaremos( Por ejemplo: .78E3CC1EZ4;3EEP1E44( :e'es recordar este nom're! porque ser* el que tengas que utili0ar en las cadenas de cone<i$n desde (7E8 +utenticaci$n: Da" dos opciones +utenticaci$n de GindowsQ o +utenticaci$n de 4;3 4er2erQ( 4i elegimos la opci$n +utenticaci$n de GindowsQ estaremos conectando con la misma cuenta de usuario con la que iniciamos nuestro sistema( 4i seleccionamos +utenticaci$n de 4;3
1.0
4er2erQ de'emos indicar con que cuenta 2amos a conectar e introducir la contrase#a espec fica para conectar con 4;3 4er2er( En nuestro caso tra'ajaremos con la +utenticaci$n de GindowsQ "a que de otro modo podemos encontrar pro'lemas por la limitaci$n de la 2ersi$n gratuita( Pulsamos en Conectar(
!aso 0( 4i todo )a resultado correcto! arranca nuestra )erramienta de administraci$n( 5amos a crear una cuenta de usuario para la cone<i$n a la 'ase de datos( 5amos a la opci$n '.e)uridad+ 78 '-nicios de sesin+: pulsamos 'ot$n derec)o del rat$n " seleccionamos en el desplega'le la opci$n '(uevo -nicio de sesin+,
1.1
!aso 4: En la siguiente 2entana comien0a el proceso de creaci$n de la cuenta En la opci$n L>e eralM indicamos: B B B (ombre de inicio de sesin: En el ejemplo @serP1eser2as( &ipo de autenticacin para esta cuenta( Podemos elegir entre autenticaci$n de Gindows o autenticaci$n de 4;3 4er2er( En el ejemplo crearemos una cuenta de 4;3 4er2er! por lo tanto la seleccionamos " le indicamos la contrase#a( 5emos que tenemos la posi'ilidad de for0ar las pol ticas de contrase>as! las cuales se aseguran que las contrase#as cumplan unas determinadas condiciones de formato! de caducidad! " la posi'ilidad de que el usuario cam'ie su contrase#a en el momento de iniciar por primera 2e0 su sesi$n( En el ejemplo no e<igimos directi2as de contrase#a ?ase de datos por de3ecto: .nicialmente es master pero m*s adelante cuando creemos nuestra 'ase de datos escri'iremos 1eser2asP)otel -dioma predeterminado: Pondremos 4panis)(
B B
1..
!aso ;( 5amos a crear la 'ase de datos( 4eleccionamos la opci$n L'ases de datosQ! pulsamos 'ot$n derec)o " en el men, desplega'le seleccionamos la opci$n LNue8a 7ase de datosM.
1./
!aso F( :urante la tarea de creaci$n de nue2as 'ases de datos! se fija el nom're (En el ejemplo 1eser2asP)otel)! sus propiedades! " la u'icaci$n f sica de los arc)i2os que lo componen( B En la opci$n L>e eralM( 1ellenamos losa datos de nom're de la 'ase de datos (En el pro"ecto 1eser2asP)otel) el resto de opciones las dejamos como est*n(
!aso -( +)ora 4. podemos seleccionar en LI icio de sesi+ M DK LUserNRser8asM ! 'ot$n derec)o L!ropiedadesM ! en la opci$n L>e eralM en las opciones:
1.1
B B
6ase de datos predeterminada: 1eser2asP)otel (la )emos creado anteriormente) .dioma predeterminado: 4e deja como est*! en 4panis)
1.2
En la opci$n L%si3 aci+ de usuariosM . Aarcamos la casilla Lasi3 arM a Rese8asN/otel " seleccionamos el usuario creado anteriormente LUserNReser8asM
1.3
En la opci$n LEstadoM. Permiso de cone<i$n de 'ase de datos BK Conceder( .nicio de sesi$n BK )a'ilitada
1.4
1.5
En la opci$n !er.isos. En permisos para UserNReser8as DK EApl=citosB concedemos los permisos de +ctuali0ar! Conectar! Ejecutar! Eliminar! .nsertar! Aodificar " 4eleccionar(
1.6
1/0
2ORMU&%RIO %CCE$O
Imports System.Data.SqlClient
Private Sub TextBox_Usuario_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox_Usuario.Click TextBox_Usuario.Text = "" Mensaje.Text = ""
End Sub
Private Sub TextBox_Password_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox_Password.Click TextBox_Password.Text = "" Mensaje.Text = ""
End Sub
Private Sub Button_Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Cerrar.Click Me.Close() End Sub
Private Sub Button_Aceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Aceptar.Click Dim Resultado As Integer
1/1
If (TextBox_Usuario.Text.Trim Like "") And (TextBox_Password.Text.Trim Like "") Then Mensaje.Text = "Porfavor introduzca usuario y contrasea" ElseIf TextBox_Usuario.Text.Trim Like "" Then Mensaje.Text = "Porfavor introduzca usuario" ElseIf TextBox_Password.Text.Trim Like "" Then Mensaje.Text = "Porfavor introduzca password" Else 'Quitamos todos los caracteres de espacio en blanco a la derecha y a la izq del texto introducido 'en los TextBox Usuario y Password Usuario = TextBox_Usuario.Text.Trim Password = TextBox_Password.Text.Trim Try
'La consulta "Consulta_SQL" devuelve el numero de filas de la tabla Usuario 'donde el campo login es igual al login introducido por teclado Consulta_SQL = "SELECT count(*) FROM Usuario WHERE login = @Usuario"
1/.
'En la variable Resultado tenemos el resultado de la consulta 'Con metodo ExecuteScalar recuperamo un nico valor de un origen de datos: 'La primera columna de la primera fila del conjunto de resultados devuelto por la consulta 'Esto requiere menos cdigo que el uso del mtodo ExecuteReader y la posterior 'realizacin de las operaciones necesarias para generar un nico valor a partir de los datos devueltos 'por un objeto OleDbDataReader. 'La utilizacion de este mtodo tiene sentido cuando estamos ejecuntando una sentencia SQL del tipo 'Count(*) Resultado = Comando.ExecuteScalar()
Comando = Nothing
Catch ex As SqlException ' si se produce un error, lo capturamos mediante el objeto ' de excepciones particular para el proveedor de SQL Server MessageBox.Show("ERROR 1:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor") Exit Sub
End Try Try If (Resultado = 0) Then ' Si no hay ningun usuario registrado con el login introducido Mensaje.Text = "El usuario no existe,si lo desea puede registrarse"
1//
Else 'Si hay un usuario con el mismo login que el login introducido
'La consulta "Consulta_SQL" devuelve el numero de usuarios de la tabla Usuario 'donde el campo login y el campo password es igual al login y password respectivamente introducido por teclado Consulta_SQL = "SELECT count(*) FROM Usuario WHERE login = @Usuario and password = @Password"
Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@Usuario", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@Password", SqlDbType.VarChar)) Comando.Parameters("@Usuario").Value = Usuario Comando.Parameters("@Password").Value = Password
Resultado = Comando.ExecuteScalar()
Comando = Nothing
If (Resultado = 0) Then 'Si hay un usuario con el mismo login pero no con el mismo password Mensaje.Text = "Usuario vlido, password incorrecto" Else 'Hay un usuario con el mismo login y password que el introducido por teclado Me.Hide() 'Me.Close() Registrarse = False 'No estamos en el modo registrarse
1/1
End If End If
Catch ex As SqlException ' si se produce un error, lo capturamos mediante el objeto ' de excepciones particular para el proveedor de SQL Server MessageBox.Show("ERROR 2" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & "SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor") Exit Sub
End Try
End If
End Sub
1/2
Private Sub Label4_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles L_Registrase.MouseEnter L_Registrase.ForeColor = Color.Red
End Sub
'Evento se se produce cuando el raton deja de estar sobre la etiqueta L_Registrase Private Sub Label4_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles L_Registrase.MouseLeave L_Registrase.ForeColor = Color.Black End Sub
'Evento que se produce cuando se pulsa sobre la etiqueta L_Registrase Private Sub L_Registrase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles L_Registrase.Click Me.Hide()
Registrarse = True 'Estamos en el modo registrarse 'Mostramos el formulario Form_usuario y lo hacemos activo Form_usuario.Visible = True Form_usuario.Show() Form_usuario.Activate()
End Sub
'Evento ques se produce cuando se carga el formulario Form_acceso Private Sub Form_acceso_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Borramos todo de los TextBox y Label TextBox_Usuario.Text = ""
1/3
End Sub
Private Sub Form_acceso_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown Try
' Paso la cadena de conexion Conexion.ConnectionString = "Data Source = mimonpas.dnsalias.org\SQLExpress,1433;Network=dbmssocn;" & _ "Initial Catalog= Reservas_Hotel;" & "User id = User_Reservas; password = dorado;Connection Timeout=60;"
Conexion.Open()
Catch ex As Exception ' si se produce un error, lo capturamos mediante el objeto ' de excepciones particular para el proveedor de SQL Server MessageBox.Show("ERROR 0" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & "SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor") Application.Exit() End Try
End Sub
1/4
Private Sub Form_acceso_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing Try
Catch ex As Exception MessageBox.Show("ERROR 2.1" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & "SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor")
End Try
End Sub
End Class
2ORMU&%RIO U$U%RIO
Imports System.Data.SqlClient
1/5
'Evento que se ejecuta antes de que se muestre un formulario por primera vez. Private Sub Form_usuario_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Fecha1 As DateTime Dim Fecha2 As DateTime Dim fecha As DateTime 'Variables para la conexin y consulta a la base de datos Dim oDataAdapter As SqlDataAdapter Dim oDataSet As DataSet Dim oCB As SqlCommandBuilder Dim Datos As SqlDataReader
'Creamos objeto Cliente Objeto_Usuario = New Clase_Usuario("", "") ' Inicializamos todos los campos del formulario fecha = DateTime.Now Resp_Datos_Usuario.Text = "" TB_Tipo_Usuario.Text = "Cliente" TB_Nombre.Text = ""
1/6
TB_NIF.Text = "" TB_Localidad.Text = "" TB_Codigo_Postal.Text = "" TB_Email.Text = "" TB_Login.Text = "" TB_Password.Text = "" Tb_Fecha_alta.Text = fecha.ToLongDateString TB_Apellidos.Text = "" TB_Domicilio.Text = "" TB_Provincia.Text = "" TB_Telefono.Text = ""
TB_Ultimo_acceso.Text = fecha.ToString("G") 'Fecha corta, hora larga Panel_Usuario.Enabled = False 'No habilitamos el Panel de usuario, no permitimos modificacion
Resp_Datos_Usuario2.Visible = False TabControl_Usuario.TabPages.Remove(TP_Reserva) 'No mostramos la pestaa Reserva TabControl_Usuario.TabPages.Remove(TP_List_Res) 'No mostramos la pestaa Listado de Reservas
Else 'si no estamos en modo registrarse ' creo un objeto cliente Objeto_Usuario = New Clase_Usuario(Usuario, Password)
Panel_Usuario.Enabled = False 'No habilitamos el Panel de usuario, no permitimos modificacion TB_Login.Text = Usuario TB_Password.Text = Password
110
Try 'Hacemos una consulta a la base de datos para averiguar los datos del usuario
'Crear comando escalar 'La consulta "Consulta_SQL" devuelve todos campos de la tabla Usuario 'donde el campo login y el campo password es igual al login y password respectivamente introducido por teclado Consulta_SQL = "SELECT * FROM Usuario WHERE login = @Usuario and password = @Password"
'Crear comando Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@Usuario", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@Password", SqlDbType.VarChar)) Comando.Parameters("@Usuario").Value = Usuario Comando.Parameters("@Password").Value = Password
Datos = Comando.ExecuteReader() ' obtener DataReader . la sentencia a ejecutar devuelve un conjunto de registros
If Datos.Read() Then 'Leemos todos lo campos de un tabla usuario Id = Datos("idusuario") TB_Tipo_Usuario.Text = Datos("tipo_usuario") TB_Nombre.Text = Datos("nombre") TB_NIF.Text = Datos("nif") registro de la
111
TB_Localidad.Text = Datos("localidad") TB_Codigo_Postal.Text = Datos("codpostal") TB_Email.Text = Datos("email") TB_Login.Text = Datos("login") TB_Password.Text = Datos("password") TB_Apellidos.Text = Datos("apellidos") TB_Domicilio.Text = Datos("domicilio") TB_Provincia.Text = Datos("provincia") TB_Telefono.Text = Datos("telefono") Fecha1 = Datos("fechaalta") Fecha2 = Datos("ultimoacceso") TB_Ultimo_acceso.Text = Fecha2.ToString("G") Tb_Fecha_alta.Text = Fecha1.ToLongDateString
End If Datos.Close()
Catch ex As SqlException ' Si hay un error en el acceso a los datos volvemos a mostrar el formulario de acceso MessageBox.Show("ERROR 3:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close() End Try
11.
'Actulizamos el objeto usuario con los datos leidos de la base de datos Objeto_Usuario.Id_valor = Id Objeto_Usuario.Tipo_Usuario_valor = TB_Tipo_Usuario.Text.Trim Objeto_Usuario.Nombre_valor = TB_Nombre.Text.Trim Objeto_Usuario.NIF_valor = TB_NIF.Text.Trim Objeto_Usuario.Localidad_valor = TB_Localidad.Text.Trim Objeto_Usuario.Codpostal_valor = TB_Codigo_Postal.Text.Trim Objeto_Usuario.Email_valor = TB_Email.Text.Trim Objeto_Usuario.Fechaalta_valor = Fecha1 Objeto_Usuario.Apellidos_valor = TB_Apellidos.Text.Trim Objeto_Usuario.Domicilio_valor = TB_Domicilio.Text.Trim Objeto_Usuario.Provincia_valor = TB_Provincia.Text.Trim Objeto_Usuario.Telefono_valor = TB_Telefono.Text.Trim Objeto_Usuario.Ultimoacceso_valor = Fecha2
Try ''Hacemos una consulta a la base de datos para averiguar que reservas tiene hechas el cliente
'La consulta "Consulta_SQL" devuelve todos campos de la tabla Reserva 'donde el campo cliente_id es igual al identificado de usuario Consulta_SQL = "SELECT * FROM Reserva WHERE cliente_id = @cliente_id" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@cliente_id", SqlDbType.BigInt)) Comando.Parameters("@cliente_id").Value = Objeto_Usuario.Id_valor
11/
'crear dataset 'El dataset es un almacen de datos.Representa una base de datos en memoria y desconectada del proveedor de datos, 'que contiene tablas y sus relaciones oDataSet = New DataSet() oDataAdapter.Fill(oDataSet, "Reservas")
'Modifcamos propiedades por codigo del DataGrid DG_Reservas.Un DataGrid es un control nos permite realizar 'enlace complejo de datos con ADO.NET Me.DG_Reservas.Columns(0).Visible = False 'Oculta la columna 0 del DataGrid DG_Reservas Me.DG_Reservas.Columns(7).Visible = False Me.DG_Reservas.Columns(8).Visible = False Me.DG_Reservas.Columns(9).Visible = False Me.DG_Reservas.Columns(3).MinimumWidth = 120 'Ancho minimo de la columna: 120 pixeles Me.DG_Reservas.Columns(5).MinimumWidth = 230 Me.DG_Reservas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill 'Ajustar ancho de la columna
Catch ex As SqlException
111
' Si hay un error en el acceso a los datos volvemos a mostrar el formulario de acceso MessageBox.Show("ERROR 4:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor") Form_acceso.Show() Me.Close() End Try
End If Resp_Datos_Usuario2.Text = "" TB_Localidad_Hotel.Enabled = False CB_Hotel2.Enabled = False CB_Hotel1.Enabled = False CB_Tipo_Habitacion.Enabled = False B_Reserva.Enabled = False
Try 'Hacemos una consulta a la base de datos para averiguar los hoteles dados de alta en el sistema
'La consulta "Consulta_SQL" devuelve el campo nombre de la tabla Hotel Consulta_SQL = "SELECT nombre FROM Hotel" Comando = New SqlCommand(Consulta_SQL, Conexion)
112
Catch ex As SqlException ' Si hay un error en el acceso a los datos volvemos a mostrar el formulario de acceso MessageBox.Show("ERROR 5:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close() End Try
End Sub
' Evento que se produce antes de cerrar el formulario "Form_usuario" Private Sub Form_usuario_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
Application.Exit() ' Cierra todas las ventanas de la aplicacion una vez procesados todos los mensajes
End Sub
113
Private Sub TB_Nombre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Nombre.Click TB_Nombre.Text = ""
End Sub
Private Sub TB_Apellidos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Apellidos.Click TB_Apellidos.Text = ""
End Sub
Private Sub TB_NIF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_NIF.Click TB_NIF.Text = ""
End Sub
Private Sub TB_Domicilio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Domicilio.Click TB_Domicilio.Text = "" End Sub
Private Sub TB_Codigo_Postal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Codigo_Postal.Click TB_Codigo_Postal.Text = "" End Sub
Private Sub TB_Email_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Email.Click TB_Email.Text = "" End Sub
114
Private Sub Tb_Fecha_alta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tb_Fecha_alta.Click Tb_Fecha_alta.Text = "" End Sub
Private Sub TB_Login_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Login.Click TB_Login.Text = ""
End Sub
Private Sub TB_Password_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Password.Click TB_Password.Text = ""
End Sub
Private Sub TB_Localidad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Localidad.Click TB_Localidad.Text = ""
End Sub
Private Sub TB_Provincia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Provincia.Click TB_Provincia.Text = ""
End Sub
Private Sub TB_Telefono_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Telefono.Click TB_Telefono.Text = ""
115
End Sub
Private Sub TB_Ultimo_acceso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Ultimo_acceso.Click TB_Ultimo_acceso.Text = ""
End Sub
Private Sub TB_Nombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Nombre.TextChanged Objeto_Usuario.Nombre_valor = TB_Nombre.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If
End Sub
Private Sub TB_Apellidos_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Apellidos.TextChanged Objeto_Usuario.Apellidos_valor = TB_Apellidos.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
116
Private Sub TB_NIF_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_NIF.TextChanged Objeto_Usuario.NIF_valor = TB_NIF.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
Private Sub TB_Login_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Login.TextChanged Objeto_Usuario.Login_valor = TB_Login.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
Private Sub TB_Password_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Password.TextChanged Objeto_Usuario.Password_valor = TB_Password.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If
120
End Sub
Private Sub TB_Domicilio_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Domicilio.TextChanged Objeto_Usuario.Domicilio_valor = TB_Domicilio.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
Private Sub TB_Localidad_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Localidad.TextChanged Objeto_Usuario.Localidad_valor = TB_Localidad.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
Private Sub TB_Codigo_Postal_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Codigo_Postal.TextChanged Objeto_Usuario.Codpostal_valor = TB_Codigo_Postal.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos"
121
Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
Private Sub TB_Provincia_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Provincia.TextChanged Objeto_Usuario.Provincia_valor = TB_Provincia.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
Private Sub TB_Email_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Email.TextChanged Objeto_Usuario.Email_valor = TB_Email.Text.Trim If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
Private Sub TB_Telefono_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Telefono.TextChanged Objeto_Usuario.Telefono_valor = TB_Telefono.Text.Trim
12.
If Registrarse = True Then Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" Else Resp_Datos_Usuario2.Text = "Campo modificado pulse MODIFICAR almacenar los cambios" End If End Sub
'Evento que se produce al pulsar sobre el boton Salir Private Sub TSB_Salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Salir.Click Dim Result As DialogResult
Result = MessageBox.Show("Seguro que desea salir de la aplicacin?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Result = DialogResult.Yes Then Me.Close() End If
End Sub
' Evento que se produce al pulsar sobre el boton "Editar" de la barra de herramientas Private Sub TSB_Editar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Editar.Click Panel_Usuario.Enabled = True 'Habilito el panel de usuario para modificacion
Tb_Fecha_alta.Enabled = False ' Deshabilito TextBox esde solo lectura TB_Tipo_Usuario.Enabled = False ' Deshabilito TextBox esde solo lectura
porque
porque
12/
If Registrarse = True Then Resp_Datos_Usuario2.Visible = True Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" 'Si esta en modo registrarse habilito el boton guardar TSB_Guardar.Enabled = True TSB_Modificar.Enabled = False Else ' Si no estamos en modo registro el login no se puede modificar TB_Login.Enabled = False Resp_Datos_Usuario2.Visible = True Resp_Datos_Usuario2.Text = "Rellene los campos y pulse GUARDAR almacenar los datos" 'Si no esta en modo registrarse deshabilito el boton guardar y habilito el boton modificar TSB_Guardar.Enabled = False TSB_Modificar.Enabled = True End If editable = True ' Variable global "editable", indica si podemos editar o no la infoemacion de usuario TSB_Editar.Enabled = False 'Deshabilitamos el boton editar End Sub
' Evento que se produce al pulsar sobre el boton "Guardar" de la barra de herramientas Private Sub TSB_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Guardar.Click 'Variables para la conexin y consulta a la base de datos Dim Resultado As Integer = 0 Dim Datos As SqlDataReader
121
'Comprobamos que los datos obligatorios estan introducidos If TB_Nombre.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Nombre" ElseIf TB_Apellidos.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Apellidos" ElseIf TB_NIF.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca NIF" ElseIf TB_Login.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Login" ElseIf TB_Password.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Password" Else Try 'Hacemos una consulta a la base de datos para averiguar si ya hay un usuario con el mismo login
'La consulta "Consulta_SQL" devuelve el numero de filas de la tabla Usuario 'donde el campo login es igual al login introducido por teclado Consulta_SQL = "SELECT count(*) FROM Usuario WHERE login = @Usuario"
122
Comando.Parameters("@Usuario").Value = TB_Login.Text.Trim
Resultado = Comando.ExecuteScalar() 'Ejecuta comando. Devuelve la primera columna de la primera fila del conjunto de registros 'el resto de datos nos se tendran en cuenta
Comando = Nothing
If (Resultado > 0) Then ' Hay un usuario con el mismo login MessageBox.Show("EL LOGIN YA EXISTE --> INTRODUZCA NUEVO LOGIN") Exit Sub ' Salimos del procedimiento End If
Catch ex As SqlException ' Si hay un error en el acceso a los datos mostramos mensaje de error y salimos del procedimiento MessageBox.Show("ERROR 6:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ")
123
End Try
Try 'Hacemos una insercion en la base de datos de los datos de informacion de usuario introducidos por teclado
'Crear comando escalar 'La consulta "Consulta_SQL" Insertamos un registro en la tabla usuario con los datos introducidos por el usuario en el formulario Consulta_SQL = "INSERT INTO " & _
' Aadir parametros al comando Comando.Parameters.Add(New SqlParameter("@tipo_usuario", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@login", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@password", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@email", SqlDbType.VarChar))
124
Comando.Parameters.Add(New SqlParameter("@fechaalta", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@ultimoacceso", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@nombre", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@apellidos", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@nif", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@domicilio", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@localidad", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@provincia", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@codpostal", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@telefono", SqlDbType.VarChar))
'Actulizamos el objeto usuario con los datos obtenidos en el formulario Objeto_Usuario.Fechaalta_valor = Convert.ToDateTime(Tb_Fecha_alta.Text) Objeto_Usuario.Ultimoacceso_valor = DateTime.Now Objeto_Usuario.Tipo_Usuario_valor = TB_Tipo_Usuario.Text.Trim Objeto_Usuario.Nombre_valor = TB_Nombre.Text.Trim Objeto_Usuario.NIF_valor = TB_NIF.Text.Trim Objeto_Usuario.Localidad_valor = TB_Localidad.Text.Trim Objeto_Usuario.Codpostal_valor = TB_Codigo_Postal.Text.Trim Objeto_Usuario.Email_valor = TB_Email.Text.Trim Objeto_Usuario.Apellidos_valor = TB_Apellidos.Text.Trim
125
Objeto_Usuario.Domicilio_valor = TB_Domicilio.Text.Trim Objeto_Usuario.Provincia_valor = TB_Provincia.Text.Trim Objeto_Usuario.Telefono_valor = TB_Telefono.Text.Trim Objeto_Usuario.Login_valor = TB_Login.Text.Trim Objeto_Usuario.Password_valor = TB_Password.Text.Trim
' Doy valores a los parametros Comando.Parameters("@tipo_usuario").Value = Objeto_Usuario.Tipo_Usuario_valor Comando.Parameters("@login").Value = Objeto_Usuario.Login_valor Comando.Parameters("@password").Value = Objeto_Usuario.Password_valor Comando.Parameters("@email").Value = Objeto_Usuario.Email_valor Comando.Parameters("@fechaalta").Value = Objeto_Usuario.Fechaalta_valor Comando.Parameters("@ultimoacceso").Value = Objeto_Usuario.Ultimoacceso_valor Comando.Parameters("@nombre").Value = Objeto_Usuario.Nombre_valor Comando.Parameters("@apellidos").Value = Objeto_Usuario.Apellidos_valor Comando.Parameters("@nif").Value = Objeto_Usuario.NIF_valor Comando.Parameters("@domicilio").Value = Objeto_Usuario.Domicilio_valor Comando.Parameters("@localidad").Value = Objeto_Usuario.Localidad_valor Comando.Parameters("@provincia").Value = Objeto_Usuario.Provincia_valor Comando.Parameters("@codpostal").Value = Objeto_Usuario.Codpostal_valor Comando.Parameters("@telefono").Value = Objeto_Usuario.Telefono_valor
126
Resultado = Comando.ExecuteNonQuery()
Comando = Nothing
' Hacemos una nueva consulta a la base de datos para averiguar el identificador de usuario que se ha creado ' al insertar un registro en la tabla usuario
'La consulta "Consulta_SQL" devuelve el identificador de usuario de un registro de la tabla usuario 'donde el campo login y el campo password es igual al login y password respectivamente introducidos en el formulario Consulta_SQL = "SELECT idusuario FROM Usuario WHERE login = @login and password = @Password" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@login", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@password", SqlDbType.VarChar)) Comando.Parameters("@login").Value = Objeto_Usuario.Login_valor Comando.Parameters("@password").Value = Objeto_Usuario.Password_valor
Datos = Comando.ExecuteReader() If Datos.Read() Then Id = Datos("idusuario") 'Asignamos a Id el calor del campo idusuario de la tabla usuario End If Datos.Close()
130
Catch ex As SqlException ' Si hay un error en el acceso a los datos salimos del procedimiento MessageBox.Show("ERROR 7:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ")
' Si no hay un error en el acceso a los datos MessageBox.Show("DATOS DE USUARIO GUARDADOS CORRECTAMENTE")
TSB_Editar.Enabled = True 'Habilito el boton Editar TSB_Guardar.Enabled = False 'Deshabilito el boton Guardar TSB_Modificar.Enabled = False 'Deshabilito el boton Modificar TSB_Baja.Enabled = True 'Habilito el boton baja
Resp_Datos_Usuario2.Text = ""
131
TabControl_Usuario.TabPages.Add(TP_Reserva) ' Habilitamos la pestaa Reserva TabControl_Usuario.TabPages.Add(TP_List_Res) ' Habilitamos la pestaa Listado de reservas Registrarse = False Resp_Datos_Usuario2.Text = ""
End If
End Sub
' Evento que se produce al pulsar sobre el boton "Modificar" de la barra de herramientas Private Sub TSB_Modificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Modificar.Click 'Variables para la conexin y consulta a la base de datos Dim Resultado As Integer Dim Datos As SqlDataReader
If Descarga_reserva = False Then ' Si el formulario Form_reserva esta cargado Form_Reserva.Close() ' Cerramos el formulario End If
13.
If Me.DG_Reservas.CurrentRow.Selected = False Then 'Si no he seleccionado minguna fila del DataGrid DG_Reservas MessageBox.Show("Porfavor seleccione una reserva para modificar o borrar") Exit Sub ElseIf DateDiff(DateInterval.Day, Now.Date, CDate(DG_Reservas.CurrentRow.Cells(1).Value)) <= 0 Then 'Si la fecha de hoy es posterior a fecha de inicio de la reserva -> no se puede modificar la reserva MessageBox.Show("Seleccione una reserva para modificar que tenga una fecha de inicio posterior a la fecha de hoy") Exit Sub
Else ' Actulizamos el objeto reserva con los valores del DataGrid DG_Reservas Objeto_Reserva.idreserva_valor = Me.DG_Reservas.CurrentRow.Cells(0).Value Objeto_Reserva.fechainicio_valor = Me.DG_Reservas.CurrentRow.Cells(1).Value Objeto_Reserva.fechafin_valor = Me.DG_Reservas.CurrentRow.Cells(2).Value Objeto_Reserva.precio_valor = CSng(Me.DG_Reservas.CurrentRow.Cells(3).Value) Objeto_Reserva.ocupacion_valor = Me.DG_Reservas.CurrentRow.Cells(4).Value Objeto_Reserva.nombretomador_valor = Me.DG_Reservas.CurrentRow.Cells(5).Value Objeto_Reserva.cantidad_valor = Me.DG_Reservas.CurrentRow.Cells(6).Value Objeto_Reserva.cliente_id_valor = Me.DG_Reservas.CurrentRow.Cells(7).Value Objeto_Reserva.hotel_id_valor = Me.DG_Reservas.CurrentRow.Cells(8).Value Objeto_Reserva.habitacion_id_valor = Me.DG_Reservas.CurrentRow.Cells(9).Value
13/
Try 'Hacemos una consulta a la base de datos para averiguar datos sobre el tipo de habitacion de la reserva
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Habitacion y TipoHabitacion) en el que el campo comun de ambas (identificador de habitacion) ' tenga el mismo valor (el valor del identificador de la habitacion) y donde el campo habitacion_id de la tabla ' TipoHabitacion tenga el valor del indentificador de habitacion de la reserva y el hotel_id tenga el valor del hotel de la reserva ' Seleccionamos los campos de la tabla Habitacion y TipoHabitacion. Consulta_SQL = "SELECT TipoHabitacion.hotel_id,TipoHabitacion.habitacion_id,TipoHabitacion.de scripcion,TipoHabitacion.precio," & _
"TipoHabitacion.numhabitaciones,Habitacion.nombre,Habitacion.capacidad FROM Habitacion INNER JOIN TipoHabitacion ON " & _ "TipoHabitacion.habitacion_id = Habitacion.idhabitacion WHERE TipoHabitacion.habitacion_id = @idhabitacion and TipoHabitacion.hotel_id = @idhotel" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@idhabitacion", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@idhotel", SqlDbType.BigInt)) Comando.Parameters("@idhabitacion").Value = Objeto_Reserva.habitacion_id_valor Comando.Parameters("@idhotel").Value = Objeto_Reserva.hotel_id_valor
131
Datos = Comando.ExecuteReader() If Datos.Read() Then ' Actualizamos el objeto habitacion Objeto_Habitacion.Hotel_id_valor = Datos("hotel_id") Objeto_Habitacion.Idtipohabitacion_valor = Datos("habitacion_id") Objeto_Habitacion.Descripcion_valor = Datos("descripcion") Objeto_Habitacion.Precio_valor = Datos("precio") Objeto_Habitacion.Numhabitaciones_valor = Datos("numhabitaciones") Objeto_Habitacion.Nombre_valor = Datos("nombre") Objeto_Habitacion.Capacidad_valor = Datos("capacidad")
End If
Datos.Close()
Catch ex As SqlException ' Si hay un error en el acceso a los datos volvemos a mostrar el formulario de acceso MessageBox.Show("ERROR 8:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("ERROR EN EL ACCESSO A LA BASE DE DATOS,INTENTELO DE NUEVO") Exit Sub 'Salimos del procedimiento
132
'Form_acceso.Show() 'Me.Close() End Try Try 'Hacemos una consulta a la base de datos para averiguar datos sobre el hotel donde se ha realizado la reserva
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Hotel y TipoHabitacion) en el que el campo comun de ambas (identificador de hotel) ' tenga el mismo valor (el valor del identificador de hotel de la reserva) y donde el campo hotel_id de la tabla ' TipoHabitacion sea igual al identificador del hotel ' Seleccionamos los campos de la tabla hotel. Consulta_SQL = "SELECT Hotel.idhotel,Hotel.nombre ,Hotel.descripcion,Hotel.categoria," & _
"Hotel.domicilio,Hotel.localidad,Hotel.provincia,Hotel.codpostal,Hotel .telefono FROM Hotel INNER JOIN TipoHabitacion ON " & _ "Hotel.idhotel = TipoHabitacion.hotel_id WHERE TipoHabitacion.hotel_id = @hotel_id" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@hotel_id", SqlDbType.BigInt)) Comando.Parameters("@hotel_id").Value = Objeto_Habitacion.Hotel_id_valor
Datos = Comando.ExecuteReader() If Datos.Read() Then ' Actualizamos el objeto Hotel Hotel.idhotel_valor = Datos("idhotel") Hotel.nombre_valor = Datos("nombre") Hotel.descripcion_valor = Datos("descripcion")
133
Hotel.categoria_valor = Datos("categoria") Hotel.direccion_valor = Datos("domicilio") & ", " & Datos("localidad") _ & " " & "(" & Datos("provincia") & ")" & ", " & Datos("codpostal") Hotel.telefono_valor = Datos("telefono")
Catch ex As SqlException ' Si hay un error en el acceso a los datos volvemos a mostrar el formulario de acceso MessageBox.Show("ERROR 9:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("ERROR EN EL ACCESSO A LA BASE DE DATOS,INTENTELO DE NUEVO") Exit Sub 'Salimos del procedimiento 'Form_acceso.Show() 'Me.Close() End Try MessageBox.Show("REALICE UNA CONSULTA PARA VER DISPONIBILIDAD DEL HOTEL") Ver_reserva = 1 'Indica se muestra el formulario Form_Reserva desde la pestaa listado de reservas
134
' Deshabilitamos los botones Guardar, Modificar y Borrar del formulario Form_Reserva Form_Reserva.TSB_Guardar_Reserva.Enabled = False Form_Reserva.TSB_Modificar_Reserva.Enabled = False Form_Reserva.TSB_Borrar_Reserva.Enabled = False
End If
Else
' Estoy en la pestaa usuario If TB_Nombre.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Nombre" ElseIf TB_Apellidos.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Apellidos" ElseIf TB_NIF.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca NIF" ElseIf TB_Login.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Login" ElseIf TB_Password.Text = "" Then Resp_Datos_Usuario.Text = "Porfavor introduzca Password" Else ' Todos los campos obligatorios introducidos Try
135
' La consulta "Consulta_SQL" realiza una actualizacion de un registro de la tabla usuario donde ' el identificador de usuario es el del usuario actual Consulta_SQL = "UPDATE Usuario " & _ "SET tipo_usuario = @tipo_usuario,login = @login,password = @password,email = @email,fechaalta = @fechaalta," & _ "ultimoacceso = @ultimoacceso,nombre = @nombre,apellidos = @apellidos,nif = @nif,domicilio = @domicilio," & _ "localidad = @localidad,codpostal = @codpostal,provincia = @provincia,telefono = @telefono " & _ "WHERE idusuario = @idusuario;"
' Aadir parametros al comando Comando.Parameters.Add(New SqlParameter("@tipo_usuario", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@login", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@password", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@email", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@fechaalta", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@ultimoacceso", SqlDbType.DateTime))
136
Comando.Parameters.Add(New SqlParameter("@nombre", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@apellidos", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@nif", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@domicilio", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@localidad", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@provincia", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@codpostal", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@telefono", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@idusuario", SqlDbType.BigInt))
' Doy valores a los parametros Objeto_Usuario.Fechaalta_valor = Convert.ToDateTime(Tb_Fecha_alta.Text) Objeto_Usuario.Ultimoacceso_valor = DateTime.Now Comando.Parameters("@tipo_usuario").Value = Objeto_Usuario.Tipo_Usuario_valor Comando.Parameters("@login").Value = Objeto_Usuario.Login_valor Comando.Parameters("@password").Value = Objeto_Usuario.Password_valor Comando.Parameters("@email").Value = Objeto_Usuario.Email_valor Comando.Parameters("@fechaalta").Value = Objeto_Usuario.Fechaalta_valor Comando.Parameters("@ultimoacceso").Value = Objeto_Usuario.Ultimoacceso_valor Comando.Parameters("@nombre").Value = Objeto_Usuario.Nombre_valor
140
Comando.Parameters("@apellidos").Value = Objeto_Usuario.Apellidos_valor Comando.Parameters("@nif").Value = Objeto_Usuario.NIF_valor Comando.Parameters("@domicilio").Value = Objeto_Usuario.Domicilio_valor Comando.Parameters("@localidad").Value = Objeto_Usuario.Localidad_valor Comando.Parameters("@provincia").Value = Objeto_Usuario.Provincia_valor Comando.Parameters("@codpostal").Value = Objeto_Usuario.Codpostal_valor Comando.Parameters("@telefono").Value = Objeto_Usuario.Telefono_valor Comando.Parameters("@idusuario").Value = Objeto_Usuario.Id_valor
Resultado = Comando.ExecuteNonQuery()
Comando = Nothing
Catch ex As SqlException ' Si hay un error en el acceso a los datos salimos del procedimiento MessageBox.Show("ERROR 10:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("DATOS DE USUARIO NO MODIFICADOS CORRECTAMENTE") Exit Sub ' salir del procedimiento End Try
141
' Si no hay error en el acceso a la base de datos MessageBox.Show("DATOS DE USUARIO MODIFICADOS CORRECTAMENTE") Resp_Datos_Usuario.Text = "" Resp_Datos_Usuario2.Text = "" Panel_Usuario.Enabled = False TSB_Baja.Enabled = True TSB_Modificar.Enabled = False TSB_Guardar.Enabled = False TSB_Editar.Enabled = True
End If End If
End Sub
' Evento que se produce al pulsar sobre el boton "Baja" de la barra de herramientas Private Sub TSB_Baja_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Baja.Click Dim Resultado As Integer Dim Result1 As DialogResult
Result1 = MessageBox.Show("Seguro que desea darse de baja?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Result1 = DialogResult.Yes Then
' La consulta "Consulta_SQL" realiza una borrado de un registro de la tabla usuario donde
14.
' el identificador de usuario es el del usuario actual Consulta_SQL = "DELETE FROM Usuario WHERE idusuario = @idusuario" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@idusuario", SqlDbType.BigInt)) Comando.Parameters("@idusuario").Value = Objeto_Usuario.Id_valor
Resultado = Comando.ExecuteNonQuery()
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 11:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor") MessageBox.Show("NO SE HA PODIDO REALIZAR LA BAJA") Exit Sub End Try Dim Result2 As DialogResult Result2 = MessageBox.Show("Baja en el sistema realizada correctamente,pulse ACEPTAR para Salir de la aplicacin", "Baja del sistema", MessageBoxButtons.OK) If Result2 = DialogResult.OK Then
End Sub
14/
'Evento que se produce cuando el control "TP_Reserva" es el elemento activo del formulario ' (cualdo hemos selecciona la pestaa Reserva) Private Sub TP_Reserva_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TP_Reserva.Enter
' Habilitamos y deshabilitamos los botones correspondientes TSB_Guardar.Enabled = False TSB_Editar.Enabled = False TSB_Baja.Enabled = False TSB_Borrar.Enabled = False TSB_Modificar.Enabled = False
'Asignamos valores a las propiedades del los controles de la pestaa "Reserva" 'Informacion del hotel y de la habitacion reservada RB_Nombre_Hotel.Enabled = True RB_Localidad_Hotel.Enabled = True GB_Busqueda_Hotel.Enabled = True CB_Hotel1.Text = hotel1 B_Reserva.Enabled = False TB_Localidad_Hotel.Text = ""
141
GB_Hotel.Enabled = True TB_Nombre_Hotel.Text = Hotel.nombre_valor TB_Categoria.Text = Hotel.categoria_valor TB_Direccion_Hotel.Text = Hotel.direccion_valor TB_Telefono_Hotel.Text = Hotel.telefono_valor RTB_Descripcion_Hotel.Text = Hotel.descripcion_valor RTB_Descripcion_Hotel.ReadOnly = True
GB_Habitacion.Enabled = True CB_Tipo_Habitacion.Text = Objeto_Habitacion.Nombre_valor TB_Capacidad.Text = Objeto_Habitacion.Capacidad_valor TB_Importe_noche.Text = Objeto_Habitacion.Precio_valor CB_Tipo_Habitacion.Enabled = False
End If
Panel_Usuario.Enabled = False 'Deshabilitamos el Panel de usuario para que no se pueda modificar editable = False ' Editable = false indica que no se puede editar la informacion de usuario End Sub
'Evento que se produce cuando el control "TP_List_Res_Enter" es el elemento activo del formulario ' (cuando hemos selecciona la pestaa Listado Reservas) Private Sub TP_List_Res_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TP_List_Res.Enter Label7.Text = ""
142
'Habilitamos y deshabilitamos los botones correspondientes TSB_Guardar.Enabled = False TSB_Editar.Enabled = False TSB_Baja.Enabled = False list_reservas = True 'list_reservas = true indica que hemos seleccionado la pestaa listado reservas
If (Ver_reserva = 2) Then 'Si hemos pulsado el Boton B_Reserva y se ha mostrado el formulario Form_Reserva TSB_Modificar.Enabled = False 'Deshabilitamos el boton Modificar TSB_Borrar.Enabled = False Borrar Else 'Deshabilitamos el boton
If Me.DG_Reservas.RowCount = 0 Then TSB_Modificar.Enabled = False TSB_Borrar.Enabled = False Else ' Si hemos seleccionado una fila del DataGrid DG_Reservas TSB_Modificar.Enabled = True 'Habilitamos el boton Modificar TSB_Borrar.Enabled = True Borrar End If 'Habilitamos el boton
End If
'Deshabilitamos el boton
Panel_Usuario.Enabled = False 'Deshabilitamos el Panel de usuario para que no se pueda modificar editable = False ' Editable = false indica que no se puede editar la informacion de usuario End Sub
143
'Evento que se produce cuando el control "TP_Usuario" es el elemento activo del formulario ' (cuando hemos selecciona la pestaa Usuario) Private Sub TP_Usuario_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TP_Usuario.Enter
'Habilitamos y deshabilitamos los botones correspondientes TSB_Guardar.Enabled = False TSB_Editar.Enabled = True TSB_Baja.Enabled = True TSB_Borrar.Enabled = False
If editable = True Then ' Editable es true si hemos pulsado el boton Editar TSB_Modificar.Enabled = True 'Habilitamos el boton Modificar Else 'Editable es false sin no hemos pulsado el boton Editar TSB_Modificar.Enabled = False 'Deshabilitamos el boton Modificar End If list_reservas = False 'list_reservas = false indica que no hemos seleccionado la pestaa listado reservas Label7.Text = "" 'Borramos el contenido de la etiqueta de informacin End Sub
'Evento que se produce cuando la propiedad checked del RadioButton "RB_Localidad_Hotel" cambia de valor Private Sub RB_Localidad_Hotel_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RB_Localidad_Hotel.CheckedChanged
B_Reserva.Enabled = False 'Deshabilitamos el boton B_Reserva 'Modificamos las propiedades de color del boton B_Reserva
144
If RB_Localidad_Hotel.Checked = True Then ' Si esta seleccionado el RadioButton RB_Localidad_Hotel While CB_Hotel2.Items.Count <> 0 'Borramos todos los items del ComboBox CB_Hotel2 CB_Hotel2.Items.RemoveAt(0) End While CB_Hotel2.Text = "Lista de hoteles" TB_Localidad_Hotel.Enabled = True 'Habilitamos el TextBox TB_Localidad_Hotel CB_Hotel2.Enabled = False 'Deshabilitamos el ComboBox CB_Hotel2 CB_Hotel1.Enabled = False 'Deshabilitamos el ComboBox CB_Hotel1 CB_Hotel1.Text = "Lista de hoteles" CB_Tipo_Habitacion.Enabled = False 'Dehabilitamos el ComboBox CB_Tipo_Habitacion TB_Nombre_Hotel.Text = "" 'Borramos el contenido del TextBox TB_Nombre_Hotel TB_Categoria.Text = "" TB_Direccion_Hotel.Text = "" TB_Telefono_Hotel.Text = "" RTB_Descripcion_Hotel.Text = "" TB_Capacidad.Text = "" TB_Importe_noche.Text = "" RTB_Descripcion_Habitacion.Text = "" While CB_Tipo_Habitacion.Items.Count <> 0 'Borramos todos los items del ComboBox CB_Tipo_Habitacion CB_Tipo_Habitacion.Items.RemoveAt(0) End While CB_Tipo_Habitacion.Text = "Lista de tipos de habitaciones"
145
Else ' Si no esta seleccionado el RadioButton RB_Localidad_Hotel TB_Localidad_Hotel.Enabled = False 'Deshabilitamos el TextBox TB_Localidad_Hotel CB_Hotel2.Enabled = False ComboBox CB_Hotel2 'Deshabilitamos el
'Evento que se produce cuando la propiedad checked del RadioButton "RB_Nombre_Hotel" cambia de valor Private Sub RB_Nombre_Hotel_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RB_Nombre_Hotel.CheckedChanged B_Reserva.Enabled = False ''Deshabilitamos el boton B_Reserva 'Modificamos las propiedades de color del boton B_Reserva B_Reserva.BackColor = SystemColors.Control B_Reserva.ForeColor = SystemColors.ControlText
If RB_Nombre_Hotel.Checked = True Then ' Si esta seleccionado el RadioButton RB_Nombre_Hotel CB_Hotel1.Enabled = True 'Habilitamos el ComboBox CB_Hotel1
TB_Localidad_Hotel.Enabled = False 'Deshabilitamos el TextBox TB_Localidad_Hotel TB_Localidad_Hotel.Text = "" CB_Hotel2.Enabled = False 'Deshabilitamos el ComboBox CB_Hotel2 CB_Hotel2.Text = "Lista de hoteles" CB_Hotel1.Text = "Lista de hoteles" CB_Tipo_Habitacion.Enabled = False 'Deshabilitamos el ComboBox CB_Tipo_Habitacion TB_Nombre_Hotel.Text = "" 'Borramos el contenido del TextBox TB_Nombre_Hotel
146
TB_Categoria.Text = "" TB_Direccion_Hotel.Text = "" TB_Telefono_Hotel.Text = "" RTB_Descripcion_Hotel.Text = "" TB_Capacidad.Text = "" TB_Importe_noche.Text = "" RTB_Descripcion_Habitacion.Text = "" While CB_Tipo_Habitacion.Items.Count <> 0 'Borramos todos los items del ComboBox CB_Tipo_Habitacion CB_Tipo_Habitacion.Items.RemoveAt(0) End While CB_Tipo_Habitacion.Text = "Lista de tipos de habitaciones" Else CB_Hotel1.Enabled = False 'Deshabilitamos el ComboBox CB_Hotel1
End If
End Sub
' Evento que se produce cuando cambia el valor de la propiedad Text del control "TB_Localidad_Hotel" Private Sub TB_Localidad_Hotel_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Localidad_Hotel.TextChanged localidad = TB_Localidad_Hotel.Text.Trim 'Elimina los espacios en blanco al princicpio y al final de la cadena If localidad <> "" Then 'Si se ha escrito algo en el TextBox TB_Localidad_Hotel Label7.Text = "Mueva el cursor hacia la lista de hoteles" ' Mostramos un mensaje End If
150
End Sub
' Evento que se produce cuando se hace click en el control "TB_Localidad_Hotel" Private Sub TB_Localidad_Hotel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Localidad_Hotel.Click TB_Localidad_Hotel.Text = "" ' Borramos el contenido del TextBox TB_Localidad_Hotel CB_Hotel2.Enabled = False 'Deshabilitamos el ComboBox CB_Hotel2 End Sub
' Evento que se produce cuando se selecciona un elemento de la lista desplegable del ComboBox "CB_Hotel1" y se cierra Private Sub CB_Hotel1_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_Hotel1.SelectionChangeCommitted Dim Datos As SqlDataReader
hotel1 = CB_Hotel1.SelectedItem.ToString 'Guardamos el elemento seleccionado de la lista desplegable del ComboBox CB_Hotel1
While CB_Tipo_Habitacion.Items.Count <> 0 'Borramos todos los items del ComboBox CB_Tipo_Habitacion CB_Tipo_Habitacion.Items.RemoveAt(0) End While Try 'Obtenemos informacin del hotel
' La consulta "Consulta_SQL" selecciona todos los campos de un registro de la tabla Hotel
151
' donde campo nombre es igual al nombre del Hotel seleccionado Consulta_SQL = "SELECT * FROM Hotel WHERE nombre = @nombre" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@nombre", SqlDbType.VarChar)) Comando.Parameters("@nombre").Value = hotel1
Datos = Comando.ExecuteReader() If Datos.Read() Then 'Escribimos la infomacin del hotel en los TextBox correspondientes TB_Nombre_Hotel.Text = Datos("nombre") TB_Categoria.Text = Datos("categoria") TB_Telefono_Hotel.Text = Datos("telefono") RTB_Descripcion_Hotel.Text = Datos("descripcion") TB_Direccion_Hotel.Text = Datos("domicilio") & ", " & Datos("localidad") _ & " " & "(" & Datos("provincia") & ")" & ", " & Datos("codpostal") idhotel1 = Datos("idhotel")
End If
Datos.Close()
15.
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 12:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() 'Mostramos el formulario Form_acceso Me.Close() ' Cerramos el formulario Form_usuario End Try
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Hotel y TipoHabitacion) en el que el campo comun de ambas (identidicador de haitacion) ' tenga el mismo valor (el valor del identificador de habitacion) y donde el campo hotel_id de la tabla ' TipoHabitacion sea igual al identificador del hotel ' Seleccionamos el campo nombre de la tabla Habitacion Consulta_SQL = "SELECT Habitacion.nombre FROM Habitacion INNER JOIN TipoHabitacion ON " & _ "Habitacion.idhabitacion = TipoHabitacion.habitacion_id WHERE TipoHabitacion.hotel_id = @hotel_id"
15/
Datos = Comando.ExecuteReader()
While Datos.Read() 'mientras leamos datos de la tabla CB_Tipo_Habitacion.Items.Add(Datos("nombre")) 'Aadimos items al ComboBox CB_Tipo_Habitacion End While Datos.Close() Comando = Nothing Datos = Nothing
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 13:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close() End Try
CB_Tipo_Habitacion.Enabled = True 'Habilitanmos el ComboBox CB_Tipo_Habitacion TB_Localidad_Hotel.Enabled = False 'Deshabilitanmos el TextBox TB_Localidad_Hotel CB_Hotel2.Enabled = False
151
CB_Hotel1.Enabled = False
RB_Localidad_Hotel.Checked = False 'Establece que el control RB_Localidad_Hotel esta desactivado RB_Nombre_Hotel.Checked = False RB_Nomb_Hotel esta desactivado 'Establece que el control
B_Reserva.Enabled = True 'Habilitanmos el Boton B_Reserva 'Modificamos las propiedades de color del boton B_Reserva B_Reserva.BackColor = Color.White B_Reserva.ForeColor = Color.Red
End Sub ' Evento que se produce cuando se selecciona un elemento de la lista desplegable del ComboBox "CB_Hotel2" y se cierra Private Sub CB_Hotel2_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_Hotel2.SelectionChangeCommitted Dim Datos As SqlDataReader
hotel1 = CB_Hotel2.SelectedItem.ToString 'Guardamos el elemento seleccionado de la lista desplegable del ComboBox CB_Hotel1 While CB_Tipo_Habitacion.Items.Count <> 0 'Borramos todos los items del ComboBox CB_Tipo_Habitacion CB_Tipo_Habitacion.Items.RemoveAt(0) End While Try 'Obtenemos informacin del hotel
' La consulta "Consulta_SQL" selecciona todos los campos de un registro de la tabla Hotel
152
' donde campo nombre es igual al nombre del Hotel seleccionado Consulta_SQL = "SELECT * FROM Hotel WHERE nombre = @nombre" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@nombre", SqlDbType.VarChar)) Comando.Parameters("@nombre").Value = hotel1
Datos = Comando.ExecuteReader() If Datos.Read() Then 'Escribimos la infomacin del hotel en los TextBox correspondientes TB_Nombre_Hotel.Text = Datos("nombre") TB_Categoria.Text = Datos("categoria") TB_Telefono_Hotel.Text = Datos("telefono") RTB_Descripcion_Hotel.Text = Datos("descripcion") TB_Direccion_Hotel.Text = Datos("domicilio") & ", " & Datos("localidad") _ & " " & "(" & Datos("provincia") & ")" & ", " & Datos("codpostal") idhotel1 = Datos("idhotel")
End If
Datos.Close()
153
MessageBox.Show("ERROR 14:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close()
End Try
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Hotel y TipoHabitacion) en el que el campo comun de ambas (identidicador de haitacion) ' tenga el mismo valor (el valor del identificador de habitacion) y donde el campo hotel_id de la tabla ' TipoHabitacion sea igual al identificador del hotel ' Seleccionamos el campo nombre de la tabla Habitacion Consulta_SQL = "SELECT Habitacion.nombre FROM Habitacion INNER JOIN TipoHabitacion ON " & _ "Habitacion.idhabitacion = TipoHabitacion.habitacion_id WHERE TipoHabitacion.hotel_id = @hotel_id"
154
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 15:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close() End Try CB_Tipo_Habitacion.Enabled = True 'Habilitanmos el ComboBox CB_Tipo_Habitacion TB_Localidad_Hotel.Enabled = False 'Deshabilitanmos el TextBox TB_Localidad_Hotel CB_Hotel2.Enabled = False CB_Hotel1.Enabled = False
RB_Localidad_Hotel.Checked = False 'Establece que el control RB_Localidad_Hotel esta desactivado RB_Nombre_Hotel.Checked = False RB_Nomb_Hotel esta desactivado 'Establece que el control
B_Reserva.Enabled = True
'Modificamos las propiedades de color del boton B_Reserva B_Reserva.BackColor = Color.White B_Reserva.ForeColor = Color.Red
155
End Sub ' Evento que se produce cuando se selecciona un elemento de la lista desplegable del ComboBox "CB_Tipo_Habitacion" y se cierra Private Sub CB_Tipo_Habitacion_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_Tipo_Habitacion.SelectionChangeCommitted Dim Datos As SqlDataReader Dim habitacion As String
habitacion = CB_Tipo_Habitacion.SelectedItem.ToString 'Guardamos el elemento seleccionado de la lista desplegable del ComboBox CB_Tipo_Habitacion
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Hotel y TipoHabitacion) en el que el campo comun de ambas (identidicador de haitacion) ' tenga el mismo valor (el valor del identificador de habitacion) y donde el campo nombre de la tabla Haabitacion es igual ' nombre de la habitacion seleccionada y el campo hotel_id de la tabla TipoHabitacion es igual al identificador del hotel ' seleccionado. ' Seleccionamos los campos descripcion, precio de la tabla TipoHabitacion y capacidad de la tabla Habitacion Consulta_SQL = "SELECT TipoHabitacion.descripcion,TipoHabitacion.precio,Habitacion.capacidad " & _ "FROM Habitacion INNER JOIN TipoHabitacion ON " & _
156
'Consulta_SQL = "SELECT * FROM TipoHabitacion WHERE hotel_id = @hotel_id and nombre = @nombre" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@hotel_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@nombre", SqlDbType.VarChar)) Comando.Parameters("@hotel_id").Value = idhotel1 Comando.Parameters("@nombre").Value = habitacion
Datos = Comando.ExecuteReader() If Datos.Read() Then 'Escribimos la infomacin de la habitacionen los TextBox correspondientes RTB_Descripcion_Habitacion.Text = Datos("descripcion") TB_Importe_noche.Text = Datos("precio") TB_Capacidad.Text = Datos("capacidad")
End If
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 16:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ")
160
End Sub 'Evento que se produce cuando el raton ya no esta en la parte visible del control "TB_Localidad_Hotel" Private Sub TB_Localidad_Hotel_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_Localidad_Hotel.MouseLeave Dim Datos As SqlDataReader
Label7.Text = "" 'Borramos el contenido de la etiqueta de informacin While CB_Hotel2.Items.Count <> 0 'Borramos todos los items del ComboBox CB_Hotel2 CB_Hotel2.Items.RemoveAt(0) End While Try If localidad <> "" Then ' Si se ha escrito algo en el TextBox TB_Localidad_Hotel
' La consulta "Consulta_SQL" selecciona el campo nombre de un registro de la tabla Hotel ' donde el campo localidad es igual a la localidad escrita en el TextBox TB_Localidad_Hotel Consulta_SQL = "SELECT nombre FROM Hotel WHERE localidad = @localidad" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@localidad", SqlDbType.VarChar))
161
Comando.Parameters("@localidad").Value = TB_Localidad_Hotel.Text
Datos = Comando.ExecuteReader() While Datos.Read() 'mientras leamos datos de la tabla CB_Hotel2.Items.Add(Datos("nombre")) 'Aadimos items al ComboBox CB_Hotel2 End While Datos.Close() Comando = Nothing Datos = Nothing
If CB_Hotel2.Items.Count = 0 Then 'Si no se ha encontrado ningun hotel MessageBox.Show("En la localidad " & TB_Localidad_Hotel.Text & " no hay hoteles") CB_Hotel2.Enabled = False Exit Sub End If Else MessageBox.Show("Introduzca localidad para busqueda") Exit Sub End If
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 17:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close()
16.
' Evento que se produce cuando se muestra el formulario "Form_usuario" por primera vez. Private Sub Form_usuario_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown If Registrarse = True Then ' Si estamos en el modo registro -> usuario no registrado 'Habilitamos y deshabilitamos los botones correspondientes TSB_Editar.Enabled = True TSB_Guardar.Enabled = False TSB_Salir.Enabled = True TSB_Modificar.Enabled = False TSB_Baja.Enabled = False TSB_Borrar.Enabled = False
Else 'si NO estamos en el modo registro -> usuario ya registrado 'Habilitamos y deshabilitamos los botones correspondientes TSB_Modificar.Enabled = False TSB_Salir.Enabled = True TSB_Baja.Enabled = True TSB_Editar.Enabled = True TSB_Guardar.Enabled = False TSB_Borrar.Enabled = False
End If End Sub ' Evento que se produce al pulsar el boton borrar de la barra de herramientas
16/
Private Sub TSB_Borrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Borrar.Click Dim Datos As SqlDataReader
If Me.DG_Reservas.CurrentRow.Selected = False Then ' Si no hemos seleccionado una fila del DataGrid DG_Reservas MessageBox.Show("Porfavor seleccione una reserva para modificar o borrar") Exit Sub
ElseIf DateDiff(DateInterval.Day, Now.Date, CDate(DG_Reservas.CurrentRow.Cells(1).Value)) <= 0 Then ' Si hemos seleccionado una reserva con fecha anterior a la fecha de hoy MessageBox.Show("Seleccione reserva para borrar con fecha de inicio posterior a la fecha de hoy") Exit Sub Else 'Guardamos la informacion de la reserva en el Objeto Reserva
Objeto_Reserva.idreserva_valor = Me.DG_Reservas.CurrentRow.Cells(0).Value Objeto_Reserva.fechainicio_valor = Me.DG_Reservas.CurrentRow.Cells(1).Value Objeto_Reserva.fechafin_valor = Me.DG_Reservas.CurrentRow.Cells(2).Value Objeto_Reserva.precio_valor = CSng(Me.DG_Reservas.CurrentRow.Cells(3).Value) Objeto_Reserva.ocupacion_valor = Me.DG_Reservas.CurrentRow.Cells(4).Value Objeto_Reserva.nombretomador_valor = Me.DG_Reservas.CurrentRow.Cells(5).Value Objeto_Reserva.cantidad_valor = Me.DG_Reservas.CurrentRow.Cells(6).Value
161
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Habitacion y TipoHabitacion) en el que el campo comun de ambas (identificador de habitacion) ' tenga el mismo valor (el valor del identificador de la habitacion) y donde el campo habitacion_id de la tabla ' TipoHabitacion tenga el valor del indentificador de habitacion de la reserva y el hotel_id tenga el valor del hotel de la reserva ' Seleccionamos los campos de la tabla Habitacion y TipoHabitacion. Consulta_SQL = "SELECT TipoHabitacion.hotel_id,TipoHabitacion.habitacion_id,TipoHabitacion.de scripcion,TipoHabitacion.precio," & _
"TipoHabitacion.numhabitaciones,Habitacion.nombre,Habitacion.capacidad FROM Habitacion INNER JOIN TipoHabitacion ON " & _ "TipoHabitacion.habitacion_id = Habitacion.idhabitacion WHERE TipoHabitacion.habitacion_id = @idhabitacion and TipoHabitacion.hotel_id = @idhotel" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@idhabitacion", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@idhotel", SqlDbType.BigInt))
162
Datos = Comando.ExecuteReader() If Datos.Read() Then 'Guardamos informacion de la habitacion en el Objeto Habitacion Objeto_Habitacion.Hotel_id_valor = Datos("hotel_id") Objeto_Habitacion.Idtipohabitacion_valor = Datos("habitacion_id") Objeto_Habitacion.Descripcion_valor = Datos("descripcion") Objeto_Habitacion.Precio_valor = Datos("precio") Objeto_Habitacion.Numhabitaciones_valor = Datos("numhabitaciones") Objeto_Habitacion.Nombre_valor = Datos("nombre") Objeto_Habitacion.Capacidad_valor = Datos("capacidad")
End If
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 18:" & ControlChars.CrLf & ex.Message & _
163
ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("ERROR EN EL ACCESSO A LA BASE DE DATOS,INTENTELO DE NUEVO") Exit Sub 'Salimos del procedimiento 'Form_acceso.Show() 'Me.Close() End Try
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Hotel y TipoHabitacion) en el que el campo comun de ambas (identificador de hotel) ' tenga el mismo valor (el valor del identificador de hotel de la reserva) ' Seleccionamos los campos de la tabla hotel. Consulta_SQL = "SELECT Hotel.idhotel,Hotel.nombre ,Hotel.descripcion,Hotel.categoria," & _
"Hotel.domicilio,Hotel.localidad,Hotel.provincia,Hotel.codpostal,Hotel .telefono FROM Hotel INNER JOIN TipoHabitacion ON " & _ "Hotel.idhotel = TipoHabitacion.hotel_id WHERE TipoHabitacion.hotel_id = @hotel_id" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@hotel_id", SqlDbType.BigInt)) Comando.Parameters("@hotel_id").Value = Objeto_Habitacion.Hotel_id_valor
164
'Guardamos los datos del hotel en el objeto Hotel Hotel.idhotel_valor = Datos("idhotel") Hotel.nombre_valor = Datos("nombre") Hotel.descripcion_valor = Datos("descripcion") Hotel.categoria_valor = Datos("categoria") Hotel.direccion_valor = Datos("domicilio") & ", " & Datos("localidad") _ & " " & "(" & Datos("provincia") & ")" & ", " & Datos("codpostal") Hotel.telefono_valor = Datos("telefono")
End If
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 19:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("ERROR EN EL ACCESSO A LA BASE DE DATOS,INTENTELO DE NUEVO") Exit Sub 'Salimos del procedimiento 'Form_acceso.Show() 'Me.Close() End Try
165
'Habilitamos y deshabilitamos los botones correspondientes en el formulario Form_Reserva Form_Reserva.TSB_Guardar_Reserva.Enabled = False Form_Reserva.TSB_Modificar_Reserva.Enabled = False Form_Reserva.TSB_Borrar_Reserva.Enabled = True 'Mostramos el formulario Form_Reserva Form_Reserva.Visible = True Form_Reserva.Show()
' Evento que se produce al hacer click en el boton B_Reserva de la pestaa reserva Private Sub B_Reserva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Reserva.Click GB_Busqueda_Hotel.Enabled = True 'Habilitar el GroupBox GB_Busqueda_Hotel CB_Hotel1.Text = "Lista de hoteles" CB_Hotel2.Text = "Lista de hoteles" TB_Localidad_Hotel.Text = "" RB_Nombre_Hotel.Checked = False 'Establece que el control RB_Nombre_Hotel esta desactivado RB_Localidad_Hotel.Checked = False 'Establece que el control RB_Localidad_Hotel esta desactivado GB_Busqueda_Hotel.Enabled = False 'Deshabilitar el GroupBox GB_Busqueda_Hotel
166
B_Reserva.ForeColor = SystemColors.ControlText
'Habilitamos y deshabilitamos los botones correspondientes en el formulario Form_Reserva Form_Reserva.TSB_Guardar_Reserva.Enabled = False Form_Reserva.TSB_Modificar_Reserva.Enabled = False Form_Reserva.TSB_Borrar_Reserva.Enabled = False
If Descarga_reserva = False Then 'Si el formulario Form_Reserva esta cargado 'Mostramos el formulario Form_Reserva y hacemos que sea el formualrio activo Form_Reserva.Visible = True Form_Reserva.Show() Form_Reserva.Activate() Else 'Si el formulario Form_Reserva no esta esta cargado Form_Reserva.Visible = True Form_Reserva.Show()
End If
End Sub
.00
'Evento que se produce cuando se hace click en cualquier parte de una la celda del Control DataGRid DG_Reservas Private Sub DG_Reservas_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DG_Reservas.CellClick Dim Datos As SqlDataReader
'Guardamnos la informacion de la reserva en el OBjeto Reserva Objeto_Reserva.idreserva_valor = Me.DG_Reservas.CurrentRow.Cells(0).Value Objeto_Reserva.fechainicio_valor = Me.DG_Reservas.CurrentRow.Cells(1).Value Objeto_Reserva.fechafin_valor = Me.DG_Reservas.CurrentRow.Cells(2).Value Objeto_Reserva.precio_valor = CSng(Me.DG_Reservas.CurrentRow.Cells(3).Value) Objeto_Reserva.ocupacion_valor = Me.DG_Reservas.CurrentRow.Cells(4).Value Objeto_Reserva.nombretomador_valor = Me.DG_Reservas.CurrentRow.Cells(5).Value Objeto_Reserva.cantidad_valor = Me.DG_Reservas.CurrentRow.Cells(6).Value Objeto_Reserva.cliente_id_valor = Me.DG_Reservas.CurrentRow.Cells(7).Value Objeto_Reserva.hotel_id_valor = Me.DG_Reservas.CurrentRow.Cells(8).Value Objeto_Reserva.habitacion_id_valor = Me.DG_Reservas.CurrentRow.Cells(9).Value
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos
.01
' registros de las dos tablas (Habitacion y TipoHabitacion) en el que el campo comun de ambas (identificador de habitacion) ' tenga el mismo valor (el valor del identificador de la habitacion) y donde el campo habitacion_id de la tabla ' TipoHabitacion tenga el valor de indentificador de tipo de habitacion de la reserva y el campo hotel_id tenga el valor del ' hotel de la reserva ' Seleccionamos los campos de la tabla Habitacion y TipoHabitacion.
"TipoHabitacion.numhabitaciones,Habitacion.nombre,Habitacion.capacidad FROM Habitacion INNER JOIN TipoHabitacion ON " & _ "TipoHabitacion.habitacion_id = Habitacion.idhabitacion WHERE TipoHabitacion.habitacion_id = @idhabitacion and TipoHabitacion.hotel_id = @idhotel"
Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@idhabitacion", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@idhotel", SqlDbType.BigInt)) Comando.Parameters("@idhabitacion").Value = Objeto_Reserva.habitacion_id_valor Comando.Parameters("@idhotel").Value = Objeto_Reserva.hotel_id_valor
.0.
Objeto_Habitacion.Hotel_id_valor = Datos("hotel_id") Objeto_Habitacion.Idtipohabitacion_valor = Datos("habitacion_id") Objeto_Habitacion.Descripcion_valor = Datos("descripcion") Objeto_Habitacion.Precio_valor = Datos("precio") Objeto_Habitacion.Numhabitaciones_valor = Datos("numhabitaciones") Objeto_Habitacion.Nombre_valor = Datos("nombre") Objeto_Habitacion.Capacidad_valor = Datos("capacidad")
End If
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 20:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close() End Try
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos
.0/
' registros de las dos tablas (Hotel y TipoHabitacion) en el que el campo comun de ambas (identificador de hotel) ' tenga el mismo valor (el valor del identificador de hotel de la reserva) ' Seleccionamos los campos de la tabla hotel. Consulta_SQL = "SELECT Hotel.idhotel,Hotel.nombre ,Hotel.descripcion,Hotel.categoria," & _
"Hotel.domicilio,Hotel.localidad,Hotel.provincia,Hotel.codpostal,Hotel .telefono FROM Hotel INNER JOIN TipoHabitacion ON " & _ "Hotel.idhotel = TipoHabitacion.hotel_id WHERE TipoHabitacion.hotel_id = @hotel_id"
Datos = Comando.ExecuteReader() If Datos.Read() Then 'Guardamos los datos del hotel en el objeto Hotel Hotel.idhotel_valor = Datos("idhotel") Hotel.nombre_valor = Datos("nombre") Hotel.descripcion_valor = Datos("descripcion") Hotel.categoria_valor = Datos("categoria") Hotel.direccion_valor = Datos("domicilio") & ", " & Datos("localidad") _ & " " & "(" & Datos("provincia") & ")" & ", " & Datos("codpostal") Hotel.telefono_valor = Datos("telefono")
.01
hotel1 = Hotel.nombre_valor Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 21:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Form_acceso.Show() Me.Close() End Try
Ver_reserva = 4 'Se ha selccionado una fila del DataGrid DG_Reservas y podemos ver infrmacion de la reserva en la pestaa reserva
End Sub
' Evento que se produce al pulsar el boton info de la barra de herramientas Private Sub TSB_Info_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Info.Click Sobre.Show() End Sub
End Class
.02
2ORMU&%RIO IN2ONRE$ER#%
Imports System.Data.SqlClient
Public Class Form_Reserva Private contador1 As Integer Private contador2 As Integer Private THabitacion As String 'Variable para almacenar el tipo de habitacion Private IHabitacion As Int64 'Variable para almacenar el identificador del tipo de habitacion
' Evento que se produce al pulsar sobre el boton cerrar de la barra de herramientas
.03
'Habilitamos y deshabilitamos los comobox y radiobutton correspondientes Form_usuario.GB_Busqueda_Hotel.Enabled = True Form_usuario.RB_Localidad_Hotel.Enabled = True Form_usuario.RB_Nombre_Hotel.Enabled = True Form_usuario.CB_Hotel2.Enabled = False Form_usuario.CB_Hotel1.Enabled = False
'Ponemos valores a las propiedades de los controles del formulario Form_usuario, pestaa reserva Form_usuario.CB_Hotel1.Text = "Lista de hoteles" Form_usuario.CB_Hotel2.Text = "Lista de hoteles" Form_usuario.TB_Localidad_Hotel.Text = "" Form_usuario.RB_Nombre_Hotel.Checked = False Form_usuario.RB_Localidad_Hotel.Checked = False Form_usuario.GB_Hotel.Enabled = True Form_usuario.TB_Nombre_Hotel.Text = "" Form_usuario.TB_Categoria.Text = "" Form_usuario.TB_Direccion_Hotel.Text = "" Form_usuario.TB_Telefono_Hotel.Text = "" Form_usuario.RTB_Descripcion_Hotel.Text = "" Form_usuario.GB_Habitacion.Enabled = True Form_usuario.CB_Tipo_Habitacion.Text = "" Form_usuario.TB_Capacidad.Text = "" Form_usuario.TB_Importe_noche.Text = "" Form_usuario.RTB_Descripcion_Habitacion.Text = ""
.04
Descarga_reserva = True ' Variable Descarga_reserva = true indica que el formulario Form_Reserva no esta cargado Ver_reserva = 0 ' Ver_reserva = 0 indica que no se muestra el formulario reserva
'Evento que se produce cuando un formulario Form_Reserva pasa a estar en primer plano. Private Sub Form_Reserva_Activated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Activated Dim dias_reserva As Integer
If Ver_reserva = 1 Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "modificar" de la barra de herramientas dias_reserva = DateDiff(DateInterval.Day, CDate(TB_Fecha_entrada.Text), CDate(TB_Fecha_salida.Text)) + 1
.05
End If
If Ver_reserva = 2 Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "consultar disponibilidad" en pestaa reserva ' Inicializamos las propiedade de los controles del formulario "Form_Reserva" TB_Hab.Text = "" TB_HLibres.Text = "" TB_Importe.Text = "0" TB_CHabitacion.Text = "" NUD_Nhab.Value = 1 NUD_OHabitacion.Value = 1 TB_NHab.Text = CStr(NUD_Nhab.Value) 'Convertimos a string el valor del control NumericUpDown "NUD_Nhab" TB_OHab.Text = CStr(NUD_OHabitacion.Value) NUD_Nhab.Value = 1 NUD_OHabitacion.Value = 1 TB_Total.Text = "0"
End Sub
.06
' Evento que se produce cuando se selecciona un elemento de la lista desplegable del ComboBox "CB_THabitaciones" y se cierra Private Sub CB_THabitaciones_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_THabitaciones.SelectionChangeCommitted Dim dias_reserva As Integer
'Convertimos a cadena el valor del item seleccionado en el ComboBox "CB_THabitaciones" 'y lo asignamos a la variable THabitacion de tipo string THabitacion = CB_THabitaciones.SelectedItem.ToString
TB_Hab.Text = CB_THabitaciones.SelectedItem.ToString
If Ver_reserva = 2 Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "consultar disponibilidad" de la pestaa Reserva
For contador1 = 0 To (V_Disponibilidad.Length - 1) 'Para cada tipo de habitacion del hotel de la reserva If V_Disponibilidad(contador1).Habitacion_valor.Nombre_valor = THabitacion Then ' Si es el tipo de habitacion seleccionada
.10
'Actualizamos los controles del formulario Form_Reserva con los datos de la habitacion y la reserva TB_HLibres.Text = V_Disponibilidad(contador1).Num_disponibles_valor TB_Importe.Text = V_Disponibilidad(contador1).Habitacion_valor.Precio_valor TB_CHabitacion.Text = V_Disponibilidad(contador1).Habitacion_valor.Capacidad_valor
'Actulizamos los TextBox con los valores obtenidos en los NumericUpDown TB_OHab.Text = CStr(NUD_OHabitacion.Value) TB_NHab.Text = CStr(NUD_Nhab.Value) 'Actualizamos propiedad Text del control TextBox "TB_Total" 'Importe total = (dias reservados *importe por dia)*Numero de habitaciones reservadas TB_Total.Text = CStr((CSng(TB_Importe.Text) * dias_reserva) * NUD_Nhab.Value)
.11
If CInt(TB_HLibres.Text) = 0 Then 'Si no quedan habitaciones libres MessageBox.Show("No quedan habitaciones libres del tipo: " & THabitacion) CB_THabitaciones.Text = "Tipos de habitaciones disponibles" 'Deshabilitamos los NumeriUpDown "NUD_Nhab" y "NUD_OHabitacion" NUD_Nhab.Enabled = False NUD_OHabitacion.Enabled = False Else ' Si hay habitaciones libres 'Habilitamos los NumeriUpDown "NUD_Nhab" y "NUD_OHabitacion" NUD_Nhab.Enabled = True NUD_OHabitacion.Enabled = True End If End If
If Ver_reserva = 1 Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "modificar" de la barra de herramientas If THabitacion <> Objeto_Habitacion.Nombre_valor Then ' Si la habitacion seleccionada es distinta a la reservada
For contador1 = 0 To (V_Disponibilidad.Length - 1) 'Para cada tipo de habitacion del hotel de la reserva If V_Disponibilidad(contador1).Habitacion_valor.Nombre_valor = THabitacion Then ' Si es el tipo de habitacion seleccionada
'Actualizamos los controles del formulario Form_Reserva con los datos de la habitacion y la reserva TB_HLibres.Text = V_Disponibilidad(contador1).Num_disponibles_valor
.1.
'NumericUpDown numero de habitaciones reservadas NUD_Nhab.Value = 1 NUD_Nhab.Maximum = CInt(TB_HLibres.Text) NUD_Nhab.Minimum = 1 'Actulizamos los TextBox con los valores obtenidos en los NumericUpDown TB_OHab.Text = CStr(NUD_OHabitacion.Value) TB_NHab.Text = CStr(NUD_Nhab.Value) 'Actualizamos propiedad Text del control TextBox "TB_Total" 'Importe total = (dias reservados *importe por dia)*Numero de habitaciones reservadas TB_Total.Text = CStr((CSng(TB_Importe.Text) * dias_reserva) * NUD_Nhab.Value)
Exit For End If Next If CInt(TB_HLibres.Text) = 0 Then 'Si no quedan habitaciones libres MessageBox.Show("No quedan habitaciones libres del tipo: " & THabitacion)
.1/
CB_THabitaciones.Text = "Tipos de habitaciones disponibles" 'Deshabilitamos los NumeriUpDown "NUD_Nhab" y "NUD_OHabitacion" NUD_Nhab.Enabled = False NUD_OHabitacion.Enabled = False Else ' Si hay habitaciones libres 'Habilitamos los NumeriUpDown "NUD_Nhab" y "NUD_OHabitacion" NUD_Nhab.Enabled = True NUD_OHabitacion.Enabled = True End If Else ' Si la habitacion seleccionada es igual a la reservada For contador1 = 0 To (V_Disponibilidad.Length - 1) 'Para cada tipo de habitacion del hotel de la reserva If V_Disponibilidad(contador1).Habitacion_valor.Nombre_valor = THabitacion Then ' Si es el tipo de habitacion seleccionada 'Actualizamos los controles del formulario Form_Reserva con los datos de la habitacion y la reserva 'utilizamos los datos del objeto habitacion reservada y el objeto reserva TB_HLibres.Text = V_Disponibilidad(contador1).Num_disponibles_valor TB_NHab.Text = Objeto_Reserva.cantidad_valor.ToString TB_Importe.Text = CStr(Objeto_Habitacion.Precio_valor) TB_CHabitacion.Text = CStr(Objeto_Habitacion.Capacidad_valor) TB_OHab.Text = CStr(Objeto_Reserva.ocupacion_valor)
'El maximo de habitaciones para reservar ser igual al numero de habitaciones reervadas ms las hbaitaciones libres
.11
'Actualizamos propiedad Text del control TextBox "TB_Total" 'Importe total = (dias reservados *importe por dia)*Numero de habitaciones reservadas TB_Total.Text = CStr((CSng(TB_Importe.Text) * dias_reserva) * NUD_Nhab.Value)
Exit For End If Next If CInt(TB_HLibres.Text) = 0 Then 'Si no quedan habitaciones libres MessageBox.Show("No quedan habitaciones libres del tipo: " & THabitacion) CB_THabitaciones.Text = "Tipos de habitaciones disponibles" 'Deshabilitamos los NumeriUpDown "NUD_Nhab" y "NUD_OHabitacion" NUD_Nhab.Enabled = False NUD_OHabitacion.Enabled = False Else ' Si hay habitaciones libres
.12
'Habilitamos los NumeriUpDown "NUD_Nhab" y "NUD_OHabitacion" NUD_Nhab.Enabled = True NUD_OHabitacion.Enabled = True End If End If
End If
End Sub ' Evento que se produce antes de cerrar el formulario "Form_Reserva" Private Sub Form_Reserva_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
'Habilitamos y deshabilitamos los comobox y radiobutton correspondientes Form_usuario.GB_Busqueda_Hotel.Enabled = True Form_usuario.RB_Localidad_Hotel.Enabled = True Form_usuario.RB_Nombre_Hotel.Enabled = True Form_usuario.CB_Hotel2.Enabled = False Form_usuario.CB_Hotel1.Enabled = False
'Ponemos valores a las propiedades de los controles del formulario Form_usuario, pestaa reserva Form_usuario.CB_Hotel1.Text = "Lista de hoteles" Form_usuario.CB_Hotel2.Text = "Lista de hoteles" Form_usuario.TB_Localidad_Hotel.Text = "" Form_usuario.RB_Nombre_Hotel.Checked = False Form_usuario.RB_Localidad_Hotel.Checked = False Form_usuario.GB_Hotel.Enabled = True
.13
Form_usuario.TB_Nombre_Hotel.Text = "" Form_usuario.TB_Categoria.Text = "" Form_usuario.TB_Direccion_Hotel.Text = "" Form_usuario.TB_Telefono_Hotel.Text = "" Form_usuario.RTB_Descripcion_Hotel.Text = "" Form_usuario.GB_Habitacion.Enabled = True Form_usuario.CB_Tipo_Habitacion.Text = "" Form_usuario.TB_Capacidad.Text = "" Form_usuario.TB_Importe_noche.Text = "" Form_usuario.RTB_Descripcion_Habitacion.Text = ""
'Mostramos y hacemos activo el formulario Form_usuario Form_usuario.Visible = True Form_usuario.Show() Form_usuario.Activate() End Sub
If seleccionarImpresora() = True Then ' Si hemos seleccionado impresora 'Configuramos el Form_Reserva para imprimir -> cambiamos las propiedades de los controles para una mejor impresion
.14
ToolStrip1.Visible = False TB_HLibres.Visible = False Label11.Visible = False TB_HLibres.Visible = False GB_D_obligatorios.Visible = False GB_Disponibilidad.Visible = False
'Cambiamos las propiedades de los controles para una mejor impresion Me.BackColor = Color.White TB_Cliente_Reserva.BackColor = Color.White TB_Hotel_Reserva.BackColor = Color.White TB_Direccion_Reserva.BackColor = Color.White
TB_CHabitacion.BackColor = Color.White TB_Importe.BackColor = Color.White TB_Tomador.BackColor = Color.White TB_Fecha_entrada.BackColor = Color.White TB_Fecha_salida.BackColor = Color.White TB_Total.BackColor = Color.White
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None TB_Cliente_Reserva.BorderStyle = BorderStyle.None TB_Hotel_Reserva.BorderStyle = BorderStyle.None TB_Direccion_Reserva.BorderStyle = BorderStyle.None TB_CHabitacion.BorderStyle = BorderStyle.None TB_Importe.BorderStyle = BorderStyle.None
.15
TB_Tomador.BorderStyle = BorderStyle.None TB_Fecha_entrada.BorderStyle = BorderStyle.None TB_Fecha_salida.BorderStyle = BorderStyle.None TB_Total.BorderStyle = BorderStyle.None TB_Hab.BorderStyle = BorderStyle.None TB_NHab.BorderStyle = BorderStyle.None TB_OHab.BorderStyle = BorderStyle.None Panel1.ForeColor = Color.Black PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.ClientAreaOnly) 'Imrimimos el formulario formateado parta impresion End If
End Sub
' Evento quese produce cuando se ha terminado la impresion del formulario Form_Reserva Private Sub PrintForm1_EndPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintForm1.EndPrint 'Volvemos a poner las propiedades originales a los controles de formulario Form_Reserva
ToolStrip1.Visible = True TB_HLibres.Visible = True Label11.Visible = True TB_HLibres.Visible = True GB_D_obligatorios.Visible = True GB_Disponibilidad.Visible = True Me.BackColor = SystemColors.ControlLight TB_Cliente_Reserva.BackColor = SystemColors.ControlLight TB_Hotel_Reserva.BackColor = SystemColors.ControlLight TB_Direccion_Reserva.BackColor = SystemColors.ControlLight
.16
CB_THabitaciones.BackColor = Color.White TB_CHabitacion.BackColor = SystemColors.ControlLight TB_Importe.BackColor = SystemColors.ControlLight TB_Tomador.BackColor = SystemColors.ControlLight TB_Fecha_entrada.BackColor = SystemColors.ControlLight TB_Fecha_salida.BackColor = SystemColors.ControlLight TB_Total.BackColor = SystemColors.ControlLight TB_Hab.BackColor = SystemColors.ControlLight TB_NHab.BackColor = SystemColors.ControlLight TB_OHab.BackColor = SystemColors.ControlLight
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable TB_Cliente_Reserva.BorderStyle = BorderStyle.Fixed3D TB_Hotel_Reserva.BorderStyle = BorderStyle.Fixed3D TB_Direccion_Reserva.BorderStyle = BorderStyle.Fixed3D TB_CHabitacion.BorderStyle = BorderStyle.Fixed3D TB_Importe.BorderStyle = BorderStyle.Fixed3D TB_Tomador.BorderStyle = BorderStyle.Fixed3D TB_Fecha_entrada.BorderStyle = BorderStyle.Fixed3D TB_Fecha_salida.BorderStyle = BorderStyle.Fixed3D TB_Total.BorderStyle = BorderStyle.Fixed3D TB_Hab.BorderStyle = BorderStyle.Fixed3D TB_NHab.BorderStyle = BorderStyle.Fixed3D TB_OHab.BorderStyle = BorderStyle.Fixed3D
End Sub
' Evento que se produce cuando pulsamos el boton "guardar reserva" de la barra de herramientas
..0
Private Sub TSB_Guardar_Reserva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Guardar_Reserva.Click Dim Resultado As Integer Dim oDataAdapter As SqlDataAdapter Dim oDataSet As DataSet Dim oCB As SqlCommandBuilder
If (TB_Hab.Text = "") Or (TB_NHab.Text = "0") Or (TB_OHab.Text = "0") Then ' Si no hemos seleccinado tipo de habitacion, numero de habitaciones y ocupacion MessageBox.Show("Porfavor rellene todo los campos obligatorios") Exit Sub Else
'Crear comando escalar ' La consulta "Consulta_SQL" inserta en la tabla Reserva un registro con los valores obtenidos en el formulario Consulta_SQL = "INSERT INTO " & _
..1
' Aadir parametros al comando Comando.Parameters.Add(New SqlParameter("@fechainicio", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@fechafin", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@precio", SqlDbType.Money)) Comando.Parameters.Add(New SqlParameter("@ocupacion", SqlDbType.TinyInt)) Comando.Parameters.Add(New SqlParameter("@nombretomador", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@cliente_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@hotel_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@habitacion_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@cantidad", SqlDbType.Int))
' Actualizamos el objeto Reserva Objeto_Reserva.fechainicio_valor = F_entrada Objeto_Reserva.fechafin_valor = F_salida Objeto_Reserva.precio_valor = CSng(TB_Total.Text) Objeto_Reserva.ocupacion_valor = CInt(TB_OHab.Text) Objeto_Reserva.cliente_id_valor = Objeto_Usuario.Id_valor
...
For contador1 = 0 To (V_Disponibilidad.Length - 1) 'Para cada tipo de habitacion del hotel de la reserva If V_Disponibilidad(contador1).Habitacion_valor.Nombre_valor = THabitacion Then ' Si es el tipo de habitacion seleccionada
Objeto_Reserva.habitacion_id_valor = V_Disponibilidad(contador1).Habitacion_valor.Idtipohabitacion_valor Exit For End If Next Objeto_Reserva.hotel_id_valor = idhotel1 Objeto_Reserva.cantidad_valor = CInt(TB_NHab.Text) Objeto_Reserva.nombretomador_valor = TB_Tomador.Text
'Aadir parametro al comando Comando.Parameters("@fechainicio").Value = Objeto_Reserva.fechainicio_valor Comando.Parameters("@fechafin").Value = Objeto_Reserva.fechafin_valor Comando.Parameters("@precio").Value = Objeto_Reserva.precio_valor Comando.Parameters("@ocupacion").Value = Objeto_Reserva.ocupacion_valor Comando.Parameters("@nombretomador").Value = TB_Tomador.Text Comando.Parameters("@cliente_id").Value = Objeto_Reserva.cliente_id_valor Comando.Parameters("@habitacion_id").Value = Objeto_Reserva.habitacion_id_valor Comando.Parameters("@hotel_id").Value = Objeto_Reserva.hotel_id_valor Comando.Parameters("@cantidad").Value = Objeto_Reserva.cantidad_valor
../
Resultado = Comando.ExecuteNonQuery() 'Ejecutar comando . La sentencia a ejecutar no devuelve un conjuento de registros ' devuelve un entero indicando el numero de filas que se han visto afectadas por la ejecucion del objeto commmand
Comando = Nothing
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 22:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("NO SE HA PODIDO GUARDAR LA RESERVA") Exit Sub 'Salimos del procedimiento
End Try MessageBox.Show("RESERVA GUARDADA CORRECTAMENTE") Try ' Actualizamos el DataGrid "DG_Reservas"
Consulta_SQL = "SELECT * FROM Reserva WHERE cliente_id = @cliente_id" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@cliente_id", SqlDbType.BigInt)) Comando.Parameters("@cliente_id").Value = Objeto_Usuario.Id_valor
..1
'Modifcamos propiedades por codigo del DataGrid DG_Reservas.Un DataGrid es un control nos permite realizar 'enlace complejo de datos con ADO.NET Form_usuario.DG_Reservas.Columns(0).Visible = False 'Oculta la columna 0 del DataGrid DG_Reservas Identificador de reserva Form_usuario.DG_Reservas.Columns(7).Visible = False Form_usuario.DG_Reservas.Columns(8).Visible = False Form_usuario.DG_Reservas.Columns(9).Visible = False Form_usuario.DG_Reservas.Columns(3).MinimumWidth = 120 'Ancho minimo de la columna: 120 pixeles Form_usuario.DG_Reservas.Columns(5).MinimumWidth = 230 Form_usuario.DG_Reservas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill 'Ajustar ancho de la columna
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 23:" & ControlChars.CrLf & ex.Message & _
..2
ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") 'Cerramos el formulario y volvemos al formulario de acceso Form_acceso.Show() Me.Close() End Try Comando = Nothing End If
'Cerramos el formulario Form_Reseva y mostramos el formulario Form_usuario Descarga_reserva = True Form_usuario.Visible = True Form_usuario.Show() Form_usuario.Activate()
Me.Close()
End Sub
' Evento que se produce cuando pulsamos el boton "modificar reserva" de la barra de herramientas Private Sub TSB_Modificar_Reserva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Modificar_Reserva.Click Dim Resultado As Integer Dim oDataAdapter As SqlDataAdapter Dim oDataSet As DataSet Dim oCB As SqlCommandBuilder
..3
If DateDiff(DateInterval.Day, DateTime.Today, F_entrada) <= 0 Then 'Si la fecha de entrada es posterior a la fecha de hoy MessageBox.Show("Introduzca fecha de entrada posterior a fecha de hoy") Exit Sub
ElseIf (TB_Hab.Text = "") Or (TB_NHab.Text = "0") Or (TB_OHab.Text = "0") Then ' Si no hemos introducido tipo de habitacion, numero de habitaciones y ocupacion MessageBox.Show("Porfavor rellene todo los campos obligatorios") Exit Sub
Else
'Crear comando escalar ' La consulta "Consulta_SQL" actualiza el registro cuyo campo idreserva es igual al identificador de la reserva ' de la tabla Reserva con los valores obtenidos en el formulario Form_Reserva Consulta_SQL = "UPDATE Reserva " & _ "SET fechainicio = @fechainicio,fechafin = @fechafin,precio = @precio,ocupacion = @ocupacion," & _ "nombretomador = @nombretomador,cliente_id = @cliente_id,hotel_id = @hotel_id,habitacion_id= @habitacion_id,cantidad = @cantidad " & _
..4
' Aadir parametros al comando Comando.Parameters.Add(New SqlParameter("@fechainicio", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@fechafin", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@precio", SqlDbType.Money)) Comando.Parameters.Add(New SqlParameter("@ocupacion", SqlDbType.TinyInt)) Comando.Parameters.Add(New SqlParameter("@nombretomador", SqlDbType.VarChar)) Comando.Parameters.Add(New SqlParameter("@cliente_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@hotel_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@habitacion_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@cantidad", SqlDbType.Int)) Comando.Parameters.Add(New SqlParameter("@idreserva", SqlDbType.BigInt))
..5
Objeto_Reserva.precio_valor = CSng(TB_Total.Text)
For contador1 = 0 To (V_Disponibilidad.Length - 1) If V_Disponibilidad(contador1).Habitacion_valor.Nombre_valor = THabitacion Then Objeto_Reserva.habitacion_id_valor = V_Disponibilidad(contador1).Habitacion_valor.Idtipohabitacion_valor Exit For End If Next
Comando.Parameters("@fechainicio").Value = Objeto_Reserva.fechainicio_valor Comando.Parameters("@fechafin").Value = Objeto_Reserva.fechafin_valor Comando.Parameters("@precio").Value = Objeto_Reserva.precio_valor Comando.Parameters("@ocupacion").Value = Objeto_Reserva.ocupacion_valor Comando.Parameters("@nombretomador").Value = TB_Tomador.Text Comando.Parameters("@cliente_id").Value = Objeto_Reserva.cliente_id_valor Comando.Parameters("@hotel_id").Value = Objeto_Reserva.hotel_id_valor Comando.Parameters("@habitacion_id").Value = Objeto_Reserva.habitacion_id_valor
..6
Resultado = Comando.ExecuteNonQuery()
Comando = Nothing
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 24:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("NO SE HA PODIDO MODIFICAR LA RESERVA") Exit Sub ' Salimos del procedimeinto
End Try MessageBox.Show("RESERVA MODIFICADA CORRECTAMENTE") Try 'Averiguamos los datos de la reserva actualizada para actualizar el DataGrid "DG_Reservas"
' La consulta "Consulta_SQL" selecciona todos los campos de un registro de la tabla Reserva donde ' el campo cliente_id es igual al identificador del cliente que realiza la reserva Consulta_SQL = "SELECT * FROM Reserva WHERE cliente_id = @cliente_id"
./0
Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@cliente_id", SqlDbType.BigInt)) Comando.Parameters("@cliente_id").Value = Objeto_Usuario.Id_valor 'crear adaptador oDataAdapter = New SqlDataAdapter(Comando)
'Modifcamos propiedades por codigo del DataGrid DG_Reservas.Un DataGrid es un control nos permite realizar 'enlace complejo de datos con ADO.NET Form_usuario.DG_Reservas.Columns(0).Visible = False 'Oculta la columna 0 del DataGrid DG_Reservas Form_usuario.DG_Reservas.Columns(7).Visible = False Form_usuario.DG_Reservas.Columns(8).Visible = False Form_usuario.DG_Reservas.Columns(3).MinimumWidth = 120 'Ancho minimo de la columna: 120 pixeles Form_usuario.DG_Reservas.Columns(5).MinimumWidth = 230 Form_usuario.DG_Reservas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill 'Ajustar ancho de la columna
Catch ex As SqlException
./1
' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 25:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") ' Cerramos el formulariuo Form_Reserva y mostramos el formulariode acceso Form_acceso.Show() Me.Close() End Try Comando = Nothing 'Cerramos el formulario Form_Reseva y mostramos el formulario Form_usuario Descarga_reserva = True Form_usuario.Visible = True Form_usuario.Show() Me.Close() End If
End Sub
' Evento que se produce cuando pulsamos el boton "borrar reserva" de la barra de herramientas Private Sub TSB_Borrar_Reserva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_Borrar_Reserva.Click Dim Resultado As Integer Dim oDataAdapter As SqlDataAdapter Dim oDataSet As DataSet Dim oCB As SqlCommandBuilder
./.
'Crear comando escalar ' La consulta "Consulta_SQL" borra un registro de la tabla Reserva donde ' el campo idreserva es igual al identificador de la reserva Consulta_SQL = "DELETE FROM Reserva WHERE idreserva = @idreserva"
Comando.Parameters("@idreserva").Value = Objeto_Reserva.idreserva_valor
Comando = Nothing
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 26:" & ControlChars.CrLf & ex.Message & _
.//
ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") MessageBox.Show("ERROR: NO SE HA PODIDO BORRAR LA RESERVA") Exit Sub ' Salimos del procedimiento
' La consulta "Consulta_SQL" selecciona todos los registros de la tabla Reserva donde ' el campo cliente_id es igual al identificador del cliente que realiza la reserva Consulta_SQL = "SELECT * FROM Reserva WHERE cliente_id = @cliente_id" Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@cliente_id", SqlDbType.BigInt)) Comando.Parameters("@cliente_id").Value = Objeto_Usuario.Id_valor 'crear adaptador oDataAdapter = New SqlDataAdapter(Comando)
Form_usuario.DG_Reservas.DataSource = oDataSet
./1
Form_usuario.DG_Reservas.DataMember = "Reservas"
'Modifcamos propiedades por codigo del DataGrid DG_Reservas.Un DataGrid es un control nos permite realizar 'enlace complejo de datos con ADO.NET Form_usuario.DG_Reservas.Columns(0).Visible = False 'Oculta la columna 0 del DataGrid DG_Reservas Form_usuario.DG_Reservas.Columns(7).Visible = False Form_usuario.DG_Reservas.Columns(8).Visible = False Form_usuario.DG_Reservas.Columns(3).MinimumWidth = 120 'Ancho minimo de la columna: 120 pixeles Form_usuario.DG_Reservas.Columns(5).MinimumWidth = 230 Form_usuario.DG_Reservas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill 'Ajustar ancho de la columna
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 27:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") ' Cerramos el formulariuo Form_Reserva y mostramos el formulariode acceso Form_acceso.Show() Me.Close() End Try Comando = Nothing 'Cerramos el formulario Form_Reserva y mostramos el formulario Form_usuario Descarga_reserva = True Form_usuario.Visible = True Form_usuario.Show() Form_usuario.Activate() Me.Close()
./2
End Sub
'Evento que se ejecuta antes de que se muestre un formulario por primera vez. Private Sub Form_Reserva_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Actualizamos los controles del formulario Form_Reserva con los datos correspondientes 'dependiendo de coo se ha accedido al formulario
Try Descarga_reserva = False 'Descarga_reserva = False indica que el formulario Form_Reserva se ha cargado
If Ver_reserva = 1 Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "modificar" de la barra de herramientas
'Actualizamos los controles del formulario con los valores de los obkjetos Reserva y Hotel TB_Cliente_Reserva.Text = Objeto_Reserva.nombretomador_valor TB_Tomador.Text = Objeto_Reserva.nombretomador_valor TB_Hotel_Reserva.Text = Hotel.nombre_valor TB_Direccion_Reserva.Text = Hotel.direccion_valor TB_Hab.Text = Objeto_Habitacion.Nombre_valor TB_CHabitacion.Text = Objeto_Habitacion.Capacidad_valor TB_Importe.Text = Objeto_Habitacion.Precio_valor TB_Fecha_entrada.Text = Objeto_Reserva.fechainicio_valor.ToLongDateString
./3
TB_Fecha_salida.Text = Objeto_Reserva.fechafin_valor.ToLongDateString
GB_D_obligatorios.Enabled = False
ElseIf (Ver_reserva = 2) Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "consultar disponibilidad" en pestaa reserva
TB_Cliente_Reserva.Text = Objeto_Usuario.Nombre_valor & " " & _ Objeto_Usuario.Apellidos_valor TB_Tomador.Text = TB_Cliente_Reserva.Text TB_Hotel_Reserva.Text = hotel1 TB_Direccion_Reserva.Text = Form_usuario.TB_Direccion_Hotel.Text TB_Fecha_entrada.Text = DTP_F_entrada.Value.ToLongDateString TB_Fecha_salida.Text = DTP_F_salida.Value.ToLongDateString
GB_D_obligatorios.Enabled = False
./4
ElseIf (Ver_reserva = 3) Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "borrar" de la barra de herramientas con la pestaa listado reservas seleccionada
'Actualizamos los controles del formulario con los valores de los obkjetos Reserva y Hotel TB_Cliente_Reserva.Text = Objeto_Reserva.nombretomador_valor TB_Tomador.Text = Objeto_Reserva.nombretomador_valor TB_Hotel_Reserva.Text = Hotel.nombre_valor TB_Direccion_Reserva.Text = Hotel.direccion_valor TB_Hab.Text = Objeto_Habitacion.Nombre_valor TB_CHabitacion.Text = Objeto_Habitacion.Capacidad_valor TB_Importe.Text = Objeto_Habitacion.Precio_valor TB_Fecha_entrada.Text = Objeto_Reserva.fechainicio_valor.ToLongDateString TB_Fecha_salida.Text = Objeto_Reserva.fechafin_valor.ToLongDateString DTP_F_entrada.Value = Objeto_Reserva.fechainicio_valor.ToLongDateString DTP_F_salida.Value = Objeto_Reserva.fechafin_valor.ToLongDateString
End If
./5
Catch ex As Exception ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 28:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor") 'Cerramos el formulario Form_Reserva y mostramos el formulario Form_usuario Descarga_reserva = True Form_usuario.Visible = True Form_usuario.Show() Form_usuario.Activate() Me.Close() End Try
End Sub
' Evento que se produce cuando el valor del control NumericUpDown "NUD_Nhab" cambia Private Sub NUD_Nhab_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NUD_Nhab.ValueChanged Dim Dias_reserva As Integer
'Actualizamos propiedad Text del control TextBox "TB_Total" 'Importe total = (dias reservados *importe por dia)*Numero de habitaciones reservadas
./6
End Sub
'Evento que se produce cuando hacemos click en el boton "B_Consulta" Private Sub B_Consulta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Consulta.Click Dim D_entrada As Integer ' variable para almacenar la diferencia de dias entre hoy y la fecha de entrada Dim dias As Integer ' variable para almacenar la diferencia de dias entre la fecha de entrada y la fecha de salida Dim Sum As Integer ' variable para almacenar el numero de habitaciones reservadas de un tipo de habitacion Dim n As Integer ' variable para almacenar el numero de tipos de habitaciones del hotel de la reserva Dim contador As Integer ' variable para utilizar en el bucle for Dim Habitacion As Clase_Tipo_Habitacion ' Habitacion -> variable para almacenar un objeto "Tipo_Habitacion" Dim Disp_habitacion As Disponibilidad ' Disp_habitacion -> variable para almacenar un objeto "Disponibilidad" 'Variables para la conexin y consulta a la base de datos Dim Datos As SqlDataReader
CB_THabitaciones.Items.Clear() 'Borramos todos los items del ComboBox "CB_THabitaciones" F_entrada = DTP_F_entrada.Value.Date ' Guardamos fecha de entrada F_salida = DTP_F_salida.Value.Date salida ' Guardamos fecha de
.10
D_entrada = DateDiff(DateInterval.Day, DateTime.Today, F_entrada) dias = DateDiff(DateInterval.Day, F_entrada, F_salida) If (D_entrada <= 0) Then 'Si hemos seleccionado una fecha de entrada anterior a la fecha de hoy MessageBox.Show("Introduzca fecha de entrada posterior a la fecha de hoy") Exit Sub ElseIf dias < 0 Then ' Si hemos seleccionado una fecha de salida anterior a la fecha de entrada MessageBox.Show("Introduzca fecha de salida igual o posterior a la fecha de entrada") Exit Sub Else 'si hemos seleccionado correctamente la fecha de entrada y de salida GB_D_obligatorios.Enabled = True 'Habilitamos el GroupBox "GB_D_obligatorios"
'Modificamos las propiedades de color del boton B_Consulta B_Consulta.BackColor = SystemColors.ControlLight B_Consulta.ForeColor = SystemColors.ControlText
'Modificamos las propiedades de color de primer plano CB_THabitaciones.ForeColor = Color.Red NUD_Nhab.ForeColor = Color.Red NUD_OHabitacion.ForeColor = Color.Red
ReDim V_Disponibilidad(0) ' Creamos vector con 0 elementos n = -1 'inicializamos n Try 'Averiguamos los tipos de habitacion del hotel donde se quiere realizar la reserva
.11
' La consulta "Consulta_SQL" realiza la operacion INNER JOIN, la cual realiza una combinacion con todos aquellos ' registros de las dos tablas (Habitacion y TipoHabitacion) en el que el campo comun de ambas (identificador de habitacion) ' tenga el mismo valor (el valor del identificador de la habitacion) y donde el campo hotel_id de la tabla ' TipoHabitacion tenga el valor del indentificador del hotel donde se realiza la reserva ' Seleccionamos los campos de la tabla Habitacion y TipoHabitacion.
"TipoHabitacion.numhabitaciones,Habitacion.nombre,Habitacion.capacidad FROM Habitacion INNER JOIN TipoHabitacion ON " & _ "TipoHabitacion.habitacion_id = Habitacion.idhabitacion WHERE TipoHabitacion.hotel_id = @hotel_id"
Datos = Comando.ExecuteReader()
While Datos.Read() 'Guardamos la informacion de cada tipo de habitacion en un objeto habitacion Habitacion = New Clase_Tipo_Habitacion Habitacion.Hotel_id_valor = Datos("hotel_id") Habitacion.Idtipohabitacion_valor = Datos("habitacion_id")
.1.
Habitacion.Descripcion_valor = Datos("descripcion") Habitacion.Precio_valor = Datos("precio") Habitacion.Numhabitaciones_valor = Datos("numhabitaciones") Habitacion.Nombre_valor = Datos("nombre") Habitacion.Capacidad_valor = Datos("capacidad")
'Guardamos informacion de la disponibilidad de cada tipo de habitacion Disp_habitacion = New Disponibilidad(Habitacion, Habitacion.Numhabitaciones_valor) n = n + 1 'incrementamos variable que cuenta el numero de tipos de habitacion ReDim Preserve V_Disponibilidad(n) 'Redimensionamos el vector manteniendo los datos V_Disponibilidad(n) = Disp_habitacion 'Almacenamos el objeto disponibilidad en el vector "V_Disponibilidad"
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 29:" & ControlChars.CrLf & ex.Message & _
.1/
ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Exit Sub 'Salimos del procedimiento End Try
For contador = 0 To (V_Disponibilidad.Length - 1) 'Para cada objeto Disponibilidad almacenado en el vector "V_Disponibilidad" Try 'Averiguamos el numero de habitaciones reservadas de cada tipo de habitacion del hotel de la reserva ' entre las fechas F_entrada y F_salida
'La funcion CONVERT(datetime,fecha,103) convierte una expresin fecha de tipo string a un tipo de datos 'datetime con formato dd/mm/aa
' La consulta "Consulta_SQL" realiza el suma de todos los valores contenidos en el campo cantidad ' de la tabla reserva donde el campo tipohabitacion_id es igual al tipo de habitacion del hotel de reserva ' y fechainicio esta comprendida entre la fecha de inicio y la fecha de fin de la reserva o ' fechafin esta comprendida entre la fecha de inicio y la fecha de fin de la reserva o ' fechainicio es anterior a la fecha de inicio y fechafin es posterior a la fecha de fin de la reserva Consulta_SQL = "SELECT SUM(cantidad)AS sum FROM Reserva WHERE habitacion_id = @habitacion_id " & _ "AND ((CONVERT(datetime,fechainicio,103) BETWEEN CONVERT(datetime,@inicio,103) AND CONVERT(datetime,@fin,103)) OR " & _ "(CONVERT(datetime,fechafin,103) BETWEEN CONVERT(datetime,@inicio,103) AND CONVERT(datetime,@fin,103)) OR " & _ "((CONVERT(datetime,fechainicio,103) <=CONVERT(datetime,@inicio,103)) AND (CONVERT(datetime,fechafin,103)>=CONVERT(datetime,@fin,103))))"
.11
Comando = New SqlCommand(Consulta_SQL, Conexion) Comando.Parameters.Add(New SqlParameter("@habitacion_id", SqlDbType.BigInt)) Comando.Parameters.Add(New SqlParameter("@inicio", SqlDbType.DateTime)) Comando.Parameters.Add(New SqlParameter("@fin", SqlDbType.DateTime)) Comando.Parameters("@habitacion_id").Value = V_Disponibilidad(contador).Habitacion_valor.Idtipohabitacion_valor Comando.Parameters("@inicio").Value = F_entrada Comando.Parameters("@fin").Value = F_salida
If Datos.Read() Then ' Si hay un registro If Not (Convert.IsDBNull(Datos("sum"))) Then 'Si no nulo el campo sumatorio Sum = Datos("sum") 'Almacenamos el sumatorio 'Almacenamos el numero de habitaciones diponibles de cada tipo de habitacion
.12
Catch ex As SqlException ' Si no hay error en el acceso a la base de datos MessageBox.Show("ERROR 30:" & ControlChars.CrLf & ex.Message & _ ControlChars.CrLf & " SERVIDOR:SQL SERVER 2008 R2 Express. Miguel Monzo Pastor ") Exit Sub 'Salimos del procedimiento End Try Next
'Actualizamos los TextBox de fecha de entrada y fecha de salida TB_Fecha_entrada.Text = F_entrada.ToLongDateString TB_Fecha_salida.Text = F_salida.ToLongDateString
End If
'Agregamos items al ComboBox CB_Thabitaciones 'El ComboBox CB_Thabitaciones contiene la lista de tipos de habitacion For contador = 0 To (V_Disponibilidad.Length - 1)
.13
If Ver_reserva = 1 Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "modificar" de la barra de herramientas TSB_Modificar_Reserva.Enabled = True TSB_Guardar_Reserva.Enabled = False TSB_Borrar_Reserva.Enabled = False
ElseIf Ver_reserva = 2 Then 'Hemos accedido al formulario de informacion de reserva a traves del boton "consultar disponibilidad" en pestaa reserva TSB_Modificar_Reserva.Enabled = False TSB_Guardar_Reserva.Enabled = True TSB_Borrar_Reserva.Enabled = False End If
End Sub ' Evento que se produce cuando el valor del control "DTP_F_entrada" cambia Private Sub DTP_F_entrada_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DTP_F_entrada.ValueChanged F_entrada = DTP_F_entrada.Value ' Almacenamos el valor en la variable F_entrada
'Modificamos las propiedades de color GB_D_obligatorios.BackColor = SystemColors.ControlLight 'Color de fondo CB_THabitaciones.ForeColor = SystemColors.ControlText 'Color de primer plano NUD_Nhab.ForeColor = SystemColors.ControlText NUD_OHabitacion.ForeColor = SystemColors.ControlText
.14
End Sub ' Evento que se produce cuando el valor del control DateTimePicker "DTP_F_salida" cambia Private Sub DTP_F_salida_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DTP_F_salida.ValueChanged F_salida = DTP_F_salida.Value ' Almacenamos el valor en la variable F_salida
'Modificamos las propiedades de color GB_D_obligatorios.BackColor = SystemColors.ControlLight 'Color de fondo CB_THabitaciones.ForeColor = SystemColors.ControlText 'Color de primer plano NUD_Nhab.ForeColor = SystemColors.ControlText NUD_OHabitacion.ForeColor = SystemColors.ControlText GB_D_obligatorios.Enabled = False 'Deshabilitamos el GroupBox "GB_D_obligatorios"
End Sub ' Evento que se produce cuando el valor del control NumericUpDown "NUD_OHabitacion" cambia Private Sub NUD_OHabitacion_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NUD_OHabitacion.ValueChanged 'Actualizamos el valor de la propiedad Text del TextBox "TB_OHab" TB_OHab.Text = NUD_OHabitacion.Value.ToString End Sub
.15
End Class
2ORMU&%RIO $O'RE
End Sub
Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click Me.Close()
.16
End Sub
End Class
C&%$E$
Public Class Clase_Usuario Private Id As Int64 Private Tipo_Usuario As String Private Login As String Private Password As String Private Email As String Private Fechaalta As DateTime Private Ultimoacceso As DateTime Private Nombre As String Private Apellidos As String Private NIF As String
.20
Private Domicilio As String Private Localidad As String Private Provincia As String Private Codpostal As String Private Telefono As String
Public Property Nombre_valor() As String Get Return Nombre End Get Set(ByVal value As String) Nombre = value End Set End Property
Public Property Apellidos_valor() As String Get Return Apellidos End Get Set(ByVal value As String) Apellidos = value End Set End Property
Public Property NIF_valor() As String Get Return NIF End Get Set(ByVal value As String)
.21
NIF = value End Set End Property Public Property Domicilio_valor() As String Get Return Domicilio End Get Set(ByVal value As String) Domicilio = value End Set End Property
Public Property Localidad_valor() As String Get Return Localidad End Get Set(ByVal value As String) Localidad = value End Set End Property
Public Property Provincia_valor() As String Get Return Provincia End Get Set(ByVal value As String) Provincia = value End Set End Property Public Property Codpostal_valor() As String
.2.
Get Return Codpostal End Get Set(ByVal value As String) Codpostal = value End Set End Property Public Property Telefono_valor() As String Get Return Telefono End Get Set(ByVal value As String) Telefono = value End Set End Property
Get Return Id End Get Set(ByVal value As Int64) Id = value End Set End Property Public Property Tipo_Usuario_valor() As String Get Return Tipo_Usuario End Get
.2/
Set(ByVal value As String) Tipo_Usuario = value End Set End Property Public Property Login_valor() As String Get Return Login End Get Set(ByVal value As String) Login = value End Set End Property Public Property Password_valor() As String Get Return Password End Get Set(ByVal value As String) Password = value End Set End Property Public Property Email_valor() As String Get Return Email End Get Set(ByVal value As String) Email = value End Set End Property
.21
Get Return Fechaalta End Get Set(ByVal value As DateTime) Fechaalta = value End Set End Property
Public Property Ultimoacceso_valor() As DateTime Get Return Ultimoacceso End Get Set(ByVal value As DateTime) Ultimoacceso = value End Set End Property
Public Sub New(ByVal Login_valor As String, ByVal Password_valor As String) Login = Login_valor Password = Password_valor End Sub
End Class
Public Class Clase_Tipo_Habitacion Private Idtipohabitacion As Int64 Private Nombre As String Private Descripcion As String Private Capacidad As Int16
.22
Public Property Idtipohabitacion_valor() As Int64 Get Return Idtipohabitacion End Get Set(ByVal value As Int64) Idtipohabitacion = value End Set End Property Public Property Nombre_valor() As String Get Return Nombre End Get Set(ByVal value As String) Nombre = value End Set End Property
Public Property Descripcion_valor() As String Get Return Descripcion End Get Set(ByVal value As String) Descripcion = value End Set
.23
End Property Public Property Capacidad_valor() As String Get Return Capacidad End Get Set(ByVal value As String) Capacidad = value End Set End Property
Public Property Precio_valor() As Single Get Return Precio End Get Set(ByVal value As Single) Precio = value End Set End Property Public Property Numhabitaciones_valor() As Int16 Get Return Numhabitaciones End Get Set(ByVal value As Int16) Numhabitaciones = value End Set End Property Public Property Hotel_id_valor() As Int64 Get Return Hotel_id End Get
.24
Set(ByVal value As Int64) Hotel_id = value End Set End Property End Class
Public Property Habitacion_valor() As Clase_Tipo_Habitacion Get Return Habitacion End Get Set(ByVal value As Clase_Tipo_Habitacion) Habitacion = value End Set End Property
Public Property Num_disponibles_valor() As Int16 Get Return Num_disponibles End Get Set(ByVal value As Int16) Num_disponibles = value End Set End Property Public Sub New(ByVal THabitacion As Clase_Tipo_Habitacion, ByVal Disponibles As Integer) Habitacion = THabitacion Num_disponibles = Disponibles
.25
End Sub End Class Public Class Clase_Reserva Private idreserva As Int64 Private fechainicio As DateTime Private fechafin As DateTime Private precio As Single Private ocupacion As Integer Private cliente_id As Int64 Private habitacion_id As Int64 Private hotel_id As Int64 Private cantidad As Integer Private nombretomador As String
Public Property idreserva_valor() As Int64 Get Return idreserva End Get Set(ByVal value As Int64) idreserva = value End Set End Property
Public Property fechainicio_valor() As DateTime Get Return fechainicio End Get Set(ByVal value As DateTime)
.26
Public Property fechafin_valor() As DateTime Get Return fechafin End Get Set(ByVal value As DateTime) fechafin = value End Set End Property
Public Property precio_valor() As Single Get Return precio End Get Set(ByVal value As Single) precio = value End Set End Property
Public Property ocupacion_valor() As Integer Get Return ocupacion End Get Set(ByVal value As Integer) ocupacion = value End Set
.30
End Property
End Get Set(ByVal value As Int64) cliente_id = value End Set End Property
End Get Set(ByVal value As Int64) habitacion_id = value End Set End Property Public Property hotel_id_valor() As Int64 Get Return hotel_id
End Get Set(ByVal value As Int64) hotel_id = value End Set End Property
.31
Public Property cantidad_valor() As Int16 Get Return cantidad End Get Set(ByVal value As Int16) cantidad = value End Set End Property
Public Property nombretomador_valor() As String Get Return nombretomador End Get Set(ByVal value As String) nombretomador = value End Set End Property End Class
Public Class Clase_Hotel Private idhotel As Int64 Private nombre As String Private direccion As String Private categoria As Integer Private telefono As String Private descripcion As String
.3.
Public Property idhotel_valor() As Int64 Get Return idhotel End Get Set(ByVal value As Int64) idhotel = value End Set End Property
Public Property nombre_valor() As String Get Return nombre End Get Set(ByVal value As String) nombre = value End Set End Property
Public Property direccion_valor() As String Get Return direccion End Get Set(ByVal value As String) direccion = value End Set End Property
.3/
Get Return categoria End Get Set(ByVal value As Integer) categoria = value End Set End Property
Public Property telefono_valor() As String Get Return telefono End Get Set(ByVal value As String) telefono = value End Set End Property
Public Property descripcion_valor() As String Get Return descripcion End Get Set(ByVal value As String) descripcion = value End Set End Property
.31
End Class
MODU&O$
Imports System.Drawing.Printing Imports System.Data.SqlClient Module Module1 Public Usuario As String Public Password As String Public Registrarse As Boolean Public Objeto_Usuario As Clase_Usuario Public F_entrada As DateTime Public F_salida As DateTime Public Fecha_entrada As DateTime Public Fecha_salida As DateTime
.32
Public hotel_consulta1 As String = "" Public hotel2 As String = "" Public V_Disponibilidad() As Disponibilidad = {} ' Vector que almacena objetos Disponibilidad Public Descarga_reserva As Boolean = True ' Variable Descarga_reserva = true indica que el formulario Form_Reserva no esta cargado Public prtSettings As PrinterSettings Public Objeto_Reserva As Clase_Reserva = New Clase_Reserva Public Ver_reserva As Integer = 0 Public Hotel As Clase_Hotel = New Clase_Hotel Public Objeto_Habitacion As Clase_Tipo_Habitacion = New Clase_Tipo_Habitacion Public hotel1 As String = "" Public idhotel1 As Int64 Public list_reservas As Boolean = False Public editable As Boolean = False Public Conexion As SqlConnection = New SqlConnection ' Creo el objeto Conexion Public Consulta_SQL As String Public Comando As System.Data.SqlClient.SqlCommand
.33
End If
With prtDialog .AllowPrintToFile = True .AllowSelection = True .AllowSomePages = True .PrintToFile = True .ShowHelp = True .ShowNetwork = True
.PrinterSettings = prtSettings
End With
End Module
.34
2.F !rue7as
3as prue'as se reali0aron al finali0ar la codificaci$n de cada funcionalidad (alta! 'aja! creaci$n de una reser2a! modificaci$n de una reser2a etc(()( Consist a en la compro'aci$n de la correcta implementaci$n de la interfa0 gr*fica! la inserci$n de informaci$n a tra2Fs de dic)a interfa0 gr*fica en la 6ase de datos (actuali0aci$n! eliminaci$n! creaci$n de registros) " posterior compro'aci$n de las ta'las correspondientes " por ,ltimo la refactori0aci$n del c$digo para optimi0arlo( En todo momento )ac a uso del depurador (de''uger) de 5isual 4tudio! que es una utilidad esencial para detectar errores de ejecuci$n(
2.- I stalaci+
3a instalaci$n de la aplicaci$n 1eser2as de )otel 1(0 se reali0a de forma automati0ada utili0ando para ello el programa 4etup >actor" [ (2ersi$n de e2aluaci$n)( Pasos para crear el fic)ero setup de instalaci$n automati0ada (instalador):
.35
1( Crear 7ue2o pro"ecto con el asistente de pro"ectos: >ile BK 7ew Pro"ect " a continuaci$n seleccionar 4)ow pro"ect wi0ard
.36
&( Pantalla 2 del asistente de pro"ectos: 4elecci$n de plataforma &2 'its o 6- 'its(
.40
/( Pantalla - del asistente de pro"ectos: Configuraci$n del instalador( 4eleccionar Gi0ard (asistente)
.41
9( Pantalla H del asistente de pro"ectos: 4elecci$n de dependencias( 4eleccionamos (7E8 &(/ 4P1
.4.
[( Pantalla 9 del asistente de pro"ectos: Caracter sticas opcionales( 4eleccionamos todas la caracter sticas " en sistemas operati2os soportados seleccionamos +n" C4Q( Pulsar >inali0ar
.4/
11( +#adimos arc)i2os que necesitamos para ejecutar correctamente la aplicaci$n 1eser2as de )otel 1(0 " que tienen que ser identificados " configurados por el programa 4etup >actor" (Primer files)( 4on los siguientes: 5isual 6asic 200/ Power Pac?s & (utilidad de impresi$n) 1BDACBDC8E3(ico (icono de la aplicaci$n)
.41
') +#adimos el arc)i2o 5isual6asicPowerPac?s&4etup(e<eQ( Pulsamos el 'ot$n +dd " a continuaci$n 'uscamos el arc)i2o " seleccionamos las opciones :elete w)en setup e<itsQ " @sed '" uninstallQ( En 6uild configurations seleccionamos +ll 6uild ConfigurationsQ " :efaultQ
.42
c) +#adimos el arc)i2o 1BDACBDC8E3(icoQ (Pulsamos el 'ot$n +dd " a continuaci$n 'uscamos el arc)i2o( En 6uild configurations seleccionamos +ll 6uild ConfigurationsQ " :efaultQ(
.43
.44
12( Configuramos el instalador de 1eser2as de Dotel 1(0 para que ejecute el instalador de la utilidad 5isual 6asic 200/ Power Pac?s & (5isual6asicPowerPac?s&4etup(e<e) antes de proseguir con la instalaci$n de 1eser2as de Dotel 1(0( Para ello seleccionamos en %CTION$ la pesta#a O $tartup
.45
+#adimos acci$n pulsando el 'ot$n +dd +ctionQ( 4e nos a'rir* una 2entana de asistente de nue2a acci$n(
.46
+sistente de 7ue2a +cci$n pantalla 1: 4elecci$n de acci$n En 4tep 1 I C)oose a categor" seleccionamos >ileQ En 4tep 2 I C)oose an action seleccionamos >ile(1unQ
.50
.51
4eleccionamos >ilename! pulsamos en el recuadro de puntos suspensi2os " se nos a're una 2entana de inserci$n de arc)i2o referenciado(
.5.
.5/
El resto de las opciones de configuraci$n de la acci$n se quedan como est*n e<ceptuando la opci$n Gaitfor1eturn que es true (esperamos a que finalice el ejecuta'le 5isual6asicPowerPac?s&4etup(e<e para seguir con la instalaci$n de 1eser2as de Dotel 1(0)(
.51
1esumiendo! )emos a#adido una acci$n que es ejecutar una aplicaci$n al inicio del instalador de 1eser2as de Dotel 1(0 (Cn 4tartup) que es 5isual6asicPowerPac?s&4etup(e<e " el instalador no continuar* )asta que no finalice dic)a aplicaci$n(
.52
1&( Configuramos la opci$n de :esinstalaci$n( Para ello 2amos a la opci$n @nistall( En la pesta#a 4ettings )a'ilitamos la opci$n Create uninstall (dejamos todas las opciones como est*n por defecto)(
.53
En la pesta#a Control Panel )a'ilitamos la opci$n 3ist uninstall in +dd or 1emo2e Programs (Control Panel)Q (dejamos todas las opciones como est*n por defecto)(
.54
En la pesta#a 4)ortcut )a'ilitamos la opci$n Create uninstall s)ortcut in 4tart men, K +pp >olderQ (dejamos todas las opciones como est*n por defecto)(
.55
En la pesta#a 3ogs )a'ilitamos la opci$n Create log fileQ (dejamos todas las opciones como est*n por defecto)(
.56
1&( El ,ltimo paso es pu'licar el pro"ecto (generar el instalador con sus dependencias " arc)i2os necesarios)( Para ello seleccionamos Pu'lis) 6uild o pulsamos el 'ot$n de la 'arra de )erramientas( 4e nos a'rir* una 2entana de asistente de pu'licaci$n: 1( 4eleccionaremos medio de distri'uci$n (Ge' single file)(
.60
.61
-( @na 2e0 finali0ado podremos a'rir la carpeta de destino del arc)i2o instalador(
.6.
2.@ 'i7lio3raf=a
Apuntes de !n"enier+a del @o$tCare de @iste%as *i0roDApunte nE 10 Bases de Batos Relacionales.FPV. (atilde el%a 'i%#ne) *i0ro Bases de Batos Relacionales. Pearson Prentice Hall .00/.(atilde elda 'i%#ne) *i0ro !n"enier+a del @o$tCare. Fn en$o=ue pr&ctico. (c'raC Hill .00. 2E Edicin. Ro"er @. Press%an *i0ro Bise?o de Bases de Batos Relacionales. RaD%a 1666.Adoracin de (i"uel *i0ro pro"ra%acin en Visual Basic .NET. 'rupo E!B,@.*uis (i"uel Blanco Biversos %anuales de @A* @erver y @A* de autores desconocidos. (@BN *i0rary .005: Bocu%entacin de Visual @tudio .NET
.6/