UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERIA DEPARTAMENTO DE COMPUTACIÓN DESARROLLO DE SOFTWARE PARA CONTROL DE INVENTARIO CHRISTIAN TURINA PÉREZ 2006 El presente informe ha sido aprobado con la siguiente calificación: Christian Turina P. Informe : Defensa : Nota Final : Sra. Patricia Maldonado Directora Departamento de Computación e Informática 13 de Marzo de 2006 UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN “Proyecto de Aplicación presentado en conformidad a los requisitos para obtener el título Técnico en Computación e Informática.” “Profesor Guía: Sr. Carlos Arias M.” CHRISTIAN TURINA PÉREZ 2006 ÍNDICE • Índice i • Resumen ii • Capítulo I o Introducción • Capítulo II o Planteamiento Del Problema • 5 Capítulo V o Presentación De La Interfaz • 3 Capítulo IV o Diseño De La Base De Datos • 2 Capítulo III o Desarrollo De La Información • 1 10 Capítulo VI o Conclusiones 19 • Anexos 20 • Bibliografía 25 RESUMEN El siguiente proyecto consiste en el desarrollo de un Software orientado a manejar el Control de Inventario tanto del hardware como de los accesorios conformantes de los computadores pertenecientes al Laboratorio de Computadores del Departamento de Ingeniería en Computación. El objetivo de este proyecto es diseñar e implementar una herramienta gratuita capaz de mantener el inventario de los componentes básicos de hardware y accesorios de cualquier computador. Si bien, esta herramienta ha sido desarrollada en Microsoft Windows, esta debe ejecutarse en cualquier sistema operativo, ya que en el laboratorio de computadores del departamento no sólo se utiliza dicho sistema, sino que también la distribución de Linux Fedora Core. Las Herramientas que se utilizaron son Java j2sdk1.4.2_02 junto con JDBC e iText (dos API diseñados para este lenguaje), además de MySQL 5.0 y NetBeans 4.1. CAPÍTULO I INTRODUCCIÓN INTRODUCCIÓN El presente trabajo, fue elaborado pensando en la necesidad de tener una herramienta capaz de mantener el inventario de las partes y piezas de los computadores pertenecientes al Departamento de Ingeniería en Computación de la Universidad de Magallanes, ya que éste, no contaba con ninguno. Lo que se desea es diseñar e implementar un sistema que sea capaz de realizar un inventario abarcando las características básicas de un computador y que a la vez, pueda ser ejecutado en cualquier sistema operativo, por lo tanto fue perentorio la utilización de un lenguaje capaz de correr en ambos sistemas, lo que llevó a la elección de Java, el cual apoyado de JDBC (Java Database Connectivity), es capaz de crear aplicaciones robustas y de gran calidad. Otro aspecto importante, fue que este sistema debería ser capaz de generar reportes específicos y en un formato portable, como lo es actualmente PDF, siendo estos de gran ayuda para la toma de decisiones al momento de realizar actualizaciones o mantención a un equipo. La metodología para el desarrollo de este trabajo se estructura de la siguiente forma: • Planteamiento del problema • Desarrollo del sistema de información • Diseño de la base de datos • Presentación de la interfaz CAPÍTULO II PLANTEAMIENTO DEL PROBLEMA PLANTEAMIENTO DEL PROBLEMA Se requiere desarrollar una aplicación que sea capaz de generar los informes semestrales que deben ser realizados por los ayudantes del laboratorio de computadores del Departamento de Ingeniería en Computación, ya que esté actualmente posee un sistema que utiliza una plantilla en formato Microsoft Exel o OpenOffice, la cual debe ser llenada manualmente por cada integrante. Estos informes, contemplan la información del estado y características más importantes tanto de hardware (placa madre, procesador, disco duro etc.) como de los accesorios (Gabinete, Mouse, teclado etc.) de los computadores que le son asignados a cada uno. Finalmente, la idea del sistema es una herramienta que sea capaz de facilitar el manejo de esta información y de generar reportes de esta misma. CAPÍTULO III DESARROLLO DEL SISTEMA DE INFORMACIÓN DESARROLLO DEL SISTEMA DE INFORMACIÓN Como ya se mencionó anteriormente, entre los aspectos importantes para el desarrollo de la aplicación y para la generación de reportes, fue la utilización de un lenguaje de programación que fuera compatible con cualquier sistema operativo, esto conllevó a la elección de Java para la programación y de PDF para los reportes, ya que ambos poseen cierto grado de portabilidad con respecto a otros lenguajes como lo es por ejemplo Visual Basic y Cristal Report. El mismo problema también se hizo presente al momento de elegir un motor de base de datos, ya que tendrían que descartarse entre Microsoft Acces y Microsoft MySQL Server, por esto, se eligió MySQL 5.0. Todo esto llevó a la interrogante de encontrar una forma para combinar todas las tecnologías mencionadas, lo que finalmente concluyó en el uso de JDBC, un API de Java que presta servicios para la conexión a distintos motores de Bases de Datos. El API JDBC consiste de un conjunto de clases e interfaces que permiten a cualquier programa Java acceder a sistemas de bases de datos de forma homogénea. En otras palabras, con el API JDBC no es necesario escribir un programa para accesar a Sybase, otro programa para accesar a Oracle, y otro programa para accesar a MySQL; con esta API, se puede crear un sólo programa en Java que sea capaz de enviar sentencias SQL a la base de datos apropiada. A continuación se ejemplifica con un fragmento de código el funcionamiento de JDBC, este código sólo comprueba que exista conexión con una base de datos, no obstante es la base para el funcionamiento de cualquier sentencia SQL: import java.sql.*; public class TestConnection { static String bd = "agendita"; static String login = "bingo"; static String password = "holahola"; static String url = "jdbc:mysql://localhost/"+bd; public static void main(String[] args) throws Exception { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url,login,password); if (conn != null) { System.out.println("Conexión a base de datos "+url+" ... Ok"); conn.close(); } } catch(SQLException ex) { System.out.println(ex); } catch(ClassNotFoundException ex) { System.out.println(ex); } CAPÍTULO IV DISEÑO DE LA BASE DE DATOS DISEÑO DE LA BASE DE DATOS Para el proceso de implementación de la Base de Datos, se utilizó la planilla Microsoft Exel u OpenOffice mencionada anteriormente, ya que en esta están todos los componentes referentes a Hardware y Accesorios que el Laboratorio de Computadores del Departamento de Ingeniería en Computación ha considerado importantes. Si bien la base de Datos no es muy compleja ni extensa, esta es capaz de almacenar toda la información referente al problema. A continuación se presentan y describen cada una de las tablas: • Tabla pc: La tabla PC es la encargada de almacenar la información referente a la identificación un computador, algunos de los datos que se almacenan en ella los son por ejemplo: código del PC, nombre del PC, ayudante encargado (en el caso que existiese). A continuación se presentan y explican cada uno de los campos de la tabla. Field Type Null Key Extra Codpc Int(11) No Pri Auto_increment Nompc Varchar(20) No Null Estado Int(1) No Null Ayudante Varchar(10) Yes Null 1. Campo codpc: corresponde a un identificador único para cada pc, este es declarado como auto_increment para evitar su duplicación, además es de carácter numérico y está definido como clave principal. 2. Campo nompc: corresponde al nombre por el cual es identificado cada pc del laboratorio, esta declarado como varchar para evitar el mal uso de espacio en el caso de que el nombre fuera menor que 20 caracteres. 3. Campo Estado: este campo describe el estado de ingreso de cada pc, es decir, tiene dos valores únicos, estos pueden ser 1 o 0. En este caso el 0 indica que no se han ingresado datos para un equipo y el 1, que el equipo ya tiene datos ingresados. 4. Campo ayudante: Este campo no es de carácter obligatorio, ya que no todos los computadores tienen un ayudante asignado, sin embargo, en caso que este lo tuviera, acá se ingresa el login del encargado de su mantención. • Tabla hardware: La tabla hardware es la encargada de almacenar todo lo referente al Hardware perteneciente a un computador, en ella, se encuentran las marcas y descripciones de cada una de estas partes. A continuación se presentan y explican cada uno de los campos de la tabla. Field Type Null Key Codpc Int(11) No Pri Codhw Int(11) No Pri Marca Varchar(100) No Descripción Varchar(100) No Extra 1. Campo codpc: corresponde al código del computador al cual corresponde la información de los campos restantes, es de carácter numérico. 2. Campo codhw: corresponde a un código numérico encargado de diferenciar el hardware. 3. Campo marca: corresponde a la marca del Hardware al cual se le están ingresando datos. Ej.: marca Asus. 4. Campo descripción: corresponde a la descripción del hardware. • Tabla accesorios: La tabla accesorios es la encargada de almacenar todo lo referente a los componentes de un computador que no son hardware, como por ejemplo, Mouse, teclado, cables de red, etc., En ella se encuentran las marcas y estados de cada una de estas partes. A continuación se presentan y explican profundamente cada uno de los campos de la tabla. Field Type Null Key Codpc Int(11) No Pri Codac Int(11) No Pri Marca Varchar(100) No Estado Varchar(8) No Extra 1. Campo codpc: corresponde al código del computador al cual corresponde la información de los campos restantes, es de carácter numérico. 2. Campo codac: corresponde a un código numérico encargado de diferenciar el accesorio. 3. Campo marca: corresponde a la marca del Accesorio al cual se le están ingresando datos. Ej.: marca: Genius. 4. Campo estado: describe el estado físico del accesorio, este puede tener tres valores: Óptimo, Regular o Malo. Finalmente, para dar por concluido este capítulo, se presenta el diagrama entidad relación correspondiente a la base de datos presentada. Fig. 4.1 Como se ve en la fig.4.1, el campo pc de la tabla pc, se relaciona con los campos pc de las tablas restantes y el campo codac de accesorios, se relaciona con codhw de hardware. CAPÍTULO V PRESENTACIÓN DE LA INTERFAZ PRESENTACIÓN DE LA INTERFAZ La interfaz esta diseñada para ser ejecutada bajo una resolución de 800 x 600. Esta consiste en un menú principal desde el cual se llaman las distintas secciones de la aplicación. Las opciones disponibles para el usuario son: 1. Ingresar Datos 2. Modificar Datos 3. Generar / Ver Informes 4. Crear, Modificar Eliminar PC 5. Salir Fig. 5.1 i) Ingresar Datos: Este formulario es el encargado de ingresar la información a la base de datos. Acá existe un selector en la parte superior donde se debe seleccionar el PC al cual se le van a ingresar sus características. Es preciso destacar que en dicho selector, sólo estarán disponibles aquellos computadores a los cuales aún no se les han ingresado datos. En el caso de que no existan PC’s carentes de datos, se visualizará el mensaje: “No existen registros nuevos” Una vez ingresada toda la información, está disponible el botón ingresar, el cual, al ser presionado, transferirá los datos respectivos datos a la base de datos. Fig. 5.2 Además, están disponibles las funciones limpiar, la cual limpia el formulario y salir, que cierra el formulario ii) Modificar Datos: Este formulario cumple con las mismas características que el formulario anterior. Para poder modificar datos, se debe seleccionar un computador y luego presionar el botón cargar datos, a continuación, se modifica libremente y se presiona modificar. Fig. 5.3 Además, están disponibles las funciones limpiar, la cual limpia el formulario y salir, que cierra el formulario iii) Generar / Ver Reportes: en esta opción, el usuario puede acceder a la información ingresada previamente a la base de datos, para esto se debe seleccionar un pc en la parte superior y a continuación presionar el botón ver informe. En caso que el usuario desee generar un reporte en formato pdf, puede presionar el botón generar informe. Fig. 5.4 Además, están disponibles las funciones limpiar, la cual limpia el formulario y salir, que cierra el formulario iv) Crear, Modificar Eliminar PC: Este menú permite la creación, modificación y eliminación de computadores del sistema de inventario. El formulario esta dividido en tres secciones: • Crear Nuevo PC: Esta opción permite agregar nuevos computadores al sistema, para llevar a cabo esta opción, es necesario especificar un nuevo nombre de PC y opcionalmente un ayudante encargado para este. • Modificar PC: permite modificar el nombre y el ayudante de un computador. Para utilizar esta opción, es preciso cargar los datos del PC que se desee modificar seleccionando un computador en el selector nombre y presionando el botón cargar anterior. Una vez cargados los datos se modifica libremente, al finalizar se debe presionar modificar. • Eliminar PC: elimina permanentemente un computador del sistema. Esta sección trabaja de la misma forma que las secciones anteriores. Fig. 5.5 v) Los Mensajes: La aplicación cuenta con mensajes de error o aprobación que le indican al usuario si han cometido un error o bien, si los datos han sido ingresados correctamente al sistema. A continuación se presentan algunos de estos mensajes. En el menú Crear, Modifica PC: Si el usuario desea eliminar un computador del sistema, este visualizará el siguiente dialogo de confirmación con el fin de dar oportunidad a cancelar la eliminación: Fig. 5.6 En el caso de que la eliminación fuese aprobada, entonces el mensaje que visualizara será el siguiente: Fig. 5.7 En el caso contrario. El usuario no recibirá ningún mensaje. En el caso que al crear un nuevo PC, el usuario no ingrese el nuevo nombre para este computador, se visualizará el siguiente mensaje de error indicando el problema ocurrido. Fig. 5.8 Si el usuario ha completado todos los datos correctamente, el mensaje de aprobación será el siguiente: Fig. 5.9 Menú Ver Generar Reportes: En esta sección del sistema, el usuario no se verá invadido de muchos mensajes de advertencia, ya que las opciones a las que este tiene acceso está extremadamente limitadas, no obstante, el usuario podrá visualizar algunos de los siguientes diálogos. Al generar un reporte correctamente: Fig. 5.10 Menú Modificar Datos: En esta sección entre los mensajes que se podrán visualizar está el siguiente: Fig. 5.11 CAPÍTULO VI CONCLUSIONES CONCLUSIONES: Al desarrollarse la aplicación se pudo descubrir y utilizar las múltiples ventajas que tiene JAVA, con respecto a otros lenguajes, ya que éste cuenta con extensas posibilidades para desarrollar distintas cosas, como lo fueron en este caso, la generación de PDF utilizando el API de iText o JDBC para conectarse a la base de datos, todas las cuales ya están desarrolladas, lo que conlleva a que el usuario que desee utilizarlas solo debe buscarlas y leer sus especificaciones. Otro punto destacable, es que al combinar JAVA con distintos API, lo convierte en una herramienta capas de generar aplicaciones robustas y confiables y a la vez, de gran versatilidad. En el proceso de desarrollo es importante destacar la utilización de NetBeans, un herramienta IDE que permite la utilización de un API llamado null Layout, el cual permite al usuario “dibujar” libremente su aplicación, evitándose pérdidas de tiempo en indicar coordenadas como pasa al utilizar otros layout. Al programarse esta aplicación se utilizó un diseño en capas, lo que llevó a descubrir las mejorías que tiene esta forma de programación con respecto a otras. Un ejemplo de ventaja de este tipo de diseño podría ser la necesidad de cambiar el motor de la Base de Datos, ya que en el caso del sistema creado sólo hay que cambiar una de las clases y no toda la aplicación. Finalmente, para concluir el presente informe, se deja abierta la posibilidad a futuros programadores la implementación de servlets para sistema desarrollado, ya que de esta forma se podría ejecutar la aplicación en un servidor en vez de localmente. Recordando que gracias al diseño en capas, se utilizarían las mismas clases ya creadas. ANEXOS A continuación se presenta el resultado final correspondiente a la generación de documento en PDF. A continuación se presentan algunos ejemplos de códigos, definiciones y de material utilizado para el desarrollo del sistema, con el fin de prestar ayuda al que desee desarrollar algún tema similar. • JDBC: Qué es JDBC? JDBC es usado para enviar comandos SQL hacia una base de datos relacional, que puede ser MySQL, Oracle, Infomix, SyBase, etc. Qué hace JDBC? 1. Establece una conexión con una BD 2. Envía sentencias SQL 3. Procesa los resultados Connection con = DriverManager.getConnection ( "jdbc:odbc:wombat", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } JDBC es una integración de SQL hacia Java, es decir que las sentencias SQL se puedan mezclar con Java, por ejemplo, que una variable de Java pueda ser usada en una sentencia SQL para recibir o dar valores. Un mapeo directo de las tablas de la Base de Datos hacia las clases de Java, donde cada fila de la tabla se convierte en una instancia de la clase, y donde cada columna se corresponde a un atributo de esa instancia. • Generación de PDF con iText iText es una librería gratuita que permite a desarrolladores extender las capacidades de sus aplicaciones java a la creación de documentos PDF en forma dinámica. Para su utilización en el presente proyecto, se creó una clase PDF que recibe parámetros para utilizarlos en la creación de un documento. A continuación se muestra un fragmento de este código. /** * Clase que, haciendo uso de la biblioteca de clases iText 1.3, genera un archivo PDF con los datos proporcionados */ public class GenerarPDF { /** * Constructor por defecto de la clase GenerarPFD */ public GenerarPDF() { public void crearPDF(String tituloInforme, Vector hardware, Vector accesorios, String nombrePDF) { Document document = new Document(); HW hw; AC ac; try { nombrePDF="c:\\ "+nombrePDF; PdfWriter.getInstance(document, new FileOutputStream(nombrePDF)); document.open(); Table cabecera = new Table(1); cabecera.setWidth(100f); cabecera.setBorderWidth(0); cabecera.setPadding(8); Font fontCabecera = new Font(bfArial,16); fontCabecera.setColor(new Color(255, 255, 255)); Cell cell = new Cell(); cell.add(new Paragraph(tituloInforme, fontCabecera)); cell.setHeader(true); . . . Codigo . . . BIBLIOGRAFIA • Sergio Alejandro Dos Santos, JAVA La guia total del programador,MP Ediciones, 2005, Buenos Aires Argentina. • Abraham Otero, JAVA 2, javaHispano, 2003. • Abraham Otero, El ABC del JDBC, javaHispano, 2003. • DECSAI, Construcción de Interfaces gráficos de usuario, Noviembre 2005 • www.javahispano.com • www.mysql.conclase.net • www.itext.com • www.sun.java.com