1.1 Introduccin...3 1.2 Objetivos 1.21 Objetivo general...4 1.22 Objetivo especifico...5 CAPITULO 2: DESARROLLO 2.1Desarrollo terico 2.11Interfaz... 2.12 Dise!o de clases..1" 2.13 #elaciones11 2.2Desarrollo practico 2.21 $digo de la aplicacin %ic&et 'us (ervidor...15 2.22 Cdigo Fuente de la aplicacin Ticket Bus Estacin de trabajo.....................1) 2.23$digo *uente de la aplicacin %ic&et 'us $liente...22 2.24 Interfaz final..25 CAPITULO 3: Anexos $onclusiones.2 'ibliograf+a...2, **** CAPITULO 1 **** Introduccin -l siste.a /ue se desarrollara surgi co.o un pro0ecto a corto plazo para la .ateria de 1rogra.acin $oncurrente 0 tiene co.o finalidad la creacin de un siste.a en el lenguaje de progra.acin 2343 /ue .aneje una %er.inal de autobuses. -ste siste.a pretende /ue cual/uier usuario pueda .anejarlo por lo /ue tiene /ue ser sencillo5 0 gozar de una buena interfase. -n el apartado de objetivos se 6ar7 .encin de los logros /ue se pretende conseguir con la realizacin de dic6o siste.a. Objetivo general (e persigue pri.ordial.ente el fin de realizar un soft8are de 9%er.inal de autobuses: /ue sea .anejable para cual/uier usuario5 sin i.portar edad5 se;o o status social 0 /ue tenga el co.etido de per.itir /ue el usuario consulte de entre una base de datos un destino deseado5 en esa consulta debe aparecer el precio del boleto 0 el siste.a debe de ser capaz de venderlo5 ade.7s de per.itir /ue el usuario escoja un asiento. Objetivos espec+ficos <uestro siste.a tiene co.o objetivos espec+ficos los siguientes= -l siste.a debe .anejar 1" destinos distintos5 especificados por un color. -l siste.a debe .anejar 4 salas de espera 0 .andar a los usuarios a ella antes de abordar el ca.in de su destino. >os usuarios /ue aborden un ca.in desaparecer7n de la sala de espera 0 sus lugares en ella ser7n reasignados a nuevos usuarios. ?n usuario ira a la sala de espera /ue seg@n se indi/ue en su destino co.o sur5 norte5 este u oeste. -l siste.a debe gozar de una interfase sencilla 0 practica para evitar /ue alg@n usuario se desespere por su funciona.iento. -l siste.a debe ser capaz de per.itir la venta de boletos a usuarios 0 evitar /ue dos usuarios /uieran acceder a la .is.a infor.acin a la vez para evitar un traslape de lugares en el autob@s o una posible sobrecarga de boletos. **** CAPITULO 2 **** 1ri.era Interfaz propuesta -n la figura nu.ero 1 se .uestra la interfaz principal del siste.a /ue consta de infor.acin sobre la disponibilidad de cupo en las salas /ue se dividieron en 45 una para los destinos del sur A%abasco 0 Oa;acaB5 otra para los destinos del norte AConterre05 Duadalajara 0 %ijuanaB5 otra para los destinos del este A4eracruz 0 %la;calaB 0 final.ente una para los destinos del oeste ADuerrero 0 $oli.aB. $ada destino fue .arcado con un color de la .anera siguiente= 3s+5 se ubicaran los lugares en la sala de for.a aleatoria 0 seg@n el color se sabr7 el destino al /ue pertenece. 1osterior.ente e;isten dos opciones5 la de consulta 0 la de $o.prar boleto5 si se da clic en consulta aparece del lado derec6o una ventana de infor.acin en donde el usuario elegir7 de la lista el destino a elegir5 a continuacin aparecer7 infor.acin co.o las 6oras de salida de los ca.iones 0 el precio del boleto5 junto con una pe/ue!a i.agen del destino. >a figura 1 se .uestra a continuacin= 36ora5 si el usuario se decide 0 /uiere co.prar su boleto usara la opcin de 9co.prar boleto: /ue despliega una nueva ventana /ue se .uestra en la figura 2. -n esta nueva ventana el usuario elegir7 el destino al /ue desea ir 0 se .ostrara el precio del boleto5 junto con los lugares disponibles en el autob@s. (i el usuario se decide podr7 ver /ue lugares de los /ue est7n disponibles5 para ello se .aneja una pe/ue!a i.agen /ue si.ula los asientos del autob@s 0 /ue utiliza dos s+.bolos para indicar si el asiento esta disponible u ocupado5 estos signos son= (i el asiento escogido esta .arcado de verde no podr7 usarlo5 pero si esta .arcado de rojo si podr7 usarlo. (i ca.bia de opinin o tuvo alg@n error 0 no /uiere viajar si.ple.ente da la opcin 9cancelar:. >a figura nu.ero 2 es la siguiente= Relac!n "s"a#o $ %ole&o' Relac!n "s"a#o $ clen&e' Relac!n "s"a#o $a"&o%(s' Relacones' Usuarios = Cliente 1 Cliente =1 Boleto = 1 Autobs 1 Boleto = 1 Asiento = 1 Autobs Cdigo Fuente de la aplicacin Ticket Bus Servidor import javaa!t"# import javanet"# import javas$l"# import javaio"# import javaa!tevent"# import javautil%ector# public class tb&erver e'tends Frame( &erver&ocket s# ))el socket de la cone'ion int clientes# )) cantidad de clientes concectados int lugares*+# ))lugares reservados Te'tArea entrada# ))area de escritura de mensajes Connection cntn# )),anejador para -.BC /cone'ion con acces0 &tatement stmt# ))1ara maejar las consultas 2esult&et rslt# ))tabla de resultados tb&erver/0( ))"""""""""""".EC3A2AC4-5E& 1A2A 3A BA&E .E .AT-& """"""""""""""" tr6( Class7or5ame/8sunjdbcodbc9dbc-dbc.river80# ))para ocupar los -.BC de la ma$uina cntn = .river,anagergetConnection/8jdbc:odbc:Base.atos80# ))para accesar a la base de datos stmt = cntncreate&tatement/0# ))para crear una inter7a; con la B. < catc= /E'ception e0 (<# ))"""""""""""".EC3A2AC4-5E& 1A2A E3 F2A,E &E2%4.-2 """""""""""""" lugares=ne! int*>+# ))un arreglo de > lugares setTitle/8&ervidor de TicketBus80# ))titulo de la ventana setBackground/Colorblue0# ))color del 7ondo /no se ve0 set&i;e/>>?@A>?0# ))tamaBo del 7rame entrada=ne! Te'tArea/C?@D?0# ))area de te'to entradasetEditable/7alse0# ))no se puede modi7icar add/entrada0# addEindo!3istener/ne! Cerrar/00# ))para cuando se cierra la ventana set%isible/true0# clientes=?# < class Cerrar e'tends Eindo!Adapter( public void !indo!Closing/Eindo!Event e0( tr6(stmtclose/0# ))cierra el statement cntnclose/0#< ))cierra la cone'ion con -.BC catc= /E'ception e'0 (<# dispose/0# &6steme'it/?0# < < public void aBadir/&tring te'to0( entradaappend/te'to0# < void lan;ar&ervidor/0( &tring cadena# tr6( s=ne! &erver&ocket/>???@>?0# ))crea el socket servidor en puerto >???@ con un ma'imo de >? clientes !=ile/true0( ne! 5uevoCliente/saccept/0@t=is@clientesFF0start/0# ))acepta las peticiones de cone'ion < < catc=/4-E'ception e0 (<# < void reservar/&tring destino@&tring =ora@&tring nombre@int cantidadA0( ))para cuando deseo reservar un lugar &tring inst=84nsert into Autobus values /G8FnombreF8G@G8FdestinoF8G@G8F=oraF8G@G8FcantidadAF8G08# ))instruccion &H3 para aBadir a la B. los datos $ue le mando tr6( stmte'ecuteUpdate/inst0# ))ejecuto la inserccion en la B. aBadir/8&e =an reservado 8FcantidadAF8 lugares masIn80# ))escribe un mensaje en el servidor < catc=/E'ception e0 (<# < boolean consultar/&tring destino@&tring =ora@int cantidadA0( ))para saber si =a6 o no lugares disponibles int suma=?# tr6( aBadir/82eali;ando ConsultaIn80# rslt = stmte'ecuteHuer6/8&E3ECT " F2-, Autobus !=ere 2uta like G8FdestinoF8G and Jora like G8F=oraF8G80# ))instruccion &H3 para consultar en B. los registros para un autobus determinado aBadir/8consulta terminada@ =a6 a la 7ec=a: 80# !=ile /rsltne't/00( ))mientras =a6a mas registros de respuesta int temp=rsltget4nt/8CantidadA280# ))obtiene la cantidad de asientos reservados para cada uno suma=sumaFtemp# ))6 los suma < ))aBadir/4ntegerto&tring/suma0F8 lugares apartadosIn80# i7 //sumaFcantidadA0KD>0( ))si aun =a6 lugares disponibles return true# ))regresa verdadero < else return 7alse# )) o 7also de lo contrario < catc= /E'ception e0 (aBadir/8E22-2L C-5&U3TA 45%A34.ALIn80#<# return 7alse# < &tring buscar/&tring nombre0( ))para saber si alguien 6a =a reservado %ector au'=ne! %ector/0# tr6( rslt = stmte'ecuteHuer6/8&E3ECT " F2-, Autobus EJE2E 5ombre 34ME G8FnombreF8G80# ))consulta &H3 en base al nombre !=ile/rsltne't/00( ))mientras =a6a registros $ue coincidan &tring a6uda=rsltget&tring/82uta80F8 8Frsltget&tring/8Jora80F8 8Frsltget&tring/8CantidadA280F8N8# ))obtiene los datos de cada regitro 6 los guarda en una cadena aBadir/a6udaF8In80# au'addElement/a6uda0# ))la cadena la aBade a un vector < <catc= /E'ception e0 (<# return au'to&tring/0# ))regrea el vector en 7orma de cadena < public static void main/&tring args*+0( tb&erver &ervidor=ne! tb&erver/0# &ervidorlan;ar&ervidor/0# < < class 5uevoCliente e'tends T=read( &ocket cone'ion# tb&erver serv# int cliente# .ata4nput&tream entrada# ))7lujo de entrada de datos .ata-utput salida# ))7lujo de salida de datos 5uevoCliente/&ocket c@tb&erver s@int numero0( cone'ion=c# serv=s# cliente=numero# tr6( entrada=ne! .ata4nput&tream/cone'ionget4nput&tream/00# salida=ne! .ata-utput&tream/cone'ionget-utput&tream/00# < catc= /4-E'ception e0 (<# < public void run/0( boolean &alir=7alse# !=ile/L&alir0( ))mientras no de la instruccion salir en la terminal tr6( &tring destino=entradareadUTF/0# ))lee una cadena en teoria@ la ruta de viaje i7 /destinoe$uals/8&alir800 ))si el te'to es el de salir@ termina la ejecucion &alir=true# else( i7 /destinoe$uals/8Terminal80OOdestinoe$uals/8&tation800 ))si dice Terminal o &tation@ lo conecta 6 se prepara para lo $ue sigue servaBadir/8Conectando 8FdestinoF8In80# else( i7 /destinoc=arAt/?0==GPG0 ))si el te'to comien;a con P /es de la tele7onista0 ( destino=destinosubstring/10# ))borra del destino el caracter P &tring =ora=entradareadUTF/0# ))lee la =ora &tring nombre=entradareadUTF/0# ))lee el nombre del registro int casientos=4ntegerparse4nt/entradareadUTF/00# ))lee la cantidad de asientos $ue desean reservar servaBadir/84ntentando reservar un pasaje 8FdestinoF8 8F=oraF8In80# i7/servconsultar/destino@=ora@casientos00( ))si aun =a6 asientos salida!riteUTF/82eservacion completada 80# ))dice $ue 6a reservo servreservar/destino@=ora@nombre@casientos0# ))reserva < else salida!riteUTF/85o =a6 3ugares .isponibles80# ))si no@ dice $ue 6a no =a6 lugares < else( ))si el te'to no comien;a con P &tring datos=servbuscar/destino0# ))busca los datos de los $ue reservaron a ese nombre salida!riteUTF/datos0# ))los envia a la station < < < < catc= /4-E'ception e0 (<# < servaBadir/83a terminal =a sido desconectadaIn80# tr6( cone'ionclose/0# ))cierra la cone'ion < catc= /4-E'ception e0 (<# < < Cdigo Fuente de la aplicacin Ticket Bus Estacin de trabajo import javaa!t"# import javanet"# import javaio"# import javautil&tringTokeni;er# import javaa!tevent"# class tb&tation e'tends Frame implements Action3istener( &ocket cone'ion# .ata-utput&tream salida# .ata4nput&tream entrada# 1anel panel# Button consulta@conectar@desconectar# Te'tArea estado# Te'tField nombre@casientos@opcion%iaje@opcionJora# tb&tation/0( super/8TicketBus Estacin Central80# ))titulo de la ventana )) setBackground/Color34QJTRQ2AS0# ))colores setBackground/Colorblack0# ))colores setForeground/Colorred0# set&i;e/A??@DT?0# panel=ne! 1anel/0# nombre=ne! Te'tField/C>0# estado=ne! Te'tArea/1>@A>0# nombresetEnabled/true0# estadosetEnabled/7alse0# consulta=ne! Button/8Consultar80# consultasetEnabled/7alse0# conectar=ne! Button/8Conectar80# desconectar=ne! Button/8.esconectar80# desconectarsetEnabled/7alse0# paneladd/ne! 3abel/8 C-5&U3TA .E 2E&E2%AC4-5 800# paneladd/ne! 3abel/85-,B2E .E 2EQ4&T-: 800# paneladd/nombre0# paneladd/consulta0# paneladd/estado0# paneladd/ne! 3abel/8-1C4-5E& .E C-5EU4-5800# paneladd/conectar0# paneladd/desconectar0# consultaaddAction3istener/t=is0# ))escuc=a para el boton consulta conectaraddAction3istener/t=is0# ))escuc=a para el boton conectar desconectaraddAction3istener/t=is0# )) 8 8 8 8 desconectar addEindo!3istener/ne! Cerrar/00# add/panel0# set%isible/true0# < public void action1er7ormed/ActionEvent e0( &tring com=egetActionCommand/0# i7/come$uals/8Consultar800( ))si el boton presionado es el de Consultar tr6 ( salida!riteUTF/nombregetTe't/00# ))escribe en el servidor el nombre &tring datos=entradareadUTF/0# ))lee los registros $ue le manda el servidor /un vector en 7orma de cadena0 &tringTokeni;er cad=ne! &tringTokeni;er/datos@8*+@N80# ))lo separa en base a los caracteres del vector 6 un caracter prede7inido !=ile /cad=as,oreTokens/00( ))mientras =a6a tokens estadoappend/cadne'tToken/0F8In80# ))los escribe < nombresetTe't/880# ))borra el nombre consultado < catc=/4-E'ception e'cepcion0 (<# < else i7 /come$uals/8Conectar800( ))si el boton es el de conectar tr6( cone'ion=ne! &ocket/4netAddressget3ocalJost/0@>???0# ))obtiene el servidor salida=ne! .ata-utput&tream/cone'ionget-utput&tream/00# ))crea las cone'iones entrada=ne! .ata4nput&tream/cone'ionget4nput&tream/00# salida!riteUTF/8&tation80# ))escribe en el servidor &tation para identi7icarlo conectarsetEnabled/7alse0# ))cambia las propiedades de los botones consultasetEnabled/true0# desconectarsetEnabled/true0# < catc= /4-E'ception e'cepcion0 (<# < else tr6( salida!riteUTF/8&alir80# ))si no@ /es el de salir0 cone'ionclose/0# ))cierra la cone'ion conectarsetEnabled/true0# ))cambia las propiedades de los botones desconectarsetEnabled/7alse0# conectarsetEnabled/7alse0# < catc=/4-E'ception e'cepcion0 (<# < class Cerrar e'tends Eindo!Adapter( public void !indo!Closing/Eindo!Event e0( dispose/0# &6steme'it/?0# < < public static void main/&tring args*+0( ne! tb&tation/0# < < Cdigo Fuente de la aplicacin Ticket Bus Cliente import javaa!t"# import javanet"# import javaio"# import javaa!tevent"# class tbClient e'tends Frame implements Action3istener( &ocket cone'ion# C=oice opcion%iaje@ opcionJora# .ata-utput&tream salida# ))bu77er de salida .ata4nput&tream entrada# ))bu77er de entrada 1anel panel# Button reservar@conectar@desconectar# Te'tField estado@nombre@ casientos# tbClient/0( ))creacion de la ventana /para mas datos@ c=acar las otras clases0 super/8TicketBus Telep=onical Center80# setBackground/ne! Color /C>>@1VC@1CA00# setForeground/Colorblack0# set&i;e/CC?@A>?0# panel=ne! 1anel/0# nombre=ne! Te'tField/C>0# estado=ne! Te'tField/C>0# casientos=ne! Te'tField/1?0# nombresetEnabled/true0# estadosetEnabled/7alse0# opcion%iaje=ne! C=oice/0# opcionJora=ne! C=oice/0# opcion%iajeadd/81uebla WP %eracru;80# opcion%iajeadd/81uebla WP ,e'ico80# opcion%iajeadd/81uebla WP Tla'cala80# opcion%iajeadd/81uebla WP -a'aca80# opcion%iajeadd/81uebla WP Jidalgo80# opcion%iajesetEnabled/7alse0# opcionJoraadd/8X:?? =rs80# opcionJoraadd/8Y:?? =rs80# opcionJoraadd/811:?? =rs80# opcionJoraadd/81A:?? =rs80# opcionJoraadd/81>:?? =rs80# opcionJoraadd/81X:?? =rs80# opcionJoraadd/81Y:?? =rs80# opcionJorasetEnabled/7alse0# reservar=ne! Button/82eservar80# reservarsetEnabled/7alse0# conectar=ne! Button/8Conectar80# desconectar=ne! Button/8.esconectar80# desconectarsetEnabled/7alse0# paneladd/ne! 3abel/82UTA .E %4A9E800# paneladd/opcion%iaje0# paneladd/opcionJora0# paneladd/ne! 3abel/85-,B2E .E 2EQ4&T2-: 800# paneladd/nombre0# paneladd/ne! 3abel/8CA5T4.A. .E A&4E5T-&: 800# paneladd/casientos0# paneladd/reservar0# paneladd/ne! 3abel/8-1C4-5E& .E C-5EU4-5800# paneladd/conectar0# paneladd/desconectar0# paneladd/estado0# reservaraddAction3istener/t=is0# conectaraddAction3istener/t=is0# desconectaraddAction3istener/t=is0# addEindo!3istener/ne! Cerrar/00# add/panel0# set%isible/true0# < public void action1er7ormed/ActionEvent e0( &tring com=egetActionCommand/0# i7/come$uals/82eservar800( ))si se presiona el boton reservar tr6 ( salida!riteUTF/8P8Fopcion%iajeget4tem/opcion%iajeget&elected4nde'/000# ))escribe en el servidor la ruta del viaje con un P al principio salida!riteUTF/opcionJoraget4tem/opcionJoraget&elected4nde'/000# ))escribe la =ora salida!riteUTF/nombregetTe't/00# ))escribe al servidor el nombre salida!riteUTF/casientosgetTe't/00# ))escribe la antidad de asientos &tring lugares=entradareadUTF/0# ))lee la descricion de si =a6 o no lugares disponibles estadosetEnabled/true0# estadosetTe't/lugares0# estadosetEnabled/7alse0# < catc=/4-E'ception e'cepcion0 (<# < else i7 /come$uals/8Conectar800( ))si presionan el boton Conectar tr6( cone'ion=ne! &ocket/4netAddressget3ocalJost/0@>???0# ))crea el socket 6 busca la cone'ion con el servidor local salida=ne! .ata-utput&tream/cone'ionget-utput&tream/00# ))abre los 7lujos de entrada)salida entrada=ne! .ata4nput&tream/cone'ionget4nput&tream/00# salida!riteUTF/8Terminal80# ))escribe al servidor Terminal para identi7icarse conectarsetEnabled/7alse0#))cambia las propiedades de los botones desconectarsetEnabled/true0# reservarsetEnabled/true0# opcion%iajesetEnabled/true0# opcionJorasetEnabled/true0# < catc= /4-E'ception e'cepcion0 (<# < else tr6( salida!riteUTF/8&alir80# ))para salir@ cerrar la cone'ion@ etc cone'ionclose/0# conectarsetEnabled/true0# desconectarsetEnabled/7alse0# reservarsetEnabled/7alse0# opcion%iajesetEnabled/7alse0# opcionJorasetEnabled/7alse0# < catc=/4-E'ception e'cepcion0 (<# < class Cerrar e'tends Eindo!Adapter( public void !indo!Closing/Eindo!Event e0( dispose/0# &6steme'it/?0# < < public static void main/&tring args*+0( ne! tbClient/0# < < Interfaz final 4nter7aces de las aplicaciones antes mencionadas E 4nter7a; cliente E 4nter7a; Estacin E 4nter7a; &ervidor **** CAPITULO 3 **** Anexos Concl"sones $on lo abordado en el presente trabajo se puede decir /ue el analizar el proble.a antes de llevarlo a la practica es su.a.ente i.portancia5 pues gracias a ello se pudo conte.plar las posibles soluciones a los proble.as /ue podr+a.os tener .as adelante 0 a6orrarnos .uc6os pasos innecesarios a la 6ora de la codificacin5 al principio fue .as tardado pero nos a0udo .uc6o. 3prendi.os el uso de los t6reads 0 reafir.a.os conoci.ientos ad/uiridos tanto en el curso co.o en otros cursos. Desarrollar un siste.a de %er.inal de autobuses no fue una tarea sencilla 0 confor.e se iba avanzando surg+an .as preguntas 0 /uer+a.os buscar .aneras de solucionarlas5 pero se aco.plejaba el siste.a. -n fin5 pode.os concluir /ue se lograron los objetivos planeados en un inicio 0 nuestro siste.a cubri las e;pectativas del grupo. B%lo)#a*+a 2ava 1ara -studiantes 'ell5 Doug5 1)44F CG;ico5 D.*. = 1earson -ducation5 c2""3. 1rogra.acin Cultit6read -n 2ava >e8is5 'il. Cadrid = 1earson -ducation 5 2""3. -structuras De Datos H 3lgorit.os -n 2avaI' Cic6ael Doodric65 #oberto %a.assia. Doodric65 Cic6ael %. Ce;ico = $-$(35 c2""2. %eac6 Hourself 2ava 1.1 1rogra..ing In 24 Jours. $aden6ead5 #ogers. CG;ico= 1renticeFJall Jispanoa.ericana5 1)),.