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);
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.
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:
// 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"); } }
// 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()); } } }