librojavaenfoquepráctico

317
Java - Enfoque Práctico Ing. Javier Alberto Manrique Quiñonez 1

Upload: omar-lino-mendez-bustamante

Post on 31-Aug-2014

207 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 1

Page 2: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 2

Page 3: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 3

Page 4: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 4

LENGUAJE DE PROGRAMACIÓN JAVA

Java es un lenguaje de programación orientado a objetos que es utilizado por gran parte del mundo industrial y académico. Java fue desarrollado a principios de los años 90 por James Gosling y su equipo en Sun Microsystem en California. El lenguaje se basa en C y C++ pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria. Su propósito original fue escribir programas que controlaran electrodomésticos de consumo masivo, tales como tostadoras, hornos microondas, etc. Al principio se llamó Oak, en honor al roble que había afuera de la oficina de Gosling, luego pasó a denominarse Green tras descubrir que Oak era ya una marca comercial registrada para adaptadores de tarjetas gráficas, pero el nombre ya estaba tomado, así que el equipo lo renombró Java.

A menudo se describe al Java como un lenguaje de programación Web, debido a que se usa para escribir programas llamados applets (subprogramas) que se ejecutan dentro de un navegador Web, los cuales permiten una difusión más dinámica y flexible de la información en Internet. Java no solo se limita a escribir Applets, también puede ser utilizado para escribir aplicaciones que son programas completos y autónomos que no requieren de navegadores Web. En realidad, Java permite escribir programas como otros lenguajes de programación, tales como el C# y Visual Basic .net.

En este libro utilizamos el lenguaje de programación Java, NetBeans como IDE libre para desarrollar aplicaciones en Java, arquitectura de tres capas, acceso a base de datos utilizando MySQL y el iReport como herramienta para generar y gestionar informes.

INSTALACIÓN DEL JAVA 1.6.16. Para la instalación de Java JDK 1.6.16 debe de realizar lo siguiente:

Ubique la carpeta E:\Programas\Java en el CD de trabajo y verifique que el archivo Java-6u16-windows-i585.exe se encuentre grabado. Luego haga doble clic en el ejecutable Java-6u16-windows-i585.exe para empezar la instalación.

Verifique que se presente el cuadro de diálogo de Bienvenida (Welcome). Luego haga clic en el botón de comando Siguiente (Next).

Page 5: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 5

En cuadro de diálogo de Acuerdos de Licencia (License Agreement) haga clic en botón de comando Aceptar (Accept).

En cuadro de diálogo de Instalación (Installing) verifique que ha empezado la instalación.

En el cuadro de dialogo Carpeta Destino (Destination Folder) haga clic en el botón de comando Siguiente (Next). Utilice la carpeta destino por defecto.

Page 6: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 6

En el cuadro de dialogo Progreso de Instalación (Setup Progress) verifique la indicación que el proceso puede tomar algunos minutos (This may take a few minutes).

En el cuadro de diálogo Instalando (Installing) verifique el progreso de la instalación ha empezado.

En el cuadro de diálogo Java(TM) SE Development kit 6 Update 16 verifique el progreso de la instalación ha terminado con éxito.

Page 7: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 7

NETBEANS NetBeans es un entorno de desarrollo integrado (IDE) de código abierto el cual permite escribir, compilar, depurar y ejecutar aplicaciones en Java y en otros lenguajes de programación. El NetBeans IDE posee una herramienta de desarrollo modular para una amplia gama de tareas de desarrollo. La base IDE incluye un avanzado editor de lenguaje, un depurador e integrador de perfiles, un archivo de control de versiones y es el único IDE con características de colaboración. Posee herramientas para crear aplicaciones empresariales en entorno escritorio, entorno Web y aplicaciones móviles con el lenguaje Java, C / C + +, e incluso los lenguajes dinámicos como PHP, JavaScript , Groovy, y Ruby. El IDE NetBeans se instala, utiliza y se ejecuta en varias plataformas, incluyendo Windows, Linux, Mac OS X y Solaris.

NetBeans permite que las aplicaciones sean desarrolladas a partir de un conjunto de componentes de software llamados módulos. Un módulo es un archivo Java que contiene clases de java escritas para interactuar con las APIs de NetBeans y un archivo especial (manifest file) que lo identifica como módulo. Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos módulos. Debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fácilmente por otros desarrolladores de software.

NetBeans es un proyecto de código abierto de gran éxito con una gran base de usuarios, una comunidad en constante crecimiento, y con cerca de 100 socios en todo el mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en junio 2000 y continúa siendo el patrocinador principal de los proyectos.

INSTALACIÓN DE NETBEANS 6.7.1 Para la instalación del NetBeans 6.7.1 se debe de realizar lo siguiente:

Ubique la carpeta E:\Programas\Netbeans en el CD de trabajo y verifique que el archivo netbeans-6.7.1 –ml-windows.exe se encuentre grabado. Luego haga doble clic en el ejecutable netbeans-6.7.1 –ml-windows.exe para empezar la instalación.

En el cuadro de diálogo Instalador del IDE del Netbeans (NetBeans IDE Installer) verifique que se está realizando la configuración del instalador del IDE.

En el cuadro de diálogo Instalador del IDE del Netbeans (NetBeans IDE Installer) verifique la continuación de la configuración del instalador del IDE.

Page 8: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 8

En el cuadro de diálogo de Bienvenida del Instalador del IDE NetBeans 6.7.1 (Welcome to the NetBeans IDE 6.7.1 Installer) haga clic en el botón de comando Personalizar (Customize).

En el cuadro de diálogo de Personalización de Instalación (Customize installation) seleccione Base IDE, Java SE y UML y luego haga clic en el botón de comando Ok.

Page 9: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 9

En el cuadro de diálogo de Bienvenida del Instalador del IDE del NetBeans (Welcome to the NetBeans IDE 6.7.1 Installer) haga clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo de Acuerdos de Licencia (License Agreement) seleccione la casilla de verificación “Yo Acepto los términos del acuerdo de licencia” (I accept the terms int the license agreement) y luego haga clic en el botón de comando Siguiente (Next).

Page 10: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 10

En el cuadro de diálogo de Instalación del Netbeans IDE 6.7.1 (Netbeans IDE 6.7.1 Installation) seleccione la carpeta donde se instalará el IDE del Netbeans IDE y la carpeta donde se encuentra instalado el Java SE Development Kit (JDK). Luego haga clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo de Resumen (Summary) verifique que el Netbeans 6.7.1 se instalará en la carpeta seleccionada anteriormente. Luego haga clic en el botón de comando Instalar (Install).

En el cuadro de diálogo de Resumen (Summary) verifique que el Netbeans 6.7.1 se instalará en la carpeta seleccionada anteriormente. Luego haga clic en el botón de comando Instalar (Install).

Page 11: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 11

En el cuadro de diálogo de Instalación (Installation) verifique el progreso de la instalación se encuentra en progreso.

En el cuadro de diálogo de instalación completa (Setup Complete) verifique que la instalación del IDE del NetBeans ha finalizado.

Nota: A la fecha es posible se existan nuevas versiones de NetBeans y Java SE pero las diferencias en la instalación son mínimas.

Page 12: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 12

iReport iReport es un poderoso, intuitivo y fácil diseñador visual de informes de código abierto. El iReport genera archivos .jasper que permiten crear y probar cualquier tipo de fuentes de datos, diseño, vista previa y la exportación de informes en todos los formatos actualmente soportados tales como PDF, HTML, RTF, XLS, CSV, Excel Open Office, texto y XML. El iReport utiliza la biblioteca del JasperReports, la cual es la mejor herramienta de código abierto en Java para generar y gestionar informes. El iReport puede entregar ricas presentaciones o diseños en la pantalla, para la impresora o para archivos. El iReport se puede utilizar en una gran variedad de aplicaciones de escritorio en Java, incluyendo J2EE o aplicaciones Web para generar contenido dinámico.

El funcionamiento del iReport consiste generar un archivo XML donde se recogen las particularidades del informe. Este archivo XML lo tratan las clases del JasperReports para obtener una salida. El proceso de generación de un informe es:

Utilizar el iReport para generar un archivo .Jrxml en el que se configura el informe. Compilar el archivo .Jrxml para obtener un archivo .Jasper. Rellenar los datos del informe generando un archivo .Jrprint Exportar el archivo .Jrprint al formato que deseemos (pdf, etc).

El archivo .Jasper se carga en una aplicación Java utilizando la API de JasperRepors y se utiliza para generar el informe con un origen de datos que puede ser una conexión JDBC. Si es necesario puede utilizar parámetros de entrada para filtrar los registros en el informe. El resultado del informe puede ser exportado en un formato final (como PDF) o verla en el visor incorporado del JasperReports. Todas estas operaciones se pueden realizar directamente en iReport como parte del proceso de creación de los informes. El iReport está además integrado con JFreeChart que es una de las bibliotecas gráficas de código abierto más difundida para Java.

JasperReport ha desarrolado un añadido (plugin) para integrarse al IDE de NetBeans. La utilización de este añadido permite mejorar la creación y gestión de informes durante el desarrollo de aplicaciones en Java.

INSTALACIÓN DEL PLUGIN DEL iREPORT 3.5.3. EN NETBEANS 6.7.1 Para la instalación del plugin del iReport 3.5.3 en NetBeans 6.1 se debe de realizar lo siguiente:

Ubique la carpeta E:\Programas\iReport-nb-3.5.3-plugin en del CD de trabajo.

Cargue el NetBeans IDE 6.7.1.

Page 13: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 13

En Herramientas (Tools) del Menú Principal haga clic en Añadidos (Plugins).

En Añadidos (Plugins) haga clic en la pestaña Descargas (Downloaded).

Page 14: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 14

En el cuadro de diálogo Añadidos (Plugins) haga clic en botón de comando Agregar Añadidos (Add Plugins).

En Buscar del cuadro de diálogo Agregar Añadidos (Add Plugins) ubique la carpeta E:\Programas\iReport-nb-3.5.3-plugin del CD de trabajo y seleccione los 4 archivos y haga clic en el botón de comando Abrir.

Page 15: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 15

En el cuadro de diálogo Añadidos (Plugins) seleccione las casillas de verificación de los plugins ireport- designer, jasperserver-plugin, jasperreports-components y jasperreport-extensions. Luego haga clic en el botón de comando Instalar (Install).

En el cuadro de diálogo de Bienvenidos al Instalador de Añadidos del NetBeans (Welcome to the NetBeans IDE Plugin Installer) haga clic en el botón de comando siguiente.

Page 16: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 16

En el cuadro de diálogo de Acuerdos de Licencia seleccione “Yo acepto los términos de todos los acuerdos de la licencia” (I accept the terms in all of the license agreements) y luego haga clic en el botón de comando Instalar (Install).

En el cuadro de diálogo Instalar IDE NetBeans (NetBeans IDE Installer) verifique el progreso del proceso de instalación del plugin.

Page 17: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 17

En el cuadro de diálogo Advertencia de Validación (Validation Warning) haga clic en el botón de comando Continuar (Continue).

En el cuadro de diálogo Instalación (Install) verifique que el proceso de instalación está en progreso.

En el cuadro de diálogo Instalación (Install) verifique que el proceso de instalación ha terminado exitosamente. Luego haga clic en el botón de comando Finalizar (Finish).

Page 18: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 18

Haga clic en la pestaña Instalados (Installed) y verifique la instalación de ireport-designer, report-server-plugin, jasperreports-components y jasperreports-extensions. Luego haga clic en el botón de comando Cerrar (Close).

Page 19: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 19

En Herramientas (Tools) del Menú Principal haga clic en Librerías (Libraries).

En el cuadro de diálogo de Administración de Librerías (Library Manager) haga clic en el botón de comando Nueva Librería (New Library).

Page 20: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 20

En el cuadro de diálogo de Nueva Librería (New Library) escriba como nombre de la librería JasperReport3.5.3.

En el cuadro de diálogo de Administración de Librerías (Library Manger) verifique que se ha añadido la librería JasperReports3.5.3. Luego haga clic en el botón de comando Agregar JAR/Carpeta (Add JAR/Folder).

Page 21: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 21

En Buscar del cuadro de diálogo de Visualizar JAR/Carpetas (Browse JAR/Folder) ubíquese en la carpeta C:\Archivos de programa\NetBeans 6.7.1\ireport\modules y seleccione todos los archivos JAR visualizados. Luego haga clic en el botón de comando Agregar JAR/Carpeta (Add JAR/Folder).

En el cuadro de diálogo de Administración de Librerías (Library Manger) verifique que se ha añadido las librerías JasperReports3.5.3. Luego haga clic en el botón de comando Agregar JAR/Carpeta (Add JAR/Folder).

Page 22: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 22

En Buscar del cuadro de diálogo de Visualizar JAR/Carpetas (Browse JAR/Folder) ubíquese en la carpeta C:\Archivos de programa\NetBeans 6.7.1\ireport\modules\ext y seleccione todos los archivos JAR visualizados. Luego haga clic en el botón de comando Agregar JAR/Carpeta (Add JAR/Folder).

En el cuadro de diálogo de Administración de Librerías (Library Manger) verifique que se ha añadido las librerías JasperReports3.5.3. Finalmente haga clic en el botón de comando OK. La instalación ha terminado.

Page 23: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 23

MySQL Es un sistema de administración de bases de datos (DBMS) que proporciona los mecanismos para almacenar, organizar, obtener y modificar datos. Permite el acceso y almacenamiento de datos sin preocuparse por su representación interna. MySQL proporciona un servidor de base de datos SQL (Structured Query Language) muy rápido, multihilo, multiusuario y robusto. Está diseñado para entornos de producción críticos, con alta carga de trabajo, así como para integrarse en software para ser distribuido. Es una marca registrada de MySQL AB.

MySQL tiene una doble licencia. Los usuarios pueden elegir entre usar el software MySQL como un producto Open Source bajo los términos de la licencia GNU General Public License o pueden adquirir una licencia comercial estándar de MySQL AB.

MySQL es muy utilizado en aplicaciones de escritorio y en aplicaciones Web tanto en plataformas Windows y Linux. Su popularidad como aplicación Web está muy ligada a PHP, que a menudo aparece en combinación con MySQL. MySQL es una base de datos muy rápida en la lectura que utiliza el motor no transaccional MyISAM.

MySQL tiene las características más importantes:

Está escrito en C y en C++ y ha sido probado con un amplio rango de compiladores diferentes. Funciona en diferentes plataformas (Windows, Linux, etc.). Posee APIs disponibles para Java, C, C++, Eiffel, Perl, PHP, Python y Ruby. Uso completo de multihilo mediante hilos del kernel. Pueden usarse fácilmente múltiple CPUs si están

disponibles, además posee un sistema de reserva de memoria muy rápido basado en hilos. Proporciona sistema de almacenamiento transaccional y no transaccional. Usa tablas en disco B-tree (MyISAM) muy rápidas con compresión de índice. Tiene Joins muy rápidos usando un multi-join de un paso optimizado. Tablas hash en memoria, que son usadas como tablas temporales. Las funciones SQL están implementadas usando una librería altamente optimizada y rápida. El servidor

está disponible como un programa separado para usar en un entorno de red cliente/servidor. También está disponible como biblioteca y puede ser incrustado (linkado) en aplicaciones autónomas. Dichas aplicaciones pueden usarse por sí mismas o en entornos donde no hay red disponible.

Utiliza las siguientes tipos de columnas: enteros con/sin signo de 1, 2, 3, 4, y 8 bytes de longitud, FLOAT, DOUBLE, CHAR,VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, y tipos espaciales OpenGIS. Utiliza registros de longitud fija y longitud variable.

Posee un soporte completo para operadores y funciones en las cláusulas de consultas SELECT y WHERE. Por ejemplo:

Posee un soporte completo para las cláusulas SQL GROUP BY y ORDER BY. Soporte de funciones de agrupación (COUNT(),COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), y GROUP_CONCAT()).

MySQL posee un soporte completo soporte para LEFT OUTER JOIN y RIGHT OUTER JOIN cumpliendo estándares de sintaxis SQL y ODBC.

DELETE, INSERT, REPLACE, y UPDATE devuelven el número de filas que han cambiado (han sido afectadas).

Soporta programación con base de datos concurrente. Da soporte a tecnologías actuales como Inteligencia de Negocios. MySQL con respecto a la escalabilidad y límites, soporta grandes bases de datos que pueden contener

50 millones de registros. También conocemos a usuarios que usan MySQL Server con 60.000 tablas y cerca de 5.000.000.000.000 de registros.

Page 24: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 24

INSTALACIÓN DEL MySQL 5.1 Para la instalación del MySQL 5.1.35 se debe de realizar lo siguiente:

Ubique el archivo mysql-essential-5.1.35-win32 en el CD de trabajo proporcionado.

Ejecutar el archivo mysql-essential-5.1.35 -win32.msi y hacer clic en el botón de comando Ejecutar.

En el cuadro de diálogo de Bienvenida de Asistente de Configuración (Setup Wizard) haga clic en el botón de comando Siguiente (Next).

Page 25: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 25

En el cuadro de diálogo de Tipo de Configuración (Setup Type) del Asistente de Configuración (Setup Wizard) seleccione Personalizado (Custom) y luego haga clic en botón de comando Siguiente (Next).

En el cuadro de diálogo de Personalización de Configuración (Custom Setup) del Asistente de Configuración (Setup Wizard) haga clic en el botón de comando Siguiente (Next).

Page 26: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 26

En el cuadro de diálogo de Listo para Instalar el Programa (Ready to Install the Program) del Asistente de Configuración (Setup Wizard) haga clic en botón de comando Instalar (Installar).

En el cuadro de diálogo del Asistente de Configuración (Setup Wizard) verifique el progreso de la

instalación.

Page 27: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 27

En el cuadro de diálogo MySQL Enterprise haga clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo MySQL Enterprise haga clic en el botón de comando Siguiente (Next).

Page 28: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 28

En el cuadro de diálogo Asistente Completado (Wizard Completed) del Asistente de Configuración (Setup Wizard) haga clic en el botón de comando Finalizar (Finish).

En el cuadro de diálogo de Bienvenida del Asistente de Configuración de una Instancia de MySQL Server

(MySQL Server Instance Configuration Wizard) haga clic en el botón de comando Siguiente (Next).

Page 29: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 29

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) seleccione Configuración detallada (Detailed Configuration) y luego haga clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) seleccione Maquina de Desarrollo (Developer Machine) y luego haga clic en el botón de comando Siguiente (Next).

Page 30: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 30

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) seleccione Solo Base de Datos Transaccional (Transactional Database Only) y luego hacer clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) haga clic en el botón de comando Next (Siguiente).

Page 31: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 31

En el cuadro de diálogo del Asistente de Configuración de Instancia de una MySQL Server (MySQL Server Instance Configuration Wizard) seleccione Procesamiento de Transacciones en Línea OLTP (Online Transacction Processing) y luego haga clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) active la casilla de verificación Permitir Trabajo en Red con TCP/IP (Enabled CP/IP Networking) y la casilla de verificación Activar Modo Estricto (Enable Strict Mode). Luego asigne como Número de Puerto (Port Number) el valor 3306 y finalmente haga clic en el botón de comando Siguiente (Next).

Page 32: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 32

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) seleccione Conjunto de Caracteres Estándar (Estándar Character Set) y luego haga clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) active la casilla Instalar como Servicio Windows (Install As Windows Service) y la casilla de verificación Levantar el MySQL Server Automáticamente (Launch the MySQL Server Automatically). Luego hacer clic en el botón de comando Siguiente (Next).

Page 33: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 33

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) active la casilla de verificación Modificar Configuración de Seguridad (Modify Security Setting). En Nuevo palabra clave de raíz (New root password) ingrese “12345” y luego retipee palabra clave de raíz para confirmar (Confirm) “12345”. Finalmente hacer clic en el botón de comando Siguiente (Next).

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) verifique que el proceso de instalación de la instancia ha empezado.

Page 34: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 34

En el cuadro de diálogo del Asistente de Configuración de una Instancia de MySQL Server (MySQL Server Instance Configuration Wizard) verifique que el proceso de instalación de la instancia ha terminado exitosamente.

Page 35: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 35

Page 36: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 36

Programación Orientada a Objetos El mundo real está formado por objetos: personas, animales, casas, autos, etc. Las aplicaciones (software) están compuestas por muchos objetos: interfaces gráficas de usuario, cuadros de diálogo, barras de menú, barra de herramientas, cuadros de texto, botones de comando, etiquetas, areas de texto, etc. Todos ellos con la capacidad de interactuar con los usuarios. Todos los objetos tienen atributos (tamaño, forma, color, peso, etc) y también comportamiento (por ejemplo un auto inicia su funcionamiento, acelera la velocidad, gira una esquina, detiene su recorrido, etc). Todos los objetos similares en sus atributos y comportamiento se caracterizan por ser agrupados en una misma clase (clase persona, clase casas, clase auto, etc). Las personas comprenden los objetos estudiando sus atributos y observando su comportamiento.

El diseño orientado a objetos (DOO) modela el software en términos similares a los que utilizan las personas para describir el mundo real. Se aprovecha las relaciones entre clases de objetos, en donde objetos de cierta clase tienen las mismas características (atributos y comportamiento). Aprovecha las relaciones de herencia en donde nuevas clases de objetos se derivan de clases objetos ya existentes de los cuales heredan sus características (atributos y comportamientos) y agrega nuevas características según sus necesidades. El DOO permite crear aplicaciones (software) modelando de los objetos sus atributos y comportamiento. Tambien se modela la comunicación entre los objetos que se caracteriza por el envio y recepción de mensajes. Los objetos encapsulan (ocultan) los atributos (variables de instancia) y comportamiento (operaciones que se implementan mediante métodos), significando que solo ellos pueden cambiar los valores de sus atributos a través de sus métodos.

La programación en el lenguaje de programación en Java es orientada a objetos, porque Java es un lenguaje de programación orientado a objetos. En Java, la unidad básica de programación es una clase, de la cual se instancias los objetos (crear objetos a partir de una clase). Las clases son para los objetos como los planos de construcción son para las casas. Las clases son las plantillas para crear nuevos objetos. Las clases se relacionan entre si y estas relaciones se denominan asociaciones. Por ejemplo una clase docente está relacionada con una clase alumno a través de la siguiente relación: “un docente enseña a un alumno”. Las clases relacionadas se pueden empaquetar en componentes reutilizables para su posterior reutilización. Reutilizar clases existentes durante el proceso de desarrollo de aplicaciones permite ahorrar tiempo y esfuerzo, con productos más confiables y efectivos, ya que las clases reutilizadas han pasado por un proceso de calidad muy extenso (depuración y optimización del rendimiento).

A continuación se presenta el desarrollo de una aplicación en la cual se ingresa el código del alumno (alumno_id), sus apellidos y nombres (apellidoNombre), la evaluación parcial 1 (evaluacionParcial1), la evaluación parcial 2 (evaluacionParcial2) y el promedio de trabajo (promedioDeTrabajo). La aplicación calcula y visualiza el promedio final (promedioFinal). Para calcular el promedio final se utiliza la fórmula:

promedioFinal = ( evaluacionParcial1 + evaluacionParcial2 + promedioDeTrabajo )

El producto final es:

Page 37: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 37

Para el desarrollo de la aplicación debe realizar las siguientes actividades:

Haga clic derecho en File (Archivo) y cree un proyecto vacío de Java

Seleccione un proyecto de Aplicación Java (Java Application).

Page 38: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 38

Asigne como Nombre de Proyecto (Project Name) ProyectoProgramacionConObjetos, Localización del proyecto (Project Location) c:\NetBeansProjects y como Carpeta del Proyecto (Project Folder) c:\NetBeansProjects\ProyectoProgramacionConObjetos. Desmarcar la casilla de verificación Cree una Clase Principal (Create Main Class) y luego haga clic en Finalizar (Finish).

Haga clic derecho en el Proyecto ProyectoProgramacionConObjetos y cree un Paquete denominado PaqueteProgramacionConObjetos.

Page 39: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 39

Asigne como Nombre de Paquete (Package Name) PaqueteProgramacionConObjetos, Proyecto (Project) ProyectoProgramacionConObjetos, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoProgramacionConObjetos\src\ PaqueteProgramacionConObjetos. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteProgramacionConObjetos y cree una clase Java (Java Class) dentro del paquete PaqueteProgramacionConObjetos.

Page 40: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 40

Asigne como Nombre de Clase (Class name) Alumno, Proyecto (Project) ProyectoProgramacionConObjetos, localización (Location) Source Packages, paquete (Package) PaqueteProgramacionConObjetos y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProgramacionConObjetos\src\PaqueteProgramacionConObjetos \ Alumno.java. Luego haga clic en Finalizar (Finish).

