You are on page 1of 55

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

INDICE
Sesin 1: Sesin 2: Sesin 3: Sesin 4: Sesin 5: Sesin 6: Sesin 7: Sesin 8: Construccin de Interfaces graficas con VE Arreglo de Objetos Arreglo de Objetos Lista Simple Lista Simple Lista dobles Lista Circular Pila

Sesin 10: Cola Sesin 11: Recursividad Sesin 12: rboles Sesin 13: Manejo de archivos Sesin 14: Aplicaciones JDBC Sesin 15: Repaso del curso Sesin 16: Examen Final

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

1
Desarrollo de Interfaz Graficas usando Visual Editor
Objetivos
Desarrollar interfaces graficas utilizando los contenedores principales JFrame y JApplet Conocer y utilizar los componentes swing mas generales

Disee y construya la siguiente aplicacin

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Funcionalidad
Ingresar el codigo y nombre del empleado en la caja de Texto y luego: Al hacer click en el botn Ingresar, 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: Se creara un proyecto con el nombre: PrySemana1 Dentro del proyecto se creara un paquete llamado gui Dentro del paquete gui se creara la Clase: AppEmpleado de la siguiente manera Utilice la barra de botones de acceso rpido del Eclipse Aparecer la siguiente ventana:

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

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 jContentPane la propiedad del Layout (administrador de Diseo) por null. Cada vez que agregamos un componente al JApplet el editor va cambiando de contenido Caja de Texto: JTextField

Etiqueta: JLabel

Botn: JButton

rea de Texto: JTextField

Modificamos los valores por defectos que tiene los componentes en la ventana de Propiedades JLabel: Field name: lblNombre Text : nombre
4

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

JTextField: Field name: txtNombre JButton: Field name: btnAceptar Text : Aceptar Field name: btnSalir Text : Salir JTextArea: Field name: txtASalida JScrollPane: Field name: scr1

1. Procedemos a la programacin de los eventos

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

Desarrollar el siguiente codigo: int codigo=Integer.parseInt(txtcodigo.getText()); String nombre=txtNombre.getText(); txtASalida.setText(codigo+ + nombre);

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

( *) Para colocar el color de fondo los componentes tiene que tener la propiedad opaque en true

1. Seleccione su Clase y dele

2. Al importar seleccione File System y contiene la exportacin tal y como la aprendio en el curso anterior

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Desarrolle una aplicacin utilizando Jframe para una ventana de Login

( *) Las imgenes a colocar en el proyecto exprtelos como archivos y colocadas en la propedad icon

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

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

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.

10

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Articulo nombre : String precio : double setNombre(n : String) : void setPrecio(p : double) : void getNombre() : String getPrecio() : double

Modos de acceso privado candado publico protegido

smbolo

rectngulo llave

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.

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.

11

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Diagrama de Clases
Crear un paquete llamado diseo, construir el siguiente diagrama de clases dentro de dicho paquete.

Persona
nombre : String edad : int inicializar()

Computadora

Empleado
ruc : String

Mouse

Teclado

TIPOS DE RELACIONES ENTRE CLASES

en el ToolBox

1. Generalization 2. Association 3. Aggregation ASIGNAR NOMBRE A UNA RELACION 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

12

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

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 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.
: Ventana : Articulo

guardarNombre(String)

Ventana( )

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

13

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

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. VERIFICANDO EL PROCESO Verificar desde el Explorador de Windows el cdigo generado para la clase Artculo.

14

Algoritmos y Estructuras de Datos II

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.

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

15

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

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. 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:

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.

16

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

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.

17

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

2
Arreglo de Objetos
Objetivos
Desarrollo de Clase como nuevos tipos de Datos Desarrolla aplicaciones que utilicen arreglo de objetos

Desarrolle una aplicacin que ingrese y almacene los datos de empleados. Los datos de empleado son: cdigo y nombre

18

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

(Desarrolle el modelamiento correspondiente)

