import java.util.*; /** * Classe que modela um cart‹o de crŽdito * * @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 m�s/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 c—pia */ 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 m¼etodo para obter o ArrayList de movimentos deve ser private pois n‹o deve * ser necess‡rio que um cliente desta classe receba um ArrayList. * Este mŽtodo Ž apenas utilizado internamente para o construtor de c—pia e clone. * Se fosse para ser devolvido ao utilizador deveria devolver uma Collection!! * * @return C—pia de um ArrayList com as Strings que constituem os movimentos */ private ArrayList getMovimentos() { return (ArrayList)this.movimentos.clone(); } /** * MŽtodo que permite fazer uma c—pia do objecto CartaoCredito * * @return Um CartaoCredito mas com o tipo de Object */ public Object clone() { return new CartaoCredito(this); } /** * MŽtodo que permite gastar dinheiro, isto Ž, actualiza o montante em dŽbito 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 n‹o fosse poss’vel gastar mais dinheiro dever‡ tal ser sinalizado ao utilizador. //Iremos ver que tal ser‡ feito através do uso de Excep�›es } /** * MŽtodo que devolve uma String com a representa�‹o dos movimentos. * Faz-se uso do mŽtodo toString de ArrayList. * * @return String com os movimentos */ public String listaMovimentos() { return this.movimentos.toString(); } /** * MŽtodo que apresenta sobre a forma de String o objecto CartaoCredito * * @return String com informa�‹o sobre o estado do cart‹o de crŽdito */ public String toString() { StringBuffer sres = new StringBuffer(); sres.append("Titular: "); sres.append(this.titular); sres.append("\n"); sres.append("Nœmero: "); sres.append(this.numero); sres.append("\n"); sres.append("M�s: "); sres.append(this.mes); sres.append("\n"); sres.append("Ano: "); sres.append(this.ano); sres.append("\n"); sres.append("M‡ximoDŽbito: "); sres.append(this.maxdeb); sres.append("\n"); sres.append("MontanteD’vida: "); 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 mŽtodos como constantes do pedido no enunciado //... }