Haga clic en la clase Alumno y agregue las variables privadas alumno_id de tipo int, apellidoNombre de tipo String, evaluacionParcial1 de tipo double, evaluacionParcial2 de tipo double, promedioDeTrabajo de tipo double y promedioFinal de tipo double.

Page 41: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 41

Haga clic en la clase Alumno después de la variable promedioFinal. Luego haga clic derecho y seleccione la opción Insert Code.

Page 42: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 42

Luego seleccione la opción Getter and Setter.

Marque todos los cuadros de chequeo (check box).

Page 43: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 43

Verifique el código de los métodos get y set insertados.

Page 44: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 44

Modifique el código del método setPromedioFinal borrando el parámetro double promedioFinal y agregando la fórmula que calcula el promedio final.

Inserte dos métodos constructores a la clase Alumno tal como se muestra en el gráfico siguiente.

Verifique que el código de la Clase Alumno se presente como en el siguiente listado.

package PaqueteProgramacionConObjetos;

public class Alumno {

private int alumno_id; private String apellidoNombre; private double evaluacionParcial1; private double evaluacionParcial2; private double promedioDeTrabajo; private double promedioFinal;

Page 45: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 45

public Alumno() { this.alumno_id=0; this.apellidoNombre=null; this.evaluacionParcial1 = 0; this.evaluacionParcial2 = 0; this.promedioDeTrabajo = 0; this. promedioFinal = 0; } public Alumno(int alumno_id, String apellidoNombre, double evaluacionParcial1,

double evaluacionParcial2, double promedioDeTrabajo, double promedioFinal) { this.alumno_id = alumno_id; this.apellidoNombre = apellidoNombre; this.evaluacionParcial1 = evaluacionParcial1; this.evaluacionParcial2 = evaluacionParcial2; this.promedioDeTrabajo = promedioDeTrabajo; this.promedioFinal = promedioFinal ; } public int getAlumno_id() { return this.alumno_id; } public void setAlumno_id(int alumno_id) { this.alumno_id = alumno_id; } public String getApellidoNombre() { return this.apellidoNombre; } public void setApellidoNombre(String apellidoNombre) { this.apellidoNombre = apellidoNombre; } public double getEvaluacionParcial1() { return this.evaluacionParcial1; } public void setEvaluacionParcial1 (double evaluacionParcial1) { this.evaluacionParcial1 = evaluacionParcial1; } public double getEvaluacionParcial2() { return this.evaluacionParcial2; } public void setEvaluacionParcial2 (double evaluacionParcial2) { this.evaluacionParcial2 = evaluacionParcial2; }

Page 46: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 46

public double getPromedioDeTrabajo() { return this.promedioDeTrabajo; } public void setPromedioDeTrabajo(double promedioDeTrabajo) { this. promedioDeTrabajo = promedioDeTrabajo; } public void setPromedioFinal() { this.promedioFinal=(this.evaluacionParcial1+this.evaluacionParcial2+this.promedioDeTrabajo)/3; } public double getPromedioFinal() { return this.promedioFinal; } } Haga clic derecho en PaqueteProgramacionConObjetos y cree un Formulario Java (JFrame Java) dentro

del Paquete PaqueteProgramacionConObjetos.

Page 47: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 47

Asigne como Nombre de Clase (Class name) JFrameProgramacionConObjetos.java, Proyecto (Project) ProyectoProgramacionConObjetos, Localización (Location) Source Packages, Paquete (Package) PaqueteProgramacionConObjetos y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoProgramacionconObjetos\src\PaqueteProgramacionconObjetos\ JFrameProgramacionconObjetos.java. Luego haga clic en Finalizar (Finish).

Verifique que el proyecto se presente como en el siguiente gráfico.

Page 48: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 48

Haga doble clic en cuadro de diálogo JFrameProgramacionConObjetos. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) los objetos Label (07), Text Field (06) y Button (03), tal como se presenta en el siguiente gráfico.

Haga clic en la Ventana Inspector y verifique la presencia de los objetos que se visualizan en la ventana Design.

Page 49: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 49

Renombre los objetos en la ventana Inspector tal se presenta como en el siguiente gráfico.

Pulse las teclas Control-Mayúsculas-7 para visualizar la Ventana de Propiedades. Modifique la propiedad Text del objeto jLabelTitulo con el texto “Insertar alumnos”.

Page 50: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 50

Cambie la propiedad Text de cada control Swing para que sea como el de la siguiente tabla.

Nombre del Control Swing en el Inspector Propiedad Text del Control Swing

jLabelTitulo Calcular Promedio

jLabelAlumno_id Alumno_id:

jLabel ApellidoNombre Apellido y nombre:

jLabelEvaluacionParcial1 EvaluaciónParcial 1:

jLabelEvaluacionParcial2 EvaluaciónParcial 2:

jLabelPromedioDeTrabajo Promedio de Trabajo:

jLabelPromedioFinal Promedio final:

jButtonAceptar Aceptar

jButtonReiniciar Reiniciar

jButtonSalir Salir

Haga clic en alguna parte del Panel de Diseño (Designer) del jDialog JDialogInsertarAlumno.java para visualizar la ventana de Propiedades (Properties).

Page 51: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 51

Modifique la propiedad defaultCloseOperation y escriba DISPOSE (deshacerse).

Haga clic derecho en el objeto jButtonAceptar y seleccione en el menú conceptual Event-Action-actionPerformed para programar en evento clic del botón de comando.

Page 52: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 52

Agregue el código del evento clic del objeto jButtonAceptarActionPerformed.

private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) { Alumno oAlumno=new Alumno(); oAlumno.setAlumno_id(Integer.parseInt( jTextFieldAlumno_id.getText()));

oAlumno.setApellidoNombre( jTextFieldApellidoNombre.getText()); oAlumno.setEvaluacionParcial1(Double.parseDouble(jTextFieldEvaluacionParcial1.getText())); oAlumno.setEvaluacionParcial2(Double.parseDouble(jTextFieldEvaluacionParcial2.getText())); oAlumno.setPromedioDeTrabajo(Double.parseDouble(jTextFieldPromedioDeTrabajo.getText())); oAlumno.setPromedioFinal(); jTextFieldPromedioFinal.setText(oAlumno.getPromedioFinal()+"");

}

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonReiniciarActionPerformed.

private void jButtonReiniciarActionPerformed(java.awt.event.ActionEvent evt) { jTextFieldAlumno_id.setText("");

jTextFieldApellidoNombre.setText(""); jTextFieldEvaluacionParcial1.setText(""); jTextFieldEvaluacionParcial2.setText(""); jTextFieldPromedioDeTrabajo.setText("");

jTextFieldPromedioFinal.setText(""); }

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonSalirActionPerformed.

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt) { int respuesta = JOptionPane.showConfirmDialog(this, "¿Está seguro...?", "Diálogo de Confirmación", JOptionPane.YES_NO_OPTION); if (respuesta == JOptionPane.YES_OPTION) { dispose(); } }

Verique el código del botón de comando jBuutonSalirActionPerformed. Debe presentarse errores en JOpcionPane.YES_NO_OPTION.

Page 53: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 53

Haga clic derecho en la palabra JOptionPane.YES_NO_OPTION y seleccione Fix Imports (Refaccionar Importaciones).

Verifique la instrucción import agregada.

Page 54: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 54

Agregue una clase principal de Java (Java Main Class) tal como se presenta en el siguiente gráfico.

Asigne como Nombre de Clase (Class name) AplicacionProgramacionConObjetos.java, Proyecto (Project) ProyectoProgramacionConObjetos, Localización (Location) Source Packages, Paquete (Package) PaqueteProgramacionConObjetos y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoProgramacionconObjetos\src\PaqueteProgramacionconObjetos\ AplicacionProgramacionconObjetos.java. Luego haga clic en Finalizar (Finish).

Page 55: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 55

Verifique la clase Java Main Class agregada.

Agregue el código tal como se presenta en el siguiente gráfico.

Haga clic en el botón de comando de la barra de herramientas y verifique la ejecución de la aplicación creada. Ingrese los datos mostrado y luego haga clic en el botón de comando Aceptar. Verifique que se ha calculado el promedio final

Page 56: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 56

Verifique la ejecución de la aplicación creada. Haga clic en el botón de comando Reiniciar.

Verifique la ejecución de la aplicación creada. Haga clic en el botón de comando Salir.

Page 57: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 57

Verifique la ejecución del proyecto creado. Haga clic en el botón de comando Si (Yes) para salir.

Page 58: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 58

Page 59: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 59

ARREGLOS En un gran número de problemas es necesario manejar un conjunto de datos más o menos grande que estén relacionados entre sí, de tal forma que constituyen una unidad para su tratamiento. Si se quiere manipular una lista de 100 notas de alumnos, es conveniente tratar el conjunto de datos de forma unitaria en lugar de utilizar 100 variables para cada dato simple. Un conjunto de datos homogéneo que se tratan como una sola unidad se denomina estructura de datos. Si una estructura de datos reside en memoria central (memoria RAM), se llama estructura de datos interna. Recíprocamente si reside en un soporte externo (disquete, disco, cd, memoria USB, cinta, etc) se denomina estructura de datos externa. La estructura de datos más importante desde el punto de vista de utilización es el arreglo, que es implementado en la totalidad de lenguajes de programación. Esta estructura corresponde con los conceptos matemáticos de vector, matriz o poliedro. CONCEPTOS Y DEFINICIONES Los arreglos son estructuras de datos que consisten en elementos de datos relacionados, los cuales son del mismo tipo y tienen un nombre común para todos ellos. Contienen un número fijo, finito y ordenado de elementos contiguos. La posición de cada elemento viene determinada por uno o varios índices de tipo entero. A cada elemento se le puede acceder de forma directa indicando el nombre del arreglo y su(s) respectivo índice(s). La longitud de un arreglo es el número de elementos que contiene. El tamaño del arreglo es la longitud (número de elementos) multiplicado por el tipo de dato. Los elementos de un arreglo se utilizan de la misma forma que cualquier variable de un programa, pudiendo por tanto intervenir en instrucciones de asignación/cáculo, entrada/salida, etc. Un arreglo es el realidad una referencia a un objeto arreglo en memoria.

TIPOS DE ARREGLOS Los arreglos se clasifican según su dimensión en:

Unidimensionales

Bidimensionales

Multidimensionales

ARREGLOS UNIDIMENSIONALES Son arreglos de una sola dimensión. También se denominan vectores. Tienen un solo índice. Cada elemento del arreglo se accesa mediante su nombre seguido del número correspondiente al índice que se escribe entre corchetes. La declaración de un arreglo tiene la siguiente sintaxis:

TipoDeDato nombreDeVariable = new TipoDeDato [ NúmeroDeElementos ] Ejemplo:

int nota [ ] = new int [ 100 ]; Declara un arreglo llamado nota que contiene 100 elementos de tipo enteros (int). Los arreglos son utilizados muy seguidos para realizar ordenación y búsqueda de datos utilizando la memoria central (memoria RAM). La utilización de arreglos se puede potenciar con el uso de punteros.

ARREGLOS DE OBJETOS En Java no se emplea el término "registro" sino el de “objeto”. Los arreglos de objetos son arreglos que en vez de contener elementos de datos primitivos (int, float, double, etc.) contienen referencias a objetos de un tipo de clase en especial. Dicha clase contiene variables (atributos) de diferente tipo y métodos con los

Page 60: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 60

cuales se manipulan dichas variables. Cada variable se referencia empleando un nombre de campo los cuales son realmente el nombre de las instancias de las variables. Los elementos de un arreglo de objetos están numerados y para referirnos a un elemento concreto, utilizaremos su número de posición denominado índice. En Java, los elementos de un arreglo de objetos se empiezan a numerar desde cero. Esto es el índice del primer elemento de la serie es 0. Si la longitud de la serie es N, el índice del último elemento del arreglo de objetos será n-1. Los arreglos de objetos se crean usando el operador new. A continuación se presenta un modelo que representa un arreglo de objetos.

CREACION DE UN ARREGLO DE OBJETOS Para crear un arreglo de objetos se utiliza el operador new. Ejemplo:

Alumno oAlumno[ ] = new Alumno[ 100 ]; REFERENCIACIÓN A LOS ELEMENTOS DE ARREGLO Para referenciar los elementos de un arreglo y poder accesar a sus atributos (campos) se utiliza un bucle for y dentro de él, la referenciación a cada elemento utilizando el operador new.

for( int i = 0; i < 100; i = i + 1 )

{ oAlumno[ i ] = new Alumno();

}

PASO Y RETORNO DE ARREGLOS A LOS MÉTODOS Para pasar un argumento de tipo arreglo de objetos (la referencia al arreglo de objetos) se especifica el nombre del arreglo sin corchetes. Ejemplo:

insertar(oAlumno);

Page 61: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 61

Para que un método reciba un arreglo de objetos (la referencia al arreglo de objetos) la lista de parámetros del método debe especificar un parámetro de tipo arreglo de objetos el cual tiene corchetes.

public static Alumno[] insertar(Alumno[] oAlumno) { … return oAlumno; }

Los métodos pueden tener tipo de retorno de tipo arreglo, para lo cual en la declaración del método se debe de poner como tipo de retorno un arreglo de objetos el cual tiene corchetes.

public static Alumno[] insertar(Alumno[] oAlumno) { … return oAlumno; }

A continuación se presenta el desarrollo de una aplicación en el cual se utiliza un arreglo de objetos para almacenar los datos de un alumno, calcular su promedio final y mostrar los datos del alumno con su promedio final calculado. Se utiliza los atributos código del alumno (alumno_id), sus apellidos y nombres (apellidoNombre), la evaluación parcial 1 (evaluacionParcial1), la evaluación parcial 2 (evaluacionParcial2) y el promedio de trabajo (promedioDeTrabajo). El promedio final (promedioFinal) se calcula con la siguiente fórmula:

promedioFinal = ( evaluacionParcial1 + evaluacionParcial2 + promedioDeTrabajo )/3;

Nota: Para mayor comodidad al término “arreglo de objeto” lo denominaremos “arreglo de registros”. Esto se hace con el propósito de poder utilizar el mismo término en los capítulos posteriores.

La aplicación desarrollada para correr en consola presenta el siguiente menú de opciones:

Cada opción se describe a continuación:

La ejecución de la opción I permite insertar objetos al arreglo de registros. Esta opción solicita el código del alumno (alumno_id). Si no lo encuentra en el arreglo de registros permite ingresar los otros datos (apellidoNombre, e95valuacionParcial1, evaluacionParcial2 y promedioDeTrabajo). Si lo encuentra presenta el mensaje “Registro encontrado !!!”

La ejecución de la opción C permite consultar un registro almacenado en el arreglo de registros. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en el arreglo

Page 62: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 62

de registros lo presenta en pantalla. Si no lo encuentra presenta el mensaje "No se encuentra el registro !!!".

La ejecución de la opción M permite modificar un registro almacenado en el arreglo de registros. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en el arreglo de registros lo presenta en pantalla y solicita nuevos datos (atributos apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo) los cauales reemplazan a los anteriores. Si no lo encuentra presenta el mensaje "No se encuentra el registro !!!".

La ejecución de la opción E permite eliminar registros al arreglo de registros. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en el arreglo de registros lo presenta en pantalla y lo borra inmediatamente. El término borrado siginifica poner en el atributo alumno_id el valor -99. Si no lo encuentra presenta el mensaje "No se encuentra el registro !!!".

La ejecución de la opción L permite listar los los registros al arreglo de registros. Note que el promedio final se visualiza con el valor 0. Para visualzar el promedio final calculado tiene que ejecutar la opción [P]rocesar notas.

La ejecución de la opción P permite calcular el promedio final de los registros del arreglo. Note que el promedio final se visualiza con el valor 0.

Para visualizar el promedio final calculado tiene que ejecutar la opción [L]istar.

Page 63: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 63

La ejecución de la opción S se sale de la aplicación.

Para el desarrollo de la aplicación debe realizar las siguientes actividades:

Haga clic derecho en File (Archivo) y cree un proyecto vacío de Java.

Seleccione un proyecto de Aplicación Java (Java Application).

Page 64: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 64

Asigne como Nombre de Proyecto (Project Name) ProyectoArregloDeObjetos, Localización del proyecto (Project Location) c:\NetBeansProjects y como Carpeta del Proyecto (Project Folder) c:\NetBeansProjects\ProyectoArregloDeObjetos. Desmarcar la casilla de verificación Cree una Clase Principal (Create Main Class) y luego haga clic en Finalizar (Finish).

Haga clic derecho en el Proyecto ProyectoArregloDeObjetos y cree un Paquete.

Page 65: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 65

Asigne como Nombre de Paquete (Package Name) PaqueteArregloDeObjetos, Proyecto (Project) ProyectoArregloDeObjetos, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ArregloDeObjetos\src\ PaqueteArregloDeObjetos. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteArregloDeObjetos y cree una Java Class.

Page 66: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 66

Asigne como Nombre de Clase (Class name) Alumno, Proyecto (Project) ProyectoArregloDeObjetos, localización (Location) Source Packages, paquete (Package) PaqueteArregloDeObjetos y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArregloDeObjetos\src\PaqueteArregloDeObjetos \ Alumno.java. Luego haga clic en Finalizar (Finish).

Agregue el siguiente código para la clase Alumno.

package PaqueteArregloDeObjetos;

public class Alumno { private int alumno_id; private String apellidoNombre; private double evaluacionParcial1; private double evaluacionParcial2; private double promedioDeTrabajo; private double promedioFinal; public Alumno() { this.alumno_id=0; this.apellidoNombre=null; this.evaluacionParcial1 = 0; this.evaluacionParcial2 = 0; this.promedioDeTrabajo = 0; this. promedioFinal = 0; } public Alumno(int alumno_id, String apellidoNombre, double evaluacionParcial1,

double evaluacionParcial2, double promedioDeTrabajo, double promedioFinal) { this.alumno_id = alumno_id; this.apellidoNombre = apellidoNombre; this.evaluacionParcial1 = evaluacionParcial1; this.evaluacionParcial2 = evaluacionParcial2; this.promedioDeTrabajo = promedioDeTrabajo; this.promedioFinal = promedioFinal ; }

Page 67: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 67

public int getAlumno_id() { return this.alumno_id; } public void setAlumno_id(int alumno_id) { this.alumno_id = alumno_id; } public String getApellidoNombre() { return this.apellidoNombre; } public void setApellidoNombre(String apellidoNombre) { this.apellidoNombre = apellidoNombre; } public double getEvaluacionParcial1() { return this.evaluacionParcial1; } public void setEvaluacionParcial1 (double evaluacionParcial1) { this.evaluacionParcial1 = evaluacionParcial1; } public double getEvaluacionParcial2() { return this.evaluacionParcial2; } public void setEvaluacionParcial2 (double evaluacionParcial2) { this.evaluacionParcial2 = evaluacionParcial2; } public double getPromedioDeTrabajo() { return this.promedioDeTrabajo; } public void setPromedioDeTrabajo(double promedioDeTrabajo) { this. promedioDeTrabajo = promedioDeTrabajo; } public void setPromedioFinal() { this.promedioFinal=(this.evaluacionParcial1+this.evaluacionParcial2+this.promedioDeTrabajo)/3; } public double getPromedioFinal() { return this.promedioFinal; } }

Page 68: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 68

Cree un nuevo paquete.

Asigne como Nombre de Paquete (Package Name) PaqueteBiblioteca, Proyecto (Project) ProyectoArregloDeObjetos, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArregloDeObjetos\src\PaqueteBiblioteca. Luego haga clic en Finalizar (Finish).

Page 69: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 69

Dentro del paquete PaqueteBiblioteca cree la clase denominada ClaseLectura.

Agregue el siguiente código para la clase ClaseLectura. (Cortesía del Ing. J.J Flores Cueto – U.N.J.F.S.C.).

Estas líneas de código lo puede copiar de la carpeta CodigoExtra del CD que compaña a este libro.

package PaqueteBiblioteca; import java.io.*;

public class ClaseLectura

{ public static char leerChar() { char c=' '; char [] c1=leerString().toCharArray(); if (c1.length==1) c=c1[0]; return c; } public static double leerDouble()

{ try { return Double.valueOf(leerString()).doubleValue(); }

catch (NumberFormatException e) { System.out.print("ERROR... \n Ingrese de nuevo : ");

return leerDouble(); } }

public static float leerFloat() { try

{ return Float.valueOf(leerString()).floatValue(); }

catch (NumberFormatException e) { System.out.print("ERROR... \n Ingrese de nuevo:");

return leerFloat(); } } public static int leerInt()

{ try { return Integer.parseInt(leerString());

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerInt(); } }

Page 70: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 70

public static long leerLong() { try

{ return Long.valueOf(leerString()).longValue(); }

catch (NumberFormatException e) { System.out.print("ERROR... \n Ingrese de nuevo:");

leerLong(); } } public static short leerShort()

{ try { return Short.valueOf(leerString()).shortValue();

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerShort(); } } public static String leerString()

{ BufferedReader in = new BufferedReader(new InputStreamReader(System. in)); String cadena =""; try

{ cadena = in.readLine(); }

catch (IOException e) { System.out.println(e); }

return cadena; } } Nota: El código anterior (ClaseLectura.java) puede descargarlo del cd de trabajo proporcionado por el

autor. Cree una nueva clase del tipo Java Main edenominada AplicacionArregloDeObjetos.

Page 71: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 71

Agregue a la aplicación arreglos de objetos el siguiente código.

package PaqueteArregloDeObjetos; import PaqueteBiblioteca.ClaseLectura;

public class AplicacionArregloDeObjetos { static int numeroDeAlumno=0;

public static void main(String[ ] args) { char opcion=' '; Alumno oAlumno[]=new Alumno[100]; for(int i=0;i<100;i=i+1) { oAlumno[i]=new Alumno(); } do { System.out.println(" M E N U"); System.out.println(" ======="); System.out.println(" [I]nsertar"); System.out.println(" [C]onsulta"); System.out.println(" [M]odificar"); System.out.println(" [E]liminar"); System.out.println(" [L]istar"); System.out.println(" [P]rocesar notas"); System.out.println(" [S]alir "); System.out.print(" Elija su opción : "); opcion=Character.toUpperCase(ClaseLectura.leerChar()); switch (opcion) { case 'I' : insertar(oAlumno); break ; case 'C' : consulta(oAlumno); break ; case 'E' : eliminar(oAlumno); break ; case 'M': modificar(oAlumno); break ; case 'P': procesarPromedio(oAlumno); break ; case 'L': listar(oAlumno); break ; } } while (opcion!='S'); }

public static Alumno[] insertar(Alumno[] oAlumno) { int busqueda; int posicion=0; System.out.print("Alumno_id : "); busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,oAlumno); if (posicion==-99)

{ oAlumno[AplicacionArregloDeObjetos.numeroDeAlumno].setAlumno_id(busqueda); leerRegistro(AplicacionArregloDeObjetos.numeroDeAlumno ,oAlumno);

AplicacionArregloDeObjetos.numeroDeAlumno++; }

Page 72: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 72

else { System.out.println("Registro encontrado !!!"); } return oAlumno; } public static void consulta(Alumno[] oAlumno)

{ int busqueda; int posicion=0; System.out.print("Alumno_id : "); busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,oAlumno); if (posicion!=-99) { visualizarRegistro(posicion, oAlumno); } else { System.out.println("No se encuentra el registro !!!"); } }

public static Alumno[] modificar(Alumno[] oAlumno ) { int busqueda; int posicion=0; System.out.print("Alumno_id : "); busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,oAlumno); if (posicion!=-99) { visualizarRegistro(posicion,oAlumno); leerRegistro(posicion,oAlumno); } else { System.out.println("No se encuentra el registro !!!"); } return oAlumno; }

public static Alumno[] eliminar(Alumno[] oAlumno) // se cambia alumno_id por un valor -99 { int busqueda; int posicion=0; System.out.print("Alumno_id : "); busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,oAlumno); if (posicion!=-99) { visualizarRegistro(posicion , oAlumno); oAlumno[posicion].setAlumno_id(-99);

System.out.println("Se borró el registro !!!"); } else { System.out.println("No se encuentra el registro !!!"); } return oAlumno; }

public static Alumno[] procesarPromedio(Alumno[] oAlumno)

{ for (int i=0;i< AplicacionArregloDeObjetos.numeroDeAlumno;i=i+1) { oAlumno[i].setPromedioFinal(); }

System.out.println("Promedios calculados !!!"); return oAlumno; }

