PROJETO FINAL

PROJETO FINAL


DisciplinaProjeto1.388 materiais2.598 seguidores
Pré-visualização1 página
Disciplina: Programação Orientada a Objeto 
Professor: Paulo Cézar Holanda da Silva Junior 
Entrega do projeto 04/08/2019 até as 23:58 
Obs. Times devem possuir 4 Jedis :) 
Projeto vale 10 pontos 
 
PROJETO CURUMIMBANK 
O CurumimBank é uma instituição financeira com apenas 5 anos de mercado, mas que 
já possui um bom número de clientes. Buscando aumentar ainda mais o número de 
clientes, CurumimBanck deseja oferecer o serviço de cartões de crédito e de débito. 
Para isso, será necessário desenvolver um software para controlar os gastos de cada 
cartão e emitir as faturas. Seu time foi contratado para desenvolver esse software. 
A partir dos requisitos levantados, um Engenheiro de Software criou uma solução básica, 
contendo as seguintes classes e interfaces: 
 
\uf0b7 Interface Cartao: representa um cartão para o sistema. 
\uf0b7 Interface Cliente: representa um cliente do sistema bancário. Ela Possui o 
método, getLimiteDeCredito (que é explicado mais para frente). 
\uf0b7 Classe GerenciadorDeCartao: classe que permite obter um Cartão a partir do 
número dele e que também permite adicionar cartões ao sistema. 
\uf0b7 Classe Main: classe que contém o main e a lógica de menus da aplicação. 
\uf0b7 Classe Leitor: classe de apoio que tem métodos de leitura da entrada. Use-a, já 
que ela facilita a entrada de dados. (Leia o código para entender como ela 
funciona.) 
 
As classes Main e Leitor estão no pacote br.java.basico.projeto.ihc e a interface Cartao 
e a classe GerenciadorDeCartao estão em br.java.basico.projeto. A interface Cliente está 
no pacote br.java.basico (juntamente com a interface ContaBancária). 
 
 
 
 
 
 
A lógica de menus está parcialmente implementada, faltando alguns detalhes relativos 
à criação e o uso dos cartões. Com isso, você deve implementar as classes Main e 
GerenciadorDeCartao (criando outros atributos e operações, se necessário) e criar 
outras classes necessárias para uma solução orientada a objetos. Para isso, use a 
interface Cartao e as demais interfaces e classes do sistema bancário (Cliente e 
ContaBancaria, que agora estão em um pacote. Não altere, de forma alguma \u2013 e por 
motivo nenhum \u2013, as interfaces passadas. Também não altere a assinatura dos métodos 
já definidos nas classes Main e GerenciadorDeCartao. 
Requisitos 
O software deverá permitir dois tipos de cartão: cartão de crédito e o cartão de débito. 
Cartão de Débito 
O cartão de débito deve estar associado a uma ContaBancária. O valor da compra deve 
ser instantaneamente retirado dessa ContaBancária. Caso a retirada não possa ser 
efetuada, o método processar (da interface Cartao) deve retornar falso. 
Cartão de Crédito 
O cartão de crédito deve estar associado a um Cliente específico. Esse tipo de cartão 
deve permitir compras até um limite de crédito, que é definido para cada cliente (use a 
nova interface Cliente, que possui o método getLimiteDeCredito). Quando a compra 
estourar o limite de crédito, ela deve ser negada (retornar false no método processar). 
O cliente poderá fazer compras apenas à vista (ou seja, sem parcelamento por 
simplicidade). Quando for solicitado o fechamento da fatura, o software deverá calcular 
o total a ser pago e apresentar a lista de compras realizadas pelo cliente (ou seja, listar 
a data, o nome do estabelecimento e o valor de cada compra realizada até então). 
Depois do fechamento da fatura, o Cartão de Crédito deve ser zerado, ou seja, as 
compras antigas devem ser apagadas. Exemplo: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Existem dois tipos de cartões: cartões de crédito normais e cartões com bônus. Os 
cartões com bônus permite que o cliente acumule pontos a cada compra realizada. Esses 
pontos serão futuramente usados para a troca de produtos (não se preocupe com a 
troca de produtos; por enquanto você deve apenas guardar os pontos do cartão com 
bônus). O número de pontos acumulado depende de um fator, que varia dependendo 
do cartão. Por exemplo, um cartão com fator 1,5, acumula 1,5 pontos para cada R$ 1 
em compras; um cartão com fator 1 acumula 1 ponto para cada R$ 1 em compra. Note 
que ao fechar a fatura, os pontos não devem ser zerados. O sistema deve permitir a 
apresentação dos pontos acumulados. Exemplo: 
 
 
 
 
 
 
 
GerenciadorDeCartao 
Essa classe deve obrigatoriamente usar uma das implementações de Map ou uma Lista 
com Iterator(percorrer a lista) para obter um cartão a partir do número dele. 
Main 
Falta implementar os métodos processarCompra, emitirFatura, verPontos, 
adicionarCartaoDeDebito, adicionarCartaoDeCreditoNormal e 
adicionarCartaoDeCreditoComBonus 
No método adicionarCartaoDeDebito você precisará criar uma conta bancária para 
associá-la ao cartão. Assim como nas aulas, a conta pode ser conta corrente. Obtenha 
do usuário (perguntando para ele!) as informações necessárias para criar essa conta. 
Da mesma forma, crie um cliente, pergunta informações sobre ele. 
Não se esqueça de adicionar o cartão criado ao GerenciadorDeCartao. 
 
 
 
 
Dicas 
Para facilitar os testes, use o método inicializar da classe Main para adicionar cartões 
de teste ao sistema. Essas inicializações de teste serão desconsideradas na avaliação. 
 
É um trabalho em grupo que necessita de participação total dos Jedis. 
Qualquer coisa pode mandar e-mail ou chamar no whatsapp para tirar dúvidas.