Está en la página 1de 60

Algoritmos y Estructuras de Datos II

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.

Disee y construya la siguiente aplicacin

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Aparecer la siguiente ventana:

Para definir que la interfaz sea Applet debe en la Superclass colocar Applet si no lo encuentra busquela haciendo click en Browse

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Dle click en botn Finsh y aparecer la siguiente ventana

Paleta Explorador de paquetes

Ventana de la Composicin Visual

Ventana del Editor

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Caja de Texto: TextField Etiqueta: Label

Botn: Button rea de Texto: TextField

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Aparecer en la ventana del editor el mtodo asociado al Boton , completar con lo siguiente:

Hacer lo mismo con el botn Salir

1. Seleccione su Clase y dele

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

2
Componentes AWT

Frame

Button

ox

Checkbox

Label Choice

Choice

TextField TextArea

Algoritmos y Estructuras de Datos II

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.

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

CLIENTES : Label usado para indicar el contenido del TextField

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

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

UML con Rational Rose

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

Algoritmos y Estructuras de Datos II

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.

nombre del paquete

nombre del diagrama

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

paquete desde el cual se importo

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)

TIPOS DE RELACIONES ENTRE CLASES 1. Generalization 2. Association 3. Aggregation en el ToolBox

16

Algoritmos y Estructuras de Datos II ASIGNAR NOMBRE A UNA RELACION

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

Algoritmos y Estructuras de Datos II

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

2. Clic aqu para indicar la carpeta.

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

Algoritmos y Estructuras de Datos II

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

2. Clic aqu para indicar la carpeta.

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

4
Vector de cadenas

En Rational Rose, construya los correspondientes Diagramas de Clases y Paquetes.

22

Algoritmos y Estructuras de Datos II

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); }

public void btnOrdenar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { objA.ordenar(); }

public void btnMostrar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { String listado=objL.sacarTodo(); ivjTxtASalida.setText(listado); }

23

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

5
Vector de Objetos

Desarrolle un programa para guardar los datos de Empleado en un Arreglo de Objetos.

25

Algoritmos y Estructuras de Datos II

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[ ]

(from g uiArreg lo)

+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(); }

public void salir () { System.exit(0); }

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 Arreglo(int x) { n=x; objEmpleado =new Empleado[n]; conta=0; }

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Package domProbArreglo; public class Empleado { private String nomApellidoEmpleado; private int codigoEmpleado; }

public void setCodigoEmpleado(int codigo) { codigoEmpleado = codigo; }

public void setNomApellEmpleado(String nomApell) { nomApellidoEmpleado = nomApell; }

public int getCodigoEmpleado() { return codigoEmpleado; }

public String getNomApellEmpleado() { return nomApellidoEmpleado; }

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

29

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

6
Listas enlazadas simples

En Rational Rose, construya los correspondientes Diagramas de Clases y Paquetes.

30

Algoritmos y Estructuras de Datos II

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 btnIngresar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { String t=ivjTxtTexto.getText(); objL.agregarTexto(t); ivjTxtTexto.setText(""); }

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(); }

public void btnMostrar_ActionPerformed(java.awt.event.ActionEvent actionEvent) { String listado=objL.sacarTodo(); ivjTxtASalida.setText(listado); }

31

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public class Elemento { public String info; public Elemento sig; }

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

7
Lista simple de objetos
Desarrolle un programa para guardar los datos de varios clientes en una Lista simple.

34

Algoritmos y Estructuras de Datos II

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 btnMuestra_ActionEvents() { String aux3 = objLista.muestra(); ivjTextArea1.setText(aux3); }

private void initialize() { ............. objLista = new ListaSimple(); }

public class ListaSimple { Elemento cabecera; }

public ListaSimple() { cabecera = null; }

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

import domProbLista.*; public class Elemento { public Empleado info; public Elemento sig; }

public Elemento() { info = new Empleado(); }

public class Empleado { private String nombre; private double sueldo; }

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

37

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

10
Estructuras LIFO
Implementacin de una Pila de empleados en un Vector.

En Rational Rose, construya los correspondientes Diagramas de Clases y Paquetes.

