Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Gua de Laboratorio
Sesin
1
Diseo y Programacin de la GUI
La Interfaz Grafica de Usuario
La interfaz grfica del usuario, o GUI, es el conjunto de elementos grficos (ventanas, mens, botones, etc.) que permiten la interaccin entre el usuario y la aplicacin informtica. GUI es un acrnimo del vocablo ingls Graphical User Interface. En el lenguaje Java podemos utilizar como Interfaz a las Clase Applet, Frame o Dialog.
Diseo de la GUI
Consiste en crear una Interfaz y colocar sobre ella los componentes graficos. De tal manera que cumplen los requerimientos mnimos de entrada y salida de Datos. A cada componente le asignaremos un nombre. En java utilizamos los componentes AWT o Swing.
Programacin de la GUI
La programacin de la GUI esta asociada a la programacin d eventos de la GUI y consiste en asociar los mtodos del programa con los componentes visuales. En java hacemos uso de la Interfaces o Auditores para el manejo de eventos. La Interface mas utilizada es el ActionListener siendo los mtodos mas utilizados el actionEvents(), actionPerformed(), mouseClicked(), etc.
Gua de Laboratorio
Funcionalidad
Ingresar el nombre la persona en la caja de Texto y luego: Al hacer click en el botn Aceptar, dicho nombre aparecer en el rea de Texto Al hacer click en el botn salir, el programa se acabar
Actividades
En el Eclipse se realizara los siguientes pasos: 1. Se creara un proyecto con el nombre: PryLab 2. Dentro del proyecto se creara un paquete llamado gui
3. Dentro del paquete gui se creara la Clase: AppEjemplo de la siguiente manera Utilice la barra de botones de acceso rpido del Eclipse
Gua de Laboratorio
Para definir que la interfaz sea Applet debe en la Superclass colocar Applet si no lo encuentra busquela haciendo click en Browse
Gua de Laboratorio
Visualizacin en miniatura
4. Una vez que tenemos la interfaz procedemos a la concluir con la creacin del gui, para lo cual colocaremos los componentes grficos. Antes de colocarlos realice los siguientes ajustes:
En la ventana de propiedades cambiarle al Applet la propiedad del Layout (administrador de Diseo) por null. Cada vez que agregamos un componente al Applet el editor va cambiando de contenido
Gua de Laboratorio
5. Modificamos los valores por defectos que tiene los componentes en la ventana de Propiedades Label: Field name : LblNombre Text : nombre TextField: Field name : TxtNombre Button: Field name : BtnAceptar Text : Aceptar Field name : BtnSalir Text : Salir TextArea: Field name : TxtASalida 6. Procedemos a la programacin de los eventos
Gua de Laboratorio
Aparecer en la ventana del editor el mtodo asociado al Boton , completar con lo siguiente:
Gua de Laboratorio
2. Al importar seleccione File System y contiene la exportacin tal y como la aprendio en el curso anterior
1. Disee una aplicacin para generar n nmeros aleatorios en un determinado intervalos. Se ingresaran los valores de n as como tambin los lmites del intervalo. 2. Disee un aplicacin que simule a una calculadora que permita sumar, restar, multiplicar, dividir (decimales), hallar raz cuadrada, raz cbica y potencia
Gua de Laboratorio
Sesin
2
Componentes AWT
Frame
Button
ox
Checkbox
Label Choice
Choice
TextField TextArea
Gua de Laboratorio
Parmetros de ubicacin y tamao con respecto a un Contenedor Cursor mostrado cuando el mouse est sobre el botn Permite Habilitar/Desabilitar el botn Nombre del objeto Button Fuente de la etiqueta del botn Etiqueta del botn
ALGUNOS MTODOS: getLabel( ): Devuelve la etiqueta del botn. setLabel(String): Fija la etiqueta a visualizar en el botn. requestFocus( ): Recibe el foco, a la espera de algn evento. setEnabled(boolean): Permite habilitar o deshabilitar el botn si el parmetro es true o false respectivamente. setVisible(boolean): Activa la visibilidad del botn cuando el parmetro es true.
Gua de Laboratorio
Fuente del Texto Color del Texto Texto mostrado Visibilidad del Label cuando se ejecute el programa.
ALGUNOS MTODOS: getText( ): Devuelve el texto del Label. setText(String): Fija el texto a visualizar en el Label. setVisible(boolean): Visible/No visible si el parmetro es true o false respectivamente. setFont(Font): Cambia la fuente del texto de la etiqueta.
10
Gua de Laboratorio
ALGUNOS MTODOS: add(String): Adiciona la cadena especificada, en una fila del choice. getSelectedItem( ): Devuelve la cadena seleccionada. getItemCount( ): Devuleve la cantidad de Items contenidos en el Choice. setEnabled(boolean): Habilita o Deshabilita el choice si el parmetro especificado es true o false respectivamente. getItem(int): Retorna la cadena contenida en el item, indicando el ndice como parmetro. getSelectedIndex( ): Devuelve el ndice del item seleccionado (el primero es 0) . remove(int): elimina el item que se encuentra en el ndice especificado. remove(String): Elimina el item que tiene la cadena especificada. removeAll(): Limpia el contenido del choice. select(int): Selecciona el item de ndice o posicin especificado. select(String): Selecciona el item que tiene la cadena especificada. setFont(Font): Cambia la fuente en los items del Choice.
11
Gua de Laboratorio
ALGUNOS MTODOS: append(String): Concatena un texto en el TextArea, sin borrar el conrtenido anterior. setEditable( boolean): Si el TextArea es editable, especificar true. setEnabled(boolean): Activa o Desactiva el TextArea si el parmetro es true o false respectivamente. getText( ): Devuelve el texto del TextArea. setText(String): Fija el texto a visualizar en el TextArea, borrando el contenido anterior. setVisible(boolean): Visible/No visible si el parmetro es true o false respectivamente.
ALGUNOS MTODOS: setEditable( boolean): Si el TextField es editable, especificar true. setEnabled(boolean): Activa o Desactiva el TextField si el parmetro es true o false respectivamente. getText( ): Devuelve el texto del TextField. setText(String): Fija el texto a visualizar en el TextField. setVisible(boolean): Visible/No visible si el parmetro es true o false respectivamente.
12
Gua de Laboratorio
Construya una ventana (de tipo Frame) con los siguientes componentes grficos:
Funcionamiento: ingrese los datos solicitados, luego * Al hacer clic en el botn mostrar: a) En el primer componente TextArea, deben aparecer el nombre ingresado y el sexo seleccionado. b) En el segundo componente TextArea deben aparecer el estado civil y los hobbies seleccionados. * Al hacer clic en el botn nuevo se deben blanquear los componentes para poder ingresar los datos de otra persona.
13
Gua de Laboratorio
Sesin
Rational Rose es la herramienta con la cual podemos construir y documentar los diferentes diagramas de la Notacin UML. Al seleccionar la opcin desde el grupo de programas, al hacer doble clic sobre el respectivo icono, aparece la siguiente ventana que nos permite elegir un framework.
Un framework es una plantilla que provee componentes reusables. Para nuestro propsito, seleccionamos el framework jdk116, luego clic en OK. Aparece entonces la ventana principal.
Browser
Area de documentacin
ToolBox
Ventana de trabajo
14
Gua de Laboratorio
1. Creacin de los paquetes que forman parte de la aplicacin, dentro de la Vista Lgica (Logical View). 2. Dentro de cada paquete, se crean los Diagramas de Clases, Secuencia y/o Colaboracin. 3. En cada Diagrama de Clases se colocan las clases con sus respectivos atributos y mtodos. CREACIN DE PAQUETES 1. En el Browser expandir el Logical View, doble clic en Main. 2. En el ToolBox seleccionar el icono Package(paquete), luego clic en la ventana de trabajo. 3. Asignar un nombre al paquete creado. Por ejemplo: domProblema. CREACIN DE UN DIAGRAMA DE CLASES Doble clic sobre el paquete creado. Aparece entonces una nueva ventana de trabajo. El nombre por default (omisin) para el diagrama de clases es Main.
DEFINICIN DE UNA CLASE 1. Desde el ToolBox seleccionar el icono Class (Clase), luego clic en la ventana de trabajo. 2. Asignar un nombre a la clase. Por ejemplo: Articulo. 3. Para colocar un atributo: seleccionar la clase, clic derecho | New Attribute. 4. Para colocar un mtodo: seleccionar la clase, clic derecho | New Operation.
Articulo nombre : String precio : double setNombre(n : String) : void setPrecio(p : double) : void getNombre() : String getPrecio() : double
Modos de acceso smbolo privado publico protegido implementacin candado rectngulo llave letra T
15
Algoritmos y Estructuras de Datos II IMPORTACION DE UNA CLASE Ejemplo: importar la clase Button hacia el paquete gui. 1. Crear el paquete gui, luego doble clic sobre el paquete. 2. En el Browser, expandir el paquete java. Luego expandir el paquete awt. 3. Seleccionar la clase Button y arrastrar hacia la ventana de trabajo.
Gua de Laboratorio
4. Para ocultar los atributos: seleccionar la clase, clic derecho | Options | Show All Attributes. 5. Para ocultar los mtodos: seleccionar la clase, clic derecho | Options | Show All Operations.
Diagrama de Clases
Crear un paquete llamado diseo, construir el siguiente diagrama de clases dentro de dicho paquete.
Frame
(from awt)
Ventana
(from gui)
+obj
Articulo
(from domProb)
+btnSalir Button
(from awt)
16
Gua de Laboratorio
1. Ubicar el puntero del mouse en el lado de la relacin donde se va a colocar el nombre. 2. Seleccionar la relacin, clic derecho | Role name. CAMBIAR EL MODO DE ACCESO Cuando se asigna el nombre a una relacin, automticamente aparece con modo de acceso pblico. Para cambiar el modo de acceso se debe: 1. Ubicar el puntero del mouse en el lado de la relacin donde se va a modificar el modo de acceso. 2. Seleccionar la relacin, clic derecho | asignar una de las siguientes opciones: Modo de acceso private public protected implementation smbolo + #
Diagrama de Paquetes
Ejemplo: construir el respectivo diagrama de paquetes para el modelo anterior. 1. Desde el Browser: doble clic sobre el Main del Logical View. 2. En el ToolBox seleccionar el icono Dependency, luego trazar la relacin. ? ?
Diagrama de Secuencia
1. En el Browser: seleccionar el paquete diseo, clic derecho | New | Sequence Diagram. 2. El nombre por default es New Diagram. Se recomienda cambiarlo por Secuencia. 3. Doble clic sobre el nombre para que aparezca la ventana de trabajo. 4. En el Browser: expandir el paquete gui. 5. Seleccionar la clase Ventana y arrastrar hacia la ventana de trabajo. 6. Expandir el paquete domProblema. 7. Seleccionar la clase Artculo y arrastrar hacia la ventana de trabajo. 8. Para representar el mensaje, utilizar el icono Object Message desde el ToolBox. 9. Para colocarle el nombre: seleccionar el mensaje, clic derecho, luego seleccionar el nombre. Representar el segundo mensaje(Message to self).
: Ventana : Articulo
guardarNombre(String)
Ventana( )
GRABANDO EL MODELO 1. Para grabar el modelo que hemos creado: ir al men bar, seleccionar File | Save. 2. Aparece una ventana en donde seleccionamos la carpeta donde vamos a grabar. 3. Asignamos el nombre para el archivo, luego clic en el botn Grabar. 17
Gua de Laboratorio
Antes de generar cdigo en lenguaje java, se debe especificar la carpeta dnde se va a grabar el archivo. Dicha carpeta debe existir, de lo contrario, se debe crear primero desde el Explorador de Windows. 1. En el men bar seleccionar la opcin Tools | Java / J2EE | Project Specification
3. Aparece una segunda ventana. Clic en el botn Directory .... 4. Aparece entonces una tercera ventana. Seleccionar la carpeta Alg2, luego clic en el botn OK. GENERACIN DE CODIGO (para la clase Artculo) 1. Desde el Browser: doble clic sobre el Main del paquete domProblema. Seleccionar la clase Artculo. 2. Desde el men bar seleccionar la opcin Tools | Java / J2EE | Generate code.
3. Seleccionar la carpeta destino (lado izquierdo). Seleccionar el paquete domProblema (lado derecho). 4. Clic en el botn Assign. Luego clic en el botn OK.
18
Algoritmos y Estructuras de Datos II VERIFICANDO EL PROCESO Verificar desde el Explorador de Windows el cdigo generado para la clase Artculo.
Gua de Laboratorio
1. Desde el explorador, seleccionar la carpeta Alg2. Se debe haber creado la carpeta domProblema. 2. Doble clic sobre la carpeta domProblema. Se debe haber creado el archivo Articulo.java 3. Abrir el archivo con el bloc de notas. 4. Generar el cdigo para la clase Ventana.
//Source file: c:/Alg2/domProblema/Articulo.java package domProblema; public class Articulo { private String nombre; private double precio; public Articulo( ) { } /** @roseuid 3D21E01303D4 */ public void setNombre(String n) { } /** @roseuid 3D21E02902DA */ public void setPrecio(double p) { } /** @roseuid 3D21E04A0320 */ public String getNombre( ) { } /** @roseuid 3D21E05800C8 */ public double getPrecio( ) { } } }
//Source file: c:/Alg2/gui/Ventana.java package gui; import java.awt.Frame; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import domProblema.Articulo; public class Ventana extends Frame implements ActionListener { public Button btnSalir; public Articulo obj; public Ventana( ) { } /** @roseuid 3D21EBD6037A */ public void actionPerformed(ActionEvent arg0) { }
19
Gua de Laboratorio
Utilizando un editor de texto, definir la clase Factura en funcin de sus atributos y mtodos (tal como se indica en el recuadro). Luego exportar a la carpeta C:\Alg2 (podemos exportar el .java el .class). package domProbLab; public class Factura { private int nro; private double importe; public void setNro(int n) { nro = n; } public void setImporte(double i) { importe = i; } public int getNro( ) { return nro; } public double getImporte( ) { return importe; } } Luego, ir a Rational Rose para importar el cdigo (debemos crea un nuevo modelo y asegurarnos que el lenguaje por defecto sea java). Antes de importar, se debe especificar la carpeta desde dnde se va a leer el cdigo java. 1. En el men bar seleccionar la opcin Tools | Java / J2EE | Project Specification
3. Aparece una segunda ventana. Clic en el botn Directory .... 4. Aparece entonces una tercera ventana. Seleccionar la carpeta Alg2, luego clic en el botn OK.
20
Algoritmos y Estructuras de Datos II IMPORTACIN DEL CODIGO (para la clase Factura) 1. Desde el men bar seleccionar la opcin Tools | Java / J2EE | Reverse Engineer Aparece entonces la siguiente ventana:
Gua de Laboratorio
2. Seleccionar la carpeta Alg2, seleccionar la clase Factura, luego clic en el botn Add. La clase Factura aparece entonces en el recuadro inferior. 3. Del recuadro inferior seleccionar la clase Factura, clic en el botn Reverse. Esperar a que se genere el respectivo paquete, luego clic en el botn Done. Adicionalmente, se debe crear el paquete diseoAplicacion para construir el diagrama con las clases que se encuentran en los diferentes paquetes del modelo.
Construir el correspondiente Diagrama de Clases para la aplicacin que genera nmeros aleatorios. Utilizar Ingeniera reversa.
21
Gua de Laboratorio
Sesin
4
Vector de cadenas
22
Gua de Laboratorio
package guiVecCad; import java.awt.*; import javax.swing.*; import domapliVecCad.*; public class FrmArreglo extends Frame { Arreglo objA; }
private void initialize() { . // user code begin {2} objA=new Arreglo(10); // user code end }
public void btnIngresar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { String t=ivjTxtTexto.getText(); objA.agregarTexto(t); ivjTxtTexto.setText(""); } public void btnBuscar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { String t=JOptionPane.showInputDialog("Ingrese texto a buscar"); String msg=objA.buscarNota(t); JOptionPane.showMessageDialog(null,msg); }
23
Gua de Laboratorio
package domapliVecCad; public class Arreglo { String texto[]; int conta; } public Arreglo(int n) { texto=new String[n]; conta=0; } public int buscar(String t){ for(int i=0;i<conta;i++) if(texto[i].equals(t)) return i; return -1; } public void agregarTexto(String t){ texto[conta]=t; conta++; }
public String sacarTodo() { String listado=""; for(int i=0;i<conta;i++) listado+=texto[i]+"\n"; return listado; }
public void ordenar() { for(int i=0;i<conta-1;i++) for(int j=i+1;j<conta;j++) if(texto[i].compareTo(texto[j])>0){ String aux=texto[i]; texto[i]=texto[j]; texto[j]=aux; } }
public String buscarNota(String t){ int p= buscar(t); if(p==-1) return "No lo encontro"; else return "Se encontro en la posicion "+ p; }
Implemente en el ejercicio anterior lo siguiente: 1. Implemente las opciones para modificar, ordenar y eliminar un elemento del vector 2. Implemente los mtodos para sacar la cantidad de texto ingresados as como el tamao mximo del vector 3. Valide en todas las opciones si el vector esta vaco o si esta lleno. Ejemplo si el vector esta lleno no puede realizar la bsqueda. 4. Modifique su botn de ingresar de tal manera que no ingresen nombres repetidos 5. Implemente la opcin eliminar el primer nombre y el ultimo nombre. 6. Implemente la opcin listado mostrando todos los nombres que comiencen ente A -M
24
Gua de Laboratorio
Sesin
5
Vector de Objetos
25
Gua de Laboratorio
Arreglo
(from domAplicArreg lo) ag reg arElemento(c : int, n : String ) : void sacarElemento(p : int) : String Arreg lo() : void
Frame
(fr om awt)
List
(from a wt)
Frm Arreglo
+objArreglo +objEmpleado[ ]
+LstArreglo
+BtnSalir
+BtnM ostrar +BtnAgregar +TxtNomApell
Button
(from awt)
main(arg[ ] : String ) : void actionPerformed(arg 0 : ActionEvent) : void g uardar() : void mostrar() : void
+LblNomApell
Empleado
(from domProbArreg lo) nomApellidoEmpleado : String codig oEmpleado : int Empleado() g etNomApellEmpleado() : String g etCodig oEmpleado() : int setNomApellEmpleado(nomApell : String ) : void setCodigoEmpleado(codig o : int) : void
+TxtCodigo +LblCodigo
TextField
(from awt)
Label
(from aw t)
import domAplicArreglo.Arreglo; public class FrmArreglo extends Frame { int nro; Arreglo objArreglo; }
public void initialize( ) { // user code begin {2} nro = 5; objArreglo = new Arreglo(nro); // user code end }
public void guardar() { String auxiliar= ivjTxtCodigo.getText(); int c = Integer.valueOf (auxiliar).intValue(); String n = ivjTxtNomApell.getText(); objArreglo.agregarElemento (c,n); ivjTxtCodigo.setText(""); ivjTxtNomApell.setText(""); ivjTxtCodigo.requestFocus(); }
26
Algoritmos y Estructuras de Datos II public void mostrar () { ivjLstArreglo.removeAll(); for (int i=0 ; i < nro ; i ++) { String temp = objArreglo.sacarElemento (i); ivjLstArreglo.add( temp ); } }
Gua de Laboratorio
import domProbArreglo.Empleado; public class Arreglo { public Empleado objEmpleado []; int n; int conta; }
public void agregarElemento (int c, String n) { objEmpleado [conta] = new Empleado (); objEmpleado [conta].setCodigoEmpleado(c); objEmpleado [conta].setNomApellEmpleado(n); conta++; }
public String sacarElemento(int p) { String resultado = objEmpleado[p].getCodigoEmpleado() + " " + objEmpleado[p].getNomApellEmpleado(); return resultado; }
27
Gua de Laboratorio
Package domProbArreglo; public class Empleado { private String nomApellidoEmpleado; private int codigoEmpleado; }
1. 2. 3. 4. 5. 6.
Validar entrada de Cdigos, para que no se repitan (redundancia). Buscar un empleado Por Cdigo. Posteriormente, modificar su Nombre y Apellido. Buscar un empleado Por Cdigo. Realizando el algoritmo de bsqueda binaria. Buscar aquellos empleados con un Cdigo pares. crear un mtodo que valide si el arreglo se objetos esta lleno, entonces mostrar un mensaje correspondiente. Partir el Arreglo en 2 Arreglos. 28
Gua de Laboratorio
29
Gua de Laboratorio
Sesin
6
Listas enlazadas simples
30
Gua de Laboratorio
package guiLisCad; import java.awt.*; import javax.swing.*; import domapliLisCad.*; public class FrmLista extends Frame { Lista objL; . }
private void initialize() { . // user code begin {2} objL=new Lista(); // user code end }
public void btnBuscar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { String t=JOptionPane.showInputDialog("Ingrese texto a buscar"); String msg=objL.buscarTexto(t); JOptionPane.showMessageDialog(null,msg); } public void btnOrdenar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { objL.ordenar(); }
31
Gua de Laboratorio
package domapliLisCad; public class Lista { Elemento cab; } public Lista() { cab=null; }
public void agregarTexto(String t) { Elemento nuevo=new Elemento(); nuevo.info = t; if(cab==null) cab=Nuevo; else{ Elemento p=cab; while(p.sig!=null) p=p.sig; p.sig=nuevo; } } public String sacarTodo() { String listado=""; Elemento p=cab; while(p!=null){ listado+=p.info+"\n"; p=p.sig; } return listado; }
public Elemento buscar(String t) { Elemento p=cab; while(p!=null){ if(p.info.equals(t)) return p; p=p.sig; } return p; } public void ordenar() {
Elemento p,q; p=cab; while(p.sig!=null){ q=p.sig; while(q!=null) { if(p.info.compareTo(q.info)>0){ String aux=p.info; p.info = q.info; q.info = aux; } q=q.sig; } p=p.sig; } }
public String buscarTexto(String t) { if(buscar(t)==null) return "No lo encontro"; else return "Se encontro "; }
32
Gua de Laboratorio
Implemente en el ejercicio anterior lo siguiente: 1. Implemente las opciones para modificar, ordenar e invertir la lista. 2. Implemente los mtodos para sacar la cantidad de texto ingresados as como tambin cualquier texto 3. Valide en todas las opciones si la lista esta vaca. Ejemplo si la lista esta vaca nos e puede realizar la bsqueda. 4. Modifique su botn de ingresar de tal manera que no ingresen nombres repetidos 5. Implemente un botn ingresar que reciba y automticamente los ordene 6. Implemente la opcin eliminar el primer nombre y el ultimo nombre. 7. Genere 2 listas una de los nombres cuya cantidad de caracteres sea 5 o menos y otra donde sea mayor a 5.
33
Gua de Laboratorio
Sesin
7
Lista simple de objetos
Desarrolle un programa para guardar los datos de varios clientes en una Lista simple.
34
Gua de Laboratorio
import java.awt.*; import domAplicLista.*; public class FrmLista extends Frame { String aux1; double aux2; ListaSimple objLista; }
public void btnAdiciona_ActionEvents() { aux1 = ivjtxtNombre.getText(); aux2 = Double.parseDouble(ivjtxtSueldo.getText()); objLista.agregaElemento(aux1, aux2); ivjtxtNombre.setText(""); ivjtxtSueldo.setText(""); ivjtxtNombre.requestFocus(); }
public void agregaElemento(String a, double b) { Elemento nuevo, p; nuevo = new Elemento(); nuevo.info.setNombre(a); nuevo.info.setSueldo(b); nuevo.sig = null; if(cabecera == null) cabecera = nuevo; else { p = cabecera; while (p.sig != null) p = p.sig; p.sig = nuevo; } }
public String muestra() { String cad = ""; Elemento p = cabecera; while (p != null) { cad = cad + p.info.getNombre() + " " + p.info.getSueldo() + "\n"; p = p.sig; } return cad; }
35
Gua de Laboratorio
import domProbLista.*; public class Elemento { public Empleado info; public Elemento sig; }
1. 2.
Mostrar la lista invertida Realizar un quiebre a la lista, teniendo en cuenta que ambas listas deben tener igual numero de empleados.
36
Gua de Laboratorio
37
Gua de Laboratorio
Sesin
10
Estructuras LIFO
Implementacin de una Pila de empleados en un Vector.
38
Gua de Laboratorio
package guiPila; import domapliPila.*; public class FrmPila extends.Frame { Pila objPila; }
private void initialize() { . // user code begin {2} objPila=new Pila(5); // user code end }
public void btnApilar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { String nom=ivjTxtNombre.getText(); double sue=Double.parseDouble(ivjTxtSueldo.getText()); objPila.agregarElemento(nom,sue); String listado=objPila.mostrar(); ivjTxtASalida.setText(listado); ivjTxtNombre.setText(""); ivjTxtSueldo.setText(""); ivjTxtNombre.requestFocus(); }
package domaplicPila; import domproPila.*; public class Pila { Empleado a[]; int cima; }
public void agregarElemento(String nom, double sue) { Empleado tmp=new Empleado(); tmp.setNombre(nom); tmp.setSueldo(sue); cima++; a[cima]=tmp; }
public String eliminarElemento() { if(estaVacio()==true) return "Pila vacia"; else{ cima--; return "Se elimino"; } }
39
Gua de Laboratorio
public boolean estaVacio() { if(cima<0) return true; else return false; } public int tamao() { return (cima+1); }
public String mostrar() { String listado=""; Empleado tmp[]=a; int tmpcima=cima,i=0; while(estaVacio()==false){ Empleado x=ultimo(); listado=listado+x.getNombre()+"\t"+x.getSueldo()+"\n"; eliminarElemento(); } a=tmp; cima=tmpcima; return listado; }
package domprobPila; public class Empleado { public.String nombre; public double sueldo;
40
Gua de Laboratorio
Sesin
11
Estructuras FIFO
Implementacin de una Cola de empleados en una Lista simple.
41
Gua de Laboratorio
package guiCola; import domApliCola.*; public class FrmCola extends.Frame { Cola objCola; }
private void initialize() { . // user code begin {2} objCola=new Cola(5); // user code end }
public void btnIngresar_ActionPerformed( ) { String nom = ivjTxtNombre.getText(); double suel = Double.parseDouble(ivjTxtSueldo.getText()); objCola.agregarElemento(nom,suel); ivjTxtNombre.setText(""); ivjTxtSueldo.setText(""); ivjTxtNombre.requestFocus(); }
public void btnAtender_ActionPerformed( ) { ivjTxa1.setText(" "); String cad = objCola.eliminarElemento(); ivjTxa1.append(cad); ivjTxtNombre.requestFocus(); }
public void btnMostrar_ActionPerformed() { ivjTxa1.setText(" "); String cad = objCola.mostrar(); ivjTxa1.append(cad); ivjTxtNombre.requestFocus(); }
package domApliCola; public class Cola { public Elemento primero; public Elemento ultimo; }
42
Algoritmos y Estructuras de Datos II public void agregarElemento(String nom, double suel) { Elemento nuevo = new Elemento(); nuevo.info.setNombre(nom); nuevo.info.setSueldo(suel); nuevo.sig = null; if(primero == null) primero = nuevo; else ultimo.sig = nuevo; ultimo = nuevo; } public String eliminarElemento() { String datos; Elemento p = primero; if(p==null) return "Cola vaca";
Gua de Laboratorio
public String mostrar() { String cad = ""; Elemento p = primero; while(p != null) { cad = cad + p.info.getNombre()+" "+p.info.getSueldo()+"\n"; p = p.sig; } return cad; }
package domApliCola; import domprobcola.*; public class Elemento { public Empleado info; public Elemento sig; }
43
Gua de Laboratorio
package domprobPila; public class Empleado { public.String nombre; public double sueldo; }
44
Gua de Laboratorio
Sesin
12
Recursividad
Teniendo en cuenta el Programa desarrollado en la Sesin 6- Lista Simple, se implementarn mtodos recursivos.
45
Gua de Laboratorio
import domAplicLista.*; public class FrmListaCliente extends Frame { ListaCliente objLista; } public void contarElementos() { Elemento p= objLista.cabecera; ivjLstLista.add(("Contados: "+objLista.contar(p)+" registrados")); }
) );
7.
Permitir el registro de: Edad de Cliente. Origen de Cliente (Nacional/Extranjero). Empleando un componente CheckBox. Completar el cdigo para la implementacin de los botones: Calcula Promedio, el cual calcula el promedio de Edades de los clientes registrados. Mostrar Extranjeros, el cual muestra solo aquellos clientes, de origen extranjero. Extraer de la Lista, en una nueva Lista, aquellos Clientes con cdigo par.
8.
9.
public void guardarSig( Elemento cabecera) public Elemento sacarSig() { { 46 sig; sig=cabecera; return } }
Gua de Laboratorio
Sesin
rboles binarios
13
47
Gua de Laboratorio
public void btnGuardar() { String aux1 = ivjtxtNombre.getText(); double aux2 = Double.parseDouble(ivjtxtSueldo.getText()); objArbol.agregarNodo(aux1,aux2); ivjtxtNombre.setText(""); ivjtxtSueldo.setText(""); ivjtxtNombre.requestFocus(); }
public void btnMostrar() { ivjTxaNumero.setText(""); ElementoArbol p = objArbol.raiz; ivjTxaNumero.append("En PRE-ORDEN : \n"); ivjTxaNumero.append(objArbol.preOrden(p) + "\n"); ivjTxaNumero.append("En IN-ORDEN : \n"); ivjTxaNumero.append(objArbol.inOrden(p) + "\n"); ivjTxaNumero.append("En POST-ORDEN : \n"); ivjTxaNumero.append(objArbol.postOrden(p) + "\n"); }
private void initialize() { // user code begin {2} objArbol = new Arbol(); // user code end }
public class Arbol public void agregarNodo(String nom,double suel) { { public ElementoArbol raiz; ElementoArbol nuevo, p, q; } nuevo = new ElementoArbol(); public Arbol() nuevo.info.setNombre(nom); { nuevo.info.setSueldo(suel); raiz = null; if(raiz == null) } raiz = nuevo; else { public String inOrden( ElementoArbol p) p = q = raiz; { while(q != null) if(p != null) { return inOrden(p.izq) + " " + p = q; p.info.getNombre() + "\n" + if (nuevo.info.getNombre() inOrden(p.der ); .compareTo(p.info.getNombre()) < 0) return ""; q = p.izq; } else q = p.der; } public String postOrden( ElementoArbol p) if(nuevo.info.getNombre().compareTo { (p.info.getNombre()) < 0) if(p != null) p.izq =nuevo; return postOrden(p.izq) + else postOrden(p.der) + 48 p.der= nuevo; p.info.getNombre() + "\n"; } return ""; } }
Gua de Laboratorio
import domProbArbol.*; public class ElementoArbol { public ElementoArbol izq, der; public Empleado info; } public ElementoArbol() { izq = der = null; info = new Empleado(); }
1. 2.
Realizar el mtodo agregarNodo de forma recursiva. Implementar un Botn que permita eliminar un empleado cualesquiera
49
Gua de Laboratorio
50
Gua de Laboratorio
Sesin
14
Archivos planos
51
Gua de Laboratorio
Package guiarchivo; import domaplicArchivo.*; public class FrmEmpleado extends Frame { ArregloArchivo objA; }
private void initialize() { . // user code begin {2} objA=new ArregloArchivo(); // user code end }
public void btnAdicionar_ActionPerformed( ) { String cod=ivjTextField1.getText(); String nom=ivjTextField2.getText(); objA.agregar(cod,nom); ivjTextField1.setText(""); ivjTextField2.setText(""); ivjTextField1.requestFocus(); }
public ArregloArchivo() { nroCampos=2; longCampo=new int[nroCampos]; longCampo[0]=4; longCampo[1]=15; Emp=new Archivo(nroCampos, longCampo); Emp.abrirArchivo(ubica,nombre,acceso); }
package domAplicArchivo; import utilitario.*; public class ArregloArchivo { public int nroCampos, longCampo[]; public String ubica="C:\\Alg2\\"; public String nombre="Empleados.txt"; public String acceso="rw"; public Archivo Emp; }
52
Gua de Laboratorio
public void agregar(String cod,String nom) { Emp.campo[0]=cod; Emp.campo[1]=nom; Emp.uneCampos(); Emp.apertura(); Emp.grabaReg(); }
public String sacar() { String cad="",registro; Emp.apuntar(1); while(!Emp.eof()) { registro=Emp.leeReg(); Emp.separaCampos(); cad=cad+Emp.campo[0]+" "+Emp.campo[1]; } return cad; }
53
Gua de Laboratorio
Archivo(int, int [ ])
es el constructor. Recibe el nmero de campos que contiene cada registro y un array con la longitud de cada campo.
2.
3.
aperturar( )
se utiliza para adicionar un nuevo registro al archivo.
4.
apuntar(int)
ubica el puntero de archivo en el registro cuya posicin recibe como parmetro.
5.
calcularLonReg( )
este mtodo suma la longitud de cada campo y devuelve la longitud total del registro.
6.
cerrarArchivo( )
con este mtodo se cierra el archivo.
7.
completarEspacios(String, int)
recibe el dato que se va a asignar al campo y la longitud de dicho campo. Si la longitud del dato es menor a la longitud que debe tener el campo, completa los caracteres que falta con espacios en blanco.
8.
eof( )
devuelve true solo si el puntero de archivo se encuentra al final del mismo. Caso contrario devuelve false.
9.
grabarReg( )
graba un registro en el archivo.
10.
leerReg( )
lee un registro del archivo y lo devuelve como una cadena de caracteres.
11.
separarCampos( )
separa los campos del registro ledo y los coloca como elementos del array campo[ ].
12.
totalRegs( )
devuelve la cantidad total de registros que tiene el archivo.
13.
unirCampos( )
une los campos para formar el registro que, posteriormente, se grabar en el archivo.
54
Gua de Laboratorio
Anexo
A
Estndares de Programacin
1. Denominacin de proyectos El nombre de un proyecto empezar con el prefijo Pry, seguido de un nombre significativo. Ejemplos: PryPlanillas PryListaClientes
2. Denominacin de paquetes El nombre de un paquete estar en minsculas. Si esta compuesto por varias palabras, cada una de ellas empezar con mayscula, excepto la primera. Ejemplos: librera dominioDeLaAplicacin
El nombre del paquete Dominio del problema, estar formado por el prefijo domProb, seguido de la parte ms significativa del nombre del proyecto. Ejemplo: si el nombre del proyecto es entonces el nombre del paquete ser PryListaClientes domProbListaCli
El nombre del paquete Dominio de la aplicacin, estar formado por el prefijo domAplic, seguido de la parte ms significativa del nombre del proyecto. Ejemplo: si el nombre del proyecto es entonces el nombre del paquete ser PryListaClientes domAplicListaCli
El nombre del paquete Interface Grafica de Usuario, estar formado por el prefijo gui, seguido de la parte ms significativa del nombre del proyecto. Ejemplo: si el nombre del proyecto es entonces el nombre del paquete ser PryListaClientes guiListaCli
3. Denominacin de clases El nombre de una clase empezar con una letra mayscula seguido de minsculas. Si esta compuesto por varias palabras, cada una de ellas empezar con mayscula. Ejemplos: Empleado TipoDeMamifero
4. Denominacin de variables y mtodos El nombre para las variables y mtodos debe estar en minsculas. Ejemplos: Excepciones: * El nombre del mtodo constructor siempre empezar con mayscula. * Si el nombre de la variable mtodo esta compuesto por varias palabras, cada una de de ellas empezar con mayscula, excepto la primera. Ejemplos: int fechaDeNacimiento; public void deduceImpuesto( ) int edad; public void modificar( )
55
Gua de Laboratorio
5. Uso de las llaves Las llaves indican el inicio y fin de un bloque; deben ser colocadas en el lado izquierdo del cdigo. public void buscar( ) { } if( ) { } for( ) { }
6. Indentacin (sangrado) Utilizar la tecla TAB(tabulador) para la indentacin de una lnea. public void buscar( ) { while( ) { if( ) { } } } 7. Denominacin de los objetos El nombre de un objeto debe empezar con el prefijo obj, seguido de las tres cuatro primeras letras del nombre de la clase a la cual pertenece. Ejemplo: instanciar la clase Empleado. objEmp
8. Denominacin de los prefijos Los prefijos para los componentes visuales tendrn la siguiente denominacin: Componente Applet Frame Dialog Label TextField Button List TextArea Panel Choice CheckBox CheckBoxGroup MenuBar Menu MenuItem Prefijo App Frm Dlg Lbl Txt Btn Lst Txa Pnl Chc Chk Chg Mnb Mnu Mni Ejemplo__________ AppArreglos FrmArchivos DlgMensaje LblNombre TxtPrecio BtnMostrar LstClientes TxaListado PnlConsultas ChcProfesiones ChkCodigo ChgSexo MnbPrincipal MnuActualizacion MniEliminar
56
Gua de Laboratorio
Anexo
B
Cuadros de Dialogo
La clase JOptionPane consta de mtodos que permiten mostrar diferentes cuadros de dialogo, tanto para el ingreso de datos como para mostrar un determinado mensaje. Esta ubicado en el paquete javax.swing
showInputDialog( )
Este mtodo muestra un cuadro de dialogo para ingresar un dato. Devuelve un valor de tipo String. SINTAXIS: EJEMPLO: public static void main(String args[ ]) { String cad; cad = JOptionPane.showInputDialog (Ingrese un dato); } showInputDialog(mensaje)
showMessageDialog( )
Muestra un cuadro de dialogo con un determinado mensaje. No devuelve valor. SINTAXIS: TIPO DE MENSAJE: JOptionPane.PLAIN_MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE JOptionPane.ERROR_MESSAGE EJEMPLO: public static void main(String args[ ]) { JOptionPane.showMessageDialog(null, El programa ha terminado, Facturacin, JOptionPane.PLAIN_MESSAGE); } showMessageDialog(componente, mensaje, titulo, tipo de mensaje)
57
Gua de Laboratorio
showOptionDialog( )
Muestra un cuadro de dialogo con una pregunta para el usuario. Devuelve un valor de tipo int. SINTAXIS: TIPO DE MENSAJE: JOptionPane.YES_NO_OPTION JOptionPane.YES_NO_CANCEL_OPTION JOptionPane.OK_CANCEL_OPTION EJEMPLO: public static void main(String args[ ]) { int rpta = JOptionPane.showOptionDialog (null, Se eliminar el registro ! \n est seguro ?, Inventario, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); } showOptionDialog(componente, mensaje, titulo, tipo d opcin, tipo d mensaje, icono, opciones en componente, opcin sealada)
OTRO EJEMPLO: public static void main(String args[ ]) { int rpta = JOptionPane.showOptionDialog (null, Los datos han sido modificados \n desea guardar los cambios ?, Planillas, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); }
POSIBLES VALORES:
58
Gua de Laboratorio
Anexo
C
Programas recursivos
Desarrolle una aplicacin para convertir un nmero a Base 16.
import java.awt.*; public class FrmCambiar extends Frame . { char lbase[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; } public void btnCambiar_ActionEvents( ) { int n=Integer.parseInt(ivjTxtNumero.getText()); String hexadecimal=cambiarBase(n); ivjTxtSalida.setText(El numero +n); ivjTxtSalida.append( en base 16 es :+hexadecimal); }
public String cambiarBase(int num) { if(num==0) return ""; else return cambiarBase(num/16)+ ""+lbase[num%16]; }
59
Gua de Laboratorio
Desarrolle una aplicacin que reciba un nmero entero y muestre lo siguiente: Cantidad de dgitos Suma de dgitos
import java.awt.*; public class FrmDigitos extends Frame .. { } public int cantidadDigitos(int num) { if(num==0) return 1; else return 1 + cantidadDigitos(num/10); }
public void btnCantidad_ActionEvents() { int n=Integer.parseInt(ivjTxtNumero.getText()); int cantidad=cantidadDigitos(n); ivjTxtSalida.setText(El numero +n); ivjTxtSalida.append( La cantidad de digitos es :+cantidad); }