MAB 240 - Computação II

Laboratório 10 - 28/01/2013

1. Vamos usar as classes ObjectOutputStream e ObjectInputStream junto com classes genéricas para criar um banco de objetos que vai poder ser usado com diferentes tipos de objeto. O único requisito para um objeto poder ser salvo em um banco vai ser implementar a interface Elemento:

public interface Elemento extends java.io.Serializable {
	String chave();
}

Construa uma classe genérica BancoObjetos<TELEM extends Elemento> para armazenar objetos. O construtor de BancoObjetos deve receber uma string dando o diretório onde os objetos serão gravados e lidos. Caso o diretório não exista ele deve ser criado. Use a classe File para isso, em particular os métodos exists e mkdirs.

Cada elemento do banco deve ficar armazenado em um arquivo separado nesse diretório, com o nome do arquivo é formado pela chave mais a extensão “.objeto”. BancoObjetos precisa de dois métodos, ler e gravar. O método ler recebe uma chave e retorna o objeto correspondente àquela chave (ou null se ele não existir). O método gravar recebe um objeto e o grava no banco, e retorna true se a gravação foi bem sucedida ou false se ocorreu algum problema na gravação.

Para instanciar as classes ObjectOutputStream e ObjectInputStream você também vai precisar instanciar FileOutputStream e FileInputStream.

A classe ContaCorrente abaixo exercita o banco de objetos:

class ContaCorrente implements Elemento {
    private int numero;
    private String correntista;
    private double saldo;

    public ContaCorrente(int numero, String correntista, double saldo) {
        this.numero = numero;
        this.correntista = correntista;
        this.saldo = saldo;
    }

    public void deposita(double valor) {
        this.saldo += valor;
    }

    public void retira(double valor) {
        this.saldo -= valor;
    }

    public void transfere(ContaCorrente destino, double valor) {
        this.retira(valor);
        destino.deposita(valor);
    }
    
    public String chave() {
    		return "" + numero;
    }
    
    public String toString() {
    		return numero + ", " + correntista + ", " + saldo;
    }
    
    public static void main(String[] args) throws java.io.IOException {
    		BancoObjetos<ContaCorrente> bd = new BancoObjetos<ContaCorrente>("banco");
    		java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
    		while(true) {
    			System.out.print("Entre um número de conta: ");
    			int numero = Integer.parseInt(in.readLine());
    			if(numero == 0) break;
    			ContaCorrente cc = bd.ler("" + numero);
    			if(cc == null) {
        			System.out.print("Entre um correntista: ");
    				String correntista = in.readLine();
        			System.out.print("Entre um saldo: ");
    				double saldo = Double.parseDouble(in.readLine());
    				bd.gravar(new ContaCorrente(numero, correntista, saldo));
    			} else {
    				System.out.println(cc.toString());
    			}
    		}
    }
}

2. Adicione memória ao modelo da calculadora. A calculadora tem quatro operações envolvendo a memória: limpa, que zera a memória, msoma, que adiciona o valor do display à memória, msub, que subtrai o valor do display da memória, e recupera, que substitui o que está no display pelo valor da memória. O funcionamento da memória é o mesmo não importa qual o estado da calculadora.

3. Adicione uma operação trocaSinal ao modelo da calculadora do exercício anterior, que inverte o sinal do que está no display (negativo para positivo, positivo para negativo).


Última Atualização: 2016-05-18 10:58