Upload
anonymous-zp6dhd
View
2
Download
0
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