Ajuda com programa de cadastro, editar, listar, excluir um cliente
10 respostasResolvido
java
N
Nichele
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.
Classeprincipal(ProjectClient)packageProjectClient;importjava.util.ArrayList;importjava.util.Collection;importjava.util.List;importjava.util.Scanner;publicclassTestaMain{privatestaticvoidmenu(){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(" -------------------------------------------------------------------");}publicstaticvoidmain(String[]args){Scannerentrada=newScanner(System.in);Collection<Cliente>listaDeClientes=newArrayList<Cliente>();Clienteclientes=newCliente();intopcao;do{menu();System.out.println("Digite a opção desejada: ");opcao=entrada.nextInt();switch(opcao){case1: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;case2:System.out.println("Digite o Código do Cliente para Atualizar: ");Scannerc=newScanner(System.in);Longcodigo=c.nextLong();break;case3:System.out.println("Digite o Código do Cliente para Remover: ");break;case4:System.out.println("Lista de todos os Clientes: ");for(Clientecliente:listaDeClientes){System.out.println(clientes);}break;case5:System.out.println("Digite o Código do Cliente para Listar: ");break;case6:System.out.println("Arquivo de Clientes Salvo com Sucesso: ");break;}}while(opcao!=0);}}Classecliente(Cliente)packageProjectClient;importjava.util.Calendar;publicclassCliente{privateStringnome;privateStringendereco;privateStringcpf;privateStringtelefone;privateStringemail;privateLongcodigo;@OverridepublicStringtoString(){return"Nome: "+this.nome+"\nEndereço: "+this.endereco+"\nCPF: "+this.cpf+"\nTelefone: "+this.telefone+"\nEmail: "+email+"\nCodigo: "+this.codigo+"\n";}publicStringgetNome(){returnnome;}publicLonggetCodigo(){returncodigo;}publicvoidsetCodigo(Longcodigo){this.codigo=codigo;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEndereco(){returnendereco;}publicvoidsetEndereco(Stringendereco){this.endereco=endereco;}publicStringgetCpf(){returncpf;}publicvoidsetCpf(Stringcpf){this.cpf=cpf;}publicStringgettelefone(){returntelefone;}publicvoidsettelefone(Stringtelefone){this.telefone=telefone;}publicStringgetemail(){returnemail;}publicvoidsetemail(Stringemail){this.email=email;}}identartextopré-formatadopor4espaços
Alguém pode ajudar por favor? Ou vou ter de mudar todo o meu programa para tentar de outra forma.
S
SkyG0D
O que exatamenta ta acontecendo?
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.
Classeprincipal(ProjectClient)packageProjectClient;importjava.util.ArrayList;importjava.util.Collection;importjava.util.List;importjava.util.Scanner;publicclassTestaMain{privatestaticvoidmenu(){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(" -------------------------------------------------------------------");}publicstaticvoidmain(String[]args){Scannerentrada=newScanner(System.in);Collection<Cliente>listaDeClientes=newArrayList<Cliente>();Clienteclientes=newCliente();intopcao;do{menu();System.out.println("Digite a opção desejada: ");opcao=Integer.parseInt(entrada.nextLine());switch(opcao){case1: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;case2:System.out.println("Digite o Código do Cliente para Atualizar: ");Scannerc=newScanner(System.in);Longcodigo=Long.parseLong(entrada.nextLine());break;case3:System.out.println("Digite o Código do Cliente para Remover: ");break;case4:System.out.println("Lista de todos os Clientes: ");for(Clientecliente:listaDeClientes){System.out.println(clientes);}break;case5:System.out.println("Digite o Código do Cliente para Listar: ");break;case6:System.out.println("Arquivo de Clientes Salvo com Sucesso: ");break;}}while(opcao!=0);}}Classecliente(Cliente)packageProjectClient;importjava.util.Calendar;publicclassCliente{privateStringnome;privateStringendereco;privateStringcpf;privateStringtelefone;privateStringemail;privateLongcodigo;@OverridepublicStringtoString(){return"Nome: "+this.nome+"\nEndereço: "+this.endereco+"\nCPF: "+this.cpf+"\nTelefone: "+this.telefone+"\nEmail: "+email+"\nCodigo: "+this.codigo+"\n";}publicStringgetNome(){returnnome;}publicLonggetCodigo(){returncodigo;}publicvoidsetCodigo(Longcodigo){this.codigo=codigo;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEndereco(){returnendereco;}publicvoidsetEndereco(Stringendereco){this.endereco=endereco;}publicStringgetCpf(){returncpf;}publicvoidsetCpf(Stringcpf){this.cpf=cpf;}publicStringgettelefone(){returntelefone;}publicvoidsettelefone(Stringtelefone){this.telefone=telefone;}publicStringgetemail(){returnemail;}publicvoidsetemail(Stringemail){this.email=email;}}
N
Nichele
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.
S
SkyG0D
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:
importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;publicclassMain{// Use esse Scanner para ler as entradas, não precisa criar vários Scanners.privatestaticfinalScannerENTRADA=newScanner(System.in);privatestaticfinalList<Cliente>CLIENTES=newArrayList<>();publicstaticvoidmain(String[]args){Mainmain=newMain();main.start();}privatevoidstart(){intoption;do{option=menu();switch(option){case1:salvar();break;case2:editar();break;case3:remover();break;case4:listarTodos();break;case5:listarPorCodigo();break;case6:System.out.println("Arquivo de CLIENTES Salvo com Sucesso: ");break;}}while(option!=0);}privatevoidsalvar(){Clientecliente=newCliente();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);}privatevoideditar(){System.out.println("Digite o Código do Cliente para Atualizar: ");Clientecliente=newCliente();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.intclienteIndex=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!");}}privatevoidremover(){System.out.println("Digite o Código do Cliente para Remover: ");Clientecliente=newCliente();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);}privatevoidlistarTodos(){System.out.println("Lista de todos os CLIENTES: ");for(Clientecliente:CLIENTES){System.out.println(cliente);}}privatevoidlistarPorCodigo(){System.out.println("Digite o Código do Cliente para Listar: ");Clientecliente=newCliente();cliente.setCodigo(123L);// Usa a mesma lógica do método de editar.intclienteIndex=CLIENTES.indexOf(cliente);if(clienteIndex>-1){System.out.println(CLIENTES.get(clienteIndex));}}privateintmenu(){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("--> ");returnInteger.parseInt(ENTRADA.nextLine());}}
Classe Cliente:
importjava.util.Objects;publicclassCliente{privateStringnome;privateStringendereco;privateStringcpf;privateStringtelefone;privateStringemail;privateLongcodigo;@OverridepublicStringtoString(){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.@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(o==null||getClass()!=o.getClass())returnfalse;Clientecliente=(Cliente)o;returnObjects.equals(codigo,cliente.codigo);}@OverridepublicinthashCode(){returnObjects.hash(codigo);}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEndereco(){returnendereco;}publicvoidsetEndereco(Stringendereco){this.endereco=endereco;}publicStringgetCpf(){returncpf;}publicvoidsetCpf(Stringcpf){this.cpf=cpf;}publicStringgetTelefone(){returntelefone;}publicvoidsetTelefone(Stringtelefone){this.telefone=telefone;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicLonggetCodigo(){returncodigo;}publicvoidsetCodigo(Longcodigo){this.codigo=codigo;}}
N
Nichele
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,
privatevoideditar(){System.out.println("Digite o Código do Cliente para Atualizar: ");Clientecliente=newCliente();// 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.
Você tá colocando letras quando vai inserir o código, aí ele não consegue fazer o parse, coloca só números, sem o L ou M
N
Nichele
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.
packageAtividade;importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;publicclassMain{// Use esse Scanner para ler as entradas, não precisa criar vários Scanners.privatestaticfinalScannerENTRADA=newScanner(System.in);privatestaticfinalList<Cliente>CLIENTES=newArrayList<>();publicstaticvoidmain(String[]args){Mainmain=newMain();main.start();}privatevoidstart(){intoption;do{option=menu();switch(option){case1:salvar();break;case2:editar();break;case3:remover();break;case4:listarTodos();break;case5:listarPorCodigo();break;case6:System.out.println("Arquivo de CLIENTES Salvo com Sucesso: ");break;}}while(option!=0);}privatevoidsalvar(){Clientecliente=newCliente();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);}privatevoideditar(){System.out.println("Digite o Código do Cliente para Atualizar: ");Clientecliente=newCliente();// 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.intclienteIndex=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!");}}privatevoidremover(){System.out.println("Digite o Código do Cliente para Remover: ");Clientecliente=newCliente();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);}privatevoidlistarTodos(){System.out.println("Lista de todos os CLIENTES: ");for(Clientecliente:CLIENTES){System.out.println(cliente);}}privatevoidlistarPorCodigo(){System.out.println("Digite o Código do Cliente para Listar: ");Clientecliente=newCliente();cliente.setCodigo(123L);// Usa a mesma lógica do método de editar.intclienteIndex=CLIENTES.indexOf(cliente);if(clienteIndex>-1){System.out.println(CLIENTES.get(clienteIndex));}}privateintmenu(){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: ");returnInteger.parseInt(ENTRADA.nextLine());}}packageAtividade;importjava.util.Objects;publicclassCliente{privateStringnome;privateStringendereco;privateStringcpf;privateStringtelefone;privateStringemail;privateLongcodigo;@OverridepublicStringtoString(){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.@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(o==null||getClass()!=o.getClass())returnfalse;Clientecliente=(Cliente)o;returnObjects.equals(codigo,cliente.codigo);}@OverridepublicinthashCode(){returnObjects.hash(codigo);}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEndereco(){returnendereco;}publicvoidsetEndereco(Stringendereco){this.endereco=endereco;}publicStringgetCpf(){returncpf;}publicvoidsetCpf(Stringcpf){this.cpf=cpf;}publicStringgetTelefone(){returntelefone;}publicvoidsetTelefone(Stringtelefone){this.telefone=telefone;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicLonggetCodigo(){returncodigo;}publicvoidsetCodigo(Longcodigo){this.codigo=codigo;}}
S
Solucao aceita
SkyG0D
Cara, aqui com o mesmo código que você ta usando ta funcionando.