17
Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas e Informática E.A.P. de Ingeniería de Sistemas Algorítmica II GUIA “C” DE LABORATORIO ARREGLO DE OBJETOS Objetivo: Aplicar los conceptos de la Programación Orientada a Objetos. Descripción: A continuación se presentan varias clases. Cada clase contiene métodos de tipo SET y GET, y métodos operacionales. Los métodos operacionales son métodos que implementan las operaciones ó “FUNCIONALIDADES” del objeto. En esta guía de Laboratorio se va a trabajar con las clases Producto, ArregloDeProducto, ReporteAlmacen. El objetivo es comprender como se relacionan estas clases. El alumno debe encontrar el mecanismo que utilizan las clases para el envió de datos; así como las referencias entre objetos. Al finalizar esta guía, cada alumno comprenderá cuando, donde, como y por que se instancian objetos. Recordar que nos encontramos en un entorno Orientado a Objetos. Eso quiere decir que cada clase tiene atributos y métodos “PROPIOS” de su correspondiente objeto real. Se pide analizar el código desarrollado, e implementar todas las funcionalidades. “Clase Producto” A continuación se presenta la clase Producto, que define los atributos y métodos más importantes de un objeto real Producto, obtenidos mediante el proceso de la ABSTRACCIÓN. Por ejemplo: una COMPUTADORA Código COMP1000 Descripción Pentium IV Cantidad 1500 Precio 2300 Fecha de Vencimiento 10/05/2038 Estado Trae La clase Producto implementa un método constructor, varios métodos de tipo SET y GET, un método llamado ‘descripcionEstado()’ y al método ‘toString()’

arreglos en java

Embed Size (px)

DESCRIPTION

codigo en java para arreglos

Citation preview

Universidad Nacional Mayor de San Marcos

Algortmica IIGua C de Laboratorio Arreglo de Objetos

Universidad Nacional Mayor de San Marcos

Facultad de Ingeniera de Sistemas e Informtica

E.A.P. de Ingeniera de Sistemas

Algortmica II

GUIA C DE LABORATORIO

ARREGLO DE OBJETOS

Objetivo:

Aplicar los conceptos de la Programacin Orientada a Objetos.

Descripcin:

A continuacin se presentan varias clases. Cada clase contiene mtodos de tipo SET y GET, y mtodos operacionales. Los mtodos operacionales son mtodos que implementan las operaciones FUNCIONALIDADES del objeto.En esta gua de Laboratorio se va a trabajar con las clases Producto, ArregloDeProducto, ReporteAlmacen. El objetivo es comprender como se relacionan estas clases. El alumno debe encontrar el mecanismo que utilizan las clases para el envi de datos; as como las referencias entre objetos. Al finalizar esta gua, cada alumno comprender cuando, donde, como y por que se instancian objetos. Recordar que nos encontramos en un entorno Orientado a Objetos. Eso quiere decir que cada clase tiene atributos y mtodos PROPIOS de su correspondiente objeto real. Se pide analizar el cdigo desarrollado, e implementar todas las funcionalidades.

Clase Producto

A continuacin se presenta la clase Producto, que define los atributos y mtodos ms importantes de un objeto real Producto, obtenidos mediante el proceso de la ABSTRACCIN.

Por ejemplo: una COMPUTADORACdigoCOMP1000

DescripcinPentium IV

Cantidad1500

Precio2300

Fecha de Vencimiento10/05/2038

EstadoTrae

La clase Producto implementa un mtodo constructor, varios mtodos de tipo SET y GET, un mtodo llamado descripcionEstado() y al mtodo toString() Pasos a seguir 1:

1. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

2. Generar el archivo Producto.class (Proceso de Compilacin)

Nota:Las clases utilizan los mtodos de la clase Base.java, que se encuentra en el paquete ClasesBaseLa clase Producto

package Almacen;

import java.util.Date;

