Skip to content

Latest commit

 

History

History
478 lines (313 loc) · 21.5 KB

File metadata and controls

478 lines (313 loc) · 21.5 KB

Projeto 01 - Conta Bancária - ContaController - Parte II

Na etapa anterior, criamos a Classe ContaController, que implementa a Interface ContaRepository, que possui a assinatura dos Métodos necessários para manipular os Objetos das Classes ContaCorrente e ContaPoupanca, e armazená-los (em memória) na Collection do tipo List (Classe ArrayList). Implementamos os Métodos Listar Todas as Contas e Cadastrar Conta da Interface ContaRepository, e o Método auxiliar Gerar Numero da Conta.

Nesta etapa, vamos continuar a implementação dos Métodos da Interface ContaRepository e os Métodos auxiliares.

O Diagrama de Classes do nosso Projeto ficará da seguinte forma:

classDiagram
class Conta {
<<Abstract>>
  - numero : int
  - agencia : int
  - tipo : int
  - titular : String
  - saldo : float
  + int getNumero()
  + int getAgencia()
  + int getTipo()
  + String getTitular()
  + float getSaldo()
  + void setNumero(int numero)
  + void setAgencia(int agencia)
  + void setTipo(int tipo)
  + void setTitular(String titular)
  + void setSaldo(float saldo)
  + boolean sacar(float valor)
  + void depositar(float valor)
  + void visualizar()
}
class ContaCorrente {
  - limite : float
  + float getLimite()
  + void setLimite(float limite)
  + boolean sacar(float valor)
  + void visualizar()
}
class ContaPoupanca {
  - aniversario : int
  + int getAniversario()
  + void setAniversario(int aniversario)
  + void visualizar()
}
class ContaRepository{
<< Interface >>
+ void procurarPorNumero(int numero)
+ void listarTodas()
+ void cadastrar(Conta conta)
+ void atualizar(Conta conta)
+ void deletar(int numero)
+ void sacar(int numero, float valor)
+ void depositar(int numero, float valor)
+ void transferir(int numeroOrigem, int numeroDestino, float valor)
}
class ContaController{
+ void procurarPorNumero(int numero)
+ void listarTodas()
+ void cadastrar(Conta conta)
+ void atualizar(Conta conta)
+ void deletar(int numero)
+ void sacar(int numero, float valor)
+ void depositar(int numero, float valor)
+ void transferir(int numeroOrigem, int numeroDestino, float valor)
+ int gerarNumero()
+ Conta buscarNaCollection(int numero) 
}
Conta <|-- ContaCorrente : É um tipo de
Conta <|-- ContaPoupanca : É um tipo de
Conta <-- ContaRepository : Tem uma
ContaRepository <|-- ContaController : Implementa
Loading

👣 Passo 01 - Implementar o Método Procurar Conta por Numero

Na sequência, vamos implementar o Método Procurar Conta por Numero, mas antes, precisamos criar o Método auxiliar Buscar na Collection, no final da Classe ContaController, que retornará um Objeto conta a partir do numero da conta, caso este Objeto exista, através do código abaixo:

Linha 66: Observe que na assinatura do Método foi inserido como parâmetro uma variável do tipo int, chamada numero, que receberá o número da conta que se deseja localizar.

Linha 67: Através do Laço de Repetição for...each, percorremos toda a Collection listaContas.

Observe que a variável local conta, utilizada para receber um Objeto Conta a cada iteração da Collection, definida pelo Laço de repetição, foi criada através da palavra reservada var.

var: É uma palavra reservada do Java, que tem o objetivo de criar variáveis locais, sem a definição do tipo. O tipo da variável é definido por inferência, ou seja, a palavra reservada var define o tipo da variável através do valor de inicialização da variável.

Assim como no código do Método listarTodas(), o Laço de Repetição percorre toda a Collection listaContas, que armazena Objetos da Classe Conta. A palavra reservada var entende que a variável conta deve ser criada como um Objeto da Classe Conta, porque receberá um Objeto da Classe Conta.

Linha 68: Verifica se o Atributo numero (obtido através do Método getNumero()), do Objeto da Classe Conta armazenado na variável conta é o mesmo que foi enviado na variável numero.

Linha 69: Se os números forem iguais, o Método devolve o Objeto Conta encontrado e finaliza o Laço de repetição.

Linha 73: Se o número não for encontrado na Collection listaContas, o Método devolve um Objeto null.

Método auxiliar criado, vamos implementar o código do Método Procurar Conta por Numero, através do código abaixo:

Linha 13: Observe que na assinatura do Método foi inserido como parâmetro uma variável do tipo int, chamada numero, que receberá o número da conta que se deseja localizar.

Linha 14: Observe que a variável local conta, utilizada para receber o Objeto Conta, que foi encontrado na Collection listaContas, foi criada através da palavra reservada var. Por inferência, a palavra reservada var entende que a variável conta, deve ser um Objeto da Classe Conta, porque receberá o retorno do Método buscarNaCollection.

Linhas 16 a 19: Através do Laço Condicional, verifica se o Objeto Conta foi encontrado.

  • Se foi encontrado, exibe os dados na tela através do Método visualizar().
  • Caso contrário (Objeto null), exibe na tela a mensagem informando que a conta não foi encontrada.

Salve as alterações!

Para buscar um Objeto da Classe Conta, precisamos receber o numero da Conta, via teclado. Para receber os dados via teclado, precisamos criar um "formulário" para receber o numero da conta através dos Comandos de Entrada e Saída.


👣 Passo 02 - Inserir o Método Procurar Conta por Número na Classe Menu

Agora que implementamos o Método Procurar Conta por Número, vamos inserir uma chamada para este Método na Classe Menu:

  1. Na Classe Menu, localize o trecho de código abaixo:
  1. Insira o trecho de código abaixo:

Linhas 119 a 120: Foram criada a entrada de dados via teclado para a variável numero, que receberá o numero da conta que deverá ser procurada na Collection listaContas.

Linha 122: Executa o Método procurarPorNumero(int numero), da Classe ContaController, passando como parâmetro a variável numero, que contém o numero da conta (recebido via teclado), que deverá ser procurada na Collection listaContas.

Salve e Execute o projeto clicando no botão Run.

  1. Será aberto o Menu, que deve ser semelhante ao da figura abaixo:
  1. Digite a opção 3 (indicado com uma seta verde na imagem acima) e veja o resultado abaixo:
Consultar dados da Conta - por número

Digite o número da conta: 
1

*********************************************************************
Dados da Conta:
*********************************************************************
Numero da Conta: 1
Agência: 123
Tipo da Conta: Conta Corrente
Titular: João da Silva
Saldo: 1000.0
Limite de Crédito: 100.0

Pressione Enter para Continuar...

Observe que ao procurarmos a conta numero 1, a conta foi encontrada e os seus dados foram exibidos na tela.

  1. Experimente repetir a operação e digitar o numero 10:
Consultar dados da Conta - por número

Digite o número da conta: 
10

A Conta número: 10 não foi encontrada!

Pressione Enter para Continuar...

Observe que ao procurarmos a conta numero 10, a conta não foi encontrada e uma mensagem foi exibida na tela.


👣 Passo 03 - Implementar o Método Atualizar Conta

Na sequência, vamos implementar o Método Atualizar Conta, através do código abaixo:

Linha 38: Observe que na assinatura do Método, foi inserido como parâmetro um Objeto da Classe Conta, chamado conta. Este Objeto terá os seus dados atualizados na Collection listaContas.

Linha 39: Antes de atualizar o Objeto Conta na Collection listaContas, precisamos verificar se o Objeto conta existe. Observe que foi criada a variável local buscaConta, para receber o Objeto da Classe Conta, que foi encontrado na Collection listaContas.

O Objeto buscaConta foi criado através da palavra reservada var. Por inferência, a palavra reservada var entende que a variável buscaConta, deve ser um Objeto da Classe Conta, porque receberá o retorno do Método buscarNaCollection.

Observe que o numero da conta, foi enviado através do Método getNumero() do Objeto conta.

Linhas 41 a 45: Através do Laço Condicional, verifica se o Objeto Conta foi encontrado.

  • Se a conta foi encontrada, os dados do Objeto são atualizados na Collection listaContas através do Método set(). Observe que dentro do Método set, foram adicionados 2 parâmetros:
    • listaContas.indexOf(buscaConta): Método que identifica o índice (posição) do Objeto conta encontrado na Collection listaContas, ou seja, os dados atuais.
    • conta: O Objeto conta, que foi enviado como parâmetro do Método (dados obtidos via teclado), onde estão os novos dados da conta, que substituirão os dados atuais.
  • Caso contrário (Objeto null), exibe na tela a mensagem informando que a conta não foi encontrada.

Salve as alterações!

Para atualizar os dados de um Objeto da Classe Conta, precisamos receber os novos dados da Conta, via teclado. Para receber os dados via teclado, precisamos criar um "formulário" para inserir os novos dados da Conta através dos Comandos de Entrada e Saída.