Page 73: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 73

public static void listar(Alumno[] oAlumno) { System.out.println("Alumno_id"+"\t"+"Apellido"+"\t"+"Nombre"+"\t"+"Ep1"+"\t"+

"Ep2"+"\t"+"Pt"+"\t"+"Pf"+"\n");

for (int i=0;i< AplicacionArregloDeObjetos.numeroDeAlumno;i=i+1) { System.out.print(oAlumno[i].getAlumno_id()+"\t"); System.out.print(oAlumno[i].getApellidoNombre()+"\t"); System.out.print(oAlumno[i].getEvaluacionParcial1()+"\t"); System.out.print(oAlumno[i].getEvaluacionParcial2()+"\t"); System.out.print(oAlumno[i].getPromedioDeTrabajo()+"\t"); System.out.print(oAlumno[i].getPromedioFinal()+"\n"); } } public static int buscarRegistro(int busqueda,Alumno[] oAlumno) { int encontrado=0; int posicion=0;

while ((posicion< AplicacionArregloDeObjetos.numeroDeAlumno) && (encontrado==0)) { if (oAlumno[posicion].getAlumno_id()==busqueda) { encontrado=1; } else { posicion++; } }

if (encontrado==1) { return posicion; } else { return -99; } } public static void visualizarRegistro(int posicion , Alumno[] oAlumno) { System.out.print("Apellido y Nombre : "+oAlumno[posicion].getApellidoNombre()+"\n"); System.out.print("Evaluación parcial 1 : "+oAlumno[posicion].getEvaluacionParcial1()+"\n"); System.out.print("Evaluación parcial 2 : "+oAlumno[posicion].getEvaluacionParcial2()+"\n"); System.out.print("Promedio de trabajo : "+oAlumno[posicion].getPromedioDeTrabajo()+"\n"); System.out.print("Promedio final : "+oAlumno[posicion].getPromedioFinal()+"\n"); }

public static void leerRegistro(int posicion , Alumno[] oAlumno) { System.out.print("Apellido y Nombre : "); oAlumno[posicion].setApellidoNombre(ClaseLectura.leerString()); System.out.print("Evaluación parcial 1 : "); oAlumno[posicion].setEvaluacionParcial1(ClaseLectura.leerDouble()); System.out.print("Evaluación parcial 2 : "); oAlumno[posicion].setEvaluacionParcial2(ClaseLectura.leerDouble()); System.out.print("Promedio de trabajo : "); oAlumno[posicion].setPromedioDeTrabajo(ClaseLectura.leerDouble()); }

}

Page 74: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 74

Verifique la ejecución de la aplicación mostrando el menú de opciones.

La ejecución de la aplicación mostrando la ejecución de la opción [I]nsertar.

La ejecución de la aplicación mostrando la ejecución de la opción [L]istar.

Page 75: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 75

Page 76: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 76

SISTEMA DE MENÚ CON GUI La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es un tipo de interfaz de usuario que utiliza objetos gráficos para representar la información y acciones disponibles en la interfaz.

Habitualmente las acciones se realizan mediante manipulación directa para facilitar la interacción del usuario con la computadora. Surge de la evolución de la línea de comandos de los primeros sistemas operativos y es pieza fundamental en un entorno gráfico. Como ejemplo de interfaz gráfica de usuario podemos citar el entorno de escritorio del sistema operativo Windows, el X-Window de GNU/Linux o el de Mac OS X, Aqua.

En el contexto del proceso de interacción persona-computadora, la interfaz gráfica de usuario es el artefacto tecnológico de un sistema interactivo que posibilita, a través del uso y la representación del lenguaje visual, una interacción amigable con un sistema informático.

Java utiliza la biblioteca gráfica Swing, la que permite construir interfaces gráficas de usuario utlizando objetos como formularios, cajas de díalogo, barras de menús, barras de herramientas, etiquetas, cajas de texto, areas de texto, botones de comando, botones de radio, cuadros combinados, listas deplegables, etc.

El paquete Swing es parte de la JFC (Java Foundation Classes) en la plataforma Java. La JFC provee facilidades para ayudar a la gente a construir Interfaz Gráfica de Usuario.

La Estructura básica de una aplicación Swing se construye mezclando componentes con las siguientes reglas:

Debe existir, al menos, un contenedor de alto nivel (Top-Level Container), que provee el soporte que los componentes Swing necesitan para el pintado y el manejo de eventos.

Un Top-Level Container puede ser: Formulario (JFrame): una ventana independiente. Cuadro de Diálogo (JDialog): ventanas de interacción sencilla con el usuario como por ejemplo:

java.swing.JOptionPane: Ventana de diálogo tipo SI_NO, SI_NO_CANCELAR, ACEPTAR, etc... java.swing.JFileChooser: Ventana para elejir un archivo. java.swing.JColorChooser etc.

Los contenedores de alto nivel sirven permiten colgar otros tipos de contenedores o componentes simples).

Se pueden agregar objetos (etiquetas, cajas de texto, botones de comando, etc) a los contenedores para la construcción de la interfaz gráfica de usuario.

Cada vez que el usuario interactúa con la aplicación se gatilla un evento. Para que un componente determinado reaccione frente a un evento, debe poseer un "escuchador" con, al menos, un método determinado que se ejecutará al escuchar un evento en particular. Swing puede generar un variado conjunto de eventos y dentro de los más comunes tenemos:

Ejemplos de eventos y sus escuchadores

Acción que gatilla un evento Tipo de escuchador

El usuario hace un click, presiona Return en un área de texto o selecciona un menú

ActionListener

El usuario hace un click sobre una componente MouseListener

El usuario pasa el mouse sobre una componente MouseMotionListener

Una componente adquiere el foco del teclado FocusListener

Cambia la selección en una lista o tabla ListSelectionListener

Page 77: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 77

Para el desarrollo de la aplicación para crear un sistema de menú con GUI se debe realizar las siguientes actividades:

Haga clic derecho en File (Archivo) y cree un proyecto vacío de Java

Seleccione un proyecto de Aplicación Java (Java Application).

Page 78: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 78

Asigne como Nombre de Proyecto (Project Name) ProyectoSistemaDeMenu, Localización del proyecto (Project Location) c:\NetBeansProjects y como Carpeta del Proyecto (Project Folder) c:\NetBeansProjects\ProyectoSistemaDeMenu. Desmarcar la casilla de verificación Cree una Clase Principal (Create Main Class) y luego haga clic en Finalizar (Finish).

Haga clic derecho en el Proyecto ProyectoSistemaDeMenu y cree un Paquete dentro del proyecto ProyectoSistemaDeMenu.

Page 79: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 79

Asigne como Nombre de Paquete (Package Name) PaqueteSistemaDeMenu, Proyecto (Project) ProyectoSistemaDeMenu, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoSistemaDeMenu\src\PaqueteSistemaDeMenu. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteSistemaDeMenu y cree un formulario JFrame dentro del paquete PaqueteSistemaDeMenu.

Page 80: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 80

Asigne como Nombre de Clase (Class name) JFrameSistemaDeMenu, Proyecto (Project) ProyectoSistemaDeMenu, localización (Location) Source Packages, paquete (Package) PaqueteSistemaDeMenu y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoSistemaDeMenu\src\PaqueteSistemaDeMenu\ JFrameSistemaDeMenu.java. Luego haga clic en Finalizar (Finish).

Verifique que el Proyecto ProyectoSistemaDeMenú se presente como en el siguiente gráfico.

Page 81: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 81

Haga clic derecho en PaqueteSistemaDeMenu y cree un JDialog Form dentro del Paquete PaqueteSistemaDeMenu.

Asigne como Nombre de Clase (Class name) JDialog01, Proyecto (Project) ProyectoSistemaDeMenu, Localización (Location) Source Packages, Paquete (Package) PaqueteSistemaDeMenu y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoSistemaDeMenu\src\PaqueteSistemaDeMenu\ JDialog01.java. Luego haga clic en Finalizar (Finish).

Page 82: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 82

Haga clic derecho en PaqueteSistemaDeMenu y cree un JDialog Form dentro del Paquete PaqueteSistemaDeMenu.

Asigne como Nombre de Clase (Class name) JDialog02, Proyecto (Project) ProyectoSistemaDeMenu, Localización (Location) Source Packages, Paquete (Package) PaqueteSistemaDeMenu y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoSistemaDeMenu\src\PaqueteSistemaDeMenu\ JDialog02.java. Luego haga clic en Finalizar (Finish).

Page 83: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 83

Verifique que la barra de Menú se presente como en el siguiente gráfico. Luego haga clic en el objeto

JFrameSistemaDeMenu.

Haga clic en la pestaña Design de JFrameSistemaDeMenu.Java. Luego haga clic derecho en el panel de JFrameSistemaDeMenu y agregue desde la Paleta (Add From Palette) una Barra de Menú (Menu Bar).

Page 84: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 84

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Haga clic derecho en la opción File de la Barra de Menú JFrameSistemaDeMenu y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Page 85: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 85

Verifique que la barra de Menú se presente como en el siguiente gráfico.

Haga clic derecho en la opción File de la Barra de Menú JFrameSistemaDeMenu y agregue desde la Paleta (Add From Palette) un Elemento de Menu.

Page 86: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 86

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Haga doble clic sobre el texto del primer Elemento de Menú (Menu ítem) y modifique el texto colocando “Submenú Cuadro de Diálogo 01”. Repita el proceso sobre el texto del segundo Elemento de Menu (Menú ítem) y modifique el texto colocando “Submenú Cuadro de Diálogo 02”, tal como se presenta en el siguiente gráfico.

Page 87: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 87

Haga clic en la pestaña Source del frame JFrameSistemaDeMenu y cree la variable dialogo de tipo Javax.Swing.JDialog tal como se presenta en el siguiente gráfico.

Haga clic derecho en primer Menu item (“Submenú Cuadro de Diálogo 01”) de la opción File del Menú de Opciones de JFrameSistemaDeMenu y agregue un Evento-Action-ActionPerformed.

Page 88: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 88

En el jMenuItem1ActionPerformed agregue el código siguiente. Repetir el mismo proceso para el jMenuItem2ActionPerformed. Repita el mismo proceso para en Menu ítem Submenú Cuadro de Diálogo 02.

Haga clic en la pestaña Source y verifique que jMenuItem1ActionPerformed y el jMenuItem2ActionPerformed se presenten como en el siguiente gráfico.

Page 89: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 89

Haga clic derecho en PaqueteSistemaDeMenu y cree una Clase Principal Java (Java main Class) dentro del paquete PaqueteSistemaDeMenu.

Asigne como Nombre de Clase (Class name) AplicacionSistemaDeMenu, Proyecto (Project) ProyectoSistemaDeMenu, Localización (Location) Source Packages, Paquete (Package) PaqueteSistemaDeMenu y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoSistemaDeMenu\src\PaqueteSistemaDeMenu\AplicacionSistemaDeMenu.java. Luego haga clic en Finalizar (Finish).

Page 90: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 90

Verifique que clase principal AplicacionSistemaDeMenu se presente como en el siguiente gráfico. Haga clic en Source.

Agregue el código correspondiente a la clase principal AplicacionSistemaDeMenu.

Page 91: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 91

Ejecute el Sistema de Menús. Verifique que la ejecución de la primer Elemento del Menú se presente como en el siguiente gráfico.

Verifique que la ejecución del segundo elemento del Menú se presente como en el siguiente gráfico.

Page 92: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 92

Modifique el texto de cada opción de Menú de la Barra Principal. La primera opción de la Barra de Menú será “Alumnos” y Segunda opción de la Barra de Menú será “Salir”. En el primer elemento del Menú Alumnos colocar: “Agregar Alumnos” y el segundo elemento del Menú alumnos colocar “Listar alumnos”, tal como se presenta en el siguiente gráfico. En la segunda Opción de la Barra de Menú Salir agregar un elemento de menú “Salir para salir del Sistema de Menú.

Haga clic derecho en el panel del Cuadro de Diálogo 01 y agregue un botón de comando (Button).

Page 93: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 93

Modifique el texto del botón de comando como se presenta en el siguiente gráfico.

Haga clic derecho en el botón de comando y agregue un evento Events-Action-ActionPerformed.

Page 94: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 94

Agregue el código correspondiente al botón de comando tal como se presenta en el siguiente gráfico.

Repita los procesos anteriores (agregar botón de comando, evento Events-Action-ActionPerformed) con el Cuadro de Diálogo 02.

Page 95: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 95

Verifique que la ejecución del sistema de menú con respecto al Cuadro de Diálogo 01

Verifique que la ejecución del sistema de menú con respecto al Cuadro de Diálogo 02.

Page 96: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 96

Haga clic derecho en la opción Salir del Sistema y agregue un evento Events-Action-ActionPerformed.

Agregue el código para la opción del Elemento de Menú Salir.

Verifique que la ejecución del sistema de menú con respecto a estructura.

Page 97: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 97

Page 98: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 98

SISTEMA DE MENÚ CON GUI PARA MANIPULAR UN ARREGLO DE OBJETOS A continuación se presenta el desarrollo de una aplicación en el cual se utiliza un arreglo de objetos para almacenar los datos de alumnos, calcular su promedio final y mostrar los datos de los alumnos con su promedio final calculado. Se utiliza los atributos código del alumno (alumno_id), sus apellidos y nombres (apellidoNombre), la evaluación parcial 1 (evaluacionParcial1), la evaluación parcial 2 (evaluacionParcial2) y el promedio de trabajo (promedioDeTrabajo). El promedio final (promedioFinal) se calcula con la siguiente fórmula:

promedioFinal = ( evaluacionParcial1 + evaluacionParcial2 + promedioDeTrabajo ) /3

La aplicación desarrollada con GUI presenta el siguiente menú de opciones:

Cada opción se describe a continuación:

La ejecución de la opción Insertar alumnos permite insertar objetos al arreglo de registros utilizando un cuadro de diálogo. Esta opción solicita los datos del alumno (alumno_od, apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo).

Page 99: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 99

La ejecución de la opción Listar de alumnos permite listar los registros del arreglo de registros utilizando una area de texto. Note que el promedio final se visualiza con el valor 0. Para visualzar el promedio final calculado tiene que ejecutar la opción Calcular promedio final.

La ejecución de la opción Calcular promedio final permite calcular el promedio final de los objetos del arreglo de registros. Para ver los cambios realizados se tiene que ejecutar la opción Listar registros.

La ejecución de la opción Salir del sistema sale de la aplicación.

Page 100: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 100

Para el desarrollo de la aplicación debe realizar las siguientes actividades:

Haga clic derecho en File (Archivo) y cree un proyecto vacío de Java.

Seleccione un proyecto de Aplicación Java (Java Application).

Page 101: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 101

Asigne como Nombre de Proyecto (Project Name) ProyectoArreglosConGUI, Localización del proyecto (Project Location) c:\NetBeansProjects y como Carpeta del Proyecto (Project Folder) c:\NetBeansProjects\ProyectoArreglosConGUI. Desmarque la casilla de verificación Cree una clase Principal (Create Main Class) y luego haga clic en Finalizar (Finish).

Haga clic derecho en el Proyecto ProyectoArreglosConGUI y cree un Paquete dentro del proyecto ProyectoArreglosConGUI.

Page 102: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 102

Asigne como Nombre de Paquete (Package Name) PaqueteArreglosConGUI, Proyecto (Project) ProyectoArreglosConGUI, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteArreglosConGUI. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteArreglosConGUI y cree una clase Java (Java Class).

Page 103: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 103

Asigne como Nombre de Clase (Class name) Alumno, Proyecto (Project) ProyectoArreglosConGUI, localización (Location) Source Packages, paquete (Package) PaqueteArreglosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteArreglosConGUI \ Alumno.java. Luego haga clic en Finalizar (Finish).

Agregue el siguiente código para la clase Alumno.java.

package PaqueteArreglosConGUI;

public class Alumno { private int alumno_id; private String apellidoNombre; private double evaluacionParcial1; private double evaluacionParcial2; private double promedioDeTrabajo; private double promedioFinal; public Alumno() { this.alumno_id=0; this.apellidoNombre=null; this.evaluacionParcial1 = 0; this.evaluacionParcial2 = 0; this.promedioDeTrabajo = 0; this. promedioFinal = 0; } public Alumno(int alumno_id, String apellidoNombre, double evaluacionParcial1,

double evaluacionParcial2, double promedioDeTrabajo, double promedioFinal) { this.alumno_id = alumno_id; this.apellidoNombre = apellidoNombre; this.evaluacionParcial1 = evaluacionParcial1; this.evaluacionParcial2 = evaluacionParcial2; this.promedioDeTrabajo = promedioDeTrabajo; this.promedioFinal = promedioFinal ; }

Page 104: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 104

public int getAlumno_id() { return this.alumno_id; } public void setAlumno_id(int alumno_id) { this.alumno_id = alumno_id; } public String getApellidoNombre() { return this.apellidoNombre; } public void setApellidoNombre(String apellidoNombre) { this.apellidoNombre = apellidoNombre; } public double getEvaluacionParcial1() { return this.evaluacionParcial1; } public void setEvaluacionParcial1 (double evaluacionParcial1) { this.evaluacionParcial1 = evaluacionParcial1; } public double getEvaluacionParcial2() { return this.evaluacionParcial2; } public void setEvaluacionParcial2 (double evaluacionParcial2) { this.evaluacionParcial2 = evaluacionParcial2; } public double getPromedioDeTrabajo() { return this.promedioDeTrabajo; } public void setPromedioDeTrabajo(double promedioDeTrabajo) { this. promedioDeTrabajo = promedioDeTrabajo; } public void setPromedioFinal() { this.promedioFinal=(this.evaluacionParcial1+this.evaluacionParcial2+this.promedioDeTrabajo)/3; } public double getPromedioFinal() { return this.promedioFinal; } }

Page 105: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 105

Haga clic derecho en PaqueteArreglosConGUI y cree una JFrame Form.

Asigne como Nombre de Clase (Class name) JFrameArreglosConGUI, Proyecto (Project) ProyectoArreglosConGUI, localización (Location) Source Packages, paquete (Package) PaqueteArreglosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteArreglosConGUI\ JFrameArreglosConGUI.java. Luego haga clic en Finalizar (Finish).

Page 106: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 106

Verifique que el Proyecto ProyectoArreglosConGUI se presente como en el siguiente gráfico.

Haga clic en la pestaña Source de la ventana JFrameArreglosConGUI.java. Cree una variable oAlumno del tipo arreglo Alumno. Agregue al constructor el parámetro oAlumno del tipo arreglo Alumno y asigne el parámetro a la variable oAlumno creada anteriormente. Verifique que la ventana JFrameArreglosConGUI se presente como en el siguiente gráfico.

Page 107: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 107

Haga clic derecho en PaqueteArreglosConGUI y cree un JDialog Form dentro del Paquete PaqueteArreglosConGUI.

Asigne como Nombre de Clase (Class name) JDialogInsertarAlumno, Proyecto (Project) ProyectoArreglosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArreglosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteArreglosConGUI\ JDialogInsertarAlumno.java. Luego haga clic en Finalizar (Finish).

Page 108: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 108

Haga clic en la pestaña Source de la ventana JDialogInsertarAlumno.java Cree una variable oAlumno del tipo arreglo Alumno. Agregue al constructor el parámetro oAlumno del tipo arreglo Alumno y asigne el parámetro a la variable oAlumno creada anteriormente. Verifique que la ventana JDialogInsertarAlumno.java se presente como en el siguiente gráfico.

Haga clic derecho en PaqueteArreglosConGUI y cree un JDialog Form dentro del Paquete PaqueteArreglosConGUI.

Page 109: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 109

Asigne como Nombre de Clase (Class name) JDialogListarAlumnos, Proyecto (Project) ProyectoArreglosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArreglosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteArreglosConGUI\ JDialogListarAlumnos.java. Luego haga clic en Finalizar (Finish).

Verifique que el proyecto se presente como en el siguiente gráfico.

Page 110: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 110

Haga clic en la pestaña Source de la ventana JDialogListarAlumno.java Cree una variable oAlumno del tipo arreglo Alumno. Agregue al constructor el parámetro oAlumno del tipo arreglo Alumno y asigne el parámetro a la variable oAlumno creada anteriormente. Verifique que la ventana JDialogListarAlumno.java se presente como en el siguiente gráfico.

Haga clic derecho en PaqueteArreglosConGUI y cree un JDialog Form dentro del Paquete PaqueteArreglosConGUI.

Page 111: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 111

Asigne como Nombre de Clase (Class name) JDialogCalcularPromedioFinal.java, Proyecto (Project) ProyectoArreglosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArreglosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteArreglosConGUI\ JDialogCalcularPromedioFinalFinal.java. Luego haga clic en Finalizar (Finish).

Verifique que el proyecto se presente como en el siguiente gráfico.

Page 112: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 112

Haga clic en la pestaña Source de la ventana JDialogCalcularPromedioFinal.java Cree una variable oAlumno del tipo arreglo Alumno. Agregue al constructor el parámetro oAlumno del tipo arreglo Alumno y asigne el parámetro a la variable oAlumno creada anteriormente. Verifique que la ventana JDialogCalcularPromedioFinal.java se presente como en el siguiente gráfico.

Asigne como Nombre de Clase (Class name) AplicacionArreglosConGUI, Proyecto (Project) ProyectoArreglosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArreglosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArregloConGUI\src\PaqueteArreglosConGUI\ AplicacionArreglosConGUI.java. Luego haga clic en Finalizar (Finish).

Verifique que clase principal AplicacionArreglosConGUI se presente como en el siguiente gráfico. Haga clic en Source.

Page 113: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 113

Agregue el código correspondiente a la clase principal AplicacionArreglosConGUI.

Haga doble clic en cuadro de diálogo JDialogInsertarAlumno. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) los objetos Label (06), Text Field (05) y Button (03), tal como se presenta en el siguiente gráfico.

Page 114: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 114

Haga clic en la Ventana Inspector y verifique la presencia de los objetos que se visualizan en la ventana Design.

Renombre los objetos en la ventana Inspector tal se presente como en el siguiente gráfico.

Page 115: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 115

Pulse las teclas Control-Mayúsculas-7 para visualizar la Ventana de Propiedades. Modifique la propiedad Text del objeto jLabelTitulo con el texto “Insertar alumnos”.

Cambie la propiedad Text de cada control Swing para que sea como el de la siguiente tabla.

Nombre del Control Swing en el Inspector Propiedad Text del Control Swing

jLabelTitulo Insertar alumnos

jLabelAlumno_id Alumno_id :

jLabel ApellidoNombre Apellido y nombre:

jLabelEvaluacionParcial1 EvaluaciónParcial 1 :

jLabelEvaluacionParcial2 EvaluaciónParcial 2 :

jLabelPromedioDeTrabajo Promedio de Trabajo :

jButtonAceptar Aceptar

jButtonReiniciar Reiniciar

jButtonSalir Salir

Page 116: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 116

Haga clic en alguna parte del Panel de Diseño (Design) del jDialog JDialogInsertarAlumno.java para visualizar la ventana de Propiedades (Properties).

Modifique la propiedad defaultCloseOperation y escriba DISPOSE (deshacerse).

Page 117: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 117

Haga clic derecho en el objeto jButtonAceptar y seleccione en el menú conceptual Event-Action-actionPerformed para programar en evento clic del botón de comando.

Agregue el código del evento clic del objeto jButtonAceptarActionPerformed.

private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) { oAlumno[AplicacionArreglosConGUI.numeroDeAlumno].setAlumno_id(Integer.parseInt(

jTextFieldAlumno_id.getText())); oAlumno[AplicacionArreglosConGUI.numeroDeAlumno].setApellidoNombre( jTextFieldApellidoNombre.getText()); oAlumno[AplicacionArreglosConGUI.numeroDeAlumno].setEvaluacionParcial1(Double.parseDouble( jTextFieldEvaluacionParcial1.getText())); oAlumno[AplicacionArreglosConGUI.numeroDeAlumno].setEvaluacionParcial2(Double.parseDouble( jTextFieldEvaluacionParcial2.getText())); oAlumno[AplicacionArreglosConGUI.numeroDeAlumno].setPromedioDeTrabajo(Double.parseDouble( jTextFieldPromedioDeTrabajo.getText())); AplicacionArreglosConGUI.numeroDeAlumno++;

}

Page 118: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 118

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonReiniciarActionPerformed.