public class Producto {

private String codigo;

private String descripcion;

private int cantidad;

private double precio;

private Date fechaDeVencimiento;

private boolean estado;

public Producto(){

this.codigo = "1000";

this.descripcion = "Computadora";

this.cantidad = 50;

this.precio = 1500;

this.fechaDeVencimiento = new Date();

this.estado = true;

}

public void setCodigo(String codigo) {

this.codigo = codigo;

}

public void setDescripcion(String descripcion) {

this.descripcion = descripcion;

}

public void setCantidad(int cantidad) {

this.cantidad = cantidad;

}

public void setPrecio(double precio) {

this.precio = precio;

}

public void setFechaDeVencimiento(Date fechaDeVencimiento) {

this.fechaDeVencimiento = fechaDeVencimiento;

}

public void setEstado(boolean estado) {

this.estado = estado;

}

public String getCodigo() {

return (this.codigo);

}

public String getDescripcion() {

return (this.descripcion);

}

public int getCantidad() {

return (this.cantidad);

}

public double getPrecio() {

return (this.precio);

}

public Date getFechaDeVencimiento() {

return (this.fechaDeVencimiento);

}

public boolean getEstado() {

return (this.estado);

}

public String descripcionEstado(){

if(this.estado){

return "ACTIVO";

}else{

return "DESACTIVO";

}

}

public String toString() {

String sep = System.getProperty("line.separator");

StringBuffer buffer = new StringBuffer();

buffer.append(sep);

buffer.append("codigo = ");

buffer.append(codigo);

buffer.append(sep);

buffer.append("descripcion = ");

buffer.append(descripcion);

buffer.append(sep);

buffer.append("cantidad = ");

buffer.append(cantidad);

buffer.append(sep);

buffer.append("precio = ");

buffer.append(precio);

buffer.append(sep);

buffer.append("fechaDeVencimiento = ");

buffer.append(fechaDeVencimiento);

buffer.append(sep);

buffer.append("estado = ");

buffer.append(descripcionEstado());

buffer.append(sep);

return buffer.toString();

}

}

Clase ArregloDeProducto

A continuacin se presenta la clase ArregloDeProducto, que define los atributos y mtodos ms importantes de un arreglo de objetos real Producto, obtenidos mediante el proceso de la ABSTRACCIN. Los mtodos del auto son: aadir producto, en este mtodo se pide ingresar un CODIGO de producto (cadena de caracteres), seguidamente se verifica si YA existe dicho cdigo dentro del arreglo de productos. Si Ya existe dicho cdigo, el programa no permite aadir un nuevo producto. Si NO existe dicho cdigo, el programa continua con el registro de los datos del nuevo producto. Por ello, el programa solicitar ingresar DESCRIPCION (cadena de caracteres), CANTIDAD (numero entero), PRECIO (nmero real), FECHA DE VENCIMIENTO (cadena de caracteres con el siguiente formato dd/mm/aaaa; ejemplo: 15/05/2005). Notar que no se pide ingresar el atributo ESTADO, dado que este es asignado con el valor de true dentro del mtodo constructor por defecto. Para cumplir con este mtodo aadirProducto() se invocan al mtodo devolverPosicionDelProducto() que tiene como parmetro al CODIGO del producto a buscar dentro del arreglo de productos. Este mtodo devuelve un valor entero. Si devuelve -1, es porque dentro del arreglo de productos NO SE ENCUENTRA el cdigo enviado por parmetro. Caso contrario devolver un valor entero, que puede ser 0, 1, 2, ... dependiendo del ndice donde se encuentre dicho cdigo de producto.A su vez tambin se utiliza al mtodo registrarProducto() dentro del cual se instancia un objeto de tipo Producto, para luego llenar el valor de sus atributos con los datos que se piden ingresar por teclado. Mostrar arreglo de productos, en este mtodo se verifica si hay productos dentro del arreglo de productos. Si la cantidad de productos es CERO, se mostrar un mensaje indican que no existen productos en el almacn. Caso contrario, se recorre con un bucle for al arreglo de productos, por cada iteracin se obtiene a un objeto de tipo Producto y se imprime sus datos utilizando el mtodo toString.buscar producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a buscar. En caso que si se encuentre, el programa debe mostrar sus datos. Caso contrario el programa debe indicar que no existe el cdigo ingresado.modificar datos del producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a modificar sus datos (Descripcin, Cantidad, Precio, Fecha de Vencimiento). En caso que si se encuentre, el programa debe mostrar un SUB MENU, donde se escoja al Dato a modificar (uno solo). Caso contrario el programa debe indicar que no existe el cdigo ingresado.activar estado del producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a activar. En caso que si se encuentre, el programa debe verificar si el estado del producto es activo (true) o si el estado del producto es inactivo (false). Si el estado del producto es activo, se debe mostrar un mensaje indicando que el estado YA esta ACTIVO. Caso contrario el programa debe cambiar de estado INACTIVO a estado ACTIVO. Recordar que si no existe el cdigo ingresado se debe mostrar un mensaje.desactivar estado del producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a desactivar. En caso que si se encuentre, el programa debe verificar si el estado del producto es activo (true) o si el estado del producto es inactivo (false). Si el estado del producto es inactivo, se debe mostrar un mensaje indicando que el estado YA esta INACTIVO. Caso contrario el programa debe cambiar de estado ACTIVO a estado INACTIVO. Recordar que si no existe el cdigo ingresado se debe mostrar un mensaje.