package dompro; public class Empleado { private int codigo; private String nom; } public void setCodigo(int codigo) { this.codigo = codigo; } public void setNom(String nomApell) { nom = nomApell; } public int getCodigo() { return codigo; }

public String getNom() { return nom; } import dompro.Empleado; public class Arreglo { public Empleado objEmpleado []; int conta; } public Arreglo(int n) { objEmpleado =new Empleado[n]; conta=0; }

19

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public void agregarElemento (int c, String n) { objEmpleado [conta] = new Empleado (); objEmpleado [conta].setCodigo(c); objEmpleado [conta].setNom(n); conta++; } public String sacarTodos( ) { String temp= ; for (int i=0 ; i < conta ; i ++) { temp = temp+objEmpleado[i].getCodigo() + " " + objEmpleado[i].getNom(); } return temp; }

import domapli.Arreglo; public class FrmArreglo extends JFrame { Arreglo objArreglo; } public void initialize( ) { // user code begin {2} objArreglo = new Arreglo(5); // user code end } public void btn_guardar() { int c = Integer.valueOf (txtCodigo.getText()).intValue(); String n = txtNombre.getText(); objArreglo.agregarElemento (c,n); txtCodigo.setText(""); txtNomApell.setText(""); txtCodigo.requestFocus(); } public void btn_mostrar () { String resultado= objArreglo.sacarTodos(); txtASalida.setText(resultado); } public void salir () { System.exit(0); }

20

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

1. 2. 3. 4.

Modificar el cdigo de botn ingresar de tal manera que el cdigo no se repita Implemente el botn modificar, el cual permita modificar todos los datos del empleado excepto el cdigo Implemente el botn Listado cdigo pares, el cual buscara y mostrara lo datos del los empleados cuyo cdigo sea par. Crear un mtodo que permita que el arreglo sea ilimitado.

21

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

3
Arreglo de Objetos
Objetivos
Desarrollo de Clase como nuevos tipos de Datos Desarrolla aplicaciones que utilicen arreglo de objetos

Desarrolle una aplicacin que almacene y muestre los datos de los trabajadores de una empresa textil. Considere que los datos son: cdigo (autogenerado), nombre y el sueldo.

Del ejercicio anterior, aumente el dato fecha de Ingreso y modifique el programa

Del ejercicio anterior, adiciones las siguientes opciones: - Eliminar por codigo - Listado ordenado por nombre - Reporte: Datos del trabajador con mayor sueldo Datos del trabajador con ms antigedad

22

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

Lista simple de objetos


Objetivos

Desarrollo de Clase como nuevos tipos de Datos Que el alumno desarrolle aplicaciones usando como estructura de Datos una Lista simple

Desarrolle una aplicacin que almacene nmeros entero en una lista simple. Considere en la aplicacin las siguientes operaciones: Ingreso al inicio Ingreso al final Eliminar el primero Eliminar el ultimo Listado Generar lista

Completar el modelamiento

23

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public class Elemento { private int numero; public Elemento sig; public Elemento(){ } public Elemento(int n){ numero=n; sig=null; } public int getNumero() { return numero; } public void setNumero(int numero) { this.numero = numero; } } public class Lista { public Elemento cab; public Lista(){ cab=null; } public void agregarInicio(int n){ Elemento nuevo=new Elemento(n); nuevo.sig=cab; cab=nuevo; } public void agregarFinal(int n){ Elemento nuevo=new Elemento(n); if(cab==null) cab=nuevo; else{ Elemento aux=cab; while(aux.sig!=null) aux=aux.sig; aux.sig=nuevo; } } public void eliminarInicio(){

24

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

if(cab!=null) cab=cab.sig; } public void eliminarFinal(){ if(cab!=null){ Elemento aux=cab; while(aux.sig.sig!=null) aux=aux.sig; aux.sig=null; } } public void generarLista(){ cab=null; for(int i=0;i<10;i++){ int n=(int)((100)*Math.random()+1); agregarFinal(n); } } public String sacarTodos(){ String listado=""; for(Elemento p=cab;p!=null;p=p.sig){ listado+=p.getNumero()+"\n"; } return listado; } }

25

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

Lista simple de objetos


Objetivos

Desarrollo de Clase como nuevos tipos de Datos Que el alumno desarrolle aplicaciones usando como estructura de Datos una Lista simple

Desarrolle un programa para guardar los datos de varios empleados en una Lista simple. Los datos a guardar son: nombre y sueldo

FrmListaSimple
agregar() mostrar() salir() main()

Empleado ListaSimple +objLista


agregarElemento() sacarElemento() sacarTodos()

+cab

Elemento +sig

+info

nombre : String sueldo : double setNombre() getNombre() setSueldo() getSueldo()

Completar el modelamiento de la Ventana


26

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

package dompro; public class Empleado{ private String nombre; private double sueldo; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setSueldo(double sueldo){ this.sueldo = sueldo; } public double getSueldo(){ return sueldo; } package domapli; import dompro.*; public class Elemento { public Empleado info; public Elemento sig; } public Elemento(){ info = new Empleado(); }

27

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

package domapli; import dompro.*; public class ListaSimple{ public 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 sacarTodos(){ String cad = ""; Elemento p = cabecera; while (p != null){ cad = cad + p.info.getNombre() + " " + p.info.getSueldo() + "\n"; p = p.sig; } return cad; } package gui; import java.awt.*; import domAplicLista.*; public class FrmLista extends Frame{ ListaSimple objLista; }
28

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

private void initialize(){ ............. objLista = new ListaSimple(); } // programacion de los botones public void agregar(){ String aux1 = txtNombre.getText(); double aux2 = Double.parseDouble(txtSueldo.getText()); objLista.agregaElemento(aux1, aux2); txtNombre.setText(""); txtSueldo.setText(""); txtNombre.requestFocus(); } public void mostrar(){ String aux3 = objLista.sacarTodos(); txtASalida.setText(aux3); }

Disee un programa para almacenar el cdigo y el nombre de los trabajadores de una fbrica Textil. . Adems el programa deber contener las siguientes operaciones bsicas: - Agregar final - Agregar Inicio - Cantidad - Buscar por cdigo - Eliminar primero - Eliminar ultimo - Eliminar mayor - Ordenar por cdigo Al ejercicio anterior, aadir el turno (1=maana, 2=tarde y 3=noche). Agregue al programa las siguientes opciones: - Trasladar el primero al final - Eliminar el elemento central - Reporte - Porcentaje del turno maana y noche - Listado con el trabajador del turno tarde con mayor codigo

29

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

6
Listas Dobles
Objetivos
Desarrollo de Clase como nuevos tipos de Datos Que el alumno desarrolle aplicaciones usando como estructura de Datos una Lista dobles aplicando los conceptos aprendidos en clase

Desarrolle un programa para guardar los datos de varios empleados en una Lista doble. Los datos a guardar son: cdigo, nombre y sueldo

Desarrolle el modelamiento

30

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public class Empleado{ private int codigo; private String nombre; private double sueldo; } public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setSueldo(double sueldo){ this.sueldo = sueldo; } public double getSueldo(){ return sueldo; } import dompro.*; public class Elemento { public Empleado info; public Elemento sig,ant; } public Elemento(){ info = new Empleado(); ant=sig=null; }

31

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

import dompro.*; public class ListaDoble{ public Elemento cab; public ListaDoble(){ cab=null; } } public void agregarElementoFinal(int codigo,String n,double s){ Elemento nuevo=new Elemento(); nuevo.info.setCodigo(codigo); nuevo.info.setNombre(n); nuevo.info.setSueldo(s); if(cab==null) cab=nuevo; else{ Elemento aux=cab; while(aux.sig!=null) aux=aux.sig; aux.sig=nuevo; nuevo.ant=aux; } } public Elemento buscarCodigo(int c){ for(Elemento aux=cab;aux!=null;aux=aux.sig) if(aux.info.getCodigo()==c) return aux; return null; } public String sacarTodos(){ String listado=""; Elemento aux=cab; while(aux!=null){ listado+=aux.info.getCodigo()+" "+ aux.info.getNombre()+" "+aux.info.getSueldo()+"\n"; aux=aux.sig; } return listado; } import java.awt.*; import domapli.*; public class FrmListaDoble extends JFrame {
32

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

ListaDoble objListaDob; } private void initialize(){ .. objListaDob = new ListaDoble(); } public void agregar(){ String c=txtCodigo.getText(); String nombre=txtNombre.getText(); String sueldo=txtSueldo.getText(); if(c.equals("")||nombre.equals("")|| sueldo.equals("")) JOptionPane.showMessageDialog(null,"Campos vacios"); else{ int codigo=Integer.parseInt(c); if(objListaDob.buscarCodigo(codigo)==null){ double s=Double.parseDouble(sueldo); objListaDob.agregarElementoFinal(codigo,nombre,s); } else JOptionPane.showMessageDialog(null,"Codigo repetido"); } // limpiar cajas de texto txtCodigo.setText(""); txtNombre.setText(""); txtSueldo.setText(""); txtCodigo.requestFocus(); } public void mostrar() { String aux3 = objListaDob.muestra(); textArea.setText(aux3); } public void salir() { System.exit(0); }

1.- Implementar los botones propuestos en la aplicacin. 2.- En el botn Reporte muestre la cantidad de elementos ingresados y los datos del empleado con mayor sueldo.
33

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

Listas Circulares
Objetivos

Desarrollo de Clase como nuevos tipos de Datos Que el alumno desarrolle aplicaciones usando como estructura de Datos una Lista circular aplicando los conceptos aprendidos en clase

Desarrolle un programa para guardar los datos de varios empleados en una Lista simple. Los datos a guardar son: nombre y sueldo

FrmListaCircular
agregar() mostrar() salir() main()

Empleado ListaCircular +objLista


agregarElemento() sacarElemento() sacarTodos()

+ultimo

Elemento +sig

+info

nombre : String sueldo : double setNombre() getNombre() setSueldo() getSueldo()

Completar el modelamiento de la Ventana

34

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public class Empleado{ private String nombre; private double sueldo; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setSueldo(double sueldo){ this.sueldo = sueldo; } public double getSueldo(){ return sueldo; } import dompro.*; public class Elemento { public Empleado info; public Elemento sig; } public Elemento(){ info = new Empleado(); } import dompro.*; public class ListaCircular{ public Elemento ultimo; public ListaCircular(){ ultimo=null; } }

35

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public void agregarElemento(String aux1, double aux2) { Elemento nuevo = new Elemento( ) ; nuevo.info.setNombre(aux1) ; nuevo.info.setSueldo(aux2) ; if ( ultimo != null ) { nuevo.sig = ultimo.sig; ultimo.sig= nuevo ; } else { ultimo = nuevo ; ultimo.sig = nuevo ; } } public String sacarTodos() { String cad = ""; Elemento p = ultimo.sig; do{ cad = cad + p.info.getNombre() + " " +p.info.getSueldo() + "\n"; p = p.sig; }while(p!=ultimo.sig); return cad; } import java.awt.*; import domapli.*; public class FrmListaCircular extends Frame { . ListaCircular objListaCir; }

private void initialize(){ .. objListaCir = new ListaCircular(); } public void agregar() { String aux1 = txtNombre.getText(); double aux2 = Double.parseDouble(txtSueldo.getText()); objListaCir.agregarElemento(aux1, aux2);
36

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

txtNombre.setText(""); txtSueldo.setText(""); textArea.setText(""); txtNombre.requestFocus(); } public void mostrar() { String aux3 = objListaCir.muestra(); textArea.setText(aux3); } public void salir() { System.exit(0); }

1.- Realizar el mtodo de eliminar los datos de un trabajador. 2.- Realice un mtodo que permita modificar los datos de cualquier trabajador.

37

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

10
Uso de Cola
Objetivos
Que el alumno desarrolle aplicaciones de cola utilizando las estructuras aprendidas en Clase

Desarrolle una aplicacin para almacenar los datos de empleados (nombre y sueldo) en una Cola. Utilice listas simples.

38

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public class Empleado{ private String nombre; private double sueldo; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setSueldo(double sueldo){ this.sueldo = sueldo; } public double getSueldo(){ return sueldo; } import dompro.*; public class Elemento { public Empleado info; public Elemento sig; } public Elemento(){ info = new Empleado(); sig=null; } import dompro.*; import biblioteca.*; public class Cola{ Elemento primero,ultimo; public Cola(){ primero=ultimo=null; } }
39

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public void agregar(String n,double s){ Elemento nuevo; nuevo = new Elemento(); nuevo.info.setNombre(n); nuevo.info.setSueldo(s); nuevo.sig = null; if(primero == null) primero = nuevo; else ultimo.sig = nuevo; ultimo = nuevo; } public void eliminar(){ Elemento p = primero; primero = primero.sig; if (primero == null) ultimo = null; } public boolean vacia(){ if (primero == null) return true; return false; }

public String sacarTodos(){ String listado=""; Elemento aux=primero; while(aux!=null){ listado+=aux.info.getNombre()+"\t"+aux.info.getSueldo()+"\n"; aux=aux.sig; } return listado; } import java.awt.*; import domapli.*; public class FrmCola extends JFrame { Cola objC; } .

40

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

private void initialize(){ objC = new Cola(); } public void agregar(){ String nombre=txtNombre.getText(); String sueldo=txtSueldo.getText(); if(nombre.equals("")|| sueldo.equals("")) JOptionPane.showMessageDialog(null,"Campos vacios"); else{ double s=Double.parseDouble(sueldo); objC.agregar(nombre,s); } txtNombre.setText(""); txtSueldo.setText(""); txtNombre.requestFocus(); } public void mostrar(){ String aux3 = objC.sacarTodos(); textArea.setText(aux3); } public void atender(){ if(objC.vacia()==true) JOptionPane.showMessageDialog(null,"Cola vacia"); else objC.eliminar(); mostrar(); } public void salir(){ System.exit(0); }

1. Hallar la diferencia de sueldos entre el empleado que se encuentra al inicio de la cola y el que se encuentra al ltimo. 2. Elaborar los mtodos necesarios para: a) adicionar un empleado por el inicio de la cola. b) atender a un empleado por el final de cola. Implementar una cola de empleados sobre un vector de objetos.

41

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

Recursividad con Listas


Objetivos

11

Que el alumno desarrolle aplicaciones usando lista simple de objetos en donde los mtodos son recursivos

Desarrolle una aplicacin para almacenar datos de empleados, los datos son cdigo y nombre en una Lista simple de objetos. En la Lista de Empleados, desarrollo los siguiente mtodos recursivos para ingresar, listar y calcular el nmero de elementos y la suma de sueldos.

42

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

rboles binarios
Objetivos

Sesin

12

Que el alumno desarrolle aplicaciones usando como estructura un rbol binario

Desarrolle una aplicacin para almacenar nmeros enteros. Utilice rbol binario como estructura.

43

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

import dompro.*; public class Elemento { public int info; public Elemento izq,der; } public Elemento() { info=0; izq=null; der=null; } public class Arbol{ public Elemento raiz; public Arbol() { raiz=null; } } public void agregar(int info){ Elemento nuevo, p, q; nuevo = new Elemento(); nuevo.info=info; if(raiz == null) raiz = nuevo; else{ p = q = raiz; while(q != null){ p = q; if (nuevo.info<p.info) q = p.izq; else q = p.der; } if(nuevo.info<p.info) p.izq =nuevo; else p.der= nuevo; } }

44

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public String infijo(Elemento p){ if(p==null) return ""; else return infijo(p.izq)+""+p.info+"\n"+infijo(p.der); } import java.awt.*; import domapli.*; public class FrmArbol extends JFrame { Arbol objA; } private void initialize(){ objA = new Arbol(); } public void agregar(){ String n=txtNumero.getText(); if(n.equals("")) JOptionPane.showMessageDialog(null,"Campos vacios"); else{ int num=Integer.parseInt(n); objA.agregar(n); } txtNumero.setText(""); txtNumero.requestFocus(); } public void infijo(){ String aux3 = objA.infijo(objA.raiz); textArea.setText(aux3); } public void salir(){ System.exit(0); } .

1. Desarrolle los botones para el recorrido posfijo y prefijo. 2. Desarrolle un botn reporte que muestre: a. Grado del rbol b. Tamao del rbol c. Altura del rbol 3. Desarrolle un mtodo para eliminar.

45

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

Manejo de Archivos
Objetivos

13

Que el alumno desarrolle aplicaciones que lean y graban archivos de datos utilizando listas simples

Desarrolle una aplicacin que cargue los datos de un archivo de datos a una lista simple y los muestre. Al salir de la aplicacin los datos sern grabados

46

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

package domapli; import java.awt.FileDialog; import java.io.RandomAccessFile; public class Lista { public Elemento cab; int ncampos=2; int longCampos[]={20,7}; }

public Lista(){ cab=null; }

public void agregar(String n,double s){ Elemento nuevo=new Elemento(); nuevo.info.setNombre(n); nuevo.info.setSueldo(s); if(cab==null) cab=nuevo; else{ Elemento p=cab; while(p.sig!=null) p=p.sig; p.sig=nuevo; } }

public String sacarDato(Elemento p){ return p.info.getNombre()+" "+p.info.getSueldo(); }

public String sacarTodos(){ String listado=""; for(Elemento p=cab;p!=null;p=p.sig) listado+=sacarDato(p)+"\n"; return listado; }

47

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public String completar(String t,int l){ int falta=l-t.length(); for(int i=1;i<=falta;i++) t+=" "; if(falta>0) return t; else return t.substring(0,l); }

public void cargarDatos(){ RandomAccessFile file=null; int nregistro=0,tamaoRegistro; String registro="",ruta; byte z[]=null; String nombre; double sueldo; Frame x=new Frame(); FileDialog abrir= new FileDialog(x,"Abrir como", FileDialog.LOAD); abrir.setVisible(true) ; ruta=abrir.getDirectory()+abrir.getFile(); try{ file=new RandomAccessFile(ruta,"rw"); }catch(Exception e){ System.out.println("Error" + e);} tamaoRegistro=longCampos[0]+longCampos[1]; try{ nregistro=(int)file.length()/tamaoRegistro; }catch(Exception e){} for(int i=1;i<=nregistro;i++){ registro=""; z=new byte[tamaoRegistro]; try{ file.readFully(z); }catch(IOException e){} registro=new String(z); nombre=registro.substring(0,longCampos[0]); sueldo=Double.parseDouble(registro.substring(longCampos[0])); agregar(nombre.trim(),sueldo); } try{ file.close(); }catch(Exception e){} }

public void grabarDatos(){ RandomAccessFile file=null; String registro,ruta; Frame x=new Frame(); FileDialog abrir= new FileDialog(x,"Guardar como", FileDialog.SAVE);
48

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

abrir.setVisible(true) ; ruta=abrir.getDirectory()+abrir.getFile(); try{ file=new RandomAccessFile(ruta,"rw"); file.setLength(0); }catch(Exception e){ System.out.println("Error" + e);} for(Elemento aux=cab;aux!=null;aux=aux.sig){ registro=completar(aux.info.getNombre(),longCampos[0])+ completar(aux.info.getSueldo()+"",longCampos[1]); try{ file.seek(file.length()); file.writeBytes(registro); }catch(IOException e){} } try{ file.close(); }catch(Exception e){} }

.. import javax.swing.JTextArea; import domapli.Lista; public class FrmEmpleado extends JFrame { Lista a=new Lista(); // objeto de conexion .. }

public void agregar(){ // Capturando los datos String n=txtNombre.getText(); String s=txtSueldo.getText(); // Validando campos vacios if(n.equals("")|| s.equals("")) JOptionPane.showMessageDialog(null,"Campos vacios"); else{ double su=Double.parseDouble(s); a.agregar(n,su); } txtNombre.setText(""); txtSueldo.setText(""); txtNombre.requestFocus(); mostrar(); }

49

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public void mostrar(){ txtASalida.setText(a.sacarTodos()); }

public void cargar(){ a.cargarDatos(); mostrar(); }

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

Del ejercicio anterior, desarrolle lo siguiente: Leer el archivo de datos y hallar el mayor sueldo Leer el archivo de datos y mostrar el nombre y el sueldo de los empleado cuyo nombre comienza con a.

50

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Sesin

Base de Datos - Conectividad


Objetivos

14

Que el alumno desarrolle aplicaciones que lean y graban en una tabla de Access utilizando JDBC

Desarrolle una aplicacin que cargue los datos de un archivo de datos a una lista simple y los muestre. Al salir de la aplicacin los datos sern grabados

Cree una nueva base de Datos en Access llamada fia.mdb

51

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

Cree la tabla TEmpleado

Defina los siguientes campos Nombre del Campo codigo nombre sueldo Tipo de datos texto texto numero 4 20 Tamao

Defina al campo cdigo como clave principal

52

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

import java.awt.GridLayout; .. import java.sql.*; // importar este paquete public class FrmEmpleado extends JFrame { .. private JButton jButton3 = null; }

53

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public void cargaData(){ try{ // --- Registrando el driver java Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // --- Obteniendo una conexion a la base de datos Connection cn=DriverManager.getConnection("jdbc:odbc:dsnFia","sa","sa"); // --- Creamos el objeto statement Statement st=cn.createStatement(); // --- Ejecutamos la consulta ResultSet rs=st.executeQuery("select codigo,nombre,sueldo from TEmpleado"); muestraData(rs); cn.close(); }catch(Exception ex){ txtASalida.setText("La conexin fracas : \n\n"); txtASalida.append(ex.toString()); } }

public void muestraData(ResultSet r) throws Exception{ // --- Obteniendo el objeto ResultSetMetaData ResultSetMetaData rmeta=r.getMetaData(); int numColumnas=rmeta.getColumnCount(); txtASalida.setText(""); for(int i=1;i<=numColumnas;++i){ if(rmeta.getColumnName(i).equals("codigo")){ txtASalida.append(rmeta.getColumnName(i)+"\t"); }else txtASalida.append(rmeta.getColumnName(i)+"\t"); } txtASalida.append("\n"); while(r.next()){ for(int i=1;i<=numColumnas;++i) txtASalida.append(r.getString(i)+"\t"); txtASalida.append("\n"); } }

54

Algoritmos y Estructuras de Datos II

Gua de Laboratorio

public void insertaData(){ String c=txtCodigo.getText(); String n=txtNombre.getText(); double s=Double.parseDouble(txtSueldo.getText()); // --- Registrando el driver java try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // --- Obteniendo una conexion a la base de datos Connection cn=DriverManager.getConnection("jdbc:odbc:dsnFia","sa","sa"); // --- Creamos el objeto statement Statement st=cn.createStatement(); // --- Ejecutamos la consulta st.executeUpdate("insert into templeado(codigo," + "nombre,sueldo) values('"+ c+" ',' "+n+" ',"+s+")"); }catch(Exception e){ System.out.println(e); } txtCodigo.setText(""); txtNombre.setText(""); txtSueldo.setText(""); txtCodigo.requestFocus(); }

Del ejercicio anterior, desarrolle lo siguiente: Modificar dato los datos del empleado Eliminar empleado por cdigo

55

You might also like