private void jButtonReiniciarActionPerformed(java.awt.event.ActionEvent evt) { jTextFieldAlumno_id.setText("");

jTextFieldApellidoNombre.setText(""); jTextFieldEvaluacionParcial1.setText(""); jTextFieldEvaluacionParcial2.setText(""); jTextFieldPromedioDeTrabajo.setText(""); }

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonSalirActionPerformed.

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt) { dispose();

}

Haga doble clic en cuadro de diálogo JDialogListarAlumno. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) los objetos Label, jTextArea y Button. Finalmente en el Inspector cambie los nombres de los controles tal como se presenta en el siguiente gráfico.

Agregue el código del evento clic del objeto jButtonListarActionPerformed.

private void jButtonListarActionPerformed(java.awt.event.ActionEvent evt) { jTextAreaListado.setText("");

jTextAreaListado.append("Alumno_id"+"\t"+"Apellido y nombre"+ "\t"+"Ep1"+"\t"+"Ep2"+"\t"+ "Pt"+ "\t"+ "Pf"+ "\n"); for (int i=0;i<AplicacionArreglosConGUI.numeroDeAlumno;i=i+1)

{ jTextAreaListado.append(oAlumno[i].getAlumno_id()+"\t"); jTextAreaListado.append(oAlumno[i].getApellidoNombre()+"\t\t"); jTextAreaListado.append(oAlumno[i].getEvaluacionParcial1()+"\t"); jTextAreaListado.append(oAlumno[i].getEvaluacionParcial2()+"\t"); jTextAreaListado.append(oAlumno[i].getPromedioDeTrabajo()+"\t"); jTextAreaListado.append(oAlumno[i].getPromedioFinal()+"\n"); }

Page 119: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 119

Verifique que el proyecto se presente como en el siguiente gráfico. Luego haga clic en el objeto

JDialogCalcularPromedioFinal.java.

Haga doble clic en cuadro de diálogo JDialogCalcularPromedioFinal.java. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) el objeto Button. Cambie la propiedad text del jButton por Calcular Promedio Final y finalmente en el Inspector cambie el nombre del botón de comando por jButtonCalcularPromedioFinal.

Page 120: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 120

Haga clic en la Ventana Inspector para verificar el cuadro de diálogo JDialogCalcularPromedioFinal.

Agregue el código del evento clic del objeto jButtonCalcularPromedioFinalActionPerformed.

private void jButtonCalcularPromedioFinalActionPerformed(java.awt.event.ActionEvent evt) { int respuesta = JOptionPane.showConfirmDialog(this, "¿Está seguro...?", "Diálogo de Confirmación",

JOptionPane.YES_NO_OPTION); if (respuesta == JOptionPane.YES_OPTION)

{ for (int i=0;i<AplicacionArreglosConGUI.numeroDeAlumno;i=i+1) { oAlumno[i].setPromedioFinal(); } } dispose(); } Verique el código del botón de comando jButtonCalcularPromedioFinalActionPerformed. Debe

presentarse errores en JOptionPane.YES_NO_OPTION.

Page 121: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 121

Haga clic derecho en la palabra JOptionPane.YES_OPTION y seleccione Fix Import (Refaccionar Importaciones).

Verifique la instrucción import agregada.

Page 122: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 122

Haga doble clic en el JFrame JFrameArreglosConGUI.java y luego clic en la pestaña Design del mismo. Luego haga clic derecho en el panel de JFrameArreglosConGUI y agregue desde la Paleta (Add From Palette) una Barra de Menú (Menu Bar).

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Page 123: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 123

Haga clic derecho en la opción File de la Barra de Menú del JFrameArreglosConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Verifique que la barra de Menú se presente como en el siguiente gráfico.

Page 124: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 124

Haga clic derecho en la opción File de la Barra de Menú del JFrameArreglosConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Page 125: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 125

Haga clic derecho sobre la primera opción File y modifique el texto colocando “Alumnos”.

Haga doble clic sobre el texto del primer Elemento de Menú (jMenuItem1) y modifique el texto colocando “Insertar Alumnos”. Repita el proceso sobre el texto del segundo Elemento de Menú (jMenuItem2) y modifique el texto colocando “Listado de alumnos”, tal como se presenta en el siguiente gráfico.

Page 126: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 126

Haga clic derecho sobre la segunda opción Edit y seleccione la propiedad Editar Texto. Modifique y póngale Proceso.

Haga clic derecho en la opción Proceso de la Barra de Menú del JArregloConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Page 127: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 127

Cambie la propiedad textro del elemento de menú creado y proporcióne el texto Calcular promedio final. Finalmente verifique que la Barra de Menú se presente como en el siguiente gráfico.

Haga clic derecho en la barra de menú y seleccione Agregar menú (Add Menu).

Page 128: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 128

Haga clic derecho en la opción de menú jMenu3 y seleccione Editar Texto (Edit Text). Cambie el nombre de la opción de menú jMenu3 por Salir.

Haga clic derecho en la opción de menú Salir y seleccione Agregar Elemento de Menú (Menu Item) desde la paleta (Add From Palette).

Page 129: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 129

Haga clic derecho en la opción de menú jMenuItem4 y seleccione Editar Texto (Edit Text). Cambie el nombre del elemento de menú jMenuItem4 por Salir de la aplicación.

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Page 130: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 130

Renombre los objetos de la barra de menú en la ventana Inspector del JFrameArreglosConGUI, tal como se presenta como en el siguiente gráfico.

Haga clic en la pestaña Source de la ventana JFrameArreglosConGUI y cree la variable dialogo de tipo Javax.Swing.JDialog tal como se presenta en el siguiente gráfico.

Page 131: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 131

Haga clic derecho en el primer elemento de menú Alumnos (Insertar alumnos) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente.

Page 132: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 132

Haga clic derecho en el segundo elemento de menú Alumnos (Listar alumnos) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente para ejecutrar el cuadro de diálogo ListarAlumno.

Page 133: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 133

Haga clic derecho en el primer elemento de menú Proceso (Calcular promedio final) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente para calcular promedios.

Haga clic derecho en el primer elemento de menú Salir (Salir del sistema) y agregue un Evento-Action-ActionPerformed.

Page 134: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 134

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonSalirActionPerformed.

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt)

{ int respuesta = JOptionPane.showConfirmDialog(this, "¿Está seguro...?", "Diálogo de

Confirmación", JOptionPane.YES_NO_OPTION);

if (respuesta == JOptionPane.YES_OPTION) { dispose();

} }

Verique el código del botón de comando jButtonSalirActionPerformed. Debe presentarse errores en JOpctonPane.YES_NO_OPTION.

Haga clic derecho en la palabra JOptionPane.YES_OPTION y seleccione Fix Import (Refaccionar Importaciones).

Page 135: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 135

Verifique la instrucción import agregada.

Verifique que el código de todos los elementos de menú se presenten como en el siguiente gráfico.

Page 136: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 136

Haga clic derecho en PaqueteArreglosConGUI y cree una Clase Principal Java (Java Main Class) dentro del paquete PaqueteArreglosConGUI.

Ejecute la aplicación AplicacionArreglosConGUI

Verifique la ejecución de la opción Insertar alumnos.

Page 137: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 137

Verifique la ejecución de la opción Listar alumnos

Verifique la ejecución de la opción Calcular promedio final

Verifique la ejecución de la opción Salir de la aplicación

Page 138: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 138

Page 139: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 139

ARCHIVOS DE DATOS El almacenamiento en variables y arreglos es temporal; los datos se pierden cuando una variable local queda fuera del alcance, o cuando el programa termina. Las computadoras utilizan archivos de datos para la retención de a largo plazo de grandes cantidades de datos, incluso hasta después de que terminan los programas que crean esos datos. Se denominan datos persistentes a aquellos que duran más allá de la duración de la ejecución del programa. Las computadoras almacenan archivos en dispositivos de almacenamiento secundario como disco duros, USB, discos ópticos y cintas magnéticas.

El procesamiento de archivos es una de las herramientas más importantes que debe tener un lenguaje de programación para soportar las aplicaciones comerciales, que generalmente procesan grandes cantidades de datos persistentes. Java posee pose poderosas características de procesamiento de archivos de datos, las cuales permiten a un programa leer y escribir datos en memoria interna y/o memoria externa o en archivos a través de la red. Entre las operaciones que se pueden realizar con archivos de datos tenemos:

Agregar registros de datos.

Acceder a registros, siguiendo algún método (secuencial, al azar,…)

Examinar información almacenada en los registros de datos.

Sustituir una información de los registros de datos.

ORGANIZACIÓN DE LOS ARCHIVOS DE DATOS Los archivos de datos se organizan de la siguiente forma: Campo Es el agrupamiento de caracteres para formar una palabra o una cifra completa, como el

código o nombre de una persona Registro Es un grupo de campos considerados como una unidad. Archivo/tabla Es un grupo de registros del mismo tipo. Base de datos Es un grupo de archivos que almacenan la información de una organización. ORGANIZACIÓN SECUENCIAL Método para almacenar registros de datos, en el cual los registros se deben recuperar en el mismo orden en que se almacenaron. ORGANIZACIÓN DIRECTA O ALEATORIA. Método para almacenar registros de datos en un archivo de modo que se pueda acceder a ellos en cualquier secuencia sin importar su orden físico real en los medios de almacenamiento. ORGANIZACIÓN SECUENCIAL INDEXADA Los registros se almacenan en orden. El método utiliza un índice de campo clave para buscar y localizar físicamente un registro, como pueden localizarse los temas clave en un libro. Utiliza un arreglo de índice en la RAM donde se almacena en forma ordenada el campo clave y la dirección física de los registros. Después

Page 140: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 140

de operaciones de mantenimiento este arreglo de índices puede ser grabado en forma separada en el medio magnético para luego ser utilizado en la próxima sesión previa carga de los índices en la memoria RAM. Un índice es una tabla o lista que contiene las claves de registros con las posiciones físicas en archivo de acceso indexado.

JERARQUÍA DE DATOS

ARCHIVOS BINARIO EN JAVA Todos los lenguajes de programación tienen alguna forma de interactuar con los sistemas de archivos de datos; Java no es una excepción. Si se está desarrollando una aplicación Java para uso interno, probablemente será necesario el acceso directo a archivos. Antes de realizar acciones sobre un archivo, necesitamos un poco de información sobre ese archivo. La clase File proporciona muchas utilidades para el manejo y obtención de información de archivos. CREACIÓN DE UN OBJETO FILE Para crear un objeto de tipo File se utiliza: //Se crea la variable Archivo de tipo File que contendrá la dirección del archivo de datos.

File Fichero= new File("Alumno.dat");

Base de datos

Archivo

Registro

Campo

Byte

Bit 1

10000001 Letra A en ASCII

Alumno_id apellidoNombre evaluación evaluación promedio

parcial 1 parcial 2 de trabajo

1 Arias, Alex 11 11 11

Alumno_id apellidoNombre evaluación evaluación promedio

parcial 1 parcial 2 de trabajo

1 Arias, Alex 11 11 11

2 Barreto, Byron 12 12 12

3 Cespedes, Cesar 13 13 13

apellidoNombre

Arias, Alex

Archivo de Notas Archivo de CxP

Archivo de expedientes personales

Page 141: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 141

ARCHIVOS DE ACCESO ALEATORIO (ORGANIZACIÓN EN JAVA) A menudo, no se desea leer un archivo de principio a fin; sino acceder al archivo como una base de datos, donde se salta de un registro a otro; cada uno en diferentes partes del archivo. Java proporciona una clase RandomAccessFile para este tipo de entrada/salida. CREACIÓN Y ACCESO A UN ARCHIVO DE ACCESO ALEATORIO Para abrir un archivo de acceso aleatorio y accesarlo se realiza lo siguiente;

//Se crea la variable archivo de tipo File que contendrá la dirección File fichero=new File("Alumno.dat");

//Se crea la variable archivo de tipo RandomAccessFile o de acceso aleatorio. RandomAccessFile archivo;

//Abre el archivo de acceso aleatorio para lectura y escritura archivo = new RandomAccessFile(fichero,"rw"); El argumento modo determina si se tiene acceso de sólo lectura (r) o de lectura/escritura (r/w). RandomAccessFile soporta la noción de puntero de archivo. Este puntero indica la posición actual en el archivo. Cuando el archivo se crea por primera vez, el puntero de archivo es 0, indicando el principio del archivo. Las llamadas a los métodos readXXX y writeXXX ajustan la posición del puntero de archivo según el número de bytes leídos o escritos.

Los objetos RandomAccessFile esperan información de lectura/escritura utilizando los métodos read…() y write…(). Además de los métodos de I/O normales que implícitamente mueven el puntero de archivo cuando ocurre la operación, RandomAccessFile contiene tres métodos que manipulan explícitamente el puntero de archivo:

skipBytes : Mueve el puntero hacia adelante el número de bytes especificado. seek : Posiciona el puntero de archivo en la posición anterior al byte especificado. getFilePointer : Devuelve la posición actual (byte) del puntero de fichero. ACTUALIZACIÓN DE INFORMACIÓN Se pueden utilizar archivo de acceso aleatorio para escribir información. Ejemplo:

public static void escribirRegistro(Alumno oAlumno, RandomAccessFile archivo) { try { archivo.writeInt( oAlumno.getAlumno_id());

archivo.writeUTF( oAlumno.getApellidoNombre()); archivo.writeDouble(oAlumno.getEvaluacionParcial1()); archivo.writeDouble(oAlumno.getEvaluacionParcial2()); archivo.writeDouble(oAlumno.getPromedioDeTrabajo()); } catch(IOException e) { System.out.println(“error :”+e); }

}

Page 142: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 142

LECTURA DE INFORMACIÓN Se pueden utilizar archivo de acceso aleatorio para leer información. Ejemplo:

public static Alumno leerRegistro(Alumno oAlumno, RandomAccessFile archivo) { try

{ oAlumno.setAlumno_id(archivo.readInt()); oAlumno.setApellidoNombre(archivo.readUTF()); oAlumno.setEvaluacionParcial1(archivo.readDouble()); oAlumno.setEvaluacionParcial2(archivo.readDouble()); oAlumno.setPromedioDeTrabajo(archivo.readDouble()); return oAlumno;

} catch(IOException e)

{ return null; }

} MÉTODOS PARA ESCRITURA

void writeBoolean( boolean ) Escribe un boolean como un valor byte.

void writeByte( int ) Escribe un byte como un valor byte.

void writeBytes( String ) Escribe un string como una secuencia de bytes.

void writeChar( int ) Escribe un character como dos valores bytes.

void writeChars( String ) Escribe un string como una secuencia de caracteres.

void writeDouble( double ) Convierte un double como una secuencia de ocho bytes.

void writeFloat( float ) Convierte un float como una secuencia de cuatro bytes.

void writeInt( int ) Escribe un int como una secuencia de cuatro bytes.

void writeLong( long) Escribe un long como una secuencia de ocho bytes.

void writeShort( int ) Escribe a short como una secuencia de dos bytes. high byte first.

void writeUTF( String str ) Escribe un String hacia un archivo usando UTF-8 modificado en una máquina de manera independiente.

MÉTODOS PARA LECTURA

boolean readBoolean () lee un boolean desde un archivo

byte readByte() lee un valor de 8 bits con signo desde un archivo.

char readChar() leer un único carácter desde un archivo

doublé readDouble() lee un double desde un archivo

float readFloat() lee un float desde un archivo

int readInt() lee un valor int de 32 bits con signo desde un archivo.

String readLine() Lee la siguiente línea de texto desde un archivo.

long readLong() lee un valor long de 64 bits con signo desde un archivo.

short readShort() lee un valor short de 16 bits con signo desde un archivo.

String readUTF() lee un String desde un archivo.

A continuación se presenta el desarrollo de una aplicación en el cual se utiliza un archivo de datos para almacenar los datos de un alumno, calcular su promedio final y mostrar los datos del alumno con su

Page 143: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 143

promedio final calculado. Se utiliza los atributos código del alumno (alumno_id), sus apellidos y nombres (apellidoNombre), la evaluación parcial 1 (evaluacionParcial1), la evaluación parcial 2 (evaluacionParcial2) y el promedio de trabajo (promedioDeTrabajo). El promedio final (promedioFinal) se calcula con la siguiente fórmula:

promedioFinal = ( evaluacionParcial1 + evaluacionParcial2 + promedioDeTrabajo )/ 3

La aplicación desarrollada para correr en consola presenta el siguiente menú de opciones:

Cada opción se describe a continuación:

La ejecución de la opción I permite insertar objetos al archivo de datos. Esta opción solicita el código del alumno (alumno_id). Si no lo encuentra en el arreglo de registros permite ingresar los otros datos (apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo). Si lo encuentra presenta el mensaje “Registro encontrado!!!”

La ejecución de la opción C permite consultar un registro almacenado en el archivo de datos . Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en el archivo de datos lo presenta en pantalla. Si no lo encuentra presenta el mensaje "No se encuentra el registro!!!".

La ejecución de la opción M permite modificar un registro almacenado en el archivo de datos. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en el archivo de datos lo presenta en pantalla y solicita nuevos datos (atributos apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo) los cauales reemplazan a los anteriores. Si no lo encuentra presenta el mensaje "No se encuentra el registro!!!".

Page 144: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 144

La ejecución de la opción E permite eliminar registros al arreglo de registros. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en el archivo de datos lo presenta en pantalla y lo borra inmediatamente. El término borrado siginifica poner en el atributo alumno_id el valor -99. Si no lo encuentra presenta el mensaje "No se encuentra el registro!!!".

La ejecución de la opción L permite listar los los registros al archivo de datos. Note que el promedio final se visualiza con el valor 0. Para visualzar el promedio final calculado tiene que ejecutar la opción [P]rocesar notas.

La ejecución de la opción P permite calcular el promedio final de los registros del arreglo. Note que el promedio final se visualiza con el valor 0.

Para visualizar el promedio final calculado tiene que ejecutar la opción [L]istar.

La ejecución de la opción S se sale de la aplicación.

Page 145: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 145

Para el desarrollo de la aplicación debe realizar las siguientes actividades:

Haga clic derecho en File (Archivo) y cree un proyecto vacío de Java.

Seleccione un proyecto de Aplicación Java (Java Application).

Page 146: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 146

Asigne como Nombre de Proyecto (Project Name) ProyectoArchivoDeDatos, Localización del proyecto (Project Location) c:\NetBeansProjects y como Carpeta del Proyecto (Project Folder) c:\NetBeansProjects\ProyectoArchivoDeDatos. Desmarcar la casilla de verificación Cree una Clase Principal (Create Main Class) y luego haga clic en Finalizar (Finish).

Haga clic derecho en el Proyecto ProyectoArchivoDeDatos y cree un Paquete.

Page 147: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 147

Asigne como Nombre de Paquete (Package Name) PaqueteArchivoDeDatos, Proyecto (Project) ProyectoArchivoDeDatos, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivoDeDatos\src\ PaqueteArchivoDeDatos. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteArchivoDeDatos y cree una Java Class.

Page 148: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 148

Asigne como Nombre de Clase (Class name) Alumno, Proyecto (Project) ProyectoArchivoDeDatos, localización (Location) Source Packages, paquete (Package) PaqueteArchivoDeDatos y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivoDeDatos\src\PaqueteArchivoDeDatos\ Alumno.java. Luego haga clic en Finalizar (Finish).

Agregue el siguiente código para la clase Alumno. Obserse que se ha agregado un nuevo método set para el atributo promedioFinal.

package PaqueteArchivoDeDatos;

public class Alumno { private int alumno_id; private String apellidoNombre; private double evaluacionParcial1; private double evaluacionParcial2; private double promedioDeTrabajo; private double promedioFinal; public Alumno() { this.alumno_id=0; this.apellidoNombre=null; this.evaluacionParcial1 = 0; this.evaluacionParcial2 = 0; this.promedioDeTrabajo = 0; this. promedioFinal = 0; } public Alumno(int alumno_id, String apellidoNombre, double evaluacionParcial1,

double evaluacionParcial2, double promedioDeTrabajo, double promedioFinal) { this.alumno_id = alumno_id; this.apellidoNombre = apellidoNombre; this.evaluacionParcial1 = evaluacionParcial1; this.evaluacionParcial2 = evaluacionParcial2; this.promedioDeTrabajo = promedioDeTrabajo; this.promedioFinal = promedioFinal ; }

Page 149: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 149

public int getAlumno_id() { return this.alumno_id; } public void setAlumno_id(int alumno_id) { this.alumno_id = alumno_id; } public String getApellidoNombre() { return this.apellidoNombre; } public void setApellidoNombre(String apellidoNombre) { this.apellidoNombre = apellidoNombre; } public double getEvaluacionParcial1() { return this.evaluacionParcial1; } public void setEvaluacionParcial1 (double evaluacionParcial1) { this.evaluacionParcial1 = evaluacionParcial1; } public double getEvaluacionParcial2() { return this.evaluacionParcial2; } public void setEvaluacionParcial2 (double evaluacionParcial2) { this.evaluacionParcial2 = evaluacionParcial2; } public double getPromedioDeTrabajo()

{ return promedioDeTrabajo; } public void setPromedioDeTrabajo(double promedioDeTrabajo) { this.promedioDeTrabajo = promedioDeTrabajo; } public double getPromedioFinal() { return this.promedioFinal; }

public void setPromedioFinal() { this.promedioFinal=(this.evaluacionParcial1+this.evaluacionParcial2+this.promedioDeTrabajo)/3; }

}

Page 150: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 150

Cree un nuevo paquete.

Asigne como Nombre de Paquete (Package Name) PaqueteBiblioteca, Proyecto (Project) ProyectoArchivoDeDatos, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivoeDatos\src\PaqueteBiblioteca. Luego haga clic en Finalizar (Finish).

Page 151: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 151

Dentro del paquete PaqueteBiblioteca cree la clase denominada ClaseLectura.

Agregue el siguiente código para la clase ClaseLectura. (Cortesía del Ing. J.J. Flores Cueto – U.N.J.F.S.C.)

package PaqueteBiblioteca; import java.io.*;

public class ClaseLectura

{ public static char leerChar() { char c=' '; char [] c1=leerString().toCharArray(); if (c1.length==1) c=c1[0]; return c; } public static double leerDouble()

{ try { return Double.valueOf(leerString()).doubleValue(); }

catch (NumberFormatException e) { System.out.print("ERROR... \n Ingrese de nuevo : ");

return leerDouble(); } } public static float leerFloat()

{ try { return Float.valueOf(leerString()).floatValue();

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerFloat(); } } public static int leerInt()

{ try { return Integer.parseInt(leerString());

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerInt(); } }

Page 152: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 152

public static long leerLong() { try

{ return Long.valueOf(leerString()).longValue(); }

catch (NumberFormatException e) { System.out.print("ERROR... \n Ingrese de nuevo:");

return leerLong(); } } public static short leerShort()

{ try { return Short.valueOf(leerString()).shortValue();

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerShort(); } } public static String leerString()

{ BufferedReader in = new BufferedReader(new InputStreamReader(System. in)); String cadena =""; try

{ cadena = in.readLine(); }

catch (IOException e) { System.out.println(e); }

return cadena; } } Nota: El código anterior (ClaseLectura.java) puede descargarlo del cd de trabajo proporcionado por el

autor. Cree una nueva clase denominada AplicacionArchivoDeDatos

Page 153: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 153

Agregue el siguiente código para la clase AplicacionArchivoDeDatos

package PaqueteArchivoDeDatos; import PaqueteBiblioteca.*; import java.io.*; public class AplicacionArchivoDeDatos { static int tamañoDeRegistro=100; public static void main(String[ ] args) { char Opcion; do { System.out.println(" M E N U"); System.out.println(" ======="); System.out.println(" [I]nsertar"); System.out.println(" [C]onsulta"); System.out.println(" [M]odificar"); System.out.println(" [E]liminar"); System.out.println(" [L]istar"); System.out.println(" [P]rocesar notas"); System.out.println(" [S]alir "); System.out.print(" Elija su opción : "); Opcion=Character.toUpperCase(ClaseLectura.leerChar()); switch (Opcion) { case 'I': insertar(); break ; case 'C': consulta(); break ; case 'M': modificar(); break ; case 'E': eliminar(); break ; case 'L': listar(); break ; case 'P': procesar(); break; default: } } while (Opcion!='S'); } public static void insertar() { try { Alumno oAlumno=new Alumno(); int busqueda=0; int posicion=0; File Fichero=new File("Alumno.dat"); if ( Fichero.exists( ) && ! Fichero.isFile ( ) ) { throw new IOException (Fichero.getName()+ "No es un Fichero"); } RandomAccessFile archivo; archivo=new RandomAccessFile(Fichero, "rw"); System.out.print("Alumno_id : "); busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,archivo);

Page 154: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 154

if (posicion==-99) { oAlumno.setAlumno_id(busqueda); oAlumno=actualizarRegistro(oAlumno); posicion=(int )Math.ceil((double)archivo.length()/tamañoDeRegistro); archivo.seek(posicion*tamañoDeRegistro); escribirRegistro(archivo,oAlumno); } else { System.out.println("Registro encontrado!!!"); } archivo.close( ); } catch(IOException e) { System.out.println("No se pudo insertar el registro"); } } public static void modificar() { try { Alumno oAlumno=new Alumno(); int busqueda=0; int posicion=0; File Fichero=new File("Alumno.dat"); if ( Fichero.exists( ) && ! Fichero.isFile ( ) ) { throw new IOException (Fichero.getName()+ "No es un Fichero"); } RandomAccessFile archivo; archivo=new RandomAccessFile(Fichero, "rw"); System.out.print("Alumno_id : ");busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,archivo); if (posicion!=-99) { archivo.seek(posicion*tamañoDeRegistro); leerRegistro(oAlumno, archivo); visualizarRegistro(oAlumno); oAlumno=actualizarRegistro(oAlumno); archivo.seek(posicion*tamañoDeRegistro); escribirRegistro(archivo,oAlumno); } else { System.out.println("No se puede encuentra el registro !!!"); } archivo.close( ); } catch(IOException e) { System.out.println("No se pudo modificar el registro"); } } public static void eliminar() { try

{ Alumno oAlumno=new Alumno(); int busqueda=0; int posicion=0; File Fichero=new File("Alumno.dat");

Page 155: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 155

if ( Fichero.exists( ) && ! Fichero.isFile ( ) ) { throw new IOException (Fichero.getName()+ "No es un Fichero"); } RandomAccessFile archivo; archivo=new RandomAccessFile(Fichero, "rw"); System.out.print("Alumno_id : ");busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,archivo); if (posicion!=-99) { archivo.seek(posicion*tamañoDeRegistro); leerRegistro(oAlumno, archivo); visualizarRegistro(oAlumno); oAlumno.setAlumno_id(-99); archivo.seek(posicion*tamañoDeRegistro); escribirRegistro(archivo, oAlumno); } else { System.out.println("No se puede encuentra el registro !!!"); } archivo.close( ); } catch(IOException e) { System.out.println("No se pudo eliminar el registro"); } } public static void consulta() { try { Alumno oAlumno=new Alumno(); int busqueda=0; int posicion=0; RandomAccessFile archivo; archivo=new RandomAccessFile( "alumno.dat", "r"); System.out.print("Alumno_id : "); busqueda=ClaseLectura.leerInt(); posicion=buscarRegistro(busqueda,archivo); if (posicion!=-99) { archivo.seek(posicion*tamañoDeRegistro); leerRegistro(oAlumno, archivo); visualizarRegistro(oAlumno); } else { System.out.println("No se puede encuentra el registro !!!"); } } catch (IOException e) { System.out.println("Fallo la operación de consulta! ! !"); } } public static int buscarRegistro(int alumno_id, RandomAccessFile archivo) { try { Alumno oAlumno=new Alumno(); int encontrado=0; int posicion=0; int i=(int )Math.ceil((double)archivo.length()/tamañoDeRegistro);

Page 156: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 156

while ((posicion<i) && (encontrado==0)) { archivo.seek ( posicion * tamañoDeRegistro ); leerRegistro(oAlumno,archivo); if (alumno_id==oAlumno.getAlumno_id()) { encontrado=1; } else { posicion++; } } if (encontrado==1) { return posicion; } else { return -99; } } catch(IOException e) { return -99; } } public static void listar() { try { Alumno oAlumno=new Alumno(); int posicion=0; RandomAccessFile archivo; archivo=new RandomAccessFile("alumno.dat","r"); int i=(int )Math.ceil((double)archivo.length()/tamañoDeRegistro); System.out.print("==============================================================\n"); System.out.print("Alumno_id Apellido y Nombre "); System.out.print("Ep 1 Ep2 P.deTrab. P.Final\n"); System.out.print("============================================================================\n"); for (posicion=0;posicion<i;posicion=posicion+1) { archivo.seek( posicion*tamañoDeRegistro ); leerRegistro(oAlumno, archivo); System.out.print(oAlumno.getAlumno_id()+"\t\t"); System.out.print(oAlumno.getApellidoNombre()+"\t"); System.out.print(oAlumno.getEvaluacionParcial1()+"\t"); System.out.print(oAlumno.getEvaluacionParcial2()+"\t"); System.out.print(oAlumno.getPromedioDeTrabajo()+"\t"); System.out.print(oAlumno.getPromedioFinal()+"\n"); } } catch (IOException e) { System.out.println("Fallo la operación de listado ! ! ! ");// } } public static void procesar() { try { Alumno oAlumno=new Alumno(); int posicion=0; RandomAccessFile archivo; archivo=new RandomAccessFile("alumno.dat","rw"); int i=(int )Math.ceil((double)archivo.length()/tamañoDeRegistro);

Page 157: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 157

for (posicion=0;posicion<i;posicion=posicion+1) { archivo.seek( posicion*tamañoDeRegistro ); leerRegistro(oAlumno, archivo); oAlumno.setPromedioFinal(); archivo.seek( posicion*tamañoDeRegistro ); escribirRegistro(archivo, oAlumno); } } catch (IOException e) { System.out.println("Fallo la operación de listado ! ! ! ");// } }

public static void visualizarRegistro(Alumno oAlumno) { System.out.print("Apellido y Nombre : "+oAlumno.getApellidoNombre()+"\n"); System.out.print("Evaluación parcial 1 : "+oAlumno.getEvaluacionParcial1()+"\n"); System.out.print("Evaluación parcial 2 : "+oAlumno.getEvaluacionParcial2()+"\n"); System.out.print("Promedio de trabajo : "+oAlumno.getPromedioDeTrabajo()+"\n"); System.out.print("Promedio final : "+oAlumno.getPromedioFinal()+"\n"); }

public static Alumno actualizarRegistro(Alumno oAlumno) { System.out.print("Apellido y Nombre : ");

oAlumno.setApellidoNombre(ClaseLectura.leerString()); System.out.print("Evaluación parcial 1 : "); oAlumno.setEvaluacionParcial1(ClaseLectura.leerDouble()); System.out.print("Evaluación parcial 2 : "); oAlumno.setEvaluacionParcial2(ClaseLectura.leerDouble()); System.out.print("Promedio de trabajo : "); oAlumno.setPromedioDeTrabajo(ClaseLectura.leerDouble()); return oAlumno; }

public static void escribirRegistro(RandomAccessFile archivo, Alumno oAlumno) { try { archivo.writeInt( oAlumno.getAlumno_id());

archivo.writeUTF( oAlumno.getApellidoNombre()); archivo.writeDouble(oAlumno.getEvaluacionParcial1()); archivo.writeDouble(oAlumno.getEvaluacionParcial2()); archivo.writeDouble(oAlumno.getPromedioDeTrabajo()); archivo.writeDouble(oAlumno.getPromedioFinal()); } catch(IOException e) { System.out.println("Fallo la operación de escritura !!! ");// }

}

public static Alumno leerRegistro(Alumno oAlumno,RandomAccessFile archivo) { try

{ oAlumno.setAlumno_id(archivo.readInt()); oAlumno.setApellidoNombre(archivo.readUTF()); oAlumno.setEvaluacionParcial1(archivo.readDouble()); oAlumno.setEvaluacionParcial2(archivo.readDouble()); oAlumno.setPromedioDeTrabajo(archivo.readDouble()); oAlumno.setPromedioFinal(archivo.readDouble()); return oAlumno;

}

Page 158: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 158

catch(IOException e)

{ return null; }

} }

La ejecución de la aplicación mostrando el menú de opciones.

La ejecución de la aplicación mostrando la ejecución de la opción [L]istar.

Page 159: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 159

Page 160: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 160

SISTEMA DE MENÚ CON GUI PARA MANIPULAR UN ARCHIVO DE DATOS

A continuación se presenta el desarrollo de una aplicación en la cual se utiliza un archivo de objetos para almacenar los datos de un alumno, calcular su promedio final y mostrar los datos del alumno con su promedio final calculado. Se utiliza los atributos código del alumno (alumno_id), sus apellidos y nombres (apellidoNombre), la evaluación parcial 1 (evaluacionParcial1), la evaluación parcial 2 (evaluacionParcial2) y el promedio de trabajo (promedioDeTrabajo). El promedio final (promedioFinal) se calcula con la siguiente fórmula:

promedioFinal = ( evaluacionParcial1 + evaluacionParcial2 + promedioDeTrabajo ) / 3

La aplicación desarrollada con GUI presenta el siguiente menú de opciones:

Cada opción se describe a continuación:

La ejecución de la opción Insertar alumnos permite insertar objetos al archivo de datos utilizando un cuadro de diálogo. Esta opción solicita los datos del alumno (alumno_id, apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo).

Page 161: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 161

La ejecución de la opción Listar registros permite listar los registros del archivo de datos utilizando un cuadro de area de texto. Note que el promedio final se visualiza con el valor 0. Para visualzar el promedio final calculado tiene que ejecutar la opción Calcular promedio final.

La ejecución de la opción Calcular promedio final permite calcular el promedio final de los registros del archivo de datos. Para ver los cambios realizados se tiene que ejecutar la opción Listar registros.

La ejecución de la opción Salir del sistema sale de la aplicación.

Page 162: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 162

A continuación se presenta una práctica para crear un sistema de menú con GUI para manipular un archivo de datos.

Haga clic derecho en File (Archivo) y cree un proyecto vacío de Java.

Seleccione un proyecto de Aplicación Java (Java Application).

Page 163: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 163

Asigne como Nombre de Proyecto (Project Name) ProyectoArchivosConGUI, Localización del proyecto (Project Location) c:\NetBeansProjects y como Carpeta del Proyecto (Project Folder) c:\NetBeansProjects\ProyectoArchivosConGUI. Desmarque la casilla de verificación Cree una clase Principal (Create Main Class) y luego haga clic en Finalizar (Finish).

Haga clic derecho en el Proyecto ProyectoArchivosConGUI y cree un Paquete dentro del proyecto ProyectoArchivosConGUI.

Page 164: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 164

Asigne como Nombre de Paquete (Package Name) PaqueteArchivosConGUI, Proyecto (Project) ProyectoArchivosConGUI, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivosConGUI\src\PaqueteArchivosConGUI. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteArchivosConGUI y cree una clase Java (Java Class).

Page 165: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 165

Asigne como Nombre de Clase (Class name) Alumno, Proyecto (Project) ProyectoArchivosConGUI, localización (Location) Source Packages, paquete (Package) PaqueteArchivosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivosConGUI\src\PaqueteArchivosConGUI \ Alumno.java. Luego haga clic en Finalizar (Finish).

Agregue el siguiente código para la clase Alumno. Obserse que se ha agregado un nuevo método set para el atributo promedioFinal.

package PaqueteArchivosConGUI;

public class Alumno { private int alumno_id; private String apellidoNombre; private double evaluacionParcial1; private double evaluacionParcial2; private double promedioDeTrabajo; private double promedioFinal; public Alumno() { this.alumno_id=0; this.apellidoNombre=null; this.evaluacionParcial1 = 0; this.evaluacionParcial2 = 0; this.promedioDeTrabajo = 0; this. promedioFinal = 0; } public Alumno(int alumno_id, String apellidoNombre, double evaluacionParcial1,

double evaluacionParcial2, double promedioDeTrabajo, double promedioFinal) { this.alumno_id = alumno_id; this.apellidoNombre = apellidoNombre; this.evaluacionParcial1 = evaluacionParcial1; this.evaluacionParcial2 = evaluacionParcial2; this.promedioDeTrabajo = promedioDeTrabajo; this.promedioFinal = promedioFinal ; }

Page 166: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 166

public int getAlumno_id() { return this.alumno_id; } public void setAlumno_id(int alumno_id) { this.alumno_id = alumno_id; } public String getApellidoNombre() { return this.apellidoNombre; } public void setApellidoNombre(String apellidoNombre) { this.apellidoNombre = apellidoNombre; } public double getEvaluacionParcial1() { return this.evaluacionParcial1; } public void setEvaluacionParcial1 (double evaluacionParcial1) { this.evaluacionParcial1 = evaluacionParcial1; } public double getEvaluacionParcial2() { return this.evaluacionParcial2; } public void setEvaluacionParcial2 (double evaluacionParcial2) { this.evaluacionParcial2 = evaluacionParcial2; } public double getPromedioDeTrabajo()

{ return promedioDeTrabajo; } public void setPromedioDeTrabajo(double promedioDeTrabajo) { this.promedioDeTrabajo = promedioDeTrabajo; } public double getPromedioFinal() { return this.promedioFinal; }

public void setPromedioFinal() { this.promedioFinal=(this.evaluacionParcial1+this.evaluacionParcial2+this.promedioDeTrabajo)/3; } }

Page 167: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 167

Haga clic derecho en PaqueteArchivosConGUI y cree un JFrame Form.

Asigne como Nombre de Clase (Class name) JFrameArchivosConGUI, Proyecto (Project) ProyectoArchivosConGUI, localización (Location) Source Packages, paquete (Package) PaqueteArchivosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivosConGUI\src\PaqueteArchivosConGUI\ JFrameArreglosConGUI.java. Luego haga clic en Finalizar (Finish).

Page 168: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 168

Verifique que el Proyecto ProyectoAchivosConGUI se presente como en el siguiente gráfico.

Haga clic derecho en PaqueteArchivosConGUI y cree un JDialog Form dentro del Paquete PaqueteArchivosConGUI.

Page 169: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 169

Asigne como Nombre de Clase (Class name) JDialogInsertarAlumno, Proyecto (Project) ProyectoArchivosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArchivosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivosConGUI\src\PaqueteArchivosConGUI\ JDialogInsertarAlumno.java. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteArchivosConGUI y cree un JDialog Form dentro del Paquete PaqueteArchivosConGUI.

Page 170: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 170

Asigne como Nombre de Clase (Class name) JDialogListarAlumnos, Proyecto (Project) ProyectoArchivosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArchivosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivosConGUI\src\PaqueteArchivosConGUI\ JDialogListarAlumnos.java. Luego haga clic en Finalizar (Finish).

Verifique que el proyecto se presente como en el siguiente gráfico.

Page 171: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 171

Haga clic derecho en PaqueteArchivosConGUI y cree un JDialog Form dentro del Paquete PaqueteArchivosConGUI.

Asigne como Nombre de Clase (Class name) JDialogCalcularPromedioFinal.java, Proyecto (Project) ProyectoArreglosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArreglosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteArreglosConGUI\ JDialogCalcularPromedioFinal.java. Luego haga clic en Finalizar (Finish).

Page 172: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 172

Verifique que el proyecto se presente como en el siguiente gráfico.

Haga doble clic en cuadro de diálogo JDialogInsertarAlumno. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) los objetos Label (06), Text Field (05) y Button (03), tal como se presenta en el siguiente gráfico.

Page 173: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 173

Haga clic en la Ventana Inspector y verifique la presencia de los objetos que se visualizan en la ventana Disegn.

Renombre los objetos en la ventana Inspector tal se presente como en el siguiente gráfico.

Page 174: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 174

Pulse las teclas Control-Mayúsculas-7 para visualizar la Ventana de Propiedades. Modifique la propiedad Text del objeto jLabelTitulo con el texto “Insertar alumnos”.

Cambie la propiedad Text de cada control Swing para que sea como el de la siguiente tabla.

Nombre del Control Swing en el Inspector Propiedad Text del Control Swing

jLabelTitulo Insertar alumnos

jLabelAlumno_id Alumno_id:

jLabel ApellidoNombre Apellido y nombre:

jLabelEvaluacionParcial1 EvaluaciónParcial 1:

jLabelEvaluacionParcial2 EvaluaciónParcial 2:

jLabelPromedioDeTrabajo Promedio de Trabajo:

jButtonAceptar Aceptar

jButtonReiniciar Reiniciar

jButtonSalir Salir

Page 175: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 175

Haga clic en alguna parte del Panel de Diseño (Designer) del jDialog JDialogInsertarAlumno.java para visualizar la ventana de Propiedades (Properties).

Modifique la propiedad defaultCloseOperation y escriba DISPOSE (deshacerse).

Page 176: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 176

Haga clic derecho en el objeto jButtonAceptar y seleccione en el menú conceptual Event-Action-actionPerformed para programar en evento clic del botón de comando.

Agregue el código del evento clic del objeto jButtonAceptarActionPerformed.

private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt){ { try

{ Alumno oAlumno=new Alumno(); int busqueda=0; int posicion=0; File fichero=new File("Alumno.dat"); if ( fichero.exists() && ! fichero.isFile () ) { throw new IOException (fichero.getName()+ "No es un archivo de datos"); } RandomAccessFile archivo; archivo=new RandomAccessFile(fichero,"rw");

busqueda=Integer.parseInt(jTextFieldAlumno_id.getText()); posicion=buscarRegistro(busqueda,archivo); if (posicion==-99) { oAlumno.setAlumno_id(busqueda); oAlumno.setApellidoNombre(jTextFieldApellidoNombre.getText()); oAlumno.setEvaluacionParcial1(Double.parseDouble(jTextFieldEvaluacionParcial1.getText())); oAlumno.setEvaluacionParcial2(Double.parseDouble(jTextFieldEvaluacionParcial2.getText())); oAlumno.setPromedioDeTrabajo(Double.parseDouble(jTextFieldPromedioDeTrabajo. getText()));

posicion=(int )Math.ceil((double)archivo.length()/100);

Page 177: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 177

archivo.seek(posicion*100); escribirRegistro(oAlumno,archivo); JOptionPane.showMessageDialog(null,"Operación Exitosa!!!"); } else { JOptionPane.showMessageDialog(null,"Registro encontrado !!!"); } archivo.close( ); } catch(IOException e) { JOptionPane.showMessageDialog(null,"Error - no se grabó el registro!!!");

} }

} Haga clic derecho en la palabra FILE y seleccione Fix Imports (Refaccionar Importaciones).