eliminar producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a eliminar. En caso que si se encuentre, el programa debe eliminar cualquier referencia que se tenga a dicho objeto. De tal manera que no se puede acceder a dicha zona de memoria. Recordar que si se pierde la referencia de un objeto, este queda lista para ser recogido por el GARBAGE COLLECTOR. Se recomienda utilizar el mtodo remove de la clase ArrayList.reportes, PARA IMPLEMENTAR, en este mtodo se hace uso del objeto reporte de la clase ReporteAlmacen. Este objeto reporte invocar a su mtodo men() el cual mostrar un men con los diferentes tipos de reportes que tiene nuestro Almacn, los cuales son:Producto ms costoso

Productos con cantidades mnimas permitidas

Productos con cantidades igual a 0 (cero)

Productos con fecha de Vencimiento vencidas

Productos desactivados

Productos ordenados por Codigo

Productos ordenados por Descripcion

Productos ordenados por Cantidad

Productos ordenados por Precio Cada opcin del reporte es un mtodo dentro de la clase ReporteAlmacen.Pasos a seguir 2:

3. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

4. Generar el archivo ArregloDeProducto.class (Proceso de Compilacin)NOTA: RECORDAR QUE SI DESEAMOS DECLARAR UN OBJETO DE UNA CLASE, PRIMERO SE DEBE COMPILAR DICHA CLASE.

Por ejemplo: private ReporteAlmacen reporte;

En este cdigo se desea declarar al objeto reporte, pero primero debe compilarse la clase ReporteAlmacen.A continuacin:

1. Completar la implementacin de todas las opciones del men.

La clase ArregloDeProducto

package Almacen;

import ClasesBase.Base;

import java.util.Date;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class ArregloDeProducto {

private ArrayList arreglo;

private ReporteAlmacen reporte;

public ArregloDeProducto(){

this.arreglo = new ArrayList();

this.reporte = new ReporteAlmacen(arreglo);

}

public int devolverPosicionDelProducto(String codigo){

int posicion = -1;

for (int indice = 0; indice < arreglo.size() ; indice++){

Producto auxiliar = (Producto)arreglo.get(indice);

if(auxiliar != null){

if(auxiliar.getCodigo().equals(codigo)){

return indice;

}

}

}

return posicion;

}

public Producto registrarProducto(String codigo){

String dato;

Producto prod = new Producto();

prod.setCodigo(codigo);

dato = Base.ingresarDato("Ingrese la DESCRIPCION del Producto:");

prod.setDescripcion(dato);

dato = Base.ingresarDato("Ingrese la CANTIDAD del Producto:");

prod.setCantidad(Base.aEntero(dato));

dato = Base.ingresarDato("Ingrese el PRECIO del Producto:");

prod.setPrecio(Base.aReal(dato));

dato = Base.ingresarDato("Ingrese la FECHA DE VENCIMIENTO del Producto:");

Date fecha = new Date(dato);

prod.setFechaDeVencimiento(fecha);

return prod;

}

public void aadirProducto(){

String codigo;

String mensaje;

int tipoDeIcono;

codigo = Base.ingresarDato("Ingrese el CODIGO del Producto:");

if(devolverPosicionDelProducto(codigo) < 0){

arreglo.add(registrarProducto(codigo));

mensaje = "El Producto ha sido REGISTRADO con xito.";

tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

}else{

mensaje = "El cdigo ingresado, YA xiste.";

tipoDeIcono = JOptionPane.WARNING_MESSAGE;

}

JOptionPane.showMessageDialog(null,

mensaje,

"Aadir Producto",

tipoDeIcono);

}

public void mostrarArregloDeProducto(){

String mensaje;

int tipoDeIcono;

if(arreglo.size() > 0){

for(Object obj : arreglo){

Producto prod = (Producto)obj;

System.out.print(prod.toString());

}

mensaje = "Productos mostrados con xito.";

tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

}else{

mensaje = "No existen Productos en el Almacen.";

tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

}

JOptionPane.showMessageDialog(null,

mensaje,

"Mostrar Producto",

tipoDeIcono);

}

public void menu(){

int opcion;

String cadena[]={"1.- Aadir Producto",

"2.- Mostrar Productos",

"3.- Buscar Producto",

"4.- Modificar datos del Producto",

"5.- Activar estado del Producto",

"6.- Desactivar (anular) estado del Producto",

"7.- Eliminar Producto",

"8.- Reportes",

"9.- Salir"};

do{

System.out.println("MENU DEL ALMACEN");

opcion = Base.pintarMenu(cadena);

switch(opcion){

case 1:

aadirProducto();

break;

case 2:

mostrarArregloDeProducto();

break;

case 8:

reporte.menu();

break;

}

}while(opcion!=cadena.length);

}

}