38

Algoritmos y Estructuras de Datos II

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(); }

public void btnDesapilar_ActionPerformed( ) { ivjTxtASalida.setText(""); String cad = objPila.eliminarElemento(); ivjTxtASalida.append(cad); }

public void btnSalir_ActionPerformed( ) { System.exit(0); }

package domaplicPila; import domproPila.*; public class Pila { Empleado a[]; int cima; }

public Pila(int n) { a=new Empleado[n]; cima=-1; }

public Empleado ultimo() { return a[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

Algoritmos y Estructuras de Datos II

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;

public void setNombre(String nom) { nombre = nom; }

public void setSueldo(double sue) { sueldo = sue; }

public String getNombre() { return nombre; }

public double getSueldo() { return sueldo; }

Implemente en el ejercicio anterior lo siguiente:


1. 2. 3. Ingresar un valor de tal forma que el numero que se ingrese sea mayor al que se encuentra en la cima. Hallar el promedio de todos los nmeros se van desapilando. Implementar el programa en listas simples.

40

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

11
Estructuras FIFO
Implementacin de una Cola de empleados en una Lista simple.

En Rational Rose, construya los correspondientes Diagramas de Clases y Paquetes.

41

Algoritmos y Estructuras de Datos II

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; }

public Cola() { primero = ultimo = null; }

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

datos = p.info.getNombre()+" "+p.info.getSueldo(); primero = p.sig; p = null; return datos; }

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; }

public Elemento() { info = new Empleado(); }

43

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

package domprobPila; public class Empleado { public.String nombre; public double sueldo; }

public void setNombre(String nom) { nombre = nom; }

public String getNombre() { return nombre; }

public void getSueldo(double sue) { sueldo = sue; }

public double getSueldo() { return sueldo; }

Implemente en el ejercicio anterior lo siguiente:


1. 2. Implemente Colas a Bicolas. Hallar la diferencia del sueldo del empleado que esta primero en la Cola respecto con el empleado que est ltimo en la Cola.

44

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

12
Recursividad

Teniendo en cuenta el Programa desarrollado en la Sesin 6- Lista Simple, se implementarn mtodos recursivos.

45

Algoritmos y Estructuras de Datos II

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")); }

public int contar(Elemento p) { if (p == null) return 0; else return (1 + ( contar(p.sacarSig( ) ) }

) );

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 } }

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

rboles binarios

13

47

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

import domAplicArbol.*; public class FrmArbol extends Frame { Arbol objArbol; }

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 ""; } }

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

50

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

14
Archivos planos

En Rational Rose, construya los correspondientes Diagramas de Clases y Paquetes.

51

Algoritmos y Estructuras de Datos II

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 void btnSalir_ActionPerformed( ) { objA.cerrar(); System.exit(0); }

public void btnMostrar_ActionPerformed( ) { ivjTextArea1.setText(""); ivjTextArea1.append(objA.sacar()); }

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

Algoritmos y Estructuras de Datos II

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 void cerrar() { Emp.cerrarArchivo(); }

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; }

Implemente en el ejercicio anterior lo siguiente:


1. 2. 3. 4. Mostrar el contenido del archivo en orden inverso (del ltimo al primer registro). Validar el cdigo del empleado. Mostrar el nombre del empleado con el mayor sueldo. Mostrar a los empleados en orden alfabtico ( listado por nombre).

53

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Mtodos de la clase Archivo


1.

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.

abrirArchivo(String, String, String)


permite abrir el archivo. Recibe como parmetros: la ubicacin del archivo, su nombre y el modo de acceso (solo lectura, solo escritura o lectura-escritura).

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

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

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

Profesores: Wilbe Cerdn y Juan Vera.

56

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

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:

Si clic en el botn Entonces rpta igual a .. Yes No x Cancel 0 1 1 2

Profesores: Wilbe Cerdn y Gisela Guzmn.

58

Algoritmos y Estructuras de Datos II

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

Algoritmos y Estructuras de Datos II

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); }

En la Lista de Empleados, calcular el nmero de elementos y la suma de sueldos.

Profesora: Jessica Paulino. 60

También podría gustarte