Page 178: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 178

En Reparar todas las importaciones (Fix all imports) haga clic en el botón de comando Ok

Verifique las importaciones agregadas.

Page 179: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 179

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonReiniciarActionPerformed.

private void jButtonReiniciarActionPerformed(java.awt.event.ActionEvent evt) { jTextFieldAlumno_id.setText("");

jTextFieldApellidoNombre.setText(""); jTextFieldEvaluacionParcial1.setText(""); jTextFieldEvaluacionParcial2.setText(""); jTextFieldPromedioDeTrabajo.setText(""); }

Repita el proceso anterior y gregue el código del evento clic del objeto jButtonSalirActionPerformed.

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt) { dispose();

}

Haga clic en la pestaña source del cuadro de diálogo JDialogInsertar y agregue los métodos leerRegistro, escribir registro y buscarRegistro, después del código del evento clic del objeto jButtonSalirActionPerformed

public static Alumno leerRegistro(Alumno oAlumno, RandomAccessFile archivo) { try

{ oAlumno.setAlumno_id(archivo.readInt()); oAlumno.setApellidoNombre(archivo.readUTF()); oAlumno.setEvaluacionParcial1(archivo.readDouble()); oAlumno.setEvaluacionParcial2(archivo.readDouble()); oAlumno.setPromedioDeTrabajo(archivo.readDouble()); oAlumno.setPromedioFinal(archivo.readDouble()); return oAlumno;

} catch(IOException e)

{ return null; }

}

public static void escribirRegistro(Alumno oAlumno, RandomAccessFile archivo) { try

{ archivo.writeInt( oAlumno.getAlumno_id()); archivo.writeUTF( oAlumno.getApellidoNombre()); archivo.writeDouble(oAlumno.getEvaluacionParcial1()); archivo.writeDouble(oAlumno.getEvaluacionParcial2()); archivo.writeDouble(oAlumno.getPromedioDeTrabajo()); archivo.writeDouble(oAlumno.getPromedioFinal()); }

catch(IOException e) { JOptionPane.showMessageDialog(null,"No se grabó el registro !!!"); } }

public static int buscarRegistro(int busqueda, RandomAccessFile archivo) { try

{ Alumno oAlumno=new Alumno(); int encontrado=0; int posicion=0; int i=(int )Math.ceil((double)archivo.length()/100);

Page 180: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 180

while ((posicion<i) && (encontrado==0)) { archivo.seek ( posicion * 100 ); oAlumno=leerRegistro(oAlumno,archivo); if (busqueda==oAlumno.getAlumno_id()) { encontrado=1; } else { posicion++; } } if (encontrado==1) { return posicion; } else { return -99; } } catch(IOException e) { return -99; } }

Haga doble clic en cuadro de diálogo JDialogListarAlumno. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) los objetos Label, jTextArea y Button. Finalmente en el Inspector cambie los nombres de los controles tal como se presenta en el siguiente gráfico.

Agregue el código del evento clic del objeto jButtonListarActionPerformed.

private void jButtonListarActionPerformed(java.awt.event.ActionEvent evt) { try

{ Alumno oAlumno=new Alumno(); int posicion=0; RandomAccessFile archivo; archivo=new RandomAccessFile("alumno.dat","r"); int i=(int )Math.ceil((double)archivo.length()/100); jTextAreaListado.setText(""); jTextAreaListado.append("Alumno_id"+"\t"+"Apellido y nombre" + "\t" + "Ep1" + "\t"+ "Ep2"

+"\t" + "Pt"+ "\t"+"Pf" + "\n");

Page 181: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 181

for (posicion=0;posicion<i;posicion=posicion+1) { archivo.seek( posicion*100); leerRegistro(oAlumno, archivo); jTextAreaListado.append(oAlumno.getAlumno_id()+"\t"); jTextAreaListado.append(oAlumno.getApellidoNombre()+"\t\t"); jTextAreaListado.append(oAlumno.getEvaluacionParcial1()+"\t"); jTextAreaListado.append(oAlumno.getEvaluacionParcial2()+"\t"); jTextAreaListado.append( oAlumno.getPromedioDeTrabajo()+"\t"); jTextAreaListado.append( oAlumno.getPromedioFinal()+"\n"); } }

catch (IOException e) { JOptionPane.showMessageDialog(null,"Error al listar registros!!!");

} }

Haga clic en la pestaña source del cuadro de diólogo JDialogListarAlumnos y agregue el método leerRegistro.

public static Alumno leerRegistro(Alumno oAlumno, RandomAccessFile archivo) { try

{ oAlumno.setAlumno_id(archivo.readInt()); oAlumno.setApellidoNombre(archivo.readUTF()); oAlumno.setEvaluacionParcial1(archivo.readDouble()); oAlumno.setEvaluacionParcial2(archivo.readDouble()); oAlumno.setPromedioDeTrabajo(archivo.readDouble()); oAlumno.setPromedioFinal(archivo.readDouble()); return oAlumno;

} catch(IOException e) { return null; } }

Haga clic derecho en la palabra RandomAccessFile y seleccione Fix Imports (Refaccionar Importaciones).

Page 182: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 182

En Reparar todas las importaciones (Fix All Import) haga clic en aceptar para seleccionar todas las importaciones.

Verifique las importaciones agregadas.

Verifique que el proyecto se presente como en el siguiente gráfico. Luego haga clic en el objeto

JDialogCalcularPromedioFinal.java.

Page 183: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 183

Haga doble clic en cuadro de diálogo JDialogCalcularPromedioFinal.java. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) el objeto Button. Cambie la propiedad text del jButton por Calcular Promedio Final y finalmente en el Inspector cambie el nombre del botón de comando por jButtonCalcularPromedioFinal.

Haga clic en la Ventana Inspector para verificar el cuadro de diálogo JDialogCalcularPromedioFinal.

Agregue el código del evento clic del objeto jButtonCalcularPromedioFinal.

private void jButtonCalcularPromedioFinalActionPerformed(java.awt.event.ActionEvent evt) { int respuesta = JOptionPane.showConfirmDialog(this, "¿Esta seguro...?", "Diálogo de Confirmación",

JOptionPane.YES_NO_OPTION);

Page 184: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 184

if (respuesta == JOptionPane.YES_OPTION) { try { Alumno oAlumno=new Alumno(); int posicion=0; RandomAccessFile archivo; archivo=new RandomAccessFile("alumno.dat","rw"); int i=(int ) Math.ceil((double)archivo.length() / 100); for (posicion=0;posicion<i;posicion=posicion+1) { archivo.seek( posicion*100 ); leerRegistro(oAlumno, archivo); oAlumno.setPromedioFinal(); archivo.seek(posicion*100 ); escribirRegistro(archivo, oAlumno); } } catch (IOException e) { JOptionPane.showMessageDialog(null,"Falló en procesarpromedio final !!!"); } } dispose(); } Agregar los métodos leer Registro y escribirRegistro después del código del Botón de Comando

jButtonCalcularPromedioFinal public static Alumno leerRegistro(Alumno oAlumno,RandomAccessFile archivo)

{ try { oAlumno.setAlumno_id(archivo.readInt());

oAlumno.setApellidoNombre(archivo.readUTF()); oAlumno.setEvaluacionParcial1(archivo.readDouble()); oAlumno.setEvaluacionParcial2(archivo.readDouble()); oAlumno.setPromedioDeTrabajo(archivo.readDouble()); oAlumno.setPromedioFinal(archivo.readDouble()); return oAlumno;

} catch(IOException e)

{ return null; }

}

public static void escribirRegistro(Alumno oAlumno, RandomAccessFile archivo) { try { archivo.writeInt( oAlumno.getAlumno_id());

archivo.writeUTF( oAlumno.getApellidoNombre()); archivo.writeDouble(oAlumno.getEvaluacionParcial1()); archivo.writeDouble(oAlumno.getEvaluacionParcial2()); archivo.writeDouble(oAlumno.getPromedioDeTrabajo()); archivo.writeDouble(oAlumno.getPromedioFinal()); } catch(IOException e) { JOptionPane.showMessageDialog(null,"Falló al escribir el registro !!!"); } }

Page 185: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 185

Verificar que se muestran errores por falta de librerías.

Haga clic derecho en la palabra JOptionPane y seleccione Fix Imports (Refaccionar Importaciones).

En Reparar todas las importaciones (Fix All Import) haga clic en aceptar para seleccionar todas las

importaciones.

Page 186: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 186

Verifique las importaciones agregadas.

Haga doble clic en el JFrame JFrameArchivosConGUI.java y luego clic en la pestaña Design del mismo. Luego haga clic derecho en el panel de JFrameArchivosConGUI y agregue desde la Paleta (Add From Palette) una Barra de Menú (Menu Bar).

Page 187: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 187

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Haga clic derecho en la opción File de la Barra de Menú del JFrameArchivosConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Page 188: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 188

Verifique que la barra de Menú se presente como en el siguiente gráfico.

Haga clic derecho en la opción File de la Barra de Menú del JArchivosConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Page 189: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 189

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Haga clic derecho sobre la primera opción File y modifique el texto colocando “Alumnos”.

Page 190: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 190

Haga doble clic sobre el texto del primer Elemento de Menú (jMenuItem1) y modifique el texto colocando “Insertar Alumnos”. Repita el proceso sobre el texto del segundo Elemento de Menú (jMenuItem2) y modifique el texto colocando “Listar alumnos”, tal como se presenta en el siguiente gráfico.

Haga clic derecho sobre la segunda opción Edit y seleccione la propiedad Editar Texto. Modifique y póngale Proceso.

Page 191: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 191

Haga clic derecho en la opción Proceso de la Barra de Menú del JArregloConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Cambie la propiedad textro del elemento de menú creado y proporcióne el texto Calcular promedio final. Finalmente verifique que la Barra de Menú se presente como en el siguiente gráfico.

Page 192: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 192

Haga clic derecho en la barra de menú y seleccione Agregar menú (Add Menu).

Haga clic derecho en la opción de menú jMenu3 y seleccione Editar Texto (Edit Text). Cambie el nombre de la opción de menú jMenu3 por Salir.

Page 193: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 193

Haga clic derecho en la opción de menú Salir y seleccione Agregar Elemento de Menú (Menu Item) desde la paleta (Add From Palette).

Haga clic derecho en la opción de menú jMenuItem4 y seleccione Editar Texto (Edit Text). Cambie el nombre del elemento de menú jMenuItem4 por Salir de la aplicación.

Page 194: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 194

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Renombre los objetos de la barra de menú en la ventana Inspector del JFrameArchivosConGUI, tal como se presenta como en el siguiente gráfico.

Page 195: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 195

Haga clic en la pestaña Source del frame JFrameArreglosConGUI y cree la variable dialogo de tipo Javax.Swing.JDialog tal como se presenta en el siguiente gráfico.

Haga clic derecho en el primer elemento de menú Alumnos (Insertar alumnos) y agregue un Evento-Action-ActionPerformed.

Page 196: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 196

Agregue el código siguiente.

Haga clic derecho en el segundo elemento de menú Alumnos (Listar alumnos) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente. Debe ser ListarAlumno

Page 197: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 197

Haga clic derecho en el primer elemento de menú Proceso (Calcular promedio final) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente.

Haga clic derecho en el primer elemento de menú Salir (Salir del sistema) y agregue un Evento-Action-ActionPerformed.

Page 198: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 198

Agregue el código siguiente.

Haga clic en Ok para agregar las importaciones

Verifique las importaciones agregadas.

Page 199: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 199

Verifique que el código de todos los elementos de menú se presenten como en el siguiente gráfico.

Haga clic derecho en PaqueteArchivosConGUI y cree una Clase Principal Java (Java main Class) dentro del paquete PaqueteArchivosConGUI.

Page 200: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 200

Asigne como Nombre de Clase (Class name) AplicacionArchivosConGUI, Proyecto (Project) ProyectoArchivosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteArchivosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArchivosConGUI\src\PaqueteArchivosConGUI\ AplicacionArchivosConGUI.java. Luego haga clic en Finalizar (Finish).

Verifique que clase principal AplicacionArchivossConGUI se presente como en el siguiente gráfico. Haga clic en Source.

Page 201: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 201

Agregue el código correspondiente a la clase principal AplicacionArreglosConGUI.

Ejecute la aplicación AplicacionArchivosConGUI

Verifique la ejecución de la opción Insertar alumnos.

Page 202: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 202

Verifique la ejecución de la opción Listar alumnos

Verifique la ejecución de la opción Calcular promedio final

Verifique la ejecución de la opción Salir de la aplicación

Page 203: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 203

Page 204: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 204

COMANDO BÁSICOS EN MySQL 5.1

Para cargar el MySQL 5.1 y utilizar los comandos básicos de manejo de base de datos realice lo siguiente:

En el menú de inicio del Windows seleccione Programas / MySQL / MySQL Command Line Cliente para acceder como cliente de MySQL.

En la ventana de Comandos de Línea de Cliente del MySQL ingrese el password y pulse enter. El password del cliente es “12345”. Luego utilice los conceptos y los ejemplos para trabajar con MySQL 5.1.

CREATE DATABASES Crea una base de datos. Ejemplo:

create database dbalumno;

Page 205: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 205

SHOW DATABASES Visualiza la relación de bases de datos. Ejemplo:

show databases;

USE Indica al MYSQL que use una base de datos especificada. Ejemplo:

use dbalumno;

CREATE TABLE Crea una tabla. Ejemplo:

create table alumno ( alumno_id int, apellidoNombre char(31), evaluacionParcial1 double, evaluacionParcial2 double, promedioDeTrabajo double ) ;

Page 206: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 206

SHOW TABLES Visualiza los nombres de las tablas de la base de datos activa. Ejemplo:

show tables;

DESC Visualiza los campos de una tabla. Ejemplo:

desc alumno;

INSERT Inserta registros. Ejemplo;

insert into alumno ( alumno_id, apellidoNombre, evaluacionParcial1, evaluacionParcial2, promedioDeTrabajo ) values ( 1, ‘Arias, Alex’, 11, 11, 11 ) ;

SELECT Visualiza los registros de una tabla. Ejemplo:

select * from alumno;

Page 207: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 207

Puede también visualizar solo campos especificados:

select alumno_id, apellidoNombre from alumno;

Para visualizar los campos alumno_id y apellidoNombre de la tabla alumno.

ó

select count (*) from alumno;

Para visualizar el número de registros almacenados en la tabla alumno.

UPDATE Actualiza datos de registros. Ejemplo.

update alumno set evaluacionParcial=10 where alumno_id=1;

La cláusula where permite condicionar la actualización de un registro específico. Si no se especifica un registro determinado, se actualizan todos los registros.

DELETE Elimina un registro.

delete from alumno where alumno_id=1;

Page 208: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 208

ALTER TABLE . . . RENAME TO . . . Modifica el nombre de una tabla. Ejemplo:

alter table alumno rename to talumno;

ALTER TABLE . . . DROP COLUMN . . . Elimina una columna de la tabla. Ejemplo:

alter table talumno drop column promedioDeTrabajo;

Page 209: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 209

ALTER TABLE . . . ADD COLUMN . . . Agrega una columna de la tabla. Ejemplo:

alter table talumno add column promedioDeTrabajo int;

ALTER TABLE . . . MODIFY COLUMN . . . Modifica el tipo de dato de una columna. Ejemplo:

alter table talumno modify column promedioDeTrabajo double;

Page 210: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 210

ALTER TABLE . . . CHANGE COLUMN . . . Modifica el nombre de una columna. Ejemplo:

alter table talumno change column promedioDeTrabajo promedioDeLaboratorio double;

ALTER TABLE . . . ADD CONSTRAINT . . . crear un índice a tabla de datos. Ejemplo: alter table alumno add constraint pk_alumno primary key alumno(alumno_id);

Page 211: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 211

DROP DATABASE Borra una base de datos. Ejemplo:

drop database dbalumno;

ALTER TABLE … ADD CONSTRAINT … PRIMARY KEY Crea un índice de búsqueda en la tabla utilizando un campo clave.

alter table alumno add constraint pk_alumno primary key alumno(alumno_id);

QUIT Sale del MySQL. Ejemplo:

quit;

Page 212: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 212

Page 213: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 213

BASE DE DATOS

Una base de datos es una colección organizada de datos. Un sistema de gestión de base de datos es un software que proporciona los mecanismos para organizar, almacenar, obtener, borrar y modificar datos, sin la necesidad de preocuparse de su implementación interna.

Actualmente, los sistemas de gestión de base de datos más utilizados son las bases de datos relacionales. El SQL, es un lenguaje estándar e internacional que se utiliza en casi todas las base de datos relacionales para realizar consultas y manipular datos en una base de datos.

Los sistemas de gestión de base de datos relacionales más populares son Microsoft SQL Server, Oracle, Sybase, DB2, Informix, PostgreSQL y MySQL.

Los programas en Java se comunican con las base de datos y manipulan sus datos utilizando la API JDBC. Existen controladores JDBC proporcionados por la mayoría de sistemas de gestión de base de datos para conectar Java con una base de datos especial y manipular sus datos almacenadas en ella.

INSTRUCCIONES BÁSICAS DE MANEJO DE BASE DE DATOS CON JAVA Para poder conectar Java con una base de datos (MySQL en este ejemplo) se necesita conocer los siguientes conceptos:

driver: Conector de la base de datos. Sabe la forma como interactuar con la base de datos. Ejemplo:

private String driver = "com.mysql.jdbc.Driver";

url: Es una cadena de caracteres que nos permite localizar la base de datos. Para Mysql. Ejemplo:

private String url = "jdbc:mysql://localhost:3306/dbAlumno";

usuario: Un usuario válido para la base de datos.

private String usuario = "root";

password: Palabra clave del usuario.

private String password = "12345";

Class.forName(driver): Carga el driver o conector de base de datos. Ejemplo:

Class.forName( driver );

DriverManager.getConnection(url, usuario, password): Obtiene una conexión con una

base de datos en particular. Devolviendo un objeto de tipo Connection.

Connection conexion = DriverManager.getConnection( url, usuario, password );

El método getConnection de la clase DriverManager pasa como parámetro un url de conexión a la base de datos, un parámetro con el nombre del usuario usuario y el password password de dicho usuario.

Page 214: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 214

conexion.createStatement() : Este método crea/devuelve un objeto Statement con el cual

podemos crear sentencias SQL y luego ejecutarlas sobre la base de datos.

Statement sentencia = conexion.createStatement();

sentencia.executeUpdate: Manipula datos de una base de datos y devuelve un número de filas

(registros) afectados, o modificados. Se utiliza para insertar, actualizar y eliminar registros. Ejemplo:

resultado=sentencia.executeUpdate("INSERT INTO Alumno VALUES ("+oAlumno.getAlumno_id()+",'"+

oAlumno.getApellidoNombre()+"',"+ oAlumno.getEvaluacionParcial1()+","+ oAlumno.getEvaluacionParcial2()+","+ oAlumno.getPromedioDeTrabajo()+","+ oAlumno.getPromedioFinal()+")");

resultado=sentencia.executeUpdate("UPDATE Alumno SET "+ apellidoNombre='"+oAlumno.getApellidoNombre()+"', "+ "EvaluacionParcial1="+oAlumno.getEvaluacionParcial1()+","+

"EvaluacionParcial2="+oAlumno.getEvaluacionParcial2()+","+ "PromedioDeTrabajo="+oAlumno.getPromedioDeTrabajo()+","+ "PromedioFinal="+oAlumno.getPromedioFinal()+

" WHERE alumno_ido="+oAlumno.getAlumno_id());

resultado = sentencia.executeUpdate("DELETE FROM Alumno WHERE alumno_id="+ oAlumno.getAlumno_id());

executeQuery(): Ejecuta consultas sobre la base de datos. Recibe como parámetro una sentencia SQL

y devuelve un objeto ResultSet (conjunto de registros) que contendrá los datos de la consulta.

resultado=sentencia.executeQuery("SELECT * FROM Alumno WHERE Alumno_id="+ oAlumno.getAlumno_id());

En resumen:

Método Descripción

executeUpdate( ) Se utiliza con instrucciones SQL de manipulación de datos tales como INSERT, DELETE o UPDATE.

executeQuery( ) Se utiliza en las instrucciones de consulta del tipo SELECT.

resultado.next()): Las consultas se hacen con el método executeQuery() y este devuelve un objeto

del tipo ResultSet (conjunto de registros). Para recorrer los registros del ResultSet se utiliza un puntero de registros, el cual se manipula a través del método next(). Para manipular el siguiente registro se utiliza otra vez el método next() y así sucesivamente hasta que el método next() devuelva el valor falso (false), indicando que ya no quedan más registros. El puntero de registros al inicio se encuentra una posición anterior al primer registro.

Page 215: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 215

ResultSet resultado; resultado = sentencia.executeQuery("SELECT * FROM Alumno WHERE alumno_id="+

oAlumno.getAlumno_id()); while (resultado.next())

{ alumno_id = resultado.getInt("alumno_id"); apellidoNombre = resultado.getString(“apellidoNombre”); evaluacionParcial1 = resultado.getDouble("evaluacionParcial1"); evaluacionParcial2 = resultado.getDouble("evaluacionParcial2"); promedioDeTrabajo = resultado.getDouble("promedioDeTrabajo"); promedioFinal = resultado.getDouble("promedioFinal"); System.out.println("ApellidoNombre : "+ apellidoNombre); System.out.println("EvaluacionParcial1 : "+ evaluacionParcial1); System.out.println("EvaluacionParcial2 : "+ evaluacionParcial2); System.out.println("Promedio de Trabajo : "+ promedioDeTrabajo);

System.out.println("Promedio Final : "+ promedio Final); }

Hemos hecho un SELECT para obtener los registros de la base datos. Luego utilizamos un bucle while(resultado.next()) para traer los registros mientras que el puntero de registros pueda colocarse en un registro válido (no haber llegado al final del ResultSet). Después hacer next(), los datos del registro está disponible para ser leídos . La forma de leer los campos de un registro es pedirlos con algún método get(). Las líneas con los métodos getXXX() permiten tener acceso a las diferentes columnas de los registros. Si sabemos de qué tipo es el dato de cada campo, podemos pedirlo con getInt(), getString(), etc. Si no lo sabemos o nos da igual (como en este caso), bastará con un getObject(), capaz de traer cualquier tipo de dato. En estos métodos get() podemos pasar como parámetro un entero, empezando en 1, que es el número del campo en el SELECT. Es decir, si hacemos SELECT campo1, campo2, campo3 ..., si pedimos getObject(1) obtenemos el valor de campo1, para getObject(2) el de campo2, etc. Otra opción es pasar el nombre del campo por ejemplo getObject("alumno_id") nos devuelve el valor del campo alumno_id.

resultado.close() , sentencia.close(), conexion.close(): Cierra el objeto ResultSet, el objeto

Statement y el objeto Connection. Ejemplo:

resultado.close(); sentencia.close(); conexion.close();

Page 216: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 216

SENTENCIAS PARA ACTUALIZAR LA BASE DE DATOS DESDE UN RESULTSET Una consulta se crea mediante un objeto Statement el cual a su vez, es creado utilizando el método createStatement. Sin embargo este método puede utilizar dos argumentos que permiten indicar el tipo de ResultSet que obtendría el Statement. Esos dos argumentos son de tipo y de concurrencia y permiten utilizar estas constantes. A continuación se presenta un resumen de lo expuesto.

Para el tipo:

ResultSet.TYPE_FORWARD_ONLY El conjunto de resultados no tendrá desplazamiento. Sólo se podrá utilizar el método next (este es el único valor para JDBC 1.0 y es el valor predeterminado si se construye el Statement sin argumentos).

ResultSet.TYPE_SCROLL_INSENSITIVE El conjunto de resultados tendrá desplazamiento completo pero no tendrá en cuenta los cambios.

ResultSet.TYPE_SCROLL_SENSITIVE Conjunto de resultados con desplazamiento y sensibilidad a los cambio

Para la concurrencia:

ResultSet.CONCUR_READ_ONLY La base de datos no puede ser modificada mediante el uso del conjunto de resultados

ResultSet.CONCUR_UPDATABLE La base de datos es actualizable

Desplazamiento por los conjuntos de resultados Si se permite el desplazamiento, la clase ResultSet posee los siguientes métodos para desplazarse por los registros:

Método Uso

boolean next() Avanza el puntero de registros del conjunto de resultados al siguiente registro. Devuelve true si existe registro siguiente.

boolean previous() Coloca el puntero de registros en el registro anterior si lo hay, si no lo hay devuelve false.

boolean absolute(int reg) Coloca el puntero de registros en la fila indicada. Si esa fila no existe, devuelve false. Si el número de fila se indica con un número negativo, la fila se cuenta desde el final.

boolean relative(int fila) Coloca el puntero de registros en la fila indicada a partir de la posición actual del puntero. Si esa fila no existe, devuelve false. El número de fila se puede indicar de forma negativa y en ese caso el puntero se mueve hacia el primer registro (si es positivo se mueve hacia el final).

boolean first() Coloca el puntero en el primer registro. Si no hay primer registro, devuelve false

boolean last() Coloca el puntero en el último registro. Si no hay último registro, devuelve false

void beforeFirst() Coloca el puntero delante del primer registro. El método next se movería al primer registro si se utiliza tras esta orden.

void afterLast() Coloca el puntero detrás del último registro. El método previous se movería al último registro si se utiliza tras esta orden.

boolean isFirst() Devuelve true si el puntero está situado en el primer registro.

boolean isLast() Devuelve true si el puntero está situado en el último registro.

boolean isBeforeFirst() Devuelve true si el puntero está situado delante del primer registro.

boolean isAfterLast() Devuelve true si el puntero está situado detrás del último registro.

int getRow() Obtiene el número de registro actual modificación de datos

Page 217: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 217

Los conjuntos de resultados se pueden utilizar también para modificar los datos obtenidos por la consulta SELECT (siempre y cuando sea posible). Para ello se necesitan utilizar los métodos update de la clase ResultSet que permiten modificar el contenido de un campo en la posición actual del puntero de registros. Se trata de un conjunto de métodos que comienzan con la palabra update seguida del tipo de datos Java del campo y un segundo parámetro que indica el nuevo valor para el campo. Ejemplo:

resultado.updateDouble ("promedioFinal",oAlumnoTemporal.getPromedioFinal);

El método updateRow es el que permite actualizar la base de datos con los nuevos cambios. Se debe utilizar cuando estamos seguros de que los cambios son los correctos. Si queremos anular los cambios se debe utilizar el método cancelRowUpdates.

resultado.updateRow();

EXCEPCIONES EN LA BASE DE DATOS SQLException En el paquete java.sql se encuentra la clase SQLException que captura las excepciones ocurridas en el manejo de la base de datos. Su uso no difiere del resto de excepciones, pero incorpora nuevos métodos interesantes:

getSQLState. Describe el error según las convenciones XOPEN. getMessage. El método típico de excepciones, salvo que éste recoge el texto que envía el controlador JDBC según lo informado por el gestor de bases de datos, lo que le hace muy efectivo. getErrorCode. Devuelve el código de error ocurrido (según lo informado por el gestor de la base de datos) getNextException. Que permite ver la siguiente excepción ocurrida, ya que a veces ocurren varias a la vez (especialmente en transacciones y operaciones complejas).

Ejemplo: try { //instrucciones de manejo de la base de datos

} catch(SQLException sqle)

{ while(e!=null) { System.err.println("Estado: "+e.getSQLState());

System.err.println("Código: "+e.getErrorCode()); System.err.println("Mensaje: "+e.getMessage()); e.getNextException();

} }

SQLWarning Otras veces, ocurre que la base de datos provoca excepciones, sino advertencias (warnings). Los objetos que las provocan (sobre todo los ResultSet) las van almacenando en objetos de tipo SQLWarning. Para ver los errores basta con llamar repetidamente al método getSQLWarning. En cada llamada obtendremos un nuevo objeto SQLWarning hasta que, finalmente no haya más (devolverá entonces el valor null).

Los métodos que permiten observar el contenido de la advertencia son los mismos que los de la clase SQLException, ya que esta clase es heredera suya. Añade el método getNextWarning que funciona de forma similar a getNextException, pero que en esta clase no se suele utilizar ya que las sucesivas llamadas al método getSQLWarnings provocan el mismo resultado. El método clearWarnings de la clase ResultSet permite borrar las advertencias almacenadas hasta ese momento.

Page 218: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 218

APLICACIÓN DE CONSOLA CON ACCESO A BASE DE DATOS

A continuación se presenta el desarrollo de una aplicación en la cual se utiliza tabla de base de datos para almacenar los datos de un alumno, calcular su promedio final y mostrar los datos del alumno con su promedio final calculado. Se utiliza los atributos código del alumno (alumno_id), sus apellidos y nombres (apellidoNombre), la evaluación parcial 1 (evaluacionParcial1), la evaluación parcial 2 (evaluacionParcial2) y el promedio de trabajo (promedioDeTrabajo). El promedio final (promedioFinal) se calcula con la siguiente fórmula:

promedioFinal = ( evaluacionParcial1 + evaluacionParcial2 + promedioDeTrabajo ) / 3

La aplicación desarrollada para correr en consola presenta el siguiente menú de opciones:

Cada opción se describe a continuación:

La ejecución de la opción I permite insertar objetos la tabla de base de datos. Esta opción solicita el código del alumno (alumno_id). Si no lo encuentra en la tabla de base de datos permite ingresar los otros datos (apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo). Si lo encuentra presenta el mensaje “Registro encontrado !!!”

La ejecución de la opción C permite consultar un registro almacenado en una tabla de base de datos. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en la tabla de base de datos lo presenta en pantalla. Si no lo encuentra presenta el mensaje "No se encuentra el registro !!!".

La ejecución de la opción M permite modificar un registro almacenado en el arreglo de registros. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en la tabla de base de datos lo presenta en pantalla y solicita nuevos datos (atributos apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo) los cuales reemplazan a los anteriores. Si no lo encuentra presenta el mensaje "No se encuentra el registro !!!".

Page 219: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 219

La ejecución de la opción E permite eliminar registros al arreglo de registros. Esta opción solicita que se ingrese el código del alumno (alumno_id). Si lo encuentra en la tabla de base de datos lo presenta en pantalla y lo borra inmediatamente. Si no lo encuentra presenta el mensaje "No se encuentra el registro !!!".

La ejecución de la opción L permite listar los registros de la tabla de base de datos. Note que el promedio final se visualiza con el valor 0. Para visualzar el promedio final calculado tiene que ejecutar la opción [P]rocesar notas.

La ejecución de la opción P permite calcular el promedio final de los registros de la tabla de base de datos. Note que el promedio final se visualiza con el valor 0.

Para visualizar el promedio final calculado tiene que ejecutar la opción [L]istar.

La ejecución de la opción S se sale de la aplicación.

Para el desarrollo de la aplicación debe realizar las siguientes actividades:

Page 220: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 220