Pasos a seguir 3:

5. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado.

6. Generar el archivo ReporteAlmacen.class (Proceso de Compilacin)

A continuacin:

2. Completar la implementacin de todas las opciones del men.

La clase ReporteAlmacen

package Almacen;

import ClasesBase.Base;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class ReporteAlmacen {

private ArrayList arreglo;

public ReporteAlmacen(ArrayList arregloReferencia){

this.arreglo = arregloReferencia;

}

public void menu(){

int opcion;

String cadena[]={"1.- Producto mas costoso",

"2.- Productos con cantidades mnimas permitidas",

"3.- Productos con cantidades igual a 0 (cero)",

"4.- Productos con fecha de Vencimiento vencidas",

"5.- Productos desactivados",

"6.- Productos ordenados por Codigo",

"7.- Productos ordenados por Descripcion",

"8.- Productos ordenados por Cantidad",

"9.- Productos ordenados por Precio",

"10.- Salir"};

do{

System.out.println("REPORTES DEL ALMACEN");

opcion = Base.pintarMenu(cadena);

switch(opcion){

case 1:

hallarProductoMasCostoso();

break;

case 6:

ordenarArregloDeProductoPorCodigo();

break;

}

}while(opcion!=cadena.length);

}

public Producto devolverProducto(int indice){

return (Producto)arreglo.get(indice);

}

public void hallarProductoMasCostoso(){

double maximo;

int indice, i;

String mensaje;

int tipoDeIcono;

if(arreglo.size() > 0){

maximo = -1;

indice = 0;

i = 0;

//Recorro el arreglo de productos

//Hacemos un 'if' para saber cual es mayor precio

//Guardamos el indice donde se encuentra dicho producto

for(Object obj : arreglo){

Producto prod = (Producto)obj;

if(prod.getPrecio() > maximo){

maximo = prod.getPrecio();

indice = i;

}

i++;

}

//Invocamos al mtodo 'devolverProducto()'

//se le pasa por parmetro el indice

//este mtodo nos devuelve un OBJETO Producto

//al cual le aplicamos su mtodo 'toString()'

mensaje = devolverProducto(indice).toString();

tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

}else{

mensaje = "No existen Productos en el Almacen.";

tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

}

JOptionPane.showMessageDialog(null,

mensaje,

"Producto mas costoso",

tipoDeIcono);

}

//Utilizamos el mtodo de la BURBUJA para ordernar los Productos

public void ordenarArregloDeProductoPorCodigo(){

int i, j;

if(arreglo.size() > 0){

//Inicio de la Burbuja

for (i = 0; i ANA (B es mayor que A)

//devuelve == 0 cuando BETO == BETO (B es igual que B)

//devuelve < 0 cuando ANA < BETO (A es menor que B)

//Recordar: Es muy parecido al 'strcmp( , )' del C++

if(A.getCodigo().compareTo(B.getCodigo()) > 0){

Producto aux = A;

arreglo.set(j,B);

arreglo.set(j+1,aux);

}

}

}

//Fin de la Burbuja

//Invocamos al mtodo que recorre el Arreglo de Productos

//para imprimir sus datos por Consola

imprimirArregloDeProducto();

}else{

String mensaje = "No existen Productos en el Almacen.";

int tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

JOptionPane.showMessageDialog(null,

mensaje,

"Ordenamiento por Codigo",

tipoDeIcono);

}

}

