import java.util.*; /** * Classe que modela um carto de crdito * * @author anr * @version Abril 2006 */ public class CartaoCredito { // instance variables private String titular; private String numero; private String mes; private String ano; //para guardarem a validade na forma ms/ano private double maxdeb; private double montdiv; private ArrayList movimentos; /** * Constructor for objects of class CartaoCredito */ public CartaoCredito(String titular, String numero, String mes, String ano, double maxdeb) { this.titular = titular; this.numero = numero; this.mes = mes; this.ano = ano; this.maxdeb = maxdeb; this.montdiv = 0.0; this.movimentos = new ArrayList(); } /** * Construtor de cpia */ public CartaoCredito(CartaoCredito cc) { this.titular = cc.getTitular(); this.numero = cc.getNumero(); this.mes = cc.getMes(); this.ano = cc.getAno(); this.maxdeb = cc.getMaxDeb(); this.montdiv = cc.getMontDiv(); this.movimentos = cc.getMovimentos(); } public String getTitular() { return this.titular; } public String getNumero() { return this.numero; } public String getMes() { return this.mes; } public String getAno() { return this.ano; } public double getMaxDeb() { return this.maxdeb; } public double getMontDiv() { return this.montdiv; } /** * O metodo para obter o ArrayList de movimentos deve ser private pois no deve * ser necessrio que um cliente desta classe receba um ArrayList. * Este mtodo apenas utilizado internamente para o construtor de cpia e clone. * Se fosse para ser devolvido ao utilizador deveria devolver uma Collection!! * * @return Cpia de um ArrayList com as Strings que constituem os movimentos */ private ArrayList getMovimentos() { return (ArrayList)this.movimentos.clone(); } /** * Mtodo que permite fazer uma cpia do objecto CartaoCredito * * @return Um CartaoCredito mas com o tipo de Object */ public Object clone() { return new CartaoCredito(this); } /** * Mtodo que permite gastar dinheiro, isto , actualiza o montante em dbito e actualiza * os movimentos */ public void gastar(double quantia, String descr) { double aux; aux = this.montdiv + quantia; if (aux <= this.maxdeb) { //Se ainda se pode gastar dinheiro this.montdiv = aux; String saux = quantia + "EUR - " + descr; this.movimentos.add(saux); } //Se no fosse possvel gastar mais dinheiro dever tal ser sinalizado ao utilizador. //Iremos ver que tal ser feito atravs do uso de Excepes } /** * Mtodo que devolve uma String com a representao dos movimentos. * Faz-se uso do mtodo toString de ArrayList. * * @return String com os movimentos */ public String listaMovimentos() { return this.movimentos.toString(); } /** * Mtodo que apresenta sobre a forma de String o objecto CartaoCredito * * @return String com informao sobre o estado do carto de crdito */ public String toString() { StringBuffer sres = new StringBuffer(); sres.append("Titular: "); sres.append(this.titular); sres.append("\n"); sres.append("Nmero: "); sres.append(this.numero); sres.append("\n"); sres.append("Ms: "); sres.append(this.mes); sres.append("\n"); sres.append("Ano: "); sres.append(this.ano); sres.append("\n"); sres.append("MximoDbito: "); sres.append(this.maxdeb); sres.append("\n"); sres.append("MontanteDvida: "); sres.append(this.montdiv); sres.append("\n"); sres.append("Movimentos: "); sres.append(listaMovimentos()); sres.append("\n"); return sres.toString(); } public boolean equals(Object cc) { if (cc != null && (cc.getClass().getName()).equals("CartaoCredito")) { CartaoCredito cartao = (CartaoCredito)cc; return(this.titular.equals(cartao.getTitular()) && this.numero.equals(cartao.getNumero()) && this.mes.equals(cartao.getMes()) && this.ano.equals(cartao.getAno()) && this.maxdeb == cartao.getMaxDeb() && this.montdiv == cartao.getMontDiv() && this.movimentos.equals(cartao.getMovimentos())); } else return false; } //Mais mtodos como constantes do pedido no enunciado //... }