Olá pessoal!
Sou novo no fórum e iniciante em programação, acabei de sair de Phyton e já com desafios em Java. Preciso fazer um programa com cadastro de pessoas (no caso aqui clientes) em que cada um tenha um código onde usarei o mesmo para chamar na pesquisa, editar, listar e excluir. Pesquisando consegui fazer alguma coisa, mas estou com dificuldade para fazer o a implementação para chamar pelo codigo, na internet verifiquei que recomendam usar o switch para o este tipo de programa, mas para colocar as condições neste modelo não sei fazer. Pesquisei aqui no fórum mas não encontrei o meu problema específico.
Segue meu codigo.
Classe principal (ProjectClient)
package ProjectClient;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Scanner;
public class TestaMain {
private static void menu() {
System.out.println("");
System.out.println(" -------------------------------------------------------------------");
System.out.println(" | C A D A S T R O D E C L I E N T E S |");
System.out.println(" | 1 - CADASTRAR NOVO CLIENTE |");
System.out.println(" | 2 - ATUALIZAR INFORMAÇÕES DO CLIENTE |");
System.out.println(" | 3 - REMOVER CLIENTE |");
System.out.println(" | 4 - LISTAR TODOS OS CLIENTES |");
System.out.println(" | 5 - LISTAR INFORMAÇÕES DO CLIENTE POR CODIGO |");
System.out.println(" | 6 - SALVAR DADOS DOS CLIENTES EM ARQUIVO |");
System.out.println(" -------------------------------------------------------------------");
}
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
Collection<Cliente> listaDeClientes = new ArrayList<Cliente>();
Cliente clientes = new Cliente();
int opcao;
do {
menu();
System.out.println("Digite a opção desejada: ");
opcao = entrada.nextInt();
switch (opcao) {
case 1:
System.out.println("Digite um Código para o Cliente!");
clientes.setCodigo(entrada.nextLong());
System.out.println("Digite o nome do Cliente! ");
clientes.setNome(entrada.next());
entrada.nextLine();
System.out.println("Digite o CPF");
clientes.setCpf(entrada.next());
entrada.nextLine();
System.out.println("Telefone: ");
clientes.settelefone(entrada.next());
entrada.nextLine();
System.out.println("Endereço");
clientes.setEndereco(entrada.next());
entrada.nextLine();
System.out.println("Email");
clientes.setemail(entrada.next());
entrada.nextLine();
listaDeClientes.add(clientes);
break;
case 2:
System.out.println("Digite o Código do Cliente para Atualizar: ");
Scanner c = new Scanner(System.in);
Long codigo = c.nextLong();
break;
case 3:
System.out.println("Digite o Código do Cliente para Remover: ");
break;
case 4:
System.out.println("Lista de todos os Clientes: ");
for (Cliente cliente : listaDeClientes) {
System.out.println(clientes);
}
break;
case 5:
System.out.println("Digite o Código do Cliente para Listar: ");
break;
case 6:
System.out.println("Arquivo de Clientes Salvo com Sucesso: ");
break;
}
} while (opcao != 0);
}
}
Classe cliente (Cliente)
package ProjectClient;
import java.util.Calendar;
public class Cliente {
private String nome;
private String endereco;
private String cpf;
private String telefone;
private String email;
private Long codigo;
@Override
public String toString() {
return "Nome: " + this.nome + "\nEndereço: " + this.endereco + "\nCPF: " + this.cpf + "\nTelefone: "
+ this.telefone + "\nEmail: " + email + "\nCodigo: " + this.codigo + "\n";
}
public String getNome() {
return nome;
}
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String gettelefone() {
return telefone;
}
public void settelefone(String telefone) {
this.telefone = telefone;
}
public String getemail() {
return email;
}
public void setemail(String email) {
this.email = email;
}
}
identar texto pré-formatado por 4 espaços
Mas quando for usar o Scanner só use o método nextLine(), poís é o único que suporta a quebra de linha, para fazer o parse você pode usar as classes wrappers.
Exemplo: Integer.parse("1");
OBS: eu não teste o código a seguir, então se tiver algo errado me avisa.
Classe principal (ProjectClient)
package ProjectClient;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Scanner;
public class TestaMain {
private static void menu() {
System.out.println("");
System.out.println(" -------------------------------------------------------------------");
System.out.println(" | C A D A S T R O D E C L I E N T E S |");
System.out.println(" | 1 - CADASTRAR NOVO CLIENTE |");
System.out.println(" | 2 - ATUALIZAR INFORMAÇÕES DO CLIENTE |");
System.out.println(" | 3 - REMOVER CLIENTE |");
System.out.println(" | 4 - LISTAR TODOS OS CLIENTES |");
System.out.println(" | 5 - LISTAR INFORMAÇÕES DO CLIENTE POR CODIGO |");
System.out.println(" | 6 - SALVAR DADOS DOS CLIENTES EM ARQUIVO |");
System.out.println(" -------------------------------------------------------------------");
}
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
Collection<Cliente> listaDeClientes = new ArrayList<Cliente>();
Cliente clientes = new Cliente();
int opcao;
do {
menu();
System.out.println("Digite a opção desejada: ");
opcao = Integer.parseInt(entrada.nextLine());
switch (opcao) {
case 1:
System.out.println("Digite um Código para o Cliente!");
clientes.setCodigo(Long.parseLong(entrada.nextLine()));
System.out.println("Digite o nome do Cliente! ");
clientes.setNome(entrada.nextLine());
entrada.nextLine();
System.out.println("Digite o CPF");
clientes.setCpf(entrada.nextLine());
entrada.nextLine();
System.out.println("Telefone: ");
clientes.settelefone(entrada.nextLine());
entrada.nextLine();
System.out.println("Endereço");
clientes.setEndereco(entrada.nextLine());
entrada.nextLine();
System.out.println("Email");
clientes.setemail(entrada.nextLine());
entrada.nextLine();
listaDeClientes.add(clientes);
break;
case 2:
System.out.println("Digite o Código do Cliente para Atualizar: ");
Scanner c = new Scanner(System.in);
Long codigo = Long.parseLong(entrada.nextLine());
break;
case 3:
System.out.println("Digite o Código do Cliente para Remover: ");
break;
case 4:
System.out.println("Lista de todos os Clientes: ");
for (Cliente cliente : listaDeClientes) {
System.out.println(clientes);
}
break;
case 5:
System.out.println("Digite o Código do Cliente para Listar: ");
break;
case 6:
System.out.println("Arquivo de Clientes Salvo com Sucesso: ");
break;
}
} while (opcao != 0);
}
}
Classe cliente (Cliente)
package ProjectClient;
import java.util.Calendar;
public class Cliente {
private String nome;
private String endereco;
private String cpf;
private String telefone;
private String email;
private Long codigo;
@Override
public String toString() {
return "Nome: " + this.nome + "\nEndereço: " + this.endereco + "\nCPF: " + this.cpf + "\nTelefone: "
+ this.telefone + "\nEmail: " + email + "\nCodigo: " + this.codigo + "\n";
}
public String getNome() {
return nome;
}
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String gettelefone() {
return telefone;
}
public void settelefone(String telefone) {
this.telefone = telefone;
}
public String getemail() {
return email;
}
public void setemail(String email) {
this.email = email;
}
}
Olá meu amigo, obrigado por tentar me ajudar. Eu estava tentando usaar o método nextLine mas quando executava ele ficava pulando a ordem dos dados, por exemplo eu digitava o nome e quando ía para o proximo dado ele pulava par o seguinte, pesquisei varias maneiras de resolver e a única maneira que consegui foi da maneira como está.
O que exatamente está acontecendo agora é que consegui implementar o case 1 (cadastrar clientes) e o case 4 (listar todos os clientes) mas os outros case que necessita entrar com o codigo de um cliente especifico não consigo fazer (nem meu professor conseguiu me auxiliar) se não conseguir vou ter de tentar implementar de outra maneira, pois não tenho idéia de como resolver. Ainda terei de resolver o case 6 de salvar os dados em arquivo txt.
Agradeço se puder me ajudar.
Bem, eu fiz algumas modificações, só pra você tentar entender, você só precisa fazer algumas alterações e deve funcionar.
No caso eu não fiz o método de salvar os dados em um arquivo, caso sinta dificuldade e queira ajuda só entrar em contanto.
Classe Main:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
// Use esse Scanner para ler as entradas, não precisa criar vários Scanners.
private static final Scanner ENTRADA = new Scanner(System.in);
private static final List<Cliente> CLIENTES = new ArrayList<>();
public static void main(String[] args) {
Main main = new Main();
main.start();
}
private void start() {
int option;
do {
option = menu();
switch (option) {
case 1:
salvar();
break;
case 2:
editar();
break;
case 3:
remover();
break;
case 4:
listarTodos();
break;
case 5:
listarPorCodigo();
break;
case 6:
System.out.println("Arquivo de CLIENTES Salvo com Sucesso: ");
break;
}
} while (option != 0);
}
private void salvar() {
Cliente cliente = new Cliente();
System.out.println("Digite um Código para o Cliente!");
cliente.setCodigo(Long.parseLong(ENTRADA.nextLine()));
System.out.println("Digite o nome do Cliente! ");
cliente.setNome(ENTRADA.nextLine());
System.out.println("Digite o CPF");
cliente.setCpf(ENTRADA.nextLine());
System.out.println("Telefone: ");
cliente.setTelefone(ENTRADA.nextLine());
System.out.println("Endereço");
cliente.setEndereco(ENTRADA.nextLine());
System.out.println("Email");
cliente.setEmail(ENTRADA.nextLine());
CLIENTES.add(cliente);
}
private void editar() {
System.out.println("Digite o Código do Cliente para Atualizar: ");
Cliente cliente = new Cliente();
cliente.setCodigo(123L); // Pedir código do usuário e colocar aqui
// Vai procurar um objeto com esse mesmo código, caso ache
// retorna o índice em que ele está, caso contrário, retorna -1. Ele só consegue fazer essa busca porque o
// método equals foi sobreescrito para que dois clientes com o mesmo código sejam iguais.
int clienteIndex = CLIENTES.indexOf(cliente);
if (clienteIndex > -1) {
cliente = CLIENTES.get(clienteIndex);
// Setar as novas propriedas para o cliente.
cliente.setNome("Novo-Nome");
cliente.setEmail("Novo-Email");
cliente.setCpf("Novo-CPF");
cliente.setEndereco("Novo-Endereco");
cliente.setTelefone("Novo-Telefone");
} else {
System.out.println("Cliente com esse código não foi encontrado!");
}
}
private void remover() {
System.out.println("Digite o Código do Cliente para Remover: ");
Cliente cliente = new Cliente();
cliente.setCodigo(12L); // Pedir código do usuário e colocar aqui
// Remove o objeto com o mesmo código digitado, também só funciona porque o método equals foi sobreescrito.
CLIENTES.remove(cliente);
}
private void listarTodos() {
System.out.println("Lista de todos os CLIENTES: ");
for (Cliente cliente : CLIENTES) {
System.out.println(cliente);
}
}
private void listarPorCodigo() {
System.out.println("Digite o Código do Cliente para Listar: ");
Cliente cliente = new Cliente();
cliente.setCodigo(123L);
// Usa a mesma lógica do método de editar.
int clienteIndex = CLIENTES.indexOf(cliente);
if (clienteIndex > -1) {
System.out.println(CLIENTES.get(clienteIndex));
}
}
private int menu() {
System.out.println(" -------------------------------------------------------------------");
System.out.println(" | C A D A S T R O D E C L I E N T E S |");
System.out.println(" | 1 - CADASTRAR NOVO CLIENTE |");
System.out.println(" | 2 - ATUALIZAR INFORMAÇÕES DO CLIENTE |");
System.out.println(" | 3 - REMOVER CLIENTE |");
System.out.println(" | 4 - LISTAR TODOS OS CLIENTES |");
System.out.println(" | 5 - LISTAR INFORMAÇÕES DO CLIENTE POR CODIGO |");
System.out.println(" | 6 - SALVAR DADOS DOS CLIENTES EM ARQUIVO |");
System.out.println(" -------------------------------------------------------------------");
System.out.print("--> ");
return Integer.parseInt(ENTRADA.nextLine());
}
}
Classe Cliente:
import java.util.Objects;
public class Cliente {
private String nome;
private String endereco;
private String cpf;
private String telefone;
private String email;
private Long codigo;
@Override
public String toString() {
return "Nome: " + this.nome + "\nEndereço: " + this.endereco + "\nCPF: " + this.cpf + "\nTelefone: "
+ this.telefone + "\nEmail: " + email + "\nCodigo: " + this.codigo + "\n";
}
// Código para que dois clientes com o mesmo código sejam considerados iguais.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cliente cliente = (Cliente) o;
return Objects.equals(codigo, cliente.codigo);
}
@Override
public int hashCode() {
return Objects.hash(codigo);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
}
Olá, obrigado pela ajuda!
Ainda está dando erro bem na minha dificuldade que é chamar o cliente pelo código, não sei se faltou eu mudar mais alguma coisa. A parte boa é que quanto mais eu tento mais estou aprendendo rsrsrs.
Quando tento chamar o case 2 (editar) por exemplo ele já pula para código não encontrado. Agora pecebi outro erro no meu codigo também, quando chamo o case 4 para listar todos os clientes ele está chamando apenas o ultimo cliente cadastrado e não todos.
Você deve pedir ao usuário que digite o código, aquele 123L foi só pra testar,
private void editar() {
System.out.println("Digite o Código do Cliente para Atualizar: ");
Cliente cliente = new Cliente();
// Pedindo ao usuário que digite o código que quer pesquisar.
cliente.setCodigo(Long.parseLong(ENTRADA.nextLine()));
...
}
Se você digitar o código de um cliente existente, as informações deles vão ser trocadas por aquelas depois do if.
if (clienteIndex > -1) {
cliente = CLIENTES.get(clienteIndex);
// Alterar aqui.
// Setar os novos valores, você precisa pedir para o usuário digitar.
cliente.setNome("Novo-Nome");
cliente.setEmail("Novo-Email");
cliente.setCpf("Novo-CPF");
cliente.setEndereco("Novo-Endereco");
cliente.setTelefone("Novo-Telefone");
}
No método de remover e listarPorCodigo você também precisa pedir a entrada do usuário.
Desculpa meu amigo, estou com bastante dificuldade aqui, tentei varios codigos com numeros e letras, só numeros, só letras, com 123L inserido no programa e sem e nenhum eu consigo rodar.
package Atividade;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
// Use esse Scanner para ler as entradas, não precisa criar vários Scanners.
private static final Scanner ENTRADA = new Scanner(System.in);
private static final List<Cliente> CLIENTES = new ArrayList<>();
public static void main(String[] args) {
Main main = new Main();
main.start();
}
private void start() {
int option;
do {
option = menu();
switch (option) {
case 1:
salvar();
break;
case 2:
editar();
break;
case 3:
remover();
break;
case 4:
listarTodos();
break;
case 5:
listarPorCodigo();
break;
case 6:
System.out.println("Arquivo de CLIENTES Salvo com Sucesso: ");
break;
}
} while (option != 0);
}
private void salvar() {
Cliente cliente = new Cliente();
System.out.println("Digite um Código para o Cliente!");
cliente.setCodigo(Long.parseLong(ENTRADA.nextLine()));
System.out.println("Digite o nome do Cliente! ");
cliente.setNome(ENTRADA.nextLine());
System.out.println("Digite o CPF");
cliente.setCpf(ENTRADA.nextLine());
System.out.println("Telefone: ");
cliente.setTelefone(ENTRADA.nextLine());
System.out.println("Endereço");
cliente.setEndereco(ENTRADA.nextLine());
System.out.println("Email");
cliente.setEmail(ENTRADA.nextLine());
CLIENTES.add(cliente);
}
private void editar() {
System.out.println("Digite o Código do Cliente para Atualizar: ");
Cliente cliente = new Cliente();
// Pedindo ao usuário que digite o código que quer pesquisar.
cliente.setCodigo(Long.parseLong(ENTRADA.nextLine()));
// Vai procurar um objeto com esse mesmo código, caso ache
// retorna o índice em que ele está, caso contrário, retorna -1. Ele só consegue fazer essa busca porque o
// método equals foi sobreescrito para que dois clientes com o mesmo código sejam iguais.
int clienteIndex = CLIENTES.indexOf(cliente);
if (clienteIndex > -1) {
cliente = CLIENTES.get(clienteIndex);
// Setar as novas propriedades para o cliente.
cliente.setNome("Novo-Nome");
cliente.setEmail("Novo-Email");
cliente.setCpf("Novo-CPF");
cliente.setEndereco("Novo-Endereco");
cliente.setTelefone("Novo-Telefone");
} else {
System.out.println("Cliente com esse código não foi encontrado!");
}
}
private void remover() {
System.out.println("Digite o Código do Cliente para Remover: ");
Cliente cliente = new Cliente();
cliente.setCodigo(12L); // Pedir código do usuário e colocar aqui
// Remove o objeto com o mesmo código digitado, também só funciona porque o método equals foi sobreescrito.
CLIENTES.remove(cliente);
}
private void listarTodos() {
System.out.println("Lista de todos os CLIENTES: ");
for (Cliente cliente : CLIENTES) {
System.out.println(cliente);
}
}
private void listarPorCodigo() {
System.out.println("Digite o Código do Cliente para Listar: ");
Cliente cliente = new Cliente();
cliente.setCodigo(123L);
// Usa a mesma lógica do método de editar.
int clienteIndex = CLIENTES.indexOf(cliente);
if (clienteIndex > -1) {
System.out.println(CLIENTES.get(clienteIndex));
}
}
private int menu() {
System.out.println(" -------------------------------------------------------------------");
System.out.println(" | C A D A S T R O D E C L I E N T E S |");
System.out.println(" | 1 - CADASTRAR NOVO CLIENTE |");
System.out.println(" | 2 - ATUALIZAR INFORMAÇÕES DO CLIENTE |");
System.out.println(" | 3 - REMOVER CLIENTE |");
System.out.println(" | 4 - LISTAR TODOS OS CLIENTES |");
System.out.println(" | 5 - LISTAR INFORMAÇÕES DO CLIENTE POR CODIGO |");
System.out.println(" | 6 - SALVAR DADOS DOS CLIENTES EM ARQUIVO |");
System.out.println(" -------------------------------------------------------------------");
System.out.print("--> ");
System.out.println("DIGITE UMA OPÇÃO PARA COMEÇAR: ");
return Integer.parseInt(ENTRADA.nextLine());
}
}
package Atividade;
import java.util.Objects;
public class Cliente {
private String nome;
private String endereco;
private String cpf;
private String telefone;
private String email;
private Long codigo;
@Override
public String toString() {
return "Nome: " + this.nome + "\nEndereço: " + this.endereco + "\nCPF: " + this.cpf + "\nTelefone: "
+ this.telefone + "\nEmail: " + email + "\nCodigo: " + this.codigo + "\n";
}
// Código para que dois clientes com o mesmo código sejam considerados iguais.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cliente cliente = (Cliente) o;
return Objects.equals(codigo, cliente.codigo);
}
@Override
public int hashCode() {
return Objects.hash(codigo);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
}