public void imprimirArregloDeProducto(){

if(arreglo.size() > 0){

String dato;

System.out.println("Listado de Productos...");

System.out.println("***********************");

//Recorremos el arreglo de productos

//Obtenemos cada producto

//Concatenamos sus atributos y lo asignamos a 'dato'

//Imprimimos en una sola linea todos los datos del producto

for(Object obj : arreglo){

Producto prod = (Producto)obj;

dato = prod.getCodigo() + " " + prod.getDescripcion() + " " +

prod.getCantidad() + " " + prod.getPrecio();

System.out.println(dato);

}

System.out.println("***********************");

}else{

String mensaje = "No existen Productos en el Almacen.";

int tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

JOptionPane.showMessageDialog(null,

mensaje,

"Producto mas costoso",

tipoDeIcono);

}

}

}

EJECUCIN del ProgramaSe muestra el men de opciones

MENU DEL ALMACEN

1.- Aadir Producto

2.- Mostrar Productos

3.- Buscar Producto

4.- Modificar datos del Producto

5.- Activar estado del Producto

6.- Desactivar (anular) estado del Producto

7.- Eliminar Producto

8.- Reportes

9.- Salir

Ingrese su opcion:

Se ingresa la opcin

1

Se ingresan los datos

Ingrese el CODIGO del Producto:COMP1000

Ingrese la DESCRIPCION del Producto:Pentium IV

Ingrese la CANTIDAD del Producto:1500

Ingrese el PRECIO del Producto:2300

Ingrese la FECHA DE VENCIMIENTO del Producto:10/05/2038

Se ingresa la opcin

2

codigo = COMP1000

descripcion = Pentium IV

cantidad = 1500

precio = 2300.0

fechaDeVencimiento = Tue Oct 05 00:00:00 COT 2038

estado = ACTIVO

Se ingresa la opcin

1

Ingrese el CODIGO del Producto:COMP099

Ingrese la DESCRIPCION del Producto:MONITOR

Ingrese la CANTIDAD del Producto:800

Ingrese el PRECIO del Producto:450

Ingrese la FECHA DE VENCIMIENTO del Producto:12/10/2010

Se ingresa la opcin

2

codigo = COMP1000

descripcion = Pentium IV

cantidad = 1500

precio = 2300.0

fechaDeVencimiento = Tue Oct 05 00:00:00 COT 2038

estado = ACTIVO

codigo = COMP099

descripcion = MONITOR

cantidad = 800

precio = 450.0

fechaDeVencimiento = Fri Dec 10 00:00:00 COT 2010

estado = ACTIVO

Se ingresa la opcin

8

REPORTES DEL ALMACEN

1.- Producto mas costoso

2.- Productos con cantidades mnimas permitidas

3.- Productos con cantidades igual a 0 (cero)

4.- Productos con fecha de Vencimiento vencidas

5.- Productos desactivados

6.- Productos ordenados por Codigo

7.- Productos ordenados por Descripcion

8.- Productos ordenados por Cantidad

9.- Productos ordenados por Precio

10.- Salir

Ingrese su opcion:

Se ingresa la opcin

1

Se ingresa la opcin

6

Listado de Productos...

***********************

COMP099 MONITOR 800 450.0

COMP1000 Pentium IV 1500 2300.0

***********************

Se ingresa la opcin

10

MENU DEL ALMACEN

1.- Aadir Producto

2.- Mostrar Productos

3.- Buscar Producto

4.- Modificar datos del Producto

5.- Activar estado del Producto

6.- Desactivar (anular) estado del Producto

7.- Eliminar Producto

8.- Reportes

9.- Salir

Ingrese su opcion:

Se ingresa la opcin

2

codigo = COMP099

descripcion = MONITOR

cantidad = 800

precio = 450.0

fechaDeVencimiento = Fri Dec 10 00:00:00 COT 2010

estado = ACTIVO

codigo = COMP1000

descripcion = Pentium IV

cantidad = 1500

precio = 2300.0

fechaDeVencimiento = Tue Oct 05 00:00:00 COT 2038

estado = ACTIVO

Se ingresa la opcin

9

Process completed.

Prof. Arn Elas Herrera PontePg. 5