Download Universidad Tecnológica de Querétaro
Document related concepts
no text concepts found
Transcript
Universidad Tecnológica de Querétaro Firmado digitalmente por Universidad Tecnológica de Querétaro Nombre de reconocimiento (DN): cn=Universidad Tecnológica de Querétaro, o=Universidad Tecnológica de Querétaro, ou, [email protected], c=MX Fecha: 2012.05.16 14:34:36 -05'00' UNIVERSIDAD TECNOLÓGICA DE QUERÉTARO PROYECTO DESARROLLO, IMPLEMENTACIÓN Y OPTIMIZACIÓN DE UN PUNTO DE VENTA EMPRESA JBJ BAR MEMORIA QUE COMO PARTE DE LOS REQUISITOS PARA OBTENER EL TÍTULO DE INGENIERO EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN PRESENTA Manuel David Martínez Sánchez Asesor de la UTEQ M.M.C. Raúl García Pérez Asesor de la Empresa LAE. Eduardo Cruz Jaime Santiago de Querétaro, Qro. Mayo de 2012 0 RESUMEN El creciente auge de las tecnologías de la Información; “La llamada era digital”, está alcanzando todos los rincones del mundo y se ha convertido el uso de estas tecnologías en un modo de vida indispensable. La industria, el comercio, las labores cotidianas de los seres humanos dependen del uso de medios digitales. Hoy en día el brindar un servicio rápido y de calidad es la preocupación de todos los comercios, en especial para el giro del entretenimiento. La industria turística representa gran parte del motor económico de países, como el nuestro. El poder contar con herramientas tecnológicas que brinden apoyo a este sector es indispensable, es por eso que, Empresas como JBJ Bar, invierten en el desarrollo de dichas herramientas. JBJ Bar es una empresa del giro de entretenimiento que busca estar a la vanguardia y ofrecer servicios de calidad a sus clientes. En el proyecto realizado se buscó optimizar el servicio de atención al cliente ya que se propuso un programa de punto de venta, que será una herramienta indispensable en la gestión del establecimiento y ayudará al control de la operación de cada uno de sus trabajadores. 1 En el proyecto TPV para JBJ Bar se utilizaron herramientas de vanguardia y se echó mano de las mejores prácticas ITIL de estos tiempos como el uso de: lenguajes de programación JAVA, Herramientas para bases de datos con MySql, modelados de programación MVC (modelo vista control), programación orientada a objetos, tecnología Media Flash, modelado de proyectos, prácticas de gestión de proyectos (extractos de PMBook) y desarrollo de programas entre otras. 2 ABSTRAC The increasing rise of Information Technology, "The called digital age" being consumed all over the world and has become, the use of these technologies in an essential way of life. Industry, trade, most daily humans tasks depend on the use of digital media. Today, providing prompt service and quality is the concern of all businesses, especially at the entertainment business. The tourism industry provides much of the economic engine of the country, such as ours. The availability of technological tools that provide support to this sector is necessary, so, that companies like JBJ Bar, invest in developing such tools. JBJ Bar is a entertainment company you are looking to stay ahead and provide quality services to its customers. In the finished project and focused on optimizing the service of care to their clients developed a POS program, which will be an indispensable tool in the establishment and management help to control the operation of each of their workers. In the draft POS for Bar JBJ, used tools were the best ITIL practice these days as the use of: programming languages Java, Tools for MySql databases, programming modeled MVC (Model View Control ), object-oriented programming, Flash Media technology, modeling projects, project management practices (PMBook extracts) and software development among others. 3 Índice Contenido RESUMEN ......................................................................................................................................... 1 ABSTRAC .......................................................................................................................................... 3 I. INTRODUCCIÓN .......................................................................................................................... 8 II. ANTECEDENTES ...................................................................................................................... 10 III. JUSTIFICACIÓN ....................................................................................................................... 10 IV.OBJETIVOS ............................................................................................................................... 11 V. ALCANCES ................................................................................................................................ 12 VI. JUSTIFICACIÓN TEÓRICA .................................................................................................... 13 Software ........................................................................................................................................... 14 Modular ........................................................................................................................................ 15 Monitor ......................................................................................................................................... 15 Impresora de recibos ................................................................................................................. 16 Punto de venta JBJ .................................................................................................................... 17 VIII. RECURSOS MATERIALES Y HUMANOS ........................................................................ 20 Materiales: ................................................................................................................................... 20 Humanos:..................................................................................................................................... 21 IX. DESARROLLO DEL PROYECTO ......................................................................................... 22 ANALISIS ..................................................................................................................................... 23 Requerimientos del cliente .................................................................................................... 23 Funcionalidad lógica .............................................................................................................. 24 Funcionalidad lógica del sistema ......................................................................................... 24 Requerimientos del software ................................................................................................ 25 DISEÑO ....................................................................................................................................... 26 Diagrama entidad relación .................................................................................................... 26 Modelo Entidad-Relación ...................................................................................................... 26 UML (Lenguaje Unificado de Modelado). ........................................................................... 28 Diagrama de clases................................................................................................................ 28 Diagrama casos de uso. ........................................................................................................ 29 4 Diagrama de secuencia ......................................................................................................... 30 Arquitectura ............................................................................................................................. 31 Arquitectura cliente – servidor .............................................................................................. 31 El Esquema de funcionamiento de un Sistema Cliente/Servidor sería: ........................ 32 Interfaces ..................................................................................................................................... 33 Interfaz Principal. Ver imagen IX.7. ........................................................................................ 33 Interfaz de “Login”. Ver imagen IX.8. ...................................................................................... 33 Interfaz de Menú de opciones. Ver imagen IX.9. .................................................................. 34 Interfaz de Selección de mesa y personas. Ver imagen IX.10. ......................................... 34 Interfaz de Usuarios. Ver imagen IX.11. ................................................................................. 35 Productos. Ver imagen IX.12. ................................................................................................... 36 Proveedores. Ver imagen IX.13. .............................................................................................. 37 Codificación de interfaces ............................................................................................................. 38 Código de creación interfaz Principal ...................................................................................... 38 Código de creación interfaz Login ........................................................................................... 39 Código de creación interfaz menú ........................................................................................... 40 Código de creación interfaz Usuarios ..................................................................................... 41 Código de creación interfaz productos.................................................................................... 43 Código de creación interfaz Proveedores .............................................................................. 45 Código de creación interfaz Mesa ........................................................................................... 46 Codificación de funciones ............................................................................................................. 47 Conexión a base de datos ........................................................................................................ 47 Codificación de botones entrar y salir del interfaz Principal ................................................ 48 Boton Acceder Login .................................................................................................................. 48 Método Validar usuario .............................................................................................................. 49 Botón guardar usuario. .............................................................................................................. 50 Botón Editar (save) usuario ...................................................................................................... 51 Botón Borrar usuario .................................................................................................................. 52 Clase Usuario Bean ................................................................................................................... 53 Interface visual (métodos Insert, update, delete) .................................................................. 54 Clase Usuario Dao (insert, update, delete) ............................................................................ 54 Insert ......................................................................................................................................... 54 5 Update ...................................................................................................................................... 56 Clase Controlador usuario (CtrUsuer) ................................................................................. 57 Botón Examinar File (imagen usuario) ................................................................................ 57 Botón Antes ................................................................................................................................. 58 Botón Siguiente........................................................................................................................... 59 Botón Actualizar llenado de tabla ............................................................................................ 60 Creación de la base de datos ................................................................................................... 61 X. Resultados obtenidos ............................................................................................................... 62 XI. Análisis de riesgos ................................................................................................................... 67 XII. Conclusiones ............................................................................................................................ 68 XIII. Recomendaciones ................................................................................................................. 69 XIV. Referencias bibliográficas .................................................................................................... 71 6 Índice de imágenes Imagen VII.1 Cronograma de Actividades ......................................................................................... 18 Imagen VII.2 Diagrama de Gantt ....................................................................................................... 19 Imagen IX.1 Diagrama Entidad-Relación ........................................................................................... 27 Imagen IX.2 Diagrama de clases ........................................................................................................ 28 Imagen IX.3 Diagrama de casos de uso ............................................................................................. 29 Imagen IX.4 Diagrama de secuencia de log....................................................................................... 30 Imagen IX.5 Diagrama de secuencia ................................................................................................. 31 Imagen IX.6 Esquema de funcionamiento ........................................................................................ 32 Imagen IX.7 Ventana principal .......................................................................................................... 33 Imagen IX.8 Ventana de loguin ......................................................................................................... 33 Imagen IX.9 Ventana de menú principal ........................................................................................... 34 Imagen IX10. Ventana de selección de mes ...................................................................................... 34 Imagen IX.11 Ventana de alta de usuarios ........................................................................................ 35 Imagen IX.12. Ventana de alta de Productos .................................................................................... 36 Imagen IX.12. Ventana de Proveedores ............................................................................................ 37 Imagen X.1 Pantalla de bienvenida ................................................................................................... 62 Imagen X.2 Formulario de Loguin ..................................................................................................... 63 Imagen X.3 Menú de Opciones ......................................................................................................... 64 Imagen X.4 Administración de Usuarios ........................................................................................... 65 Imagen X.5 Administración de Productos ......................................................................................... 66 7 I. INTRODUCCIÓN La implementación de sistemas de Puntos de Ventas (TPV), es una tarea indispensable para que las empresas organicen sus procedimientos de administración. Entre los procesos a considerar en un proyecto como éste se encuentran: corte de caja, registro de ventas, generar un reporte con detalle de forma de pagos, manejo cuantitativo de stock entre otras. Los sistemas TPV son el corazón de un local comercial, cualquiera que sea su rubro. Tradicionalmente los sistemas TPV son muy caros, pero necesarios para ingresar datos y registrar los pagos. Actualmente existen varias alternativas tanto para software comercial o propietario así como para las compañías que se dedican a la investigación, innovación y desarrollo de estos sistemas en la búsqueda de un mejor rendimiento, llegando a establecer un equilibrio entre Software y Hardware. El sistema punto de venta se compone de dos partes, una es el equipo que se requiere (hardware), otra es el programa que maneja el control del negocio (software). Cabe destacar que para automatizar y agilizar los procesos de emisión y captura de información de datos también se encuentran disponibles en el mercado dispositivos como: Lectores de código de barras, impresoras para sistemas TPV, lectores de bandas magnéticas, liquidadoras entre otros. Entre las empresas que 8 se destacan por tener un completo sistema TPV encontramos, Supermercados, Ferreterías, Farmacias, Centros Comerciales, Restaurantes, Bares, Hoteles, Bibliotecas, por la cantidad de transacciones y volumen de información que manejan, haciendo imposible la administración de estos datos de manera manual. JBJ Bar desea optimizar su TPV y migrarla al siglo XXI dando la oportunidad a desarrolladores mexicanos de implementar este proyecto como parte del desarrollo integral en la formación de los alumnos de la Universidad Tecnológica de Querétaro. Por lo que este documento refleja el trabajo realizado durante un lapso de 4 meses de investigación, trabajo y aplicación de diferentes tecnologías que ayudaron a la optimización de los recursos Informáticos de JBJ bar. 9 II. ANTECEDENTES Anteriormente la administración del establecimiento (bar) se basaba en atender a los clientes y generar “comandas” (hojas con la cuenta del cliente) que posteriormente eran ingresadas a un sistema punto de venta muy obsoleto. El cual, ahora, ya es un programa que dificulta la operación continua, pues tiene varios puntos vulnerables que afectan las ventas del establecimiento, la productividad y confiabilidad. Además de ser un sistema visualmente muy poco atractivo. El sistema denominado FrontRest es un sistema enfocado a todo tipo de establecimientos: Restaurantes, Tiendas, Almacenes, etc. Pero no está enfocado específicamente al bar. Este, utiliza la configuración para restaurantes. III. JUSTIFICACIÓN Debido a lo mencionado anteriormente y basándose en que actualmente en el mercado existen Programas de punto de venta muy variados desarrollados por proveedores extranjeros y con licencias muy caras. Se pretende, desarrollar un sistema punto de venta “Nacional” ágil y enfocado a establecimientos de giros de entretenimiento (antros y bares) que sea seguro, de mantenimiento accesible capaz de cumplir con las necesidades del cliente. El sistema será un apoyo para los trabajadores del establecimiento, se podrá llevar a cabo las siguientes tareas: reservaciones, cancelaciones, abrir cuentas, 10 mostrar las bebidas disponibles, las especiales de la casa entre otros. Todo esto en tiempo real. IV.OBJETIVOS Desarrollar e implementar un sistema punto de venta para el establecimiento JBJ, el cual deberá de cumplir con las necesidades del cliente y de la empresa. Este proyecto debe permitir optimizar el corte de caja, registro de ventas, generar un reporte con detalle de forma pagos (Efectivo, Visa, American Exprés, cuentas por cobrar), generar reservaciones y las formas de pago serán el resultado de la venta total por día de operación. El sistema se desarrollará en un lapso de 4 meses. Periodo en el que se cumplirán los siguientes objetivos: 1).- Optimizar un Software Punto de venta enfocado a establecimientos de entretenimiento. 2).- Optimizar los recursos de red del establecimiento. 3).- Mejorar el desempeño de los trabajadores. 4).- Reducir las pérdidas ocasionadas por la vulnerabilidad del sistema actual. 5).- Incrementar la seguridad del sistema. 6).- Mejorar el aspecto visual del software. 7).- Aumentar las funcionalidad del software. 11 V. ALCANCES Que se optimice la operación del lugar mediante el sistema; Que sea seguro, estable y fácil de usar para los usuarios. Además de generar un reporte con detalle legible de operaciones. Que sea un sistema enfocado para todo tipo de establecimientos de entretenimientos y que usen requerimientos mínimos de red. Acercar las Tecnologías de información enfocada a bares y antros para que su vez se brinde una plataforma innovadora para estos lugares. 12 VI. JUSTIFICACIÓN TEÓRICA La Administración de bares y restaurantes se debe en parte al desarrollo de los sistemas de Punto de Venta. TPV es el acrónimo de terminal punto de venta (en inglés "POS terminal" o "Point of sale terminal"). Este término hace referencia al dispositivo y tecnologías que ayudan en las tareas de gestión de un establecimiento comercial de venta al público. Diferentes negocios pueden contar con sistemas informáticos especializados que ayudan en las tareas de gestión del punto de venta mediante una interfaz accesible para los vendedores que se denomina terminal de punto de venta o TPV. Los TPV permiten la creación e impresión del ticket de venta mediante las referencias de productos, realizan diversas operaciones durante todo el proceso de venta, así como cambios en el inventario. También generan diversos reportes que ayudan en la gestión del negocio. Los TPV se componen de una parte hardware (dispositivos físicos) y otra, software (sistema operativo y programa de gestión). El sistema desarrollado se compone de una parte hardware (dispositivos físicos) y otra, software (sistema operativo y programa de gestión). 13 Software El TPV tiene su programa de gestión o software. Que puede estar implementado bajo las modalidades siguientes: A medida Contienen software específico para una única empresa. Suelen ser mucho más caros y las modificaciones o actualizaciones van siempre ligadas a la disponibilidad de la empresa que desarrolla ese software. Comerciales Dentro de este grupo pueden estar predefinidos para tiendas de ropa, hostelería, ferretería, farmacia, videoclubes o TPV de carácter general. Suelen estar diseñados para un establecimiento tipo del sector al que va dirigido y no admite cambios específicos. Suelen ser mucho más económicos. Específicos Algunas empresas fabricantes de TPV desarrollan un software específico para un tipo de negocio en concreto. Este software puede ir junto con un sistema operativo propio del fabricante embebido en la propia memoria del terminal (no tienen discos duros ni trabajan con sistemas operativos como los PC) o bien instalados en el disco duro del terminal, como cualquier otro PC. Este tipo software cuenta con múltiples opciones de configuración en función de las necesidades de un cliente concreto, siempre que trabaje dentro de este sector en concreto. 14 Hardware Los tipos de TPV actuales son: Compacto Se trata de equipos pensados específicamente para trabajar como punto de venta. Estos equipos pueden integrar los periféricos necesarios como impresoras de recibos, pantallas para el cliente, y otros. En todo caso, siempre poseen un conjunto rico de conexiones y puertos para poder utilizar los periféricos más comunes, necesarios en un punto de venta Modular Suelen ser equipos basados en un PC normal con un software instalado sobre un sistema operativo convencional. Todos los componentes necesarios se deben cablear y conectar a la CPU a través de sus diferentes puertos e interfaces. Si bien pueden ejecutar la mayoría de aplicaciones pensadas para punto de venta, resultan más voluminosos, menos fiables, y requieren más mantenimiento. No hay que olvidar que los PC no están pensados para estar en un punto de venta, si no en una oficina o el hogar. No obstante pueden ser una solución mas económica. Monitor Puede ser un monitor normal de PC o uno que incorpore un sistema táctil evita la utilización de ratón y agiliza las labores de gestión de cobro al permitir al usuario manejar más fácilmente los menús. 15 Impresora de recibos Sirve para expedir el recibo o resguardo de compra al cliente. Estas pequeñas impresoras pueden ser matriciales, térmicas y de tinta. Las matriciales son las más lentas y más económicas; utilizan una cinta de tinta. No obstante permiten obtener una copia del resguardo mediante calco ya que la impresión se realiza por impacto. Otros elementos de que dispone una TPV clásica son: Lector de código de barras. Dispositivo que interpreta los símbolos del código de barras (usualmente EAN, UPC, Codabar, Code 39 o GS1-128) que el fabricante imprime en la etiqueta de los productos. El código de barras suele ser una serie de dígitos o caracteres que representan unívocamente un producto. Demás elementos que se pueden encontrar en un sistema TPV: Lector RFID. El más utilizado en la actualidad. Lector de tarjetas con chip de contacto. Cada vez más en desuso. Biometría. Recursos de identificación provenientes del sector de la seguridad. Impresora de etiquetas. Completa el sistema de almacén imprimiendo códigos propios. Impresoras de Etiquetas RFID. Para el grafismo de las tarjetas. Tele comando. Terminales de mano o Handy´s que permiten el registro a distancia. 16 Memoria fiscal. Memoria dedicada al almacenamiento de transacciones para el fisco. Punto de venta JBJ Anteriormente se contaba con una máquina registradora que marcaba lo que pasaba por la caja sin llevar ningún control de cuentas y registro de ventas. A partir de esto se decidió evaluar el uso de equipos de cómputo personales. El precio de las computadoras personales ha bajado tanto que es posible incluirlas en mini supermercados, restaurantes, librerías, boutiques y hasta pequeños establecimientos. Con ello se inicia el concepto de Punto de Venta en donde se pueden tener todas las funciones de un negocio grande en una computadora personal. El punto de venta se compone de tres partes, una es el equipo que se requiere (hardware), otra es el programa que maneja el control del negocio (software) y el tercero es tener un sistema confiable de control basado en la tecnología de lector de huella digital, esto con la finalidad de que cada usuario se registre sin ingresar claves que puedan ser usadas por terceros. A partir de la creación e impresión del ticket de venta mediante las referencias de productos, se realizan diversas operaciones durante todo el proceso de venta, así como cambios en el inventario. También se generan diversos reportes que ayudan en la gestión del negocio. 17 VII.PLAN DE ACTIVIDADES Las horas de trabajo establecidas para el proyecto serán en un horario de 4 horas diarias de lunes a viernes a partir de las 17:00 horas. Iniciando el lunes 16 de enero de 2012 y concluyendo el miércoles 4 de abril de 2012. Ver Cronograma de actividades imagen VII.1. 1Imagen VII.1 Cronograma de Actividades 18 Diagrama de Gantt de actividades del proyecto ver imagen VII.2. 2Imagen VII.2 Diagrama de Gantt 19 VIII. RECURSOS MATERIALES Y HUMANOS Materiales: 2 computadoras con los siguientes requerimientos: Sistema operativo Windows seven o anterior Procesador Pentium IV con al menos 512 MB de memoria RAM, ideal 1 GB de memoria RAM Server Oracle 10g JDK 6u25 (Java Development Kit) IDE Eclipse Enterprise architech (UML) Navegador de internet Impresora de papel térmico Muebles para estación de trabajo 20 Humanos: Analista desarrollador con las siguientes características: Conocimientos de programación Orientada a Objetos Conocimientos del lenguaje Java Diseño de DB Conocimientos de UML Manejo del servidor Oracle 10g Patrón de diseño MVC (Modelo, Vista Controlador) Administrador de redes Conocimiento en diseño de redes Soporte técnico Administración de servidores 21 IX. DESARROLLO DEL PROYECTO A partir de la propuesta generada con anterioridad. El desarrollo de este trabajo involucra una investigación y dedicación especial dirigida a todos los elementos involucrados; en donde su correcta aplicación se verá afectada a partir de continuas modificaciones del modelo original, hasta obtener el resultado esperado y el logro de los objetivos deseados. Siguiendo el esquema de tiempos propuestos se pretende desarrollar el sistema de punto de venta. Investigando, implementando y corrigiendo durante la programación de cada uno de los módulos del sistema; se tendrá la posibilidad de ahorrar tiempo y de realizar mejoras al final de cada módulo terminado. Dentro de marco de crear un programa personalizado para „JBJ BAR‟ se encuentra también el realizar un programa de soporte y mantenimiento del software. El cual se documentará al finalizar la conclusión del módulo correspondiente. 22 ANALISIS Requerimientos del cliente El cliente requiere de un sistema POS que permita la operación en el lugar de diferentes tipos de atención a sus clientes. Optimizar los tiempos de operación tanto para la caja, meseros, gerencia y administración. A su vez que se agilice la operación del lugar mediante un sistema, que sea seguro. Y sobre todo de vista amigable y fácil uso. Además de generar: Registro de usuario Control de Efectivo/Boucher/Visa. Reportes Forma de pago (Efectivo, Tarjetas, Otras divisas. Con desglose de comisiones bancarias). Devoluciones / cortesías Cuentas por cobrar Cortes parciales Cierre total 23 Funcionalidad lógica Revisando los requerimientos del cliente encontramos el siguiente procedimiento lógico implementado por el bar en la atención de un cliente: El gerente en turno asigna a cada mesero una zona de trabajo, cada zona cuenta con un determinado número de mesas, cada mesero se encarga de atender su zona generando comandas (pedazos de papel con los artículos que el cliente solicita), estas, son atendidas por el barman y posteriormente servidas por el mesero. Para cada mesa se abre una cuenta, que puede estar formada por varias comandas y al final es cobrada por el cajero. El cual tiene que ingresarlas manualmente al anterior sistema. Funcionalidad lógica del sistema En base a lo mencionado anteriormente. Se pretende seguir un diagrama de funcionalidad similar al ahora empleado para no complicar la forma de operación del establecimiento. El sistema por default tiene una cuenta “SUPER” (súper usuario Administrador) la cual podrá modificar cosas en todos los módulos del sistema. Mediante el uso de este modo, Se generarán las cuentas a utilizar por el establecimiento. Al encender el sistema cada trabajador se logeará en el sistema de seguridad del POS. El gerente asignará las zonas (precargadas en el sistema) a cada mesero, el mesero al ingresar al sistema tendrá su zona asignada, al atender su mesa el mesero abrirá una cuenta, dentro de esta cuenta se encontrará con el catálogo de productos (cargado en una base de datos) los cuales ingresará en una o varias 24 comandas, al finalizar cada cuenta, esta se cerrará y se mostrará en el menú de la cuenta del cajero para que este las revise y cobre. Cualquier modificación de cuentas o productos deberá ser autorizada por la cuenta de administrador o gerente. Toda esta información se irá a la base de datos del sistema para generar los reportes correspondientes o solicitados por el usuario. Requerimientos del software Los requerimientos son mínimos, no se necesitan grandes procesadores, ni dispositivos de almacenamiento (discos duros, disquete, CDROM, etc.) siendo válidos de 486/66 o superiores y 256mb de RAM o superior, aunque las recomendaciones son partir de Pentium II con 512Mb de RAM. Esto hace posible reutilizar los antiguos equipos o bien ahorrar en la compra de nuevas computadoras. Se desarrollará mediante la programación orientada a objetos Java plataforma eclipse, J2EE Patrón de diseño MVC Base de datos MySql Se pretende implementar Windows 7 Se sugiere equipos de pantalla táctil Impresoras de papel térmico 25 DISEÑO Diagrama entidad relación Modelado de datos del sistema punto de venta. Este modelo expresa entidades relevantes para el sistema de información así como sus interrelaciones y propiedades. Modelo Entidad-Relación De acuerdo a la estructura del programa se realizó el siguiente diagrama donde se muestran la entidades de la base de datos y su relación. Ver imagen IX.1. 26 3Imagen IX.1 Diagrama Entidad-Relación 27 UML (Lenguaje Unificado de Modelado). Lenguaje gráfico para visualizar, especificar, construir y documentar el sistema punto de venta, para especificar o para describir métodos o procesos. Se utiliza para definir el sistema, para detallar los artefactos en el sistema y para documentar y construir. Diagrama de clases class diagrama de clases Compras Usuario + + + + + Nombre: char Apellidos: char F.Nacimiento: char Direccion: char Telefono: int + + + Insertar() : void Borrar() : void Editar() : void - usuario: Usuario Producto: Producto Fecha: char TipoPago: char Subtotal: float Iva: float Total: float + + + Insetar() : void Editar() : void Borra() : void Producto Prov eedor + + + + Tipo: char Nombre: char Precio: float Cantidad: int + + + + Nombre: char Direccion: char Telefono: int productos: char + + + Insertar() : void Editar() : void Borrar() : void + + + Insetar() : void Editar() : void Borrar() : void Acceso - User: char passwd: char + + + + Insertar() : void Borrar() : void Editar() : void Validar() : void Venta Comanda - Usuario: Usuario Comanda: Comanda TipoPago: char Subtotal: float Total: float Iva: float + + + Insertar() : void Borrar() : void Editar() : void - Mesa: int Usuario: Usuario Fecha: char Producto: Producto + + + + Nueva() : void Cancelar() : void Insertar() : void Editar() : void 4Imagen IX.2 Diagrama de clases El diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el sistema, las cuales pueden ser asociativas, de herencia, de uso y de contenido. Ver imagen IX.2. 28 Diagrama casos de uso. Descripción de los pasos o las actividades que deberán realizarse para llevar a cabo los procesos dentro del sistema punto de venta. Los personajes o entidades que participarán en un caso de uso se denominan actores (Administrador, Mesero, Capitán, Cajero). Ver imagen IX.3. uc casos de uso PuntodeVenta Ingresar al sistema Mesero Loggearse Caj ero Nuev a Comanda Cancelar Comanda Ingresar accesos Borrar accesos Consultar v entas Capitan Reporte Ventas Administrador Ingresar Usuarios Borrar usuario Editar usuario ingresar compra Ver compras Ingresar prov eedores Borrar Prov eedor Ingresar Producto Editar Producto 5Imagen IX.3 Diagrama de casos de uso 29 Diagrama de secuencia El Diagrama nos muestra la interacción de un conjunto de objetos en el sistema punto de venta (Aplicación) a través del tiempo y se modela para cada caso de uso. Loguearse en el sistema (tipo de usuario Administrador), Ver imagen IX.4. sd loggearse Usuario Administrador Interfaz principal Acceso Interfaz Login DataBase Intefaz menu Ingresa al interfaz principal() Entrada para loggearse() Pide seleccionar tipo de usuario() Selecciona tipo administrador() Verifica Usuario() permite acceso() solicita datos() Permite ingresar datos() Ingresa los datos() Valida datos() Verifica datos() acceso verificado() Ingresa al manu de opciones() 6Imagen IX.4 Diagrama de secuencia de log 30 Registrar un nuevo usuario (Administrador). Ver imagen IX.5. sd Registrar usuario Usuario Administrador Intefaz menu DataBase selecciona opcion Usuarios() Selecciona nuevo usuario() Permite ingresar datos() Solicita datos() Ingresa datos() Valida datos() Ingresa datos() 7Imagen IX.5 Diagrama de secuencia Arquitectura Arquitectura cliente – servidor Se puede definir la computación Cliente/Servidor como una arquitectura distribuida que permite a los usuarios finales obtener acceso a la información de forma transparente aún en entornos multiplataforma. Se trata, de la arquitectura más extendida en la realización de Sistemas Distribuidos. 31 El Esquema de funcionamiento de un Sistema Cliente/Servidor sería: o El cliente solicita una información al servidor. o El servidor recibe la petición del cliente. o El servidor procesa dicha solicitud. o El servidor envía el resultado obtenido al cliente. o El cliente recibe el resultado y lo procesa. El servidor estará ubicado en la oficina del lugar ya que por la función y operación del lugar, estará de forma segura y la cual a su vez tendrá conexión con las demás terminales. Ver imagen IX.6. APLICACIÓN J2EE JDBC CONNECTOR ADMINISTRACIÓN DE ORIGEN DE DATOS APLICACIÓN JAVA DB Modelado en ODBC PC Cliente Modelo JPA Controlador Vista SPRING Mecanismo de comunicación entre capas JSF Servidor Base de Datos Servidor 8Imagen IX.6 Esquema de funcionamiento 32 Interfaces Interfaz Principal. Ver imagen IX.7. 9Imagen IX.7 Ventana principal Interfaz de “Login”. Ver imagen IX.8. 10Imagen IX.8 Ventana de loguin 33 Interfaz de Menú de opciones. Ver imagen IX.9. 11Imagen IX.9 Ventana de menú principal Interfaz de Selección de mesa y personas. Ver imagen IX.10. 12Imagen IX10. Ventana de selección de mes 34 Interfaz de Usuarios. Ver imagen IX.11. 13Imagen IX.11 Ventana de alta de usuarios 35 Productos. Ver imagen IX.12. 14Imagen IX.12. Ventana de alta de Productos 36 Proveedores. Ver imagen IX.13. 15Imagen IX.12. Ventana de Proveedores 37 Codificación de interfaces Código de creación interfaz Principal package Vista; import java.awt.*; import javax.swing.*; public class Principal { private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="25,10" private JPanel jContentPane = null; private JMenuBar jJMenuBar = null; private JMenu fileMenu = null; private JMenu editMenu = null; private JMenu helpMenu = null; private JMenuItem exitMenuItem = null; private JMenuItem aboutMenuItem = null; private JMenuItem cutMenuItem = null; private JMenuItem copyMenuItem = null; private JMenuItem pasteMenuItem = null; private JMenuItem saveMenuItem = null; private JDialog aboutDialog = null; // @jve:decl-index=0:visual-constraint="44,558" private JPanel aboutContentPane = null; private JLabel aboutVersionLabel = null; Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); private JLabel lblBanner = null; private JLabel lblwelcom = null; private JButton btnIngresar = null; private JButton btnSalir = null; private JFrame getJFrame() { if (jFrame == null) { jFrame = new JFrame(); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.setJMenuBar(getJJMenuBar()); jFrame.setSize((int) d.getWidth() , (int) d.getHeight()); jFrame.setContentPane(getJContentPane()); jFrame.setTitle("Punto de Venta"); } return jFrame; } private JPanel getJContentPane() { if (jContentPane == null) { lblwelcom = new JLabel(); lblwelcom.setBounds(new Rectangle(490, 3, 349, 100)); lblwelcom.setIcon(new ImageIcon(getClass().getResource("images/welcom.jpg"))); lblBanner = new JLabel(); lblBanner.setBounds(new Rectangle(392, 104, 556, 264)); lblBanner.setIcon(new ImageIcon(getClass().getResource("images/14.jpg"))); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(lblBanner, null); jContentPane.add(lblwelcom, null); jContentPane.add(getBtnIngresar(), null); jContentPane.add(getBtnSalir(), null); } return jContentPane; } 38 Código de creación interfaz Login package Vista; import import import import import import public java.awt.*; java.io.IOException; java.sql.ResultSet; javax.swing.*; com.mysql.jdbc.Connection; Modelo.Conexion; class Login extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JLabel lblbaner = null; private JLabel lbl = null; private JTextField txtBus = null; private JButton antes = null; private JButton antes1 = null; private JLabel log = null; private JLabel user = null; private JLabel pass = null; private JTextField txtUser = null; private JPasswordField txtPass = null; private JButton btnEntrar = null; private JButton btnCancelar = null; public Login() { super(); this.setVisible(true); this.setResizable(false); initialize(); this.setLocationRelativeTo(null)} private void initialize() { this.setSize(608, 410); this.setContentPane(getJContentPane()); this.setTitle("Login")} private JPanel getJContentPane() { if (jContentPane == null) { pass = new JLabel(); pass.setBounds(new Rectangle(303, 225, 61, 16)); pass.setText("Passwd:"); user = new JLabel(); user.setBounds(new Rectangle(302, 186, 53, 16)); user.setText("Usuario:"); log = new JLabel(); log.setBounds(new Rectangle(84, 173, 101, 100)); log.setIcon(new ImageIcon(getClass().getResource("images/foto.png"))); lbl = new JLabel(); lbl.setBounds(new Rectangle(31, 144, 68, 16)); lbl.setText("Busqueda:"); lblbaner = new JLabel(); lblbaner.setBounds(new Rectangle(0, 0, 590, 97)); lblbaner.setText(""); lblbaner.setIcon(new ImageIcon(getClass().getResource("images/login.jpg"))); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.setSize(new Dimension(502, 346)); jContentPane.add(lblbaner, null); jContentPane.add(lbl, null); jContentPane.add(getTxtBus(), null); jContentPane.add(getAntes(), null); jContentPane.add(getAntes1(), null); jContentPane.add(log, null); jContentPane.add(user, null); jContentPane.add(pass, null); jContentPane.add(getTxtUser(), null); jContentPane.add(getTxtPass(), null); 39 jContentPane.add(getbtnEntrar(), null); jContentPane.add(getBtnCancelar(), null); Código de creación interfaz menú package Vista; import javax.swing.*; public class Menu extends JFrame { private JPanel jContentPane = null; private JButton bbtn1 = null; private JLabel Menu = null; private JLabel Comandas = null; private JButton user = null; private JLabel usrel = null; private JButton produ = null; private JLabel prpoel = null; private JButton compras = null; private JLabel jLabel = null; private JButton jButton = null; private JLabel ventas = null; private JButton pro = null; private JLabel Proeev = null; public Menu() { super(); initialize();} private void initialize() { this.setSize(499, 367); this.setVisible(true); this.setLocationRelativeTo(null); this.setResizable(false); this.setContentPane(getJContentPane()); this.setTitle("Menu");} private JPanel getJContentPane() { if (jContentPane == null) { Proeev = new JLabel(); Proeev.setBounds(new Rectangle(342, 302, 75, 16)); Proeev.setText("Proveedores"); ventas = new JLabel(); ventas.setBounds(new Rectangle(216, 302, 54, 16)); ventas.setText("Ventas"); jLabel = new JLabel(); jLabel.setBounds(new Rectangle(88, 301, 57, 16)); jLabel.setText("Compras"); prpoel = new JLabel(); prpoel.setBounds(new Rectangle(339, 159, 63, 16)); prpoel.setText("Productos" + ""); usrel = new JLabel(); usrel.setBounds(new Rectangle(205, 158, 58, 16)); usrel.setText("Usuarios"); Comandas = new JLabel(); Comandas.setBounds(new Rectangle(75, 158, 67, 16)); Comandas.setText("Comandas"); Menu = new JLabel(); Menu.setBounds(new Rectangle(208, 19, 113, 16)); Menu.setText("Menu de Opciones"); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(getBbtn1(), null); jContentPane.add(Menu, null); jContentPane.add(Comandas, null); jContentPane.add(getUser(), null); jContentPane.add(usrel, null); jContentPane.add(getProdu(), null); jContentPane.add(prpoel, null); jContentPane.add(getCompras(), null); jContentPane.add(jLabel, null); jContentPane.add(getJButton(), null); jContentPane.add(ventas, null); jContentPane.add(getPro(), null); jContentPane.add(Proeev, null); } return jContentPane; } 40 Código de creación interfaz Usuarios package Vista; import import import import import import import import import import javax.imageio.ImageIO; javax.*; java.*; java.io.File; java.io.IOException; java.sql.ResultSet; com.mysql.jdbc.Connection; Controlador.CtrUser; Controlador.UsuarioBean; Modelo.Conexion; public class Usuarios extends JFrame{ private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private static final long serialVersionUID = 1L; JPanel jContentPane = null; JLabel lblbanner = null; JLabel lblBuscar = null; JLabel lblNom = null; JLabel lblPat = null; JLabel lblMat = null; JLabel lblDir = null; JLabel lblTel = null; JLabel lblTip = null; JLabel lblCurp = null; JLabel lblMail = null; JTextField txtNom = null; JTextField txtPat = null; JTextField txtMat = null; JTextField txtDir = null; JTextField txtTel = null; JTextField txtMail = null; JTextField txtCurp = null; JLabel lblFoto = null; JButton btnUrl = null; JTextField txtUrl = null; JButton btnNuevo = null; JButton btnGuardar = null; JButton btnEditar = null; JButton btnBorrar = null; JButton btnSalir = null; JButton btnAntes = null; JButton btnDespues = null; JLabel lblAcceso = null; JLabel lblUser = null; JLabel lblpass = null; JTextField txtUser = null; JTextField txtPass = null; public Usuarios() { super(); initialize(); } 41 private JPanel getJContentPane() { if (jContentPane == null) { lblId = new JLabel(); lblId.setBounds(new Rectangle(105, 106, 20, 16)); lblId.setText("ID:"); lblpass = new JLabel(); lblpass.setBounds(new Rectangle(53, 440, 73, 16)); lblpass.setText("Contraseña:"); lblUser = new JLabel(); lblUser.setBounds(new Rectangle(76, 410, 49, 16)); lblUser.setText("Usuario:"); lblAcceso = new JLabel(); lblAcceso.setBounds(new Rectangle(208, 380, 52, 16)); lblAcceso.setText("Acceso"); lblFoto = new JLabel(); lblFoto.setBounds(new Rectangle(327, 103, 104, 118)); lblMail = new JLabel(); lblMail.setBounds(new Rectangle(85, 310, 38, 16)); lblMail.setText("E-Mail:"); lblCurp = new JLabel(); lblCurp.setBounds(new Rectangle(92, 340, 38, 16)); lblCurp.setText("Curp:"); lblTip = new JLabel(); lblTip.setBounds(new Rectangle(94, 130, 38, 16)); lblTip.setText("Tipo:"); lblTel = new JLabel(); lblTel.setBounds(new Rectangle(70, 280, 56, 16)); lblTel.setText("Telefono:"); lblDir = new JLabel(); lblDir.setBounds(new Rectangle(65, 250, 63, 16)); lblDir.setText("Direccion:"); lblMat = new JLabel(); lblMat.setBounds(new Rectangle(51, 220, 79, 16)); lblMat.setText("Ap. Materno:"); lblPat = new JLabel(); lblPat.setBounds(new Rectangle(53, 190, 76, 16)); lblPat.setText("Ap. Paterno:"); lblNom = new JLabel(); lblNom.setBounds(new Rectangle(73, 160, 54, 16)); lblNom.setText("Nombre:"); lblBuscar = new JLabel(); lblBuscar.setBounds(new Rectangle(22, 82, 47, 16)); lblBuscar.setText("Buscar:"); lblbanner = new JLabel(); lblbanner.setIcon(new ImageIcon(getClass().getResource("images/usuarios.png"))); lblbanner.setBounds(new Rectangle(-123, -12, 619, 68)); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(lblbanner, null); jContentPane.add(lblBuscar, null); jContentPane.add(lblNom, null); jContentPane.add(lblPat, null); jContentPane.add(lblMat, null); jContentPane.add(lblDir, null); jContentPane.add(lblTel, null); jContentPane.add(lblTip, null); jContentPane.add(lblCurp, null); jContentPane.add(lblMail, null); jContentPane.add(getTxtNom(), null); jContentPane.add(getTxtPat(), null); jContentPane.add(getTxtMat(), null); jContentPane.add(getTxtDir(), null); jContentPane.add(getTxtTel(), null); jContentPane.add(getTxtMail(), null); jContentPane.add(getTxtCurp(), null); jContentPane.add(lblFoto, null); jContentPane.add(getBtnUrl(), null); jContentPane.add(getTxtUrl(), null); jContentPane.add(getBtnNuevo(), null); jContentPane.add(getBtnGuardar(), null); jContentPane.add(getBtnEditar(), null); jContentPane.add(getBtnBorrar(), null); jContentPane.add(getBtnSalir(), null); jContentPane.add(getBtnAntes(), null); jContentPane.add(getBtnDespues(), null); jContentPane.add(lblAcceso, null); jContentPane.add(lblUser, null); jContentPane.add(lblpass, null); jContentPane.add(getTxtUser(), null); jContentPane.add(getTxtPass(), null); jContentPane.add(getBtnCancel(), null); jContentPane.add(getTxtid(), null); jContentPane.add(lblId, null); jContentPane.add(getTipList(), null); jContentPane.add(getBtnUpdate(), null); 42 Código de creación interfaz productos package Vista; import import import import import import import import import import java.awt.*; javax.imageio.ImageIO; java.io.File; java.io.IOException; java.sql.ResultSet; javax.swing.*; Controlador.CtrProduc; Controlador.ProductosBean; Modelo.Conexion; com.mysql.jdbc.Connection; public class Productos extends JFrame { private private private private private private private private private private private private private private private private private private private private private private private private static final long serialVersionUID = 1L; JPanel jContentPane = null; JLabel lblBanner = null; JLabel lblBuscar = null; JButton btnAntes = null; JButton btnDespues = null; JLabel lblTipo = null; JLabel lblNom = null; JTextField txtNom = null; JLabel lblPre = null; JTextField txtPre = null; JLabel lblTot = null; JTextField txtTot = null; JLabel lblFoto = null; JLabel lblCant = null; JTextField txtCant = null; JButton btnUrl = null; JTextField txtUrl = null; JButton btnNuevo = null; JButton btnSalir = null; JButton btnEditar = null; JButton btnGuardar = null; JLabel lblId = null; JTextField txtId = null; public Productos() { super(); initialize(); } private void initialize() { this.setSize(464, 448); this.setContentPane(getJContentPane()); this.setTitle("Productos"); this.setVisible(true); this.setResizable(false); this.setLocationRelativeTo(null); txtUrl.setVisible(false); listTipo.setEnabled(false); txtNom.setEnabled(false); txtCant.setEnabled(false); txtCont.setEnabled(false); txtPre.setEnabled(false); txtTot.setEnabled(false); btnEditar.setEnabled(false); btnGuardar.setEnabled(false); txtId.setEnabled(false); btnUrl.setEnabled(false); btnDespues.setEnabled(false); btnCancelar.setVisible(false); btnSave.setVisible(false); } 43 private JPanel getJContentPane() { if (jContentPane == null) { lblCont = new JLabel(); lblCont.setBounds(new Rectangle(40, 190, 93, 16)); lblCont.setText("Contenido Neto:"); lblId = new JLabel(); lblId.setBounds(new Rectangle(110, 100, 19, 16)); lblId.setText("Id:"); lblCant = new JLabel(); lblCant.setBounds(new Rectangle(75, 220, 56, 16)); lblCant.setText("Cantidad:"); lblFoto = new JLabel(); lblFoto.setBounds(new Rectangle(313, 113, 104, 178)); lblTot = new JLabel(); lblTot.setBounds(new Rectangle(62, 280, 75, 16)); lblTot.setText("Precio Total:"); lblPre = new JLabel(); lblPre.setBounds(new Rectangle(43, 250, 92, 16)); lblPre.setText("Precio Unitario:"); lblNom = new JLabel(); lblNom.setBounds(new Rectangle(79, 160, 55, 16)); lblNom.setText("Nombre:"); lblTipo = new JLabel(); lblTipo.setBounds(new Rectangle(94, 130, 38, 16)); lblTipo.setText("Tipo:"); lblBuscar = new JLabel(); lblBuscar.setBounds(new Rectangle(11, 73, 54, 16)); lblBuscar.setText("Buscar:"); lblBanner = new JLabel(); lblBanner.setIcon(new ImageIcon(getClass().getResource("images/productos.png"))); lblBanner.setBounds(new Rectangle(-125, -13, 624, 64)); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(lblBanner, null); jContentPane.add(lblBuscar, null); jContentPane.add(getBtnAntes(), null); jContentPane.add(getBtnDespues(), null); jContentPane.add(lblTipo, null); jContentPane.add(lblNom, null); jContentPane.add(getTxtNom(), null); jContentPane.add(lblPre, null); jContentPane.add(getTxtPre(), null); jContentPane.add(lblTot, null); jContentPane.add(getTxtTot(), null); jContentPane.add(lblFoto, null); jContentPane.add(lblCant, null); jContentPane.add(getTxtCant(), null); jContentPane.add(getBtnUrl(), null); jContentPane.add(getTxtUrl(), null); jContentPane.add(getBtnNuevo(), null); jContentPane.add(getBtnSalir(), null); jContentPane.add(getBtnEditar(), null); jContentPane.add(getBtnGuardar(), null); jContentPane.add(getBtnSave(), null); jContentPane.add(lblId, null); jContentPane.add(getTxtId(), null); jContentPane.add(getBtnCancelar(), null); jContentPane.add(getListTipo(), null); jContentPane.add(lblCont, null); jContentPane.add(getTxtCont(), null); } return jContentPane; } 44 Código de creación interfaz Proveedores package Vista; import import import import import javax.swing.*; Modelo.Conexion; javax.swing.table.DefaultTableModel; com.mysql.jdbc.Connection; javax.swing.JScrollPane; class Proveedor extends JFrame { private private private private private private private private private private private private private private private private private static final long serialVersionUID = 1L; JPanel jContentPane = null; JLabel lblBanner = null; JLabel lblID = null; JLabel lblComp = null; JLabel lbltel = null; JButton btnCancel = null; JButton btnGuardar = null; JButton btnNuevo = null; JButton btnActual = null; JTextField txtid = null; JTextField txtComp = null; JTextField txtTel = null; JLabel lblimg = null; JButton btnSalir = null; JScrollPane jScrollPane1 = null; JTable jtProvee = null; public Proveedor() { super(); initialize(); } private void initialize() { this.setSize(464, 470); this.setContentPane(getJContentPane()); this.setTitle("Proveedores"); this.setResizable(false); this.setLocationRelativeTo(null); this.setVisible(true); } private JPanel getJContentPane() { if (jContentPane == null) { lblimg = new JLabel(); lblimg.setBounds(new Rectangle(344, 79, 101, 106)); lblimg.setIcon(new ImageIcon(getClass().getResource("images/proveedor.jpg"))); lbltel = new JLabel(); lbltel.setBounds(new Rectangle(72, 160, 61, 16)); lbltel.setText("Telefono:"); lblComp = new JLabel(); lblComp.setBounds(new Rectangle(65, 130, 63, 16)); lblComp.setText("Compañia:"); lblID = new JLabel(); lblID.setBounds(new Rectangle(112, 100, 21, 16)); lblID.setText("Id:"); lblBanner = new JLabel(); lblBanner.setIcon(new ImageIcon(getClass().getResource("images/Provee.png"))); lblBanner.setBounds(new Rectangle(-155, -13, 664, 90)); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(lblBanner, null); jContentPane.add(lblID, null); jContentPane.add(lblComp, null); jContentPane.add(lbltel, null); jContentPane.add(getBtnCancel(), null); jContentPane.add(getBtnGuardar(), null); jContentPane.add(getBtnNuevo(), null); jContentPane.add(getBtnActual(), null); 45 jContentPane.add(getTxtid(), null); jContentPane.add(getTxtComp(), null); jContentPane.add(getTxtTel(), null); ImageIcon(getClass().getResource("images/Provee.png"))); lblBanner.setBounds(new Rectangle(-155, -13, 664, 90)); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(lblBanner, null); jContentPane.add(lblID, null); jContentPane.add(lblComp, null); jContentPane.add(lbltel, null); jContentPane.add(getBtnCancel(), null); jContentPane.add(getBtnGuardar(), null); jContentPane.add(getBtnNuevo(), null); jContentPane.add(getBtnActual(), null); jContentPane.add(getTxtid(), null); jContentPane.add(getTxtComp(), null); jContentPane.add(getTxtTel(), null); jContentPane.add(lblimg, null); jContentPane.add(getBtnSalir(), null); jContentPane.add(getJScrollPane1(), null); } return jContentPane; } Código de creación interfaz Mesa package Vista; import java.*; public class SelcMesa extends JFrame { private private private private private private private private private private static final long serialVersionUID = 1L; JPanel jContentPane = null; JLabel lblBanner = null; JLabel lblMesa = null; JLabel lblPer = null; JComboBox jcbMesa = null; JComboBox jcbPersonas = null; JLabel lblIma = null; JButton btnCon = null; JButton btnCancel = null; public SelcMesa() { super(); initialize(); } private void initialize() { this.setSize(465, 200); this.setContentPane(getJContentPane()); this.setTitle("Mesa"); this.setVisible(true); this.setLocationRelativeTo(null); this.setResizable(false); } private JPanel getJContentPane() { if (jContentPane == null) { lblIma = new JLabel(); lblIma.setBounds(new Rectangle(256, 41, 192, 116)); lblIma.setIcon(new ImageIcon(getClass().getResource("images/mesa.png"))); lblPer = new JLabel(); lblPer.setBounds(new Rectangle(55, 81, 62, 16)); lblPer.setText("Personas:"); lblMesa = new JLabel(); lblMesa.setBounds(new Rectangle(79, 48, 38, 16)); lblMesa.setText("Mesa:"); lblBanner = new JLabel(); lblBanner.setBounds(new Rectangle(148, 15, 113, 16)); lblBanner.setText("Seleccionar Mesa"); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(lblBanner, null); 46 Codificación de funciones Conexión a base de datos package Modelo; import java.sql.*; public class Conexion { private Connection MYSQL_Connection = null; private String MYSQL_USER = "root"; private String MYSQL_PASSWORD=""; private String MYSQL_PUERTO = "3306"; private String MYSQL_SERVER="localhost"; private String MYSQL_INSTANCIA="dbJBJBar"; public Conexion() { seviceLocator(); } public void seviceLocator(){ StringBuilder URL= new StringBuilder(); try { Class.forName("com.mysql.jdbc.Driver"); URL.append("jdbc") .append(":") .append("mysql") .append(":") .append("//") .append(this.MYSQL_SERVER) .append(":") .append(this.MYSQL_PUERTO) .append("/") .append(this.MYSQL_INSTANCIA); System.out.println("URL------>"+ URL.toString()); this.MYSQL_Connection=DriverManager.getConnection(URL.toString(), this.MYSQL_USER,this.MYSQL_PASSWORD); } catch (ClassNotFoundException error) { error.printStackTrace(); } catch (SQLException error) { error.printStackTrace(); }} public Connection getMYSQL_Connection() throws SQLException{ if(this.MYSQL_Connection!=null){ return MYSQL_Connection; } else { throw new SQLException("Servicio no disponible");} } public void CloseConnection(PreparedStatement ps, ResultSet rs,Connection conn) throws Exception{ try { conn.close(); conn=null; ps.close(); ps=null; rs.close(); rs=null; } catch (Exception error) { throw new Exception("Error al cerrar SQL"); } } 47 Codificación de botones entrar y salir del interfaz Principal private JButton getBtnIngresar() { if (btnIngresar == null) { btnIngresar = new JButton(); btnIngresar.setIcon(new ImageIcon(getClass().getResource("images/ingresar.jpg"))); btnIngresar.setBounds(new Rectangle(567, 442, 242, 66)); btnIngresar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { new Login(); } }); } return btnIngresar; } private JButton getBtnSalir() { if (btnSalir == null) { btnSalir = new JButton(); btnSalir.setIcon(new ImageIcon(getClass().getResource("images/salir.gif"))); btnSalir.setBounds(new Rectangle(1020, 580, 37, 41)); btnSalir.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.exit(0); } }); } return btnSalir; } Boton Acceder Login private JButton getbtnEntrar() { if (btnEntrar == null) { btnEntrar = new JButton("Entrar"); btnEntrar.setBounds(new Rectangle(311, 276, 83, 25)); btnEntrar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { try { if (txtUser.getText().length() > 0 && txtPass.getText().length() > 0){ } if (validarUsuario(txtUser.getText(), txtPass.getText())) { JOptionPane.showMessageDialog(btnCancelar, "Bienvenido al Sistema"); JFrame frame = new Menu(); frame.setVisible(true); setVisible(false); }else{ JOptionPane.showMessageDialog(btnEntrar, "Verifique Clave o Password"); } } catch (Exception e2) { } } }); } 48 Método Validar usuario boolean validarUsuario(String Usr, String psw) throws IOException{ Connection conn = null; Conexion co = new Conexion(); try { conn = (Connection) co.getMYSQL_Connection(); java.sql.Statement QuerySql = conn.createStatement(); ResultSet RestQuery = QuerySql.executeQuery("select * from usuario where" + " Usuario='"+Usr+"' AND Contraseña='"+psw+"'"); System.out.println("Validacio-->" + RestQuery.toString()); if (RestQuery.first()) { return true; }else{ return false; } } catch (Exception e) { e.printStackTrace(); return false; } } 49 Botón guardar usuario. private JButton getBtnGuardar() { if (btnGuardar == null) { btnGuardar = new JButton(); btnGuardar.setBounds(new Rectangle(183, 489, 42, 41)); btnGuardar.setIcon(new ImageIcon(getClass().getResource("images/guardar.png"))); btnGuardar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { CtrUser ctr = new CtrUser(); UsuarioBean bean = new UsuarioBean(); try { bean.setID(Integer.parseInt(txtid.getText())); bean.setTipo(TipList.getSelectedItem()); bean.setNombre(txtNom.getText()); bean.setPaterno(txtPat.getText()); bean.setMaterno(txtMat.getText()); bean.setDireccion(txtDir.getText()); bean.setTelefono(Integer.parseInt(txtTel.getText())); bean.setEmail(txtMail.getText()); bean.setCurp(txtCurp.getText()); bean.setUsuario(txtUser.getText()); bean.setContraseña(txtPass.getText()); bean.setFoto(txtUrl.getText()); ctr.insert(bean); JOptionPane.showMessageDialog(btnNuevo, "El Usuario " + txtid.getText() + " fue dado de alta satisfactoriamente","",JOptionPane.INFORMATION_MESSAGE); } catch (Exception ex) { if(ex.getMessage().indexOf("DuplicateEntrie")!= 1){ JOptionPane.showMessageDialog(btnNuevo, "El Usuario " + txtid.getText() + " ya existe", "", JOptionPane.ERROR_MESSAGE); } else{ JOptionPane.showMessageDialog(btnNuevo, "Se presento un problema al tratar de " + "acceder a la base de datos", "BaseData", JOptionPane.ERROR_MESSAGE); ex.printStackTrace(); } } btnBorrar.setEnabled(true); btnEditar.setEnabled(true); } }); } return btnGuardar; } 50 Botón Editar (save) usuario private JButton getBtnUpdate() { if (btnUpdate == null) { btnUpdate = new JButton(); btnUpdate.setBounds(new Rectangle(190, 488, 42, 41)); btnUpdate.setIcon(new ImageIcon(getClass().getResource("images/guardar.png"))); btnUpdate.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { try { bean.setID(Integer.parseInt(txtid.getText())); bean.setTipo(TipList.getSelectedItem()); bean.setNombre(txtNom.getText()); bean.setPaterno(txtPat.getText()); bean.setMaterno(txtMat.getText()); bean.setDireccion(txtDir.getText()); bean.setTelefono(Integer.parseInt(txtTel.getText())); bean.setEmail(txtMail.getText()); bean.setCurp(txtCurp.getText()); bean.setUsuario(txtUser.getText()); bean.setContraseña(txtPass.getText()); bean.setFoto(txtUrl.getText()); ctr.update(bean); JOptionPane.showMessageDialog(btnNuevo, "El Usuario " + txtid.getText() + " fue modificado satisfactoriamente","",JOptionPane.INFORMATION_MESSAGE); } catch (Exception ex) { if(ex.getMessage().indexOf("DuplicateEntrie")!= 1){ JOptionPane.showMessageDialog(btnNuevo, "El Usuario " + txtid.getText() + " ya existe", "", JOptionPane.ERROR_MESSAGE); } else{ JOptionPane.showMessageDialog(btnNuevo, "Se presento un problema al tratar de " + "acceder a la base de datos", "BaseData", JOptionPane.ERROR_MESSAGE); ex.printStackTrace(); } } } }); } return btnUpdate; } 51 Botón Borrar usuario private JButton getBtnBorrar() { if (btnBorrar == null) { btnBorrar = new JButton(); btnBorrar.setBounds(new Rectangle(331, 489, 42, 41)); btnBorrar.setIcon(new ImageIcon(getClass().getResource("images/eliminar.jpg"))); btnBorrar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { CtrUser ctr = new CtrUser(); UsuarioBean bean = new UsuarioBean(); try { bean.setID(Integer.parseInt(txtid.getText())); ctr.delete(bean); JOptionPane.showMessageDialog(btnNuevo, "El Usuario " + txtid.getText() + " fue Eliminado","",JOptionPane.INFORMATION_MESSAGE); } catch (Exception ex) { if(ex.getMessage().indexOf("DuplicateEntrie")!= 1){ JOptionPane.showMessageDialog(btnNuevo, "El Usuario " + txtid.getText() + " no se puede eliminar", "", JOptionPane.ERROR_MESSAGE); } else{ JOptionPane.showMessageDialog(btnNuevo, "Se presento un problema al tratar de " + "acceder a la base de datos", "BaseData", JOptionPane.ERROR_MESSAGE); ex.printStackTrace(); } } } }); } return btnBorrar; } 52 Clase Usuario Bean package Controlador; public class UsuarioBean { private int ID; private String Tipo; private String nombre; private String paterno; private String materno; private String direccion; private int Telefono; private String email; private String curp; private String foto; private String usuario; private String contraseña; public String getTipo() { return Tipo; } public void setTipo(Object object) { Tipo = (String) object; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getPaterno() { return paterno; } public void setPaterno(String paterno) { this.paterno = paterno; } public String getMaterno() { return materno; } public void setMaterno(String materno) { this.materno = materno; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public int getTelefono() { return Telefono; } public void setTelefono(int telefono) { Telefono = telefono; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getCurp() { return curp; } public void setCurp(String curp) { this.curp = curp; } public String getFoto() { return foto; } public void setFoto(String foto) { this.foto = foto; } public String getUsuario() { return usuario; } public void setUsuario(String usuario) { this.usuario = usuario; } public String getContraseña() { 53 Interface visual (métodos Insert, update, delete) package Modelo; public interface Interface { public public public int Insert (Object bean) throws Exception; int Delete (Object bean) throws Exception; int Update (Object bean) throws Exception; } Clase Usuario Dao (insert, update, delete) Insert public int Insert(Object bean) throws Exception { StringBuffer Query = new StringBuffer(); int result = 0; Connection CONN; PreparedStatement ps; UsuarioBean user = (UsuarioBean) bean; try { Query .append("INSERT INTO usuario") .append("(idusuario, Tipo, Nombre, Paterno, Materno, Direccion, Telefono, " + "Email, Curp, Usuario, Contraseña, Foto") .append(")VALUES(") .append(user.getID()) .append(", '") .append(user.getTipo()) .append("', '") .append(user.getNombre()) .append("', '") .append(user.getPaterno()) .append("', '") .append(user.getMaterno()) .append("', '") .append(user.getDireccion()) .append("', ") .append(user.getTelefono()) .append(", '") .append(user.getEmail()) .append("', '") .append(user.getCurp()) .append("', '") .append(user.getUsuario()) .append("', '") .append(user.getContraseña()) .append("', '") .append(user.getFoto()) .append("')"); System.out.println("Insert-->" + Query.toString()); CONN = (Connection) this.getMYSQL_Connection(); ps= CONN.prepareStatement(Query.toString()); ps.executeUpdate(); Delete return result; } catch (Exception e) { throw e; } } 54 public int Delete(Object bean) throws Exception { int Result=0; Connection CONN; StringBuffer query= new StringBuffer(); PreparedStatement ps; UsuarioBean user = (UsuarioBean) bean; try { query .append("delete ") .append("from ") .append("usuario ") .append("where ") .append("idUsuario = ") .append(user.getID()); System.out.println("Delete-->" + query.toString()); CONN = (Connection) this.getMYSQL_Connection(); ps= CONN.prepareStatement(query.toString()); ps.executeQuery(); return Result; } catch (Exception e) { throw e; } } 55 Update public int Update(Object bean) throws Exception { StringBuffer Query = new StringBuffer(); int result = 0; Connection CONN; PreparedStatement ps; UsuarioBean user = (UsuarioBean) bean; try { Query .append("update usuario set ") .append("Tipo = ") .append("'") .append(user.getTipo()) .append("', Nombre = '") .append(user.getNombre()) .append("', Paterno = '") .append(user.getPaterno()) .append("', Materno = '") .append(user.getMaterno()) .append("', Direccion = '") .append(user.getDireccion()) .append("', Telefono = ") .append(user.getTelefono()) .append(", Email = '") .append(user.getEmail()) .append("', Curp = '") .append(user.getCurp()) .append("', Usuario = '") .append(user.getUsuario()) .append("', Contraseña = '") .append(user.getContraseña()) .append("', Foto = '") .append(user.getFoto()) .append("'") .append("Where idUsuario = ") .append(user.getID()); System.out.println("Insert-->" + Query.toString()); CONN = (Connection) this.getMYSQL_Connection(); ps= CONN.prepareStatement(Query.toString()); ps.executeUpdate(); return result; } catch (Exception e) { throw e; } } } 56 Clase Controlador usuario (CtrUsuer) package Controlador; import Modelo.UsuarioDao; public class CtrUser { public void insert(UsuarioBean bean ) throws Exception{ UsuarioDao user = new UsuarioDao(); user.Insert(bean); } public void delete(UsuarioBean bean ) throws Exception{ UsuarioDao user = new UsuarioDao(); user.Delete(bean); } public void update(UsuarioBean bean ) throws Exception{ UsuarioDao user = new UsuarioDao(); user.Update(bean); } } Botón Examinar File (imagen usuario) private JButton getBtnUrl() { if (btnUrl == null) { btnUrl = new JButton(); btnUrl.setBounds(new Rectangle(328, 223, 102, 20)); btnUrl.setText("Examinar..."); btnUrl.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); FileNameExtensionFilter filtroImagen=new FileNameExtensionFilter("JPG, PNG & GIF","jpg","png","gif"); fileChooser.setFileFilter(filtroImagen); int seleccion = fileChooser.showSaveDialog(fileChooser); if (seleccion == JFileChooser.APPROVE_OPTION){ File fichero = fileChooser.getSelectedFile(); adr=fichero.getAbsolutePath(); txtUrl.setText(adr); try{ File file = new File(adr); image = ImageIO.read(file); } catch (IOException ima) { }} lblFoto.setIcon(new ImageIcon(image)); } }); } return btnUrl; } 57 Botón Antes private JButton getBtnAntes() { if (btnAntes == null) { btnAntes = new JButton(); btnAntes.setBounds(new Rectangle(80, 82, 43, 15)); btnAntes.setText("<"); btnAntes.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { btnDespues.setEnabled(true); Connection conn = null; java.sql.PreparedStatement ps = null; ResultSet rs = null; Conexion co = new Conexion(); try { conn = (Connection) co.getMYSQL_Connection(); ps = conn.prepareStatement("SELECT * FROM usuario order by idUsuario limit 0,1"); rs = ps.executeQuery(); if (rs.next()) { txtid.setText(Integer.toString(rs.getInt("idUsuario"))); TipList.setSelectedItem(rs.getString("Tipo")); txtNom.setText(rs.getString("Nombre")); txtPat.setText(rs.getString("Paterno")); txtMat.setText(rs.getString("Materno")); txtDir.setText(rs.getString("Direccion")); txtTel.setText(Integer.toString(rs.getInt("Telefono"))); txtMail.setText(rs.getString("Email")); txtCurp.setText(rs.getString("Curp")); txtUser.setText(rs.getString("Usuario")); txtPass.setText(rs.getString("Contraseña")); txtUrl.setText(rs.getString("Foto")); } btnEditar.setEnabled(true); btnBorrar.setEnabled(true); } catch (Exception e2) { JOptionPane.showMessageDialog(null, "Ocurrio un error en la BD"+e2.getMessage()); e2.printStackTrace(); } } }); } return btnAntes; } 58 Botón Siguiente private JButton getBtnDespues() { if (btnDespues == null) { btnDespues = new JButton(); btnDespues.setBounds(new Rectangle(120, 82, 43, 15)); btnDespues.setText(">"); btnDespues.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { Integer actual = Integer.parseInt(txtid.getText()); Connection conn = null; java.sql.PreparedStatement ps = null; ResultSet rs = null; Conexion co = new Conexion(); try { conn = (Connection) co.getMYSQL_Connection(); ps = conn.prepareStatement("SELECT * FROM usuario WHERE idUsuario > "+ actual + " order by idUsuario ASC limit 0,1"); rs = ps.executeQuery(); if (rs.next()) { txtid.setText(Integer.toString(rs.getInt("idUsuario"))); TipList.setSelectedItem(rs.getString("Tipo")); txtNom.setText(rs.getString("Nombre")); txtPat.setText(rs.getString("Paterno")); txtMat.setText(rs.getString("Materno")); txtDir.setText(rs.getString("Direccion")); txtTel.setText(Integer.toString(rs.getInt("Telefono"))); txtMail.setText(rs.getString("Email")); txtCurp.setText(rs.getString("Curp")); txtUser.setText(rs.getString("Usuario")); txtPass.setText(rs.getString("Contraseña")); txtUrl.setText(rs.getString("Foto")); } } catch (Exception e2) { JOptionPane.showMessageDialog(null, "Ocurrio un error en la BD"+e2.getMessage()); e2.printStackTrace(); } } }); } return btnDespues; } 59 Botón Actualizar llenado de tabla private JButton getBtnActual() { if (btnActual == null) { btnActual = new JButton(); btnActual.setBounds(new Rectangle(177, 218, 96, 20)); btnActual.setText("Actualizar"); btnActual.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { Connection conn = null; Conexion co = new Conexion(); try { DefaultTableModel modelo = new DefaultTableModel(); jtProvee.setModel(modelo); conn = (Connection) co.getMYSQL_Connection(); java.sql.Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("Select * from Proveedores"); java.sql.ResultSetMetaData rsMd = rs.getMetaData(); int cantidadColumnas = rsMd.getColumnCount(); for (int i = 1; i <= cantidadColumnas; i++) { modelo.addColumn(rsMd.getColumnLabel(i)); } while (rs.next()) { Object[] fila = new Object[cantidadColumnas]; for (int i = 0; i < cantidadColumnas; i++) { fila[i] = rs.getObject(i+1); } modelo.addRow(fila); } rs.close(); conn.close(); } catch (Exception e2) { e2.printStackTrace(); } } }); } return btnActual; } 60 Creación de la base de datos SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; CREATE SCHEMA IF NOT EXISTS `dbJBJBar` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; USE `dbJBJBar` ; -- ------------------------------------------------------ Table `dbJBJBar`.`Zona` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS ` dbJBJBar `.`Zona` (`idZona` INT NOT NULL ,`Nombre` VARCHAR(45) NULL ,PRIMARY KEY (`idZona`) ) ENGINE = InnoDB; -- ------------------------------------------------------ Table `dbJBJBar`.`mesas` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS ` dbJBJBar `.`mesas` (`idmesas` INT NOT NULL ,PRIMARY KEY (`idmesas`) ,INDEX `ID_zona` () ,CONSTRAINT `ID_zona`FOREIGN KEY ()REFERENCES ` dbJBJBar `.`Zona` () ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `dbJBJBar`.`Provedores` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS ` dbJBJBar `.`Provedores` (`idProvedores` INT NOT NULL ,`nombre` VARCHAR(45) NULL ,`telefono` VARCHAR(45) NULL ,`direccion` VARCHAR(45) NULL ,`correo` VARCHAR(45) NULL ,PRIMARY KEY (`idProvedores`) ) ENGINE = InnoDB; -- ------------------------------------------------------ Table `dbJBJBar`.`cliente` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS ` dbJBJBar `.`cliente` (`idcliente` INT NOT NULL , `nombre` VARCHAR(45) NULL ,PRIMARY KEY (`idcliente`) )ENGINE = InnoDB; -- ------------------------------------------------------ Table `dbJBJBar`.`Acceso` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS ` dbJBJBar `.`Acceso` (`idAcceso` INT NOT NULL ,`user` VARCHAR(45) NULL ,`pass` VARCHAR(45) NULL ,PRIMARY KEY (`idAcceso`) ) ENGINE = InnoDB; -- ------------------------------------------------------ Table `dbJBJBar`.`Usuarios` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `dbJBJBar`.`Usuarios` (`idUsuarios` INT NOT NULL ,`Nomabre` VARCHAR(45) NULL ,`Amaterno` VARCHAR(45) NULL ,`Apaterno` VARCHAR(45) NULL `Direccion` VARCHAR(45) NULL ,`curp` VARCHAR(45) NULL ,`telefono` INT NULL ,`correo` VARCHAR(45) NULL ,`tipo` VARCHAR(45) NULL , PRIMARY KEY (`idUsuarios`) ,INDEX `ID_acceso` () ,CONSTRAINT `ID_acceso` FOREIGN KEY () REFERENCES `dbJBJBar`.`Acceso` () ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; 61 X. Resultados obtenidos Como resultado del trabajo realizado en el proyecto se logró la creación de un sistema integral, seguro y eficiente. Que permite a los trabajadores de JBJ Bar atender las necesidades del establecimiento de manera rápida y con calidad. Los módulos que presenta el programa son los siguientes: Mejora en la interfaz gráfica de usuario ver imagen X.1. 16Imagen X.1 Pantalla de bienvenida 62 Se incrementó la seguridad con respecto al sistema anterior mediante el módulo de “login” donde el usuario previamente cargado en el sistema puede acceder al menú del programa ver imagen X.2.. 17Imagen X.2 Formulario de Loguin 63 El programa cuenta con un menú inteligente que habilita cada sub-módulo de esta pantalla según los privilegios del usuario ver imagen X.3. 18Imagen X.3 Menú de Opciones 64 El dar usuarios de alta se optimizó y es una tarea sencilla a la que sólo los perfiles con los más altos privilegios tienen acceso. Esto para dar de alta un nuevo usuario que tendrá (según el criterio del administrador) derechos para manipular el sistema ver imagen X.4. 19Imagen X.4 Administración de Usuarios 65 También se logró hacer la “alimentación” de la base de datos mediante un módulo sencillo. Donde los productos serán dados de alta y donde también podrán ser modificados o eliminados del sistema ver imagen X.5. 20Imagen X.5 Administración de Productos 66 XI. Análisis de riesgos RIESGO DESCRIPCIÓN ACCIÓN DE CONTINGENCIA Confianza El abuso de confianza de Alto un subalterno podría corromper el sistema de seguridad y ocasionar perdidas. Usar Hardware obsoleto o Alto de mala calidad. Es importante contar con un equipo de confianza responsable del sistema y asegurar su correcto funcionamiento. Mantenimiento preventivo Que no se brinde Medio mantenimiento preventivo a equipo del lugar. Programar mantenimientos periódicos a los equipos y así evitar fallas. Mantenimiento SQL No brindar mantenimiento Alto a la base de datos. Dar seguimiento al sistema y elaborar mantenimientos preventivos a la base de datos así como al servidor de esta. Capacitación No brindar capacitación al Alto personal. Proporcionar la información necesaria para que el trabajador utilice de manera correcta el sistema. Innovación tecnológica No proyectar a futuro el Medio cambio en la tecnología. Dar seguimiento al sistema, proporcionarle nuevas tecnologías sobre la marcha. Equipos suficiente Solicitar el equipo adecuado. 67 XII. Conclusiones La actual perspectiva con respecto al uso de tecnologías de la información que se adquirió, es sin duda, bastante amplia e implica una nueva visión en cuanto a la aplicación de las TIC‟s. Es importante antes de empezar un proyecto saber con cuidado, que es lo que se desea al final de y sobre todo que beneficios más allá de los esperados se pueden conseguir. Es necesario tener una visión de las herramientas que se podrán utilizar en el proyecto y que provecho pueden sacarse de estas, antes, durante y después de realizar un sistema como el que se documentó aquí. Las herramientas como: El modelado de programas y la administración de proyectos pueden ahorrar mucho tiempo y recursos en la realización de sistemas. El uso del modelado vista control. Permitirá que la mejora continua del programa TPV para JBJ Bar sea más práctica y sencilla. Así el sistema será sustentable. Sin duda la mejora grafica en el sistema y el manejo del programa son muy amigables en la interfaces de usuario, por lo que lo hace muy intuitivo sin ser un programa vulnerable, gracias al refuerzo de la seguridad del sistema y la logística de la programación. 68 XIII. Recomendaciones Es importante que a partir del término de la instalación del Programa TPV en JBJ Bar se tomen en cuenta las siguientes recomendaciones y aclaraciones: Es importante que la adquisición del programa cuente con una licencia de uso vigente. La adquisición de programas es en realidad la adquisición solamente del derecho de uso del programa, la licencia, bajo términos definidos por el fabricante. El uso de software fuera de esos términos constituye delito contra la propiedad intelectual. Debe instalarse solamente el software necesario para las funciones esperadas del equipo. En la mayoría de los casos, eso se limita al software básico, sistema operativo, aplicaciones de oficina y navegación y el cliente de red. Toda computadora adquirida para JBJ Bar debe contar con licencias para el software mencionado. Las licencias deben corresponder a las versiones en uso. No se puede instalar una versión más reciente con una licencia de versiones anteriores. Los responsables del equipo deben estar familiarizados con sus máquinas y revisarlas periódicamente para detectar problemas de software. Debido a que TPV en JBJ Bar es un sistema exclusivo de la empresa, el soporte técnico estará a cargo de los creadores del sistema por lo que cualquier anomalía con el programa debe ser reportada únicamente con los responsables de la elaboración del sistema. 69 Es importante antes de hacer uso del sistema que; Los usuarios potenciales estén informados al respecto del uso básico de una computadora o de lo contrario solicitar una capacitación. El sistema informático y red del establecimiento está orientado al uso exclusivo del sistema TPV JBJ Bar. Cualquier otro uso podría causar fallas en el rendimiento del programa. Los usuarios cuyo perfil sea de administración deberá ser responsable de la gestión de las cuentas subordinas. Cada usuario es responsable del uso correcto de su cuenta de lo contrario se podría causar un fallo en el rendimiento del sistema. Cualquier modificación en la funcionalidad o la red del programa debe llevarse a cabo por el responsable de la elaboración del sistema así como el mantenimiento de los equipos (si es que se es el proveedor de los mismos). La asistencia técnica prestada por el servicio del programa TPV JBJ Bar esta exclusivamente dirigida a aquellos equipos que sean propiedad de JBJ Bar y del sistema propiamente. Es muy importante mantener el área de las estaciones en completo orden y en lugares seguros para evitar accidentes que afecten el desempeño del sistema y de la productividad del establecimiento. 70 XIV. Referencias bibliográficas LENGUAJE DE PROGRAMACION JAVA 3era Edición Ken Arnold, David Holmes Editorial Addison Wesley Paginas: 99, 100, 101, 102,103 JAVA 2 3era Edición, Abril 2010 Editorial Alfa – Omega Prof. Javier Caballo Sierra Paginas: 12,13,13,14,31,32,33,40,252,259,260 ANALISIS Y DISEÑO DE SISTEMAS Segunda Edición Editorial Mc Graw Hill James A. Senn Paginas: 11, 12, 122, 123, 124, 125, 380, 381,382 MYSQL Segunda Edición Editorial Alfa – Omega Cesar Pérez López Paginas: 9, 10, 11, 34, 35, 38, 39,40 71