Este blog fue creado con la intencion de aportar a los alumnos una ayuda con los ejercicios de la carrera de ingenieria de sistemas LEVI VELASQUEZ PAZ

Blogroll

sábado, 16 de diciembre de 2017

Otro ejemplo


import java.io.*;

public class Producto {

    private String codigo;
    private String descripcion;
    private double precio;
    private int stock;

    public Producto() {
        setCodigo(null);
        setDescripcion(null);
        setPrecio(0);
        setStock(0);
    }

    public Producto(String codigo, String descripcion, double precio, int stock) {
        this.setCodigo(codigo);
        this.setDescripcion(descripcion);
        this.setPrecio(precio);
        this.setStock(stock);
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public double getPrecio() {
        return precio;
    }

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

    public int getStock() {
        return stock;
    }

    public void setStock(int stock) {
        this.stock = stock;
    }

    public void escribir(RandomAccessFile archivo) throws IOException {
        if (codigo.length() < 10) {
            for (int i = codigo.length(); i < 10; i++) {
                codigo = codigo + " ";
            }
        } else {
            codigo = codigo.substring(0, 10);
        }

        if (descripcion.length() < 50) {
            for (int i = descripcion.length(); i < 50; i++) {
                descripcion = descripcion + " ";
            }
        } else {
            descripcion = descripcion.substring(0, 50);
        }

        archivo.writeChars(codigo);
        archivo.writeChars(descripcion);
        archivo.writeDouble(precio);
        archivo.writeInt(stock);
    }

    public void leer(RandomAccessFile archivo) throws IOException {
        codigo = "";
        for (int i = 0; i < 10; ++i) {
            codigo += archivo.readChar();
        }
        descripcion = "";
        for (int i = 0; i < 50; ++i) {
            descripcion += archivo.readChar();
        }
        precio = archivo.readDouble();
        stock = archivo.readInt();
    }

    public int tamañoRegistro() {
        return 132;
    }

    public static void crearArchivoProductos() {
        File f = new File("d:\\productos.dat");
        if (!f.exists()) {
            try {
                RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
                fProductos.close();
            } catch (Exception ex) {
            }
        }
    }

    public Producto buscarProducto(String codigo) throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
        // seek(# de Bytes a recorrer)
        fProductos.seek(0);
        boolean exito = false;
        // fproductos.getFilePointer(): Devuelve el numero de bytes
        // que ha recorrido el puntero del archivo
        // En otras me devuelve la posicion actual del puntero

        while (fProductos.getFilePointer() < fProductos.length()) {
            this.leer(fProductos);
            // trim() : Funcion de cadena que elimina los espacios en blanco
            // compareToIgnoreCase(cadena) : no distingue mayusculas y minusculas
            if (this.codigo.trim().compareToIgnoreCase(codigo.trim()) == 0) {
                exito = true;
                break;
            }

        }

        fProductos.close();
        if (exito) {
            return this;
        } else {
            return null;
        }
    }

    public int buscarProducto1(String codigo) throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
        int pos, x = -1;
        fProductos.seek(0);
        pos = (int) fProductos.getFilePointer();
        while (fProductos.getFilePointer() < fProductos.length()) {
            this.leer(fProductos);
            if (this.codigo.trim().compareToIgnoreCase(codigo.trim()) == 0) {
                x = pos;
                break;
            }
            pos = (int) fProductos.getFilePointer();
        }
        fProductos.close();
        return x;
    }

    public Producto devolverProducto(int pos) throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
        fProductos.seek(pos);
        this.leer(fProductos);
        fProductos.close();
        return this;
    }

    public void modificaRegistro(int pos, String codigo, String descripcion, double precio, int stock) throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
        fProductos.seek(pos);
        this.codigo = codigo;
        this.descripcion = descripcion;
        this.precio = precio;
        this.stock = stock;
        this.escribir(fProductos);
        fProductos.close();
    }

    public void agregar() throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "rw");
        // fproductos.seek : direccion el puntero del archivo en un determinado registro
        // de acuerdo un numero de bytes
        fProductos.seek(fProductos.length());
        // fProductos.length : Me devuelve el tamaño en bytes del Archivo
        this.escribir(fProductos);
        fProductos.close();
    }

    public boolean eliminaRegistro(String codigo) throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
        RandomAccessFile auxiliar = new RandomAccessFile("d:\\auxiliar.dat", "rw");
        fProductos.seek(0);
        boolean exito = false;
        while (fProductos.getFilePointer() < fProductos.length()) {
            this.leer(fProductos);
            if (this.codigo.trim().compareToIgnoreCase(codigo.trim()) != 0) {
                this.escribir(auxiliar);
            } else {
                exito = true;
            }
        }
        fProductos.close();
        auxiliar.close();
        File archivo = new File("d:\\productos.dat");
        archivo.delete();
        File archivoaux = new File("d:\\auxiliar.dat");
        archivoaux.renameTo(archivo);
        return exito;
    }

    public int numeroDeRegistros() throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
        int n = (int) fProductos.length() / this.tamañoRegistro();
        fProductos.close();
        return n;

    }

    public String toString() {
        return codigo.trim() + " " + descripcion.trim() + " " + precio + " " + stock;
    }

    public void imprimir() throws IOException {
        RandomAccessFile fProductos = new RandomAccessFile("d:\\productos.dat", "r");
        // seek(# de Bytes a recorrer)
        fProductos.seek(0);

        while (fProductos.getFilePointer() < fProductos.length()) {
            this.leer(fProductos);
            System.out.println(this);
        }

        fProductos.close();
    }

}



import java.io.*;
class ArchivoAleatorio {

    public static void main(String args[]) throws IOException {
        // se llama crearArchivoProductos porque es estatico
        Producto.crearArchivoProductos();

        new Producto("001", "alfa", 12.5, 10).agregar();
        new Producto("002", "beta", 13.9, 10).agregar();
        Producto prod = new Producto();

        if (prod.buscarProducto("001") != null) {
            System.out.println("El codigo existe");
        } else {
            System.out.println("El codigo no existe");
        }

        prod.imprimir();

    }
}

Share:

0 comentarios:

Publicar un comentario

Buscar este blog

Con tecnología de Blogger.

Blog Archive

Blog Archive