En el menú de inicio del Windows seleccionar Programas / MySQL / MySQL Command Line Cliente para levantar el servicio cliente de MySQL.

Tipee el password y pulse enter. El password es 12345.

Cree la base de datos escribiendo create database dbalumno y luego pulse la tecla enter.

Page 221: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 221

Visualice la relación de bases de datos creadas escribiendo show databases; y luego pulse enter.

Indique la base de datos a usar escribiendo use dbalumno;

Cree la tabla de base de datos alumnos escribiendo:

create table alumno ( alumno_id int, apellidoNombre char(31), evaluacionParcial1 double, evaluacionParcial2 double, promedioDeTrabajo double, promedioFinal double )

;

Page 222: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 222

Cree un índice a tabla de datos alumno escribiendo:

alter table alumno add constraint pk_alumno primary key alumno(alumno_id);

Cargue el NetBeans 6.7.1 y haga clic derecho en File (Archivo) y cree un proyecto vacío de Java

Seleccione un proyecto de Aplicación Java (Java Application).

Page 223: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 223

Asigne como Nombre de Proyecto (Project Name) ProyectoAccesoBaseDeDatosConJava, Localización del proyecto (Project Location) c:\NetBeansProjects y como Carpeta del Proyecto (Project Folder) c:\NetBeansProjects\ProyectoAccesoBaseDeDatosConJava. Desmarcar la casilla de verificación Cree una Clase Principal (Create Main Class) y luego haga clic en Finalizar (Finish).

Haga clic derecho en el Proyecto ProyectoAccesoBaseDeDatosConJava y cree un Paquete.

Page 224: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 224

Asigne como Nombre de Paquete (Package Name) PaqueteAccesoBaseDeDatosConJava, Proyecto (Project) ProyectoAccesoBaseDeDatosConJava, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoAccesoBaseDeDatosConJava\src\ PaqueteAccesoBaseDeDatosConJava. Luego haga clic en Finalizar (Finish).

Haga clic derecho en PaqueteAccesoBaseDeDatosConJava y cree una Java Class.

Page 225: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 225

Asigne como Nombre de Clase (Class name) Alumno, Proyecto (Project) ProyectoAccesoBaseDeDatosConJava, localización (Location) Source Packages, paquete (Package) PaqueteAccesoBaseDeDatosConJava y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoAccesoBaseDeDatosConJava\src\PaqueteAccesoBaseDeDatosConJava\ Alumno.java. Luego haga clic en Finalizar (Finish).

Agregue el siguiente código para la clase Alumno.

package PaqueteAccesoBaseDeDatosConJava;

public class Alumno { private int alumno_id; private String apellidoNombre; private double evaluacionParcial1; private double evaluacionParcial2; private double promedioDeTrabajo; private double promedioFinal; public Alumno() { this.alumno_id=0; this.apellidoNombre=null; this.evaluacionParcial1 = 0; this.evaluacionParcial2 = 0; this.promedioDeTrabajo = 0; this. promedioFinal = 0; } public Alumno(int alumno_id, String apellidoNombre, double evaluacionParcial1,

double evaluacionParcial2, double promedioDeTrabajo, double promedioFinal) { this.alumno_id = alumno_id; this.apellidoNombre = apellidoNombre; this.evaluacionParcial1 = evaluacionParcial1; this.evaluacionParcial2 = evaluacionParcial2; this.promedioDeTrabajo = promedioDeTrabajo; this.promedioFinal = promedioFinal ; }

Page 226: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 226

public int getAlumno_id() { return this.alumno_id; } public void setAlumno_id(int alumno_id) { this.alumno_id = alumno_id; } public String getApellidoNombre() { return this.apellidoNombre; } public void setApellidoNombre(String apellidoNombre) { this.apellidoNombre = apellidoNombre; } public double getEvaluacionParcial1() { return this.evaluacionParcial1; } public void setEvaluacionParcial1 (double evaluacionParcial1) { this.evaluacionParcial1 = evaluacionParcial1; } public double getEvaluacionParcial2() { return this.evaluacionParcial2; } public void setEvaluacionParcial2 (double evaluacionParcial2) { this.evaluacionParcial2 = evaluacionParcial2; } public double getPromedioDeTrabajo() { return this.promedioDeTrabajo; } public void setPromedioDeTrabajo(double promedioDeTrabajo) { this. promedioDeTrabajo = promedioDeTrabajo; } public double getPromedioFinal() { return this.promedioFinal; } public void setPromedioFinal(double promedioFinal) { this.promedioFinal=promedioFinal; } public void setPromedioFinal() { this.promedioFinal=(this.evaluacionParcial1+this.evaluacionParcial2+this.promedioDeTrabajo)/3; } }

Page 227: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 227

Cree un nuevo paquete.

Asigne como Nombre de Paquete (Package Name) PaquetePaqueteBiblioteca, Proyecto (Project) ProyectoAccesoBaseDeDatosConJava, Localización (Location) Source Packages y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoAccesoBaseDeDatosConJava\src\PaqueteBiblioteca. Luego haga clic en Finalizar (Finish).

Page 228: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 228

Dentro del paquete PaqueteBiblioteca cree la clase denominada ClaseLectura. Agregue el siguiente código para la clase ClaseLectura. (Cortesía del Ing. J.J Flores Cueto – U.N.J.F.S.C.)

package PaqueteBiblioteca; import java.io.*;

public class ClaseLectura

{ public static char leerChar() { char c=' '; char [] c1=leerString().toCharArray(); if (c1.length==1) c=c1[0]; return c; } public static double leerDouble()

{ try { return Double.valueOf(leerString()).doubleValue(); }

catch (NumberFormatException e) { System.out.print("ERROR... \n Ingrese de nuevo : ");

return leerDouble(); } } public static float leerFloat()

{ try { return Float.valueOf(leerString()).floatValue();

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerFloat(); } } public static int leerInt()

{ try { return Integer.parseInt(leerString());

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerInt(); } }

Page 229: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 229

public static long leerLong() { try

{ return Long.valueOf(leerString()).longValue(); }

catch (NumberFormatException e) { System.out.print("ERROR... \n Ingrese de nuevo:");

leerLong(); } } public static short leerShort()

{ try { return Short.valueOf(leerString()).shortValue();

} catch (NumberFormatException e)

{ System.out.print("ERROR... \n Ingrese de nuevo:"); return leerShort(); } } public static String leerString()

{ BufferedReader in = new BufferedReader(new InputStreamReader(System. in)); String cadena =""; try

{ cadena = in.readLine(); }

catch (IOException e) { System.out.println(e); }

return cadena; } } Nota: El código anterior (ClaseLectura.java) puede descargarlo del cd de trabajo proporcionado por el autor. Cree una nueva clase denominada AlumnoDAO.

Page 230: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 230

Agregue el siguiente código para la clase AlumnoDAO.

package PaqueteAccesoBaseDeDatosConJava; import java.sql.ResultSet; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.util.Vector; public class AlumnoDAO { private String driver = "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://:3306/dbAlumno"; private String usuario = "root"; private String password = "12345"; public boolean insertarAlumno(Alumno oAlumno) { try { Class.forName(driver); Connection conexion=DriverManager.getConnection(url,usuario,password); Statement sentencia= conexion.createStatement(); sentencia.executeUpdate("INSERT INTO Alumno VALUES ("+

oAlumno.getAlumno_id()+",'"+ oAlumno.getApellidoNombre()+"',"+ oAlumno.getEvaluacionParcial1()+","+ oAlumno.getEvaluacionParcial2()+","+ oAlumno.getPromedioDeTrabajo()+","+ oAlumno.getPromedioFinal()+")"); conexion.close(); return true; } catch (Exception e) { System.out.print("Error ....x"+e); return false; } } public boolean eliminarAlumno(Alumno oAlumno) { try { int filasAfectadas=0; Class.forName(driver); Connection conexion=DriverManager.getConnection(url,usuario,password); Statement sentencia=conexion.createStatement(); filasAfectadas= sentencia.executeUpdate("DELETE FROM Alumno WHERE Alumno_id =" + oAlumno.getAlumno_id()); conexion.close(); if(filasAfectadas==0) { return false; } else { return true; } } catch (Exception e) { System.out.print("Error ...."+e); return false; } }

Page 231: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 231

public Vector<Alumno> obtenerDatosEnVectorAlumno() { try { Vector<Alumno> oVector = new Vector<Alumno>(); Alumno oAlumnoTemporal; Class.forName(driver); Connection conexion = DriverManager.getConnection(url,usuario,password); Statement sentencia = conexion.createStatement(); ResultSet resultado = sentencia.executeQuery("SELECT * FROM Alumno"); if(resultado.next()) { do { oAlumnoTemporal = new Alumno( resultado.getInt("alumno_id"), resultado.getString("apellidoNombre"), resultado.getDouble("evaluacionParcial1"), resultado.getDouble("evaluacionParcial2"), resultado.getDouble("promedioDeTrabajo"), resultado.getDouble("promedioFinal") ); oVector.addElement(oAlumnoTemporal); } while(resultado.next()); return oVector; } else { return null; } } catch (Exception e) { System.out.print("Error ...."+e); return null; } }

public boolean modificarAlumno(Alumno oAlumno) { try { int filasAfectadas=0; Class.forName(driver); Connection conexion = DriverManager.getConnection(url,usuario,password); Statement sentencia = conexion.createStatement(); filasAfectadas = sentencia.executeUpdate("UPDATE Alumno SET "+

"apellidoNombre='" + oAlumno.getApellidoNombre()+"', "+ "evaluacionParcial1=" + oAlumno.getEvaluacionParcial1()+", "+ "evaluacionParcial2=" + oAlumno.getEvaluacionParcial2()+", "+ "promedioDeTrabajo="+oAlumno.getPromedioDeTrabajo()+", "+ "promedioFinal="+oAlumno.getPromedioFinal()+

" WHERE alumno_id="+ oAlumno.getAlumno_id()); conexion.close();

if(filasAfectadas==0) { return false; } else { return true; } }

Page 232: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 232

catch (Exception e) { System.out.print("Error ...."+e); return false; } }

public Alumno buscarAlumno(Alumno oAlumno) { try { Alumno oAlumnoTemporal;

Class.forName(driver); Connection conexion = DriverManager.getConnection(url,usuario,password); Statement sentencia = conexion.createStatement();

ResultSet resultado=sentencia.executeQuery("SELECT * FROM Alumno WHERE alumno_id=" +oAlumno.getAlumno_id());

oAlumnoTemporal = new Alumno(); if(resultado.next()) { oAlumnoTemporal.setAlumno_id(resultado.getInt("alumno_id")); oAlumnoTemporal.setApellidoNombre(resultado.getString("apellidoNombre")); oAlumnoTemporal.setEvaluacionParcial1(resultado.getDouble("evaluacionParcial1")); oAlumnoTemporal.setEvaluacionParcial2(resultado.getDouble("evaluacionParcial2")); oAlumnoTemporal.setPromedioDeTrabajo(resultado.getDouble("promedioDeTrabajo")); oAlumnoTemporal.setPromedioFinal(resultado.getDouble("promedioFinal"));

resultado.close(); conexion.close(); return oAlumnoTemporal; } else { return null; } } catch (Exception e) { System.out.print("Error ...."+e);

return null; } }

public boolean procesarPromedioAlumno() { try { Alumno oAlumnoTemporal=new Alumno(); Class.forName(driver); Connection conexion = DriverManager.getConnection(url,usuario,password); Statement sentencia = conexion.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE); ResultSet resultado = sentencia.executeQuery("SELECT * FROM Alumno"); while (resultado.next()) { oAlumnoTemporal.setEvaluacionParcial1(resultado.getDouble("evaluacionParcial1")); oAlumnoTemporal.setEvaluacionParcial2(resultado.getDouble("evaluacionParcial2")); oAlumnoTemporal.setPromedioDeTrabajo(resultado.getDouble("promedioDeTrabajo")); oAlumnoTemporal.setPromedioFinal(); resultado.updateDouble("promedioFinal",oAlumnoTemporal.getPromedioFinal()); resultado.updateRow();

} resultado.close(); sentencia.close(); conexion.close(); return true; }

Page 233: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 233

catch (Exception e) { System.out.print("Error ...."+e); return false ; } } } Cree una nueva clase denominada AplicacionConsola.

Agregue el siguiente código para la clase AplicacionConsola.

package PaqueteAccesoBaseDeDatosConJava; import java.util.Vector; import PaqueteBiblioteca.ClaseLectura; public class AplicacionConsola { public static void main(String[ ] args) { char opcion; do { System.out.println(" M E N U"); System.out.println(" ======="); System.out.println(" [I]nsertar"); System.out.println(" [C]onsulta"); System.out.println(" [M]odificar"); System.out.println(" [E]liminar"); System.out.println(" [L]istar"); System.out.println(" [P]rocesar notas"); System.out.println(" [S]alir "); System.out.print(" Elija su opción : "); opcion=Character.toUpperCase(ClaseLectura.leerChar()); switch (opcion) { case 'I' : insertar(); break ; case 'C' : consulta(); break ; case 'M': modificar(); break ; case 'E' : eliminar(); break ; case 'P': procesarPromedio(); break ; case 'L': listar(); break ; } } while (opcion!='S'); }

Page 234: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 234

public static void insertar() { Alumno oAlumnoBuscar = new Alumno(); AlumnoDAO oAlumnoDAO=new AlumnoDAO(); int mAlumno_id; System.out.print("Alumno_id :"); mAlumno_id=ClaseLectura.leerInt(); oAlumnoBuscar.setAlumno_id(mAlumno_id); oAlumnoBuscar=oAlumnoDAO.buscarAlumno(oAlumnoBuscar); if(oAlumnoBuscar == null) { Alumno oAlumno = new Alumno(); oAlumno.setAlumno_id(mAlumno_id); oAlumno=actualizarRegistro(oAlumno); oAlumnoDAO.insertarAlumno(oAlumno); System.out.println("Se realizó la operación ..."); } else { System.out.println("No se realizó la operacion ..."); } }

public static void consulta() { Alumno oAlumno = new Alumno(); AlumnoDAO oAlumnoDAO=new AlumnoDAO(); int mAlumno_id; System.out.print("Alumno_id : "); mAlumno_id=ClaseLectura.leerInt(); oAlumno.setAlumno_id(mAlumno_id); oAlumno=oAlumnoDAO.buscarAlumno(oAlumno); if(oAlumno !=null) { visualizarRegistro(oAlumno); } else { System.out.println("No se realizó la operación ..."); } }

public static void modificar() { Alumno oAlumno = new Alumno(); AlumnoDAO oAlumnoDAO=new AlumnoDAO(); int mAlumno_id; System.out.print("Alumno_id :"); mAlumno_id=ClaseLectura.leerInt(); oAlumno.setAlumno_id(mAlumno_id); oAlumno=oAlumnoDAO.buscarAlumno(oAlumno); if(oAlumno !=null) { visualizarRegistro(oAlumno); oAlumno=actualizarRegistro(oAlumno); if (oAlumnoDAO.modificarAlumno(oAlumno)) { System.out.println("Se realizó la operación ..."); } else { System.out.println("No se realizó la operación ..."); } } }

Page 235: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 235

public static void eliminar() { Alumno oAlumno = new Alumno(); AlumnoDAO oAlumnoDAO=new AlumnoDAO(); int mAlumno_id; System.out.print("Alumno_id :"); mAlumno_id=ClaseLectura.leerInt(); oAlumno.setAlumno_id(mAlumno_id); oAlumno=oAlumnoDAO.buscarAlumno(oAlumno); if (oAlumno !=null) { visualizarRegistro(oAlumno); oAlumnoDAO.eliminarAlumno(oAlumno); System.out.println("Se realizó la operación ..."); } else { System.out.println("No se realizó la operación ...");

} } public static void procesarPromedio() { AlumnoDAO alumnoDAO=new AlumnoDAO(); alumnoDAO.procesarPromedioAlumno(); }

public static void listar() { AlumnoDAO alumnoDAO=new AlumnoDAO(); Vector<Alumno> oVector; oVector = alumnoDAO.obtenerDatosEnVectorAlumno(); if(oVector!=null) { try { System.out.print("Alumno_id\t"); System.out.print("Ap. y Nom.\t\t"); System.out.print("E.P. 1\t"); System.out.print("E.P. 2\t"); System.out.print("P.T.\t"); System.out.print("P.F.\n"); for(int i = 0; i < oVector.size(); i ++) { System.out.print(oVector.get(i).getAlumno_id()+"\t\t"); System.out.print(oVector.get(i).getApellidoNombre()+"\t\t"); System.out.print(oVector.get(i).getEvaluacionParcial1()+"\t"); System.out.print(oVector.get(i).getEvaluacionParcial2()+"\t"); System.out.print(oVector.get(i).getPromedioDeTrabajo()+"\t"); System.out.print(oVector.get(i).getPromedioFinal()+"\n"); } }

catch(Exception e) { System.out.println("No se realizó la operación ..."); } } else { System.out.println("No se realizó la operación ..."); } }

Page 236: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 236

public static void visualizarRegistro(Alumno oAlumno) { System.out.print("Apellido y Nombre : "+oAlumno.getApellidoNombre()+"\n"); System.out.print("Evaluación parcial 1 : "+oAlumno.getEvaluacionParcial1()+"\n"); System.out.print("Evaluación parcial 2 : "+oAlumno.getEvaluacionParcial2()+"\n"); System.out.print("Promedio de trabajo : "+oAlumno.getPromedioDeTrabajo()+"\n"); System.out.print("Promedio final : "+oAlumno.getPromedioFinal()+"\n"); }

public static Alumno actualizarRegistro(Alumno oAlumno) { System.out.print("Apellido y Nombre : "); oAlumno.setApellidoNombre(ClaseLectura.leerString()); System.out.print("Evaluación parcial 1 : "); oAlumno.setEvaluacionParcial1(ClaseLectura.leerDouble()); System.out.print("Evaluación parcial 2 : "); oAlumno.setEvaluacionParcial2(ClaseLectura.leerDouble ()); System.out.print("Promedio de trabajo : "); oAlumno.setPromedioDeTrabajo(ClaseLectura.leerDouble ()); return oAlumno; } } Haga clic derecho en Librerias (Libraries) para agregar la librería MySQL JDBC driver.

Page 237: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 237

Seleccione la librería MySQL JDBC driver y haga clic en Agregar librería (Add library).

Verifique que la librería MySQL JDBC driver a sido agregada.

Page 238: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 238

La ejecución de la aplicación mostrando el menú de opciones.

La ejecución de la aplicación mostrando la ejecución de la opción [L]istar.

Page 239: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 239

Page 240: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 240

ACCESO A BASE DE DATOS CON GUI A continuación se presenta el desarrollo de una aplicación en la cual se utiliza una tabla de base de datos para almacenar los datos de un alumno, calcular su promedio final y mostrar los datos del alumno con su promedio final calculado. Se utiliza los atributos código del alumno (alumno_id), sus apellidos y nombres (apellidoNombre), la evaluación parcial 1 (evaluacionParcial1), la evaluación parcial 2 (evaluacionParcial2) y el promedio de trabajo (promedioDeTrabajo). El promedio final (promedioFinal) se calcula con la siguiente fórmula:

promedioFinal = ( evaluacionParcial1 + evaluacionParcial2 + promedioDeTrabajo )

La aplicación desarrollada con GUI presenta el siguiente menú de opciones:

Cada opción se describe a continuación:

La ejecución de la opción Insertar alumnos permite insertar registros en una tabla de base de datos utilizando un cuadro de diálogo. Esta opción solicita los datos del alumno (alumno_id, apellidoNombre, evaluacionParcial1, evaluacionParcial2 y promedioDeTrabajo).

Page 241: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 241

La ejecución de la opción Listar registros permite listar los registros de la tabla de base de datos utilizando un cuadro de area de texto. Note que el promedio final se visualiza con el valor 0. Para visualzar el promedio final calculado tiene que ejecutar la opción Calcular promedio final.

La ejecución de la opción Calcular promedio final permite calcular el promedio final de los registros de la tabla de base de datos. Para ver los cambios realizados se tiene que ejecutar la opción Listar registros.

La ejecución de la opción Salir del sistema sale de la aplicación.

Page 242: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 242

A continuación se presenta una práctica para crear un sistema de menú con GUI para manipular una tabla de base de datos

Haga clic derecho en File (Archivo) y seleccione Abrir Proyecto (Open Project). En Abrir Proyecto (Open Project) seleccione ProyectoAccesoBaseDeDatosConJava.

Haga clic derecho en el Proyecto ProyectoAccesoBaseDeDatosConJava y seleccione Copiar (Copy) para

copiar el proyecto en otro.

Page 243: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 243

Escriba como nombre de proyecto (Project Name) ProyectoBaseDeDatosConGUI.

Verifique que el proyecto ProyectoBaseDeDatosConGUI se presente como en el siguiente gráfico.

Page 244: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 244

Haga clic derecho en AplicacionConsola.java y seleccione Borrar (Delete) para eliminar el archivo.

Haga clic derecho en el paquete PaqueteBiblioteca y seleccione Borrar (Delete) para eliminar el paquete PaqueteBiblioteca.

Page 245: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 245

Verifique que el proyecto ProyectoBaseDeDatosConGUI se presente como en el siguiente gráfico.

Haga clic derecho en PaqueteBaseDeDatosConGUI y cree una JFrame Form

Page 246: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 246

Asigne como Nombre de Clase (Class name) JFrameBaseDeDatosConGUI, Proyecto (Project) ProyectoBaseDeDatosConGUI, localización (Location) Source Packages, paquete (Package) PaqueteBaseDedatosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoArreglosConGUI\src\PaqueteBaseDeDatosConGUI\ JFrameBaseDeDatosConGUI.java. Luego haga clic en Finalizar (Finish).

Verifique que el Proyecto ProyectoBadeDeDatosConGUI se presente como en el siguiente gráfico.

Page 247: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 247

Haga clic derecho en PaqueteBaseDeDatosConGUI y cree un JDialog Form dentro del Paquete PaqueteBaseDeDatosConGUI.

Asigne como Nombre de Clase (Class name) JDialogInsertarAlumno, Proyecto (Project) ProyectoBaseDeDatosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteBaseDeDatosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoBaseDeDatosConGUI\src\PaqueteBaseDeDatosConGUI\ JDialogInsertarAlumno.java. Luego haga clic en Finalizar (Finish).

Page 248: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 248

Haga clic derecho en PaqueteBaseDeDatosConGUI y cree un JDialog Form dentro del Paquete PaqueteBaseDeDatosConGUI.

Asigne como Nombre de Clase (Class name) JDialogListarAlumnos, Proyecto (Project) ProyectoBaseDeDatosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteBaseDeDatosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoBaseDeDatosConGUI\src\PaqueteBaseDeDatosConGUI\ JDialogListarAlumnos.java. Luego haga clic en Finalizar (Finish).

Page 249: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 249

Verifique que el proyecto se presente como en el siguiente gráfico.

Haga clic derecho en PaqueteBaseDeDatosConGUI y cree un JDialog Form dentro del Paquete PaqueteBaseDeDatosConGUI.

Page 250: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 250

Asigne como Nombre de Clase (Class name) JDialogCalcularPromedioFinal.java, Proyecto (Project) ProyectoBaseDeDatosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteBaseDeDatosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoBaseDeDatosConGUI\src\PaqueteBaseDeDatosConGUI\ JDialogCalcularPromedioFinalFinal.java. Luego haga clic en Finalizar (Finish).

Verifique que el proyecto se presente como en el siguiente gráfico.

Page 251: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 251

Haga doble clic en cuadro de diálogo JDialogInsertarAlumno. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) los objetos Label (06), Text Field (05) y Button (03), tal como se presenta en el siguiente gráfico.

Haga clic en la Ventana Inspector y verifique la presencia de los objetos que se visualizan en la ventana Design.

Page 252: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 252

Renombre los objetos en la ventana Inspector tal como se presenta en el siguiente gráfico.

Pulse las teclas Control-Mayúsculas-7 para visualizar la Ventana de Propiedades. Modifique la propiedad Text del objeto jLabelTitulo con el texto “Insertar alumnos”.

Page 253: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 253

Cambie la propiedad Text de cada control Swing para que sea como el de la siguiente tabla.

Nombre del Control Swing en el Inspector Propiedad Text del Control Swing

jLabelTitulo Insertar alumnos

jLabelAlumno_id Alumno_id:

jLabel ApellidoNombre Apellido y nombre:

jLabelEvaluacionParcial1 EvaluaciónParcial 1:

jLabelEvaluacionParcial2 EvaluaciónParcial 2:

jLabelPromedioDeTrabajo Promedio de Trabajo:

jButtonAceptar Aceptar

jButtonReiniciar Reiniciar

jButtonSalir Salir

Haga clic en alguna parte del Panel de Diseño (Designer) del jDialog JDialogInsertarAlumno.java para visualizar la ventana de Propiedades (Properties).

Page 254: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 254

Modifique la propiedad defaultCloseOperation y escriba DISPOSE (deshacerse).

Haga clic derecho en el objeto jButtonAceptar y seleccione en el menú conceptual Event-Action-actionPerformed para programar en evento clic del botón de comando.

Page 255: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 255

Agregue el código del evento clic del objeto jButtonAceptarActionPerformed.

private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) { Alumno oAlumno=new Alumno();

AlumnoDAO oAlumnoDAO=new AlumnoDAO(); oAlumno.setAlumno_id(Integer.parseInt(jTextFieldAlumno_id.getText())); oAlumno.setApellidoNombre(jTextFieldApellidoNombre.getText()); oAlumno.setEvaluacionParcial1(Double.parseDouble(jTextFieldEvaluacionParcial1.getText())); oAlumno.setEvaluacionParcial2(Double.parseDouble(jTextFieldEvaluacionParcial2.getText())); oAlumno.setPromedioDeTrabajo(Double.parseDouble(jTextFieldPromedioDeTrabajo.getText())); if (oAlumnoDAO.insertarAlumno(oAlumno)) { JOptionPane.showMessageDialog(null,"Operación Exitosa"); }

else { JOptionPane.showMessageDialog(null,"Operación Fallida"); }

}

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonReiniciarActionPerformed.

private void jButtonReiniciarActionPerformed(java.awt.event.ActionEvent evt) { jTextFieldAlumno_id.setText("");

jTextFieldApellidoNombre.setText(""); jTextFieldEvaluacionParcial1.setText(""); jTextFieldEvaluacionParcial2.setText(""); jTextFieldPromedioDeTrabajo.setText(""); }

Repita el proceso anterior y agregue el código del evento clic del objeto jButtonSalirActionPerformed.

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt) { dispose();

}

Haga doble clic en cuadro de diálogo JDialogListarAlumno. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) los objetos Label, jTextArea y Button. Finalmente en el Inspector cambie los nombres de los controles tal como se presenta en el siguiente gráfico.

Page 256: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 256

Agregue el código del evento clic del objeto jButtonListarActionPerformed.

private void jButtonListarActionPerformed(java.awt.event.ActionEvent evt) { jTextAreaListado.setText(""); Vector<Alumno> oVector = new Vector<Alumno>(); AlumnoDAO oAlumnoDAO=new AlumnoDAO(); oVector=oAlumnoDAO.obtenerDatosEnVectorAlumno(); jTextAreaListado.append("Alumno_id"+"\t"+"Apellido y Nombre"+ "\t"+ "Ep1"+ "\t"+

"Ep2"+"\t"+"Pt"+"\t"+"Pf"+"\n"); for (int i=0;i<oVector.size();i=i+1) { jTextAreaListado.append(oVector.get(i).getAlumno_id()+"\t"); jTextAreaListado.append(oVector.get(i).getApellidoNombre()+"\t"+"\t"); jTextAreaListado.append(oVector.get(i).getEvaluacionParcial1()+"\t"); jTextAreaListado.append(oVector.get(i).getEvaluacionParcial2()+"\t"); jTextAreaListado.append(oVector.get(i).getPromedioDeTrabajo()+"\t"); jTextAreaListado.append(oVector.get(i).getPromedioFinal()+"\n"); }

Verifique que el proyecto se presente como en el siguiente gráfico. Luego haga clic en el objeto

JDialogCalcularPromedioFinal.java.

Haga doble clic en cuadro de diálogo JDialogCalcularPromedioFinal.java. Luego haga clic en la pestaña Diseño (Design) y agregue de la Paleta de Controles (Swing Controls) el objeto Button. Cambie la propiedad text del jButton por Calcular Promedio Final y finalmente en el Inspector cambie el nombre del botón de comando por jButtonCalcularPromedioFinal.

Page 257: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 257

Haga clic en la Ventana Inspector para verificar el cuadro de diálogo JDialogCalcularPromedioFinal.

Agregue el código del evento clic del objeto jButtonCalcularPromedioFinalActionPerformed.

private void jButtonCalcularPromedioFinalActionPerformed(java.awt.event.ActionEvent evt) { int respuesta = JOptionPane.showConfirmDialog(this, "¿Esta seguro...?", "Dialogo de

Confirmación", JOptionPane.YES_NO_OPTION); if (respuesta == JOptionPane.YES_OPTION) { AlumnoDAO oAlumnoDAO=new AlumnoDAO(); oAlumnoDAO.procesarPromedioAlumno(); } dispose(); }

Page 258: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 258

Haga doble clic en el JFrame JFrameArreglosConGUI.java y luego clic en la pestaña Design del mismo. Luego haga clic derecho en el panel de JFrameArreglosConGUI y agregue desde la Paleta (Add From Palette) una Barra de Menú (Menu Bar).

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Page 259: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 259

Haga clic derecho en la opción File de la Barra de Menú del JFrameBaseDeDatosConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Verifique que la barra de Menú se presente como en el siguiente gráfico.

Page 260: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 260

Haga clic derecho en la opción File de la Barra de Menú y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Page 261: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 261

Haga clic derecho sobre la primera opción File y modifique el texto colocando “Alumnos”.

Haga doble clic sobre el texto del primer Elemento de Menú (jMenuItem1) y modifique el texto colocando “Insertar Alumnos”. Repita el proceso sobre el texto del segundo Elemento de Menú (jMenuItem2) y modifique el texto colocando “Listado de alumnos”, tal como se presenta en el siguiente gráfico.

Page 262: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 262

Haga clic derecho sobre la segunda opción Edit y seleccione la propiedad Editar Texto. Modifique y póngale Proceso.

Haga clic derecho en la opción Proceso de la Barra de Menú del JArregloConGUI y agregue desde la Paleta (Add From Palette) un Elemento de Menú (Menu Item).

Page 263: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 263

Cambie la propiedad textro del elemento de menú creado y proporcióne el texto Calcular promedio final. Finalmente verifique que la Barra de Menú se presente como en el siguiente gráfico.

Haga clic derecho en la barra de menú y seleccione Agregar menú (Add Menu).

Page 264: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 264

Haga clic derecho en la opción de menú jMenu3 y seleccione Editar Texto (Edit Text). Cambie el nombre de la opción de menú jMenu3 por Salir.

Haga clic derecho en la opción de menú Salir y seleccione Agregar Elemento de Menú (Menu Item) desde la paleta (Add From Palette).

Page 265: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 265

Haga clic derecho en la opción de menú jMenuItem4 y seleccione Editar Texto (Edit Text). Cambie el nombre del elemento de menú jMenuItem4 por Salir de la aplicación.

Verifique que la Barra de Menú se presente como en el siguiente gráfico.

Page 266: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 266

Renombre los objetos de la barra de menú en la ventana Inspector del JFrameBaseDeDatosConGUI, tal como se presenta como en el siguiente gráfico.

Haga clic en la pestaña Source del frame JFrameBaseDeDatosConGUI y cree la variable dialogo de tipo Javax.Swing.JDialog tal como se presenta en el siguiente gráfico.

Page 267: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 267

Haga clic derecho en el primer elemento de menú Alumnos (Insertar alumnos) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente.

Page 268: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 268

Haga clic derecho en el segundo elemento de menú Alumnos (Listar alumnos) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente. Debe ser ListarAlumno

Page 269: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 269

Haga clic derecho en el primer elemento de menú Proceso (Calcular promedio final) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente.

Haga clic derecho en el primer elemento de menú Salir (Salir del sistema) y agregue un Evento-Action-ActionPerformed.

Page 270: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 270

Agregue el código siguiente.

Verifique que el código de todos los elementos de menú se presenten como en el siguiente gráfico.

Page 271: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 271

Haga clic derecho en PaqueteBaseDeDatosConGUI y cree una Clase Principal Java (Java main Class) dentro del paquete PaqueteBaseDeDatosConGUI.

Asigne como Nombre de Clase (Class name) AplicacionBaseDeDatosConGUI, Proyecto (Project) ProyectoBaseDeDatosConGUI, Localización (Location) Source Packages, Paquete (Package) PaqueteBaseDeDatosConGUI y como Carpeta Creada (Created Folder) c:\NetBeansProjects\ProyectoBaseDeDatosConGUI\src\PaqueteBaseDeDatosConGUI\ AplicacionBaseDeDatosConGUI.java. Luego haga clic en Finalizar (Finish).

Page 272: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 272

Verifique que clase principal AplicacionBaseDeDatosConGUI se presente como en el siguiente gráfico. Haga clic en Source.

Agregue el código correspondiente a la clase principal AplicacionBaseDeDatosConGUI.

En el menú de inicio del Windows seleccionar Programas / MySQL / MySQL Command Line Cliente para levantar el servicio cliente de MySQL.

Page 273: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 273

Tipee el password y pulse enter. El password es 12345.

Cree la base de datos escribiendo create database dbalumno; y luego pulse la tecla enter.

Visualice la relación de bases de datos creadas escribiendo show databases; y luego pulse enter.

Indique la base de datos a usar escribiendo use dbalumno;

Page 274: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 274

Cree la tabla de base de datos alumnos escribiendo:

create table alumno ( alumno_id int, apellidoNombre char(31), evaluacionParcial1 double, evaluacionParcial2 double, promedioDeTrabajo double, promedioFinal double )

;

Cree un índice a tabla de datos alumno escribiendo:

alter table alumno add constraint pk_alumno primary key alumno(alumno_id)

Page 275: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 275

Haga clic derecho en Librerias (Libraries) para agregar la librería MySQL JDBC driver.

Seleccione la librería MySQL JDBC driver y haga clic en Agregar librería (Add library).

Page 276: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 276

Verifique que la librería MySQL JDBC driver a sido agregada.

Ejecute la aplicación AplicacionBaseDeDatosConGUI

Verifique la ejecución de la opción Insertar alumnos.

Page 277: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 277

Verifique la ejecución de la opción Listar alumnos

Verifique la ejecución de la opción Calcular promedio final

Verifique la ejecución de la opción Salir de la aplicación

Page 278: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 278

Page 279: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 279

REPORTES SIN USO DE PARÁMETROS

A continuación se presenta una práctica para crear un reporte utilizando Java e iReport.

En el menú de inicio del Windows seleccionar Programas / MySQL / MySQL Command Line Cliente para levantar el servicio cliente de MySQL.

Tipee el password y pulse enter. El password es 12345.

Cree la base de datos escribiendo create database dbalumno; y luego pulse la tecla enter.

Page 280: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 280

Visualice la relación de bases de datos creadas escribiendo show databases; y luego pulse enter.

Indique la base de datos a usar escribiendo use dbalumno;

Cree la tabla de base de datos alumnos.

create table alumno ( alumno_id int, apellidoNombre char(31), evaluacionParcial1 double, evaluacionParcial2 double, promedioDeTrabajo double, promedioFinal double ) ;

Inserte los siguientes registros. Insert into alumno(alumno_id,

apellidoNombre,evaluacionParcial1,evalucionParcial2,promedioDeTrabajo) values (1,’Arias, Alex’, 11,11,11); Insert into alumno(alumno_id,

apellidoNombre,evaluacionParcial1,evalucionParcial2,promedioDeTrabajo) values (2,’Barreto, Byron’, 12,12,12); Insert into alumno(alumno_id,

apellidoNombre,evaluacionParcial1,evalucionParcial2,promedioDeTrabajo) values (3,’Cespedes, Cesar’, 13,13,13);

Page 281: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 281

Cree un índice a tabla de datos alumno escribiendo:

alter table alumno add constraint pk_alumno primary key alumno(alumno_id)

En la barra de herramientas del NetBeans 6.7.1., haga clic en el botón conexión/origen de datos para

reportes (Report Datasources) cuyo ícono es .

En Conexiones/origen de Datos (Connections/Datasources) haga clic en Nuevo (new).

Page 282: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 282

En Conexión/origen de Datos (Datasources) seleccione Database JDBC connection y luego haga clic en siguiente.

Configure la Conexión a base de datos JDBC (Database JDBC connection) tal como se presenta en el siguiente gráfico, luego haga clic en Test. El password es el configurado en el MySQL (password: 12345)

Page 283: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 283

En Conexión a base de datos con JDBC (Database JDBC connection) active cuadro de texto Salvar contraseña(Save password) y luego haga clic en el botón grabar (Save) y finalmente cierre la ventana.

En Conexión/origen de Datos (Connections/Datasources) verifique la conexión JDCB creada y luego cierre la ventana.

Page 284: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 284

Haga clic derecho en File (Archivo) y seleccione Abrir Proyecto (Open Project). En Abrir Proyecto (Open Project) seleccione ProyectoBaseDeDatosConGUIBackup. El proyecto mencionado se encuentra en el Cd proporcionado por el autor en la carpeta Backup.

Haga clic derecho en el Proyecto ProyectoBaseDeDatosConGUIBackup y seleccione Copiar (Copy).

Page 285: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 285

Escriba como nombre de proyecto (Project Name) ProyectoReportesConJava.

Verifique que el proyecto ProyectoReportesConJava se presente como en el siguiente gráfico.

Page 286: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 286

Haga clic derecho en paquete PaqueteBaseDedatosConGUI y seleccione Reparar/Renombrar (Refactor/Rename).

Dea como nuevo nombre de paquete PaqueteReportesConJava y luego haga clic en el botón Refaccionar (Refactor).

Page 287: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 287

Haga clic derecho en la clase AplicacionBaseDeDatosConGUI y seleccione Refaccionar/renombrar

(Refactor/Rename).

Dea como nuevo nombre de clase AplicacionReportesConJava y luego haga clic en el botón Refaccionar (Refactor).

Page 288: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 288

Repita los procesos anteriores para renombrar a la clase JFrameBaseDeDatosConGUI.java por el nombre JFrameReportesConJava. Luego verifique que el proyecto se presente como en el siguiente gráfico.

Haga clic derecho en el proyecto ProyectoBaseDeDatosConGUIBackup y selecciones close.

Page 289: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 289

Haga clic derecho en Libraries y seleccione Agregar Librería (Add Library).

Seleccione JasperReports3.5.3 y luego haga clin el el botón Agregar Librería (Add Library).

Page 290: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 290

Verifique que en el explorador del proyecto se han agregado las librerías de JasperReport.

Agregue de la Carpeta F:\ClasesParaReportes (Cd de trabajo proporcionado por el Autor) la clase ClaseReporteSinParametro.java

Page 291: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 291

Verifique el código del la clase ClaseReporteSinParametro.java.

package PaqueteReportesConJava; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Map; import java.util.HashMap; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.*; public class ClaseReporteSinParametro { private Connection conexion; private String driver= "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/dbAlumno"; private String login = "root"; private String password = "12345"; public ClaseReporteSinParametro() { try { Class.forName(driver); conexion = DriverManager.getConnection(url,login,password); } catch (ClassNotFoundException ex) { System.out.println("Falló carga de driver !!!"); ex.printStackTrace(); } catch (SQLException ex) { System.out.println("Falló la conexión !!!"); ex.printStackTrace(); } } public void ejecutarReporte(String reporteURL) { try { JasperReport masterReport = null; try { masterReport = (JasperReport) JRLoader.loadObject(reporteURL); } catch (JRException e) { System.out.println("Error cargando el reporte maestro: " + e.getMessage()); System.exit(3); } Map parametro = new HashMap(); JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport,parametro,conexion); JasperViewer jviewer = new JasperViewer(jasperPrint,false); jviewer.setTitle("Reporte de alumnos"); jviewer.setVisible(true); } catch (Exception j) { System.out.println("Mensaje de Error:"+j.getMessage()); } }

Page 292: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 292

public void cerrarReporte() { try { conexion.close(); } catch (SQLException ex) { ex.printStackTrace(); } } }

Haga clic derecho en el Paquete PaqueteReporteConJava y seleccione Nuevo/Otro (New/Other).

Seleccione Reporte Vacío (Empty report).

Page 293: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 293

En Nuevo Reporte Vacío (New Empty Report) configure el reporte y localización, como se presenta en el siguiente gráfico. Luego haga clic en Finalizar (Finish).

Haga clic en el objeto para crear una consulta SQL de base datos.

Page 294: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 294

Haga clic en el botón de comando Query Designer.

Arrastre el objeto alumno ( ), seleccione los campos de la consulta y luego haga clic en OK.

Page 295: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 295

Haga clic en la pestaña SQL y finalmente hacer clic en ok.

Haga clic en en el botón ok.

Page 296: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 296

Pulse Control-Shift+8 y verifique la visualización de la paleta de objetos para reportes.

Verifique la visualización de la Ventana Inspector de Reportes (Report Inspector). En caso que no se visualizará haga clic en la opción Windows-Reset Windows del menú principal del NetBeans 6.7.1.

Page 297: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 297

Arrastre las variables alumno_id_alumno_id, alumno_apellidoNombre y alumno_promedioFinal de la Ventana PaqueteReporteConJava – Navegador (Navigator) a la fila Detail del área de diseño del reporte.

Haga clic en Preview para realizar una vista previa.

Page 298: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 298

Haga clic en la pestaña Designer y arrastre el objeto Etiqueta de Texto Estática (label Static Text) a la banda Cabecera de Página (Page Header) del área de diseño del reporte.

Repita el proceso anterior y agregue dos objetos Etiqueta de Texto Estática (label Static Text) más. Luego haga doble clic en cada uno de los objetos Etiqueta de Texto Estática (label Static Text) y cambie los textos como se visualizan en el siguiente gráfico.

Page 299: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 299

Repita el proceso anterior y agregue un objeto Etiqueta de Texto Estática (label Static Text) en la banda Cabecera de Página (Page Header). Luego haga doble clic en el objeto agregado y cambie el texto como se visualizan en el siguiente gráfico.

Haga clic en Preview para realizar una vista previa.

Page 300: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 300

Haga doble clic en JFrameReportesConJava. Java y agregue la opción Reportes y el elemento de menú Reporte de alumnos.

En el inspector modifique el nombre de los objetos agregados.

Page 301: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 301

Haga clic derecho en el primer elemento de menú Reportes (Reportes de alumnos) y agregue un Evento-Action-ActionPerformed.

Agregue el código siguiente.

private jMenuItemReporteDeAlumnosActionPerformed (java.awt.event.ActionEvent evt) { ClaseReporteSinParametro oClaseReporteSinParametro=new ClaseReporteSinParametro(); String reporteURL="C:/NetBeansProjects/ProyectoReportesConJava/src/PaqueteReportesConJava/ReporteDeAlumnos.jasper";

oClaseReporteSinParametro.ejecutarReporte(reporteURL); } Nota: La variable de tipo String reporteURL contiene la dirección donde se ha grabado el archivo

ReporteDeAlumnos.jasper. El archivo .jasper se crea cuando se hace al reporte vista previa al reporte.

Page 302: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 302

Haga clic derecho a la clase AplicacionReportesConJava.java y seleccione Ejecutar archivo (RunFile) para ejecutar la aplicación.

Seleccione el primer elemento de menú Reportes (Reportes de alumnos) de la opción de menú Reportes y visualice el reporte generado.

Page 303: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 303

Haga clic en el el botón Imprimir (Imprimir) para imprimir el reporte. Puede seleccionar la impresora instaladae imprimir el reporte el papel.

Haga clic en el el botón Grabar (Save) para grabar el reporte en el formato PDF. Dea el nombre del archivo PDF y luego haga clic en Grabar (Save).

Page 304: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 304

Verifique el funcionamiento de las otras opciones del la barra de herramientas.

Page 305: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 305

CREACIÓN DE UN REPORTE CON USO DE PARÁMETROS

Seleccione Reporte Vacío (Empty report).

Page 306: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 306

En Nuevo Reporte Vacío (New Empty Report) configure el reporte y localización, como se presenta en el siguiente gráfico. Luego haga clic en Finalizar (Finish).

Verifique que el archivo ReporteIndividual.jrxml ha sido creado.

Page 307: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 307

Agregue de la Carpeta F:\ClasesParaReportes (Cd de trabajo proporcionado por el Autor) la clase ClaseReporteConParametro.java

Verifique el código agregado de la clase ClaseReporteConParametro.

package PaqueteReportesConJava; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Map; import java.util.HashMap; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.*; public class ClaseReporteConParametro { private Connection conexion; private final String driver=”com.mysql.jdbc.Driver” private final String login = "root"; private final String password = "12345"; private String url = "jdbc:mysql://localhost/DbAlumno"; public ClaseReporteConParametro() { try { Class.forName(driver); conexion = DriverManager.getConnection(url,login,password); } catch (ClassNotFoundException ex) { System.out.println("Falló carga de driver !!!"); ex.printStackTrace(); } catch (SQLException ex) { System.out.println("Falló la conexión !!!"); ex.printStackTrace(); } }

Page 308: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 308

public void ejecutarReporte(String reporteURL, String pAlumno_id) { try { if (reporteURL == null) { System.out.println("No encuentra el archivo de reporte !!!"); System.exit(2); } JasperReport masterReport = null; try { masterReport = (JasperReport) JRLoader.loadObject(reporteURL); } catch (JRException e) { System.out.println("Error cargando el reporte maestro: " + e.getMessage()); System.exit(3); } //Preparacion del reporte (en esta etapa se inserta el valor del query en el reporte) Map parametro = new HashMap();

parametro.put("pAlumno_id", pAlumno_id);

//Reporte diseñado y compilado con iReport JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport,parametro,conexion); //Se lanza el Viewer de Jasper, no termina aplicación al salir JasperViewer jviewer = new JasperViewer(jasperPrint,false); jviewer.setTitle("Reporte de alumnos"); jviewer.setVisible(true); } catch (Exception j) { System.out.println("Mensaje de Error:"+j.getMessage()); } } public void cerrarReporte() { try { conexion.close(); } catch (SQLException ex) { ex.printStackTrace(); } } }

Page 309: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 309

En la ventana Inspector de Reportes (Report Inspector) haga clic derecho en Parameter y seleccionar Add Parameter.

Haga clic derecho en parameter 1 y seleccione Rename.

Digite como nuevo nombre pcodigo, luego hacer clic en OK.

Page 310: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 310

Haga clic en el objeto para crear una consulta SQL de datos.

Haga clic en el botón Query Designer.

Page 311: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 311

Arrastre el objeto alumno ( ), seleccione los campos de la consulta y luego haga clic en OK.

Haga clic en la pestaña SQL y finalmente hacer clic en OK.

Page 312: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 312

Haga clic en la sentencia SQL agregada después de la cláusula FROM.

Agregue la selección condicional (WHERE) y finalmente haga clic en botón OK.

Page 313: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 313

Configure el reporte como se presenta en el siguiente gráfico.

Haga clic en Preview para realizar una vista previa. Ingresar el parámetro 1.

Page 314: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 314

Cree un nuevo cuadro de diálogo denominado JDialogGenerarReporte.

Configure el cuadro de diálogo JDialogGenerarReporte y agregue los controles que se presentan en el inspector y con el diseño que se presenta en el gráfico siguiente.

Agregue el código al botón Aceptar.

private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) { ClaseReporteConParametro oClaseReporteConParametro=new ClaseReporteConParametro();

String reporteURL= "C:/NetBeansProjects/ProyectoReportesConJava/src/PaqueteReportesConJava/ReporteIndividual.jasper";

oClaseReporteConParametro.ejecutarReporte(reporteURL, jTextFieldAlumno_id.getText()); }

Page 315: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 315

Agregue el código al botón Salir

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt) { dispose();

}

Haga doble clic en JFrameReportesConJava. Java y agregue el elemento de menú Reporte de alumnos individual.

En el inspector modifique el nombre de los objetos agregados.

Page 316: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 316

Haga clic derecho en el segundo elemento de menú Reportes (Reportes de alumnos) y agregue un Evento-Action-ActionPerformed.

Cree un nuevo cuadro de diálogo denominado JDialogGenerarReporte.

private void jMenuItemReporteDeAlumnosIndividualActionPerformed(java.awt.event.ActionEvent evt) { dialogo=new JDialogGenerarReporte(this,true);

dialogo.setSize(300,100); dialogo.setLocationRelativeTo(this); dialogo.setTitle("Reporte individual"); dialogo.setVisible(true); }

Page 317: LibroJavaEnfoquePráctico

Java - Enfoque Práctico

Ing. Javier Alberto Manrique Quiñonez 317

Ejecute el reporte recién creado.