Você está na página 1de 23

Roteiro de criação de aplicação

de Cadastro básico
(CreateReadUpdateDelete)

Armazenando em ArrayList
• Update (atualiza)
• PesquisaPorNome (parte do nome):

POO - Técnico em Informática -IFSP - Hortolândia


© naur jr. 2009 -2016 (IFSP-HTO)
Antes de começar: responda as perguntas
1. Como será a aplicação? Como ela vai funcionar? Qual a interface com o
usuário?

2. O que está sendo cadastrado? Qual objeto será armazenado?

3. Onde serão armazenados os objetos?

4. Quais classes existirão e qual o papel de cada uma delas?

5. Quais são as etapas (versões) do desenvolvimento?


Como faço para desenvolver uma aplicação?
5. Quais são as etapas do desenvolvimento?
• Engenharia de Software

Análise Projeto Implementação Teste


(O que fazer) (Como fazer) (Fazer) Verificar

• Existem vários processos para organizar estas fases (Scrum* - método ágil)
Qual foi visto em Eng. de Sw?

• Etapas:
- Implementar as funcionalidades numa ordem que possa ir testando*:
(1)listar (2)cadastrar (3)remover (4) alterar
- Algumas funcionalidades poderão necessitar de novos métodos que auxiliarão na implementação da
funcionalidade
* Entrega com valor.
Fase de Análise: pensando nas classe envolvidas e
seus papeis
• Diagrama de Classe

Agencia
ContaCorrente
- contasLista: ArrayList<ContaCorrente>
- numero: int
gerencia - saldo: float
+ criarNovaConta( )
- nome: String
+ depositoConta( )
+ saqueConta( )
+ listarConta( )
+ setNome(nome: String)
+ removerConta( )
+ getNome(): String
+ pesquisaContaNome( )
..... get .. set

4
Revendo:

• As classes:
• ContaCorrente
• Agencia (GerenteContaCorrente)
• AgenciaTestadora

• Interface com o usuário: console

• Para armazenar: ArrayList

• O que o sistema irá fazer: CRUD


Versão 0 – Construindo a interface com o
usuário
• A aplicação fará um gerenciamento (cadastrar novos, listar, atualizar e
remover) de contas correntes de uma agência de um banco.
• Terá uma interface com o usuário com as opções a serem realizadas.
O usuário seleciona a opção desejada e o sistema realiza a operação.
public void inicia() {
Scanner entrada = new Scanner (System.in);
entrada.useDelimiter("\r\n"); //evita pular nextLine depois de nextInt() case 4:
int opc; //opcao do usuário System.out.print("\n LISTAGEM REALIZADO COM SUCESSO");
do { System.out.print("Digete qq tecla para retornar ao menu");
System.out.print("\n\n\tEntre com a opcao"); entrada.next();
System.out.print("\n 1 - Criar Nova Conta"); // cadastra uma nova conta break;
System.out.print("\n 2 - Realizar Deposito"); // altera o saldo de uma conta
case 5:
System.out.print("\n 3 - Relizar Saque (retirada)"); // altera o saldo de uma conta
System.out.print("\n CONTA REMOVIDA com sucesso!");
System.out.print("\n 4 - Listar Contas"); // lista todos as contas cadastradas
System.out.print("\n Digite qq tecla para retornar ao menu");
System.out.print("\n 5 - Remover Conta"); // remove uma conta cadastrada
entrada.next();
System.out.print("\n 6 - Pesquisa Conta por Nome"); // pesquisa uma conta e seus dados
System.out.print("\n 7 - Sair"); break;
System.out.print("\nopcao: "); case 6:
opc = entrada.nextInt(); System.out.print("\n PESQUISA REALIZADA com sucesso!");
System.out.print("\n Digite qq tecla para retornar ao menu");
switch( opc ) { entrada.next();
case 1: break;
System.out.print("\n\nCONTA CRIADA COM SUCESSO!!"); default :
System.out.print("\n Digite qq tecla para retornar ao menu");
System.out.print("\nOpcao Invalida -- Digite qq tecla para continuar");
entrada.next();
entrada.next();
break;
case 2:
} //fim switch
System.out.print("\n DEPOSITO REALIZADO COM SUCESSO");
System.out.print("\n Digite qq tecla para retornar ao menu"); } while ( opc != 7 ); //fim do/while
entrada.next();
break; System.out.print("\nFinalizando o programa -- Digite qq tecla para sair");
case 3: entrada.next();
System.out.print("\n SAQUE REALIZADO COM SUCESSO"); entrada.close(); // fecha a conexao com o teclado
System.out.print("\n Digite qq tecla para retornar ao menu");
} //fim inicia
entrada.next();
break; Agencia_v0.java
Versão 1 - O que está sendo cadastrado?
- Qual objeto será armazenado?
- Onde serão armazenados os objetos?
- Implementar as funcionalidades uma de cada vez e testar.
Qual objeto será armazenado? ContaCorrente
• Criar a classe que representa os objeos a serem cadastrados
• Com seus atributos (private)
• Criar os métodos GET/SET para os atributos