👣 Passo 04 - Inserir o Método Atualizar Conta na Classe Menu

Agora que implementamos o Método Atualizar Conta, vamos inserir uma chamada para este Método na Classe Menu:

Para atualizar os dados de uma conta, precisamos criar as entradas de dados, ou seja, criar um formulário de cadastro, semelhante ao do Método Cadastrar.

Vamos criar o formulário de atualização e criar a chamada para o Método Atualizar na Classe Menu

  1. Na Classe Menu, localize o trecho de código abaixo:
  1. Insira o trecho de código abaixo:

Linhas 129 a 130: Foi criada a entrada de dados via teclado para a variável numero, que receberá o numero da conta que será atualizada na Collection listaContas.

Linha 132: Executa o Método buscarNaCollection(numero), da Classe ContaController, que localizará a Conta a partir do numero.

Linha 134: Através do Laço Condicional, verifica se o Objeto Conta foi encontrado.

Se o Objeto da Classe Conta foi encontrado, o processo de atualização da conta será iniciado.

Linhas 134 a 141: Foram criadas as entradas de dados via teclado para as variáveis agencia, titular e saldo.

Linha 137: Executa o Método getTipo(), da Classe Conta, que retornará qual é o tipo da conta: 1 - Conta Corrente ou 2 - Conta Poupança. Esta informação, será armazenada na variável auxiliar tipo.

Linha 142: Observe que foi adicionado o comando skip da Classe Scanner. O Método skip ignora a entrada que corresponde ao padrão especificado, ignorando os delimitadores. Em nosso projeto, estamos ignorando \r (quebra de linha), para permitir que o comando nextLine() leia palavras compostas. Lembre-se que o titualr possui pelo menos nome e um sobrenome.

Linhas 148 a 166: Foi criado um Laço condicional do tipo Switch Expression, que checará qual o tipo da conta.

  • Caso a conta seja do tipo Conta Corrente (tipo 1), solicita a entrada de dados via teclado para a variável limite e executa o Método cadastrar da Classe ContaController.
  • Caso a conta seja do tipo Conta Poupança (tipo 2), solicita a entrada de dados via teclado para a variável aniversario e executa o Método cadastrar da Classe ContaController.
  • Caso o tipo da conta não seja encontrado ou seja diferente de 1 e 2, será exibida uma mensagem informando que o tipo da Conta é inválido.

Linha 153: Observe que dentro do Método atualizar foi criado um Objeto da Classe ContaCorrente, composto pelos valores das variáveis auxiliares, que receberam dados via teclado.

Linha 160: Observe que dentro do Método atualizar foi criado um Objeto da Classe ContaPoupanca, composto pelos valores das variáveis auxiliares, que receberam dados via teclado.

Switch Expression é uma nova sintaxe, ligeiramente modificada, para o Laço Condicional Switch Case. Com ele, as distinções de caso podem ser formuladas com muito mais elegância, deixando o código mais limpo.

Linhas 167 a 169 : Caso o Objeto da Classe Conta não seja encontrado (Objeto null), exibe na tela a mensagem informando que a conta não foi encontrada.

Salve e Execute o projeto clicando no botão Run.

  1. Será aberto o Menu, semelhante ao da figura abaixo:
  1. Digite a opção 4 e faça a Atualização dos dados da Conta Corrente numero 1, como mostra o console abaixo:
Atualizar dados da Conta

Digite o número da conta: 
1
Digite o Numero da Agência: 
789
Digite o Nome do Titular: 
João da Silva Santos
Digite o Saldo da Conta (R$): 
5000
Digite o Limite de Crédito (R$): 
600

A Conta numero: 1 foi atualizada com sucesso!

Pressione Enter para Continuar...
  1. Observe que a Conta foi Atualizada com sucesso. Pressione a tecla enter e atualize a Conta Poupança numero 3:
Atualizar dados da Conta

Digite o número da conta: 
3
Digite o Numero da Agência: 
321
Digite o Nome do Titular: 
Mariana dos Santos Noronha
Digite o Saldo da Conta (R$): 
4500
Digite o dia do Aniversario da Conta: 
15

A Conta numero: 3 foi atualizada com sucesso!

Pressione Enter para Continuar...
  1. Digite a opção 2 (indicado com uma seta verde na imagem abaixo):
  1. Veja o resultado abaixo:
Listar todas as Contas

*********************************************************************
Dados da Conta:
*********************************************************************
Numero da Conta: 1
Agência: 789
Tipo da Conta: Conta Corrente
Titular: João da Silva Santos
Saldo: 5000.0
Limite de Crédito: 600.0

*********************************************************************
Dados da Conta:
*********************************************************************
Numero da Conta: 2
Agência: 124
Tipo da Conta: Conta Corrente
Titular: Maria da Silva
Saldo: 2000.0
Limite de Crédito: 100.0

*********************************************************************
Dados da Conta:
*********************************************************************
Numero da Conta: 3
Agência: 321
Tipo da Conta: Conta Poupança
Titular: Mariana dos Santos Noronha
Saldo: 4500.0
Aniversário da conta: 15

*********************************************************************
Dados da Conta:
*********************************************************************
Numero da Conta: 4
Agência: 125
Tipo da Conta: Conta Poupança
Titular: Juliana Ramos
Saldo: 8000.0
Aniversário da conta: 15

Pressione Enter para Continuar...

Observe que os dados das contas 1 e 3 foram atualizados na Collection listaContas.


👣 Passo 05 - Implementar o Método Deletar Conta

Para finalizar os Métodos do CRUD, vamos implementar o Método Deletar Conta, através do código abaixo:

Linha 50: Observe que na assinatura do Método foi inserido como parâmetro uma variável do tipo int, chamada numero, que receberá o número da conta que se deseja deletar.

Linha 51: Antes de deletar o Objeto Conta na Collection listaContas, precisamos verificar se o Objeto conta existe.

Observe que foi criada a variável local conta, para receber o Objeto da Classe Conta, que foi encontrado na Collection listaContas. Esse Objeto foi criado através da palavra reservada var. Por inferência, a palavra reservada var entende que a variável conta, deve ser um Objeto da Classe Conta, porque receberá o retorno do Método buscarNaCollection.

Linhas 53 a 57: Através do Laço Condicional, verifica se o Objeto Conta foi encontrado.

  • Se a conta foi encontrada, o Objeto conta será apagado na Collection listaContas através do Método remove(). Observe que dentro do Método remove(), foi adicionado como parâmetro o Objeto conta.

    • Observe na Linha 54 que através de uma Laço condicional, será checado se a exclusão foi bem sucedida. Se foi bem sucedida, será exibida uma mensagem informando que a exclusão foi efetuada com sucesso.
  • Caso contrário (Objeto null), exibe na tela a mensagem informando que a conta não foi encontrada.

Salve as alterações!

Para buscar um Objeto da Classe Conta e Excluir caso seja encontrado, precisamos receber o numero da Conta, via teclado. Para receber os dados via teclado, precisamos criar um "formulário" para receber o numero da conta através dos Comandos de Entrada e Saída.


👣 Passo 06 - Inserir o Método Deletar Conta na Classe Menu

Agora que implementamos o Método Método Deletar Conta, vamos inserir uma chamada para este Método na Classe Menu:

  1. Na Classe Menu, localize o trecho de código abaixo:
  1. Insira o trecho de código abaixo:

Linhas 169 a 170: Foi criada a entrada de dados via teclado para a variável numero, que receberá o numero da conta que será excluída da Collection listaContas.

Linha 172: Executa o Método deletar(int numero), da Classe ContaController, passando como parâmetro a variável numero, que contém o numero da conta (recebido via teclado), que será excluída da Collection listaContas.

Salve e Execute o projeto clicando no botão Run.

  1. Será aberto o Menu, que deve ser semelhante ao da figura abaixo:
  1. Digite a opção 5 (indicado com uma seta verde na imagem acima) e veja o resultado abaixo:
Apagar a Conta

Digite o número da conta: 
1

A Conta numero: 1 foi deletada com sucesso!

Pressione Enter para Continuar...

Observe que ao procurarmos a conta numero 1 a conta foi encontrada e deletada. Além disso, uma mensagem de confirmação foi exibida na tela.

  1. Experimente repetir a operação e digitar o numero 10:
Apagar a Conta

Digite o número da conta: 
10

A Conta numero: 10 não foi encontrada!

Pressione Enter para Continuar...

Observe que ao procurarmos a conta numero 10, a conta não foi encontrada e uma mensagem foi exibida na tela.

Na sequência, vamos confirmar se a conta numero 1 foi excluída:

  1. Digite a opção 3 (indicado com uma seta verde na imagem abaixo):
  1. No item numero da conta, digite o numero 1 e veja o resultado abaixo:
Consultar dados da Conta - por número

Digite o número da conta: 
1

A Conta número: 1 não foi encontrada!

Pressione Enter para Continuar...

Observe que a conta numero 1 não foi encontrada, confirmando que a conta foi apagada.