Anda di halaman 1dari 10

1

LABORATORIO PROGRAMACIN JAVA



SESIN 6:
POO Y UTILIDADES JAVA

En esta sesin realizaremos programas orientados a objetos donde utilizaremos las utilidades del
lenguaje Java vistas en el captulo 6 de teora.

1. Ejemplos I/O

Lectura de ficheros de texto:

import java.io.*;
public class LeeFichero {
public static void main(String[] args) {
String cad;
try
{
BufferedReader br =
new BufferedReader(new FileReader("ejemplo.txt"));
while ((cad = br.readLine()) != null)
{
System.out.println(cad);
}
//Cerramos el stream
br.close();
} catch (IOException ioe) {
System.out.println(ioe);
}
}
}

Escritura de ficheros de texto:

import java.io.*;
public class EscribeFichero2 {
public static void main(String[] args) {
String cad1 = "Esto es una cadena.";
String cad2 = "Esto es otra cadena.";

try
{
PrintWriter salida
= new PrintWriter(
new BufferedWriter(new FileWriter("salida.txt")));
salida.println(cad1);
salida.println(cad2);

//Cerramos el stream
salida.close();
} catch (IOException ioe) {
System.out.println("Error IO: "+ioe.toString());
}
}
}

2
1.1 Ejercicio I/O

Tomando como referencia el cdigo anterior para la lectura y escritura de ficheros, realizar una
aplicacin en la que se tomar como entrada un fichero de texto, donde cada una de sus lneas
representa un producto donde el ltimo dato es el precio sin IVA, y producir como salida otro fichero
idntico pero con los precios con IVA.

Ejemplo de lnea de producto:

Porttil Dell; Intel C2D 7100; 2Gb RAM; 160GB HD; nVidia GeForce 8600 GT; 15.4 Panormico;
1000;

Nota: Para la lectura de los distintos campos de los productos se recomienda la utilizacin de la clase
StringTokenizer o el mtodo split de la clase String.



2. Ejercicio Tienda de Informtica con Serializacin

Siguiendo los ejemplos de serializacin y ordenacin de objetos vistos en el captulo 6 de teora, se
pretende modificar la aplicacin en Java para la gestin y venta de productos de una tienda de
informtica vista en el captulo anterior.

Ampliar la aplicacin para que realice las siguientes operaciones:

Serializacin de los productos:
Se serializarn todos los objetos de tipo producto en un fichero llamado productos.dat.
Recuperacin de los productos:
Se recuperarn todos los productos del fichero productos.dat y se asignarn a la tabla hash de
productos utilizada en la aplicacin.
Listado de los productos:
Se le presentarn al usuario todos los productos ordenados por precio.
Factura de venta:
Cuando se venda un producto se generar un fichero de texto con los datos del producto
vendido as como la cantidad y el importe total.

De forma voluntaria se puede serializar y recuperar la variable esttica contador para poder seguir
asignando cdigos nicos a los productos.


3
3. Solucin Ejercicio I/O

- Clase Productos:

import java.io.*;
import java.text.NumberFormat;

public class Productos {

public static void main(String[] args) {
// TODO code application logic here
String cad;
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(3);
nf.setMinimumFractionDigits(1);

try {
BufferedReader br = new BufferedReader(new FileReader("productos.txt"));
PrintWriter salida = new PrintWriter(
new BufferedWriter(new FileWriter("productosiva.txt")));

while ((cad = br.readLine()) != null) {
String[] productos = cad.split(";");
int num = productos.length;
double precioiva = Double.parseDouble(productos[num-1])*1.16;
productos[num-1] = " " + nf.format(precioiva);
for (int i=0; i<productos.length; i++) {
salida.print(productos[i]);
salida.print(";");
}
salida.println("");
}
//Cerramos los streams
br.close();
salida.close();
} catch (IOException ioe) {
System.out.println(ioe);
}
}

}


4. Solucin Tienda Informtica con Serializacin

El cdigo de cada una de las clases es el siguiente:

- Clase Producto:

package tiendainf;

import java.io.Serializable;

public class Producto implements Serializable {

private String codigo;
private String nombre;
private double precio;
private int cantidad;

private static int contador=0;

public Producto(String nombre, double precio, int cantidad) {
this.nombre = nombre;
this.precio = precio;
this.cantidad = cantidad;
4
this.codigo = Integer.toString(getContador());
}

public static int getContador() {
return contador++;
}

public static void setContador(int contador) {
Producto.contador = contador;
}

public String getCodigo() {
return this.codigo;
}

public String getNombre() {
return this.nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public double getPrecio() {
return this.precio;
}

public void setPrecio(double precio) {
this.precio = precio;
}

public int getCantidad() {
return this.cantidad;
}

public void sumaCantidad(int cantidad) {
this.cantidad += cantidad;
}

public boolean restaCantidad(int cantidad) {
if (this.cantidad<=cantidad) {
System.out.println("No hay suficiente cantidad...");
return false;
} else {
this.cantidad -= cantidad;
return true;
}
}

public String toString() {
return "- Codigo: "+ codigo + " - Nombre: " + nombre
+ "\n- Precio: " + precio + " - Cantidad: " + cantidad;
}

}

5
- Clase Ordenador:

package tiendainf;

import java.io.Serializable;

public class Ordenador extends Producto implements Serializable {

private String caracteristicas;

public Ordenador(String nombre, double precio, int cantidad, String caracteristicas) {
super(nombre, precio, cantidad);
this.caracteristicas = caracteristicas;
}

public String getCaracteristicas() {
return this.caracteristicas;
}

public void setCaracteristicas(String caracteristicas) {
this.caracteristicas = caracteristicas;
}

public String toString() {
return super.toString()+"\n # Ordenador # - Caractersticas: "+ caracteristicas;
}

}


- Clase Movil:

package tiendainf;

import java.io.Serializable;

public class Movil extends Producto implements Serializable {

private String operador;

public Movil(String nombre, double precio, int cantidad, String operador) {
super(nombre, precio, cantidad);
this.operador = operador;
}

public String getOperador() {
return this.operador;
}

public void setOperador(String operador) {
this.operador = operador;
}

public String toString() {
return super.toString()+"\n # Movil # - Operador: "+ operador;
}

}


- Clase Tienda:

package tiendainf;

import java.io.*;
import java.util.*;

public class Tienda {

private static HashMap<String, Producto> productos = new HashMap<String, Producto>();
private static BufferedReader entrada =
6
new BufferedReader(new InputStreamReader(System.in));
private static String codigo, nombre, caracteristicas, operador, res;
private static int cantidad;
private static double precio;
private static Ordenador ord;
private static Movil mov;
private static Producto pro;

public static void main(String args[]) {

try {
recupera();
} catch (IOException ioe) {
System.out.println("\nError de entrada/salida: " + ioe.toString());
}

while (true) {
try {
do {
System.out.println("\n\n--- Operaciones de la Tienda ---");
System.out.println(" 1 - Alta de producto. ");
System.out.println(" 2 - Baja de producto. ");
System.out.println(" 3 - Consulta de producto. ");
System.out.println(" 4 - Venta de producto. ");
System.out.println(" 5 - Reponer producto. ");
System.out.println(" 6 - Modificar producto. ");
System.out.println(" 7 - Listar productos. ");
System.out.println(" 0 - Salir. ");
System.out.println(" Seleccione la operacin: ");
res = entrada.readLine();
} while (!res.equals("1") && !res.equals("2") && !res.equals("3")
&& !res.equals("4") && !res.equals("5") && !res.equals("6")
&& !res.equals("7") && !res.equals("0"));

// alta
if (res.equals("1")) {
alta();
} // baja
else if (res.equals("2")) {
baja();
} // consulta
else if (res.equals("3")) {
consulta();
} // venta
else if (res.equals("4")) {
venta();
} // reponer
else if (res.equals("5")) {
reponer();
} // modifica
else if (res.equals("6")) {
modifica();
} // lista
else if (res.equals("7")) {
lista();
} // salir
else if (res.equals("0")) {
serializa();
System.exit(0);
}
} catch (NumberFormatException nfe) {
System.out.println("\nError de formato numrico: " + nfe.toString());
} catch (IOException ioe) {
System.out.println("\nError de entrada/salida: " + ioe.toString());
} catch (Exception e) {
// Captura cualquier otra excepcin
System.out.println(e.toString());
}
}
}


7
// alta
private static void alta() throws IOException {
System.out.println("\n -- Alta de producto -- ");
System.out.println("Introduzca nombre producto: ");
nombre = entrada.readLine();
System.out.println("Introduzca el precio del producto: ");
precio = Double.parseDouble(entrada.readLine());
System.out.println("Introduzca cantidad del producto: ");
cantidad = Integer.parseInt(entrada.readLine());
do {
System.out.println("Introduzca tipo producto (1-ordenador, 2-tfno. mvil): ");
res = entrada.readLine();
} while (!res.equals("1") && !res.equals("2"));
if (res.equals("1")) {
System.out.println("Introduzca caractersticas ordenador: ");
caracteristicas = entrada.readLine();
ord = new Ordenador(nombre, precio, cantidad, caracteristicas);
codigo = ord.getCodigo();
productos.put(codigo, ord);
System.out.println("\nOrdenador dado de alta: " + ord.toString());
} else {
System.out.println("Introduzca operador del mvil: ");
operador = entrada.readLine();
mov = new Movil(nombre, precio, cantidad, operador);
codigo = mov.getCodigo();
productos.put(codigo, mov);
System.out.println("\nMvil dado de alta: " + mov.toString());
}
}

// baja
private static void baja() throws IOException {
System.out.println("\n -- Baja de producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
pro = (Producto) productos.get(codigo);
if (pro != null) {
productos.remove(codigo);
System.out.println("\nProducto borrado.");
} else {
System.out.println(" Error: - Producto no encontrado - ");
}
}

// consulta
private static void consulta() throws IOException {
System.out.println("\n -- Consulta de producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
pro = (Producto) productos.get(codigo);
if (pro != null) {
System.out.println("\nInformacin del Producto:\n" + pro.toString());
} else {
System.out.println(" Error: - Producto no encontrado - ");
}
}

// venta
private static void venta() throws IOException {
System.out.println("\n -- Venta de producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
System.out.println("Introduzca la cantidad: ");
cantidad = Integer.parseInt(entrada.readLine());
pro = (Producto) productos.get(codigo);
if (pro != null) {
if (pro.restaCantidad(cantidad)) {
System.out.println("\nPrecio: " + pro.getPrecio() * cantidad);
System.out.println("Producto comprado: " + pro.toString());
//generamos la factura del producto
generarFactura(pro, cantidad);
}
8
} else {
System.out.println(" Error: - Producto no encontrado - ");
}
}

// generar factura
private static void generarFactura(Producto pro, int cant) throws IOException {
PrintWriter salida = new PrintWriter(new BufferedWriter(new
FileWriter("factura.txt")));

salida.println("----------------------- Factura Venta -------------------------");
salida.println("\n");
salida.println(pro.toString());
salida.println("\n");
salida.println("\n");
salida.println("-----------------------------------------------------------------");
salida.println("\n");
salida.println("Cantidad: " + cant);
salida.println("Precio: " + pro.getPrecio() * cant);
salida.close();
}

// reponer
private static void reponer() throws IOException {
System.out.println("\n -- Reponer producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
System.out.println("Introduzca la cantidad: ");
cantidad = Integer.parseInt(entrada.readLine());
pro = (Producto) productos.get(codigo);
if (pro != null) {
pro.sumaCantidad(cantidad);
System.out.println("\nProducto repuesto: " + pro.toString());
} else {
System.out.println(" Error: - Producto no encontrado - ");
}
}

// modifica
private static void modifica() throws IOException {
System.out.println("\n -- Modificar producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
pro = (Producto) productos.get(codigo);
//sacamos el tipo de producto
String tipo = pro.getClass().getName();
int op;
if (tipo.equals("tiendainf.Ordenador")) {
ord = (tiendainf.Ordenador) pro;
System.out.println("Introduzca el dato a modificar (1-nombre, 2-precio,
3-caractersticas): ");
op = Integer.parseInt(entrada.readLine());
switch (op) {
case 1:
System.out.println("Introduzca nombre del producto: ");
nombre = entrada.readLine();
ord.setNombre(nombre);
break;
case 2:
System.out.println("Introduzca el precio del producto: ");
precio = Double.parseDouble(entrada.readLine());
ord.setPrecio(precio);
break;
case 3:
System.out.println("Introduzca caractersticas ordenador: ");
caracteristicas = entrada.readLine();
ord.setCaracteristicas(caracteristicas);
break;
default:
System.out.println("Opcin incorrecta");
}

9
} else {
mov = (tiendainf.Movil) pro;
System.out.println("Introduzca el dato a modificar (1-nombre, 2-precio,
3-operador): ");
op = Integer.parseInt(entrada.readLine());
switch (op) {
case 1:
System.out.println("Introduzca nombre del producto: ");
nombre = entrada.readLine();
mov.setNombre(nombre);
break;
case 2:
System.out.println("Introduzca el precio del producto: ");
precio = Double.parseDouble(entrada.readLine());
mov.setPrecio(precio);
break;
case 3:
System.out.println("Introduzca operador del mvil: ");
operador = entrada.readLine();
mov.setOperador(operador);
break;
default:
System.out.println("Opcin incorrecta");
}
}

System.out.println("\nProducto modificado: " + pro.toString());
}

// serializa
private static void serializa() throws IOException {
System.out.println("\n -- Serializar productos -- ");
System.out.println("Ests seguro (S/N):");
String res = entrada.readLine().toUpperCase();
if (res.equals("S")) {
//Serializacin de la tabla hash de productos y el contador
FileOutputStream fosPro = new FileOutputStream("productos.dat");
ObjectOutputStream oosPro = new ObjectOutputStream(fosPro);
oosPro.writeObject(productos);
Integer cont = new Integer(Producto.getContador());
oosPro.writeObject(cont);
fosPro.close();
System.out.println("\n Productos serializados...");
}
}

// recupera
private static void recupera() throws IOException {
System.out.println("\n -- Recuperar productos -- ");
FileInputStream fisPro = new FileInputStream("productos.dat");
ObjectInputStream oisPro = new ObjectInputStream(fisPro);
try {
while (true) {
productos = (HashMap) oisPro.readObject();
Integer ci = (Integer) oisPro.readObject();
Producto.setContador(ci.intValue());
}
} catch (EOFException e) {
System.out.println("Lectura de productos finalizada...");
System.out.println(productos.toString());
} catch (ClassNotFoundException cnf) {
System.out.println("Error de clase: " + cnf.toString());
}
fisPro.close();
}

// lista
private static void lista() throws IOException {
System.out.println("\n -- Listar productos -- ");
//Comparador para ordenar las personas por su DNI
Comparator PreProComp = new Comparator() {

10
public int compare(Object o1, Object o2) {
Producto pro1 = (Producto) o1;
Producto pro2 = (Producto) o2;
Double p1 = new Double(pro1.getPrecio());
Double p2 = new Double(pro2.getPrecio());
return p1.compareTo(p2);
}
};
//Convertimos la tabla hash en un array de objetos
Object productosA[] = productos.values().toArray();

//Ordenamos los objetos del array por el atributo Precio
Arrays.sort(productosA, PreProComp);

//Presentamos la informacin
int i;
System.out.println("\nProductos ordenadas por Precio:");
for (i = 0; i < productosA.length; i++) {
System.out.println(productosA[i].toString());
}
}
}

Anda mungkin juga menyukai