Onde serão armazenados os objetos? (Agencia)


• Criar/Adicionar as variáveis que armazenarão os objetos

Implementar as funcionalidades uma de cada vez e testar. (Agencia)


• Criar os métodos que serão as funcionalidades e mudar o menu com as chamadas dos
métodos

Agencia_v1.java
Adicionar o objeto que terá as informações ContaCorretente com os GET/SET

public class ContaCorrente {


public float getSaldo() {
private int numero; return saldo;
private String nome; }
private float saldo;
public void setSaldo(float saldo) {
public int getNumero() { this.saldo = saldo;
return numero; }
}
public void mostra()
public void setNumero(int numero) { {
this.numero = numero; System.out.printf("\nNumero: %d \tNome:
} %s \tSaldo: %.2f",numero,nome,saldo );
}
public String getNome() {
return nome; }// fim classe ContaCorrente
}

public void setNome(String nome) {


this.nome = nome;
}
Agencia_v1.java
Alterar o menu adicionando os métodos no switch (Agencia)
Adicionar onde serão armazenados os objetos (Agencia)
do
{
public class Agencia_v1 {
System.out.print("\n\n\tEntre com a opcao");
System.out.print("\n 1 - Criar Nova Conta");
//atributos que armazenarão os objetos
System.out.print("\n 2 - Realizar Deposito");
ArrayList<ContaCorrente> contasLista = new
....
ArrayList<ContaCorrente>();
System.out.print("\n 7 - Sair");
System.out.print("\nopcao: ");
opc = entrada.nextInt();

switch( opc )
{
Criar os métodos que serão chamados nas opções do menu case 1:
//Lista todos as contas corrrente criarNovaConta();
public void listarConta( ){ break;

System.out.print("\n LISTAGEM REALIZADO COM SUCESSO"); case 2:


System.out.print("Digete qq tecla para retornar ao menu"); depositoConta();
entrada.next(); break;
.....
}

Agencia_v1.java
Testar Agencia_v1.java

Testar cada opção do menu e verificar as mensagens

11
Versão 2 - Implementar as funcionalidades uma de cada vez e testar.
listarConta
GerenteContaCorrente (Agencia)
• Listar
- Verificar se esta vazio ( nenhum conta cadastrada): arrayList vazio isEmpty()
if(contasLista.isEmpty())
{
System.out.print("\n NAÕ EXISTE CONTA CADASTRADA - LISTAGEM VAZIA");
.....
return;
}
- Se existir conta cadastrada, mostrar apenas as contas que tem dados
- Percorre o ArrayList, se possuir conta mostra
for (ContaCorrente c : contasLista) {
// System.out.printf("\n#:%d -nome: %s - saldo: %.2f", c.getNumero(), c.getNome(), c.getSaldo());
c.mostra();
}

- Adicionar o métodos mostra( ) ContaCorrente

Agencia_v2.java
Versão 3 - Implementar as funcionalidades
cadastrar ..criaNovaConta()

GerenteContaCorrente (Agencia)
• criarNovaConta()
• Ler o numero da conta – verificar se não existe conta com este número
se existir informar e voltar ao menu **
• Ler nome e saldo
• Confirmar criação
• Criar o objeto com os valores
• Adiciona no ArrayList => arraylist.add(objeto)

• ** Ponto de melhoria: como?

Agencia_v3.java
Versão 4 - Implementar as funcionalidades
remover ..removerConta()

GerenteContaCorrente (Agencia)
• removerConta()
• Se NÃO existir contas cadastradas, avisar e retornar ao menu *
• Ler o numero da conta
• verificar se existe conta com este número se NÃO existir informar e voltar ao menu **
• mostrar os dados da conta a ser removida
• confirmar exclusão **
• excluir: variável = null;

• ** Ponto de melhoria: como?


Agencia_v4.java
Versão 5 - Implementar as funcionalidades
pesquisarContaNome
GerenteContaCorrente (Agencia)
• pesquisarContaNome(): pesquisa por parte do começo do nome
• Se NÃO existir contas cadastradas, avisar e retornar ao menu **
• Ler o nome do “dono” da conta ( ou o começo do nome)
• verificar se existe conta com PARTE deste NOME se NÃO existir informar e voltar ao
menu **
• mostrar os dados da conta a consultada

• ** Ponto de melhoria: como?

Agencia_v5.java
Consultado parte do nome: regionMatches()
método da classe String
(manipulação de string = string.h)
• Método da classe String
public boolean regionMatches( int toffset, String other, int ooffset, int len)
• toffset -- o deslocamento inicial da sub-região neste string.
• other -- um argumento string.
• ooffset -- o deslocamento inicial da sub-região no argumento String.
• len -- o numero de caracteres para serem comparados.
• Ex: String nome = new String(“Ana Maria”) // comparando 3 primeiros
caracteres
nome.regionMatches(0, “Ana Maria”, 0, nome.length()) )

String método toffset other ooffset len


public void pesquisaContaNome()
{
String nome; // nome do cliente para ser pesquisado

//contasLista vazia
if(contasLista.isEmpty())
{
System.out.print("\n NAÕ EXISTE CONTA CADASTRADA PARA PESQUISAR ");
System.out.print("\nDigite qq tecla para retornar ao menu");
entrada.next();
return;
}

System.out.print("\n************ PESQUISA POR NOME ************\n");


System.out.print("Nome cliente: " );
nome = entrada.next();

//Pesquisa Conta por nome


/* for ( ContaCorrente conta : contasLista)
{
if ( conta.getNome().equals(nome)) //TODO parte do nome??? regionMatches
System.out.printf("\n#:%d -nome: %s - saldo: %.2f", conta.getNumero(),conta.getNome(),
conta.getSaldo());
} Agencia_v5.java
public void pesquisaContaNome()
{
String nome; // nome do cliente para ser pesquisado

//contasLista vazia
if(contasLista.isEmpty())
..

System.out.print("\n************ PESQUISA POR NOME ************\n");


System.out.print("Nome cliente: " );
nome = entrada.next();

//Pesquisa Conta por nome


for ( ContaCorrente conta : contasLista)
{
if ( nome.regionMatches(0, conta.getNome(), 0, nome.length()) )
conta.mostra();
}

System.out.print("\n PESQUISA REALIZADA com sucesso!");


System.out.print("\n Digite qq tecla para retornar ao menu");
entrada.next();
return;
} Agencia_v5.java
Versão 6 - Implementar as funcionalidades
alterar depositoConta e saqueConta
GerenteContaCorrente (Agencia)
• depositoConta()
• Se NÃO existir contas cadastradas, avisar e retornar ao menu **
• Ler o numero da conta que deseja alterar o saldo (deposito)
• verificar se existe conta com número se NÃO existir informar e voltar ao menu **
• perguntar o valor do deposito/saque
• mostrar os dados da conta antes e depois do deposito/saque
• confirmar depósito

• ** Ponto de melhoria: como?

MUITO SEMELHANTE AO ADICIONAR/REMOVER!!!


Agencia_v6.java
public void depositoConta(){

int numero; // numero da conta para deposito


float valor; // valor do deposito
float novoSaldo; // valor total do novo saldo da conta
int localizacao; // posicao da conta no ArrayList

ContaCorrente conta;

System.out.print("\n************ DEPOSITO ************\n");


System.out.print("Conta numero: " );
numero = entrada.nextInt();

//Caso Conta nao existe avisa e retorna


localizacao = localizaConta(numero); //garante que nao existe conta

if ( localizacao == -1)
{
System.out.print("\n --- NAO JA EXISTE UMA CONTA COMO ESTE NUMERO ---");
System.out.print("\n --- Digite qq tecla para retornar ao menu");
entrada.next();
return ;
}

continua
//Recupera a Conta mostra o dados e pede o valor do deposito
conta = contasLista.get(localizacao);
System.out.printf("#:%d -nome: %s - saldo: %.2f", conta.getNumero(),conta.getNome(),
conta.getSaldo());
... Agencia_v6.java
//Confirma deposito e mostra os novos valores
System.out.print("\nValor do deposito: " );
valor = entrada.nextFloat();

//Confirma deposito
System.out.print("\n Deseja CONFIRMAR DEPOSITO neste conta? (S)Sim ou (N)Nao: ");
String opcao = entrada.next();

if (opcao.equals("N")) { //Comparacao de STRING !!!!


System.out.print("\n Remocao cancelada!");
System.out.print("\n Digite qq tecla para retornar ao menu");
entrada.next();
return; Qual seria a alteração para SAQUE?
}

novoSaldo = conta.getSaldo() + valor; //calcula novaSaldo


conta.setSaldo(novoSaldo); //ALteracao da CONTA, com o novoSaldo

System.out.print("\n\n Novo saldo"); //Mostra a conta alterada com novo saldo


conta.mostra();

System.out.print("\n\n DEPOSITO REALIZADO COM SUCESSO");


System.out.print("\n Digite qq tecla para retornar ao menu");
entrada.next();
}
Agencia_v6.java
Sugestões e dicas
• Realize o seu projeto seguindo estas etapas em sua aplicação.
• Mantenha o código aberto (v0..v6 ) + esta transparência (saber a funcionalidade)

• Realize a implementação de cada funcionalidade e teste o seu código


• Com todos os testes (leia os textos, as mensagens)
• Onde tiver opção testar as duas opções (1.adicionar 2. cancelar)

• Não esqueça:
• (1) de deixar a interface com o usuário bonita!!!
• (2) implementar novas funcionalidades e coisas a MAIS que este exemplo.

• LEIA ATENTAMENTE OS CRITÉRIOS DE AVALIAÇÃO!!!!


BOM TRABALHO!!!!
FIM!!!!

Você também pode gostar