Minha dúvida sobre fazer um CRUD, se possível faze-lo apenas com ArrayList, sem MySQL.
Comecei o meu CRUD mas estou com dificuldades de criar um novo Cliente, pois toda vez que crio um segundo Cliente, ele sobrepoem o Cliente anterior.
Toda vez que eu for cadastrar um novo Cliente, terei que fazer uma nova referência? Assim resolvendo esse problema, mas como são vários Clientes que o usuário poderá cadastrar, quero saber se tem como fazer de outro jeito sem ser esse :
->“mas como assim , sem ser esse?” ( Porque como vou criar 3 referências se o usuário quis criar apenas 3)
Então não é CRUD. E tu vai armazenar em um array? E não precisa ter persistência? Ou seja, desligou a máquina ou fechou o programa as informações irão se perder?
Contudo…
System.out.println("Seu ID - "+indice);c.setClienteID(indice);System.out.println("Qual o seu nome: ");c.setNome(teclado.next());System.out.println("Qual o seu Email: ");c.setEmail(teclado.next());indice++;listclientes.add(c);
Classe Cliente
Com metodos get e set apenas .
Tem de alguma forma , fazer esse procedimento da foto acima sem necessariamente fazer isso:
e sim é um cadastro simples , talvez nem crud é , mas apenas com arraylist(desligou acabou, coisa de iniciante).
H
heriquecido
O problema é transforma isso :
em apenas uma chamada de Método :
public void inserirCliente(Cliente c){
System.out.println("Seu ID - "+indice);c.setClienteID(indice);System.out.println("Qual o seu nome: ");c.setNome(teclado.next());System.out.println("Qual o seu Email: ");c.setEmail(teclado.next());indice++;listclientes.add(c);
}
mas sem sobrepor os dados dos clientes anteriores.
J
Solucao aceita
Jothar_Aleksander
Um exemplo…
Diagrama de classes:
1 - Pessoa:
publicabstractclassPessoa{privateintid;privateStringnome;privateStringapelido;privateintidade;/* * Métodos acessores e modificadores */publicvoidsetId(intid){this.id=id;}publicintgetId(){returnid;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetNome(){returnnome;}publicvoidsetApelido(Stringapelido){this.apelido=apelido;}publicStringgetApelido(){returnapelido;}publicvoidsetIdade(intidade){this.idade=idade;}publicintgetIdade(){returnidade;}}
2 - Cliente:
publicclassClienteextendsPessoa{privateStringdocumento;/* * Métodos acessores e modificadores */publicvoidsetDocumento(Stringdoc){this.documento=doc;}publicStringgetDocumento(){returndocumento;}}
3 - Principal:
importjava.util.Scanner;importjava.util.List;importjava.util.ArrayList;publicclassPrincipal{privateintid;privateStringnome;privateStringapelido;privateintidade;privateStringdocumento;privateList<Cliente>clientela=newArrayList<>();publicvoidlerDados(){Scannerleitor=newScanner(System.in);System.out.print("ID: ");id=leitor.nextInt();System.out.print("Nome: ");nome=leitor.nextLine();//Limpar o scannerleitor.nextLine();System.out.print("Apelido: ");apelido=leitor.nextLine();System.out.print("Idade: ");idade=leitor.nextInt();//Limpar o scannerleitor.nextLine();System.out.print("Documento: ");documento=leitor.nextLine();}publicClienteretornarCliente(){Clientecliente=newCliente();cliente.setId(id);cliente.setNome(nome);cliente.setApelido(apelido);cliente.setIdade(idade);cliente.setDocumento(documento);returncliente;}publicvoidsalvarCliente(Clientecliente){if(cliente!=null){clientela.add(cliente);}else{System.out.println("Ocorreu um erro. Impossível salvar o cliente!");}}publicvoidlistarClientes(){System.out.println("\n\n");for(Clientecliente:clientela){System.out.println("Id: "+cliente.getId());System.out.println("Nome: "+cliente.getNome());System.out.println("Apelido: "+cliente.getApelido());System.out.println("Idade: "+cliente.getIdade());System.out.println("Documento: "+cliente.getDocumento()+"\n\n");}}publicvoidalterarCliente(Clientecliente){if(cliente!=null){for(inti=0;i<clientela.size();i++){if(clientela.get(i).getId()==cliente.getId())clientela.set(i,cliente);}}}publicvoidexcluirCliente(Clientecliente){if(cliente!=null){for(inti=0;i<clientela.size();i++){if(clientela.get(i).getId()==cliente.getId())clientela.remove(cliente);}}}publicstaticvoidmain(String[]args){Principalprincipal=newPrincipal();Scannerleitor=newScanner(System.in);booleansair=false;do{System.out.println("\n\tMenu");System.out.println("1 - Abrir novo cadastro\n"+"2 - Salvar cadastro\n"+"3 - Atualizar cadastro\n"+"4 - Excluir cadastro\n"+"5 - Lista clientes\n"+"6 - Sair\n");System.out.print("\tOpção escolhida: ");intopcao=leitor.nextInt();System.out.println("\n\n");switch(opcao){case1:principal.lerDados();break;case2:principal.salvarCliente(principal.retornarCliente());break;case3:principal.lerDados();principal.alterarCliente(principal.retornarCliente());break;case4:principal.lerDados();principal.excluirCliente(principal.retornarCliente());break;case5:principal.listarClientes();break;case6:sair=true;break;default:System.out.println("\nOpção inválida!\n");}}while(sair==false);leitor.close();}}
Jothar você é um gênio irmão!! Amigo só faltou “matar o mal pela raiz”,
o meu problema e na saída dos dados(que faltou na imagem saída que você mandou), eu usando sua saída como exemplo iria em Salvar cadastro, mas (no meu) ele sempre sobrepoem o cadastro anterior, que na suas imagens eu não pude ver se daria também. Consegue confirmar para mim ? Creio eu que o seu também sobrepoem os dados do cadastro anterior.
Quero eu uma lista(de mais de um cadastro, no mesmo estilo que você me mostrou na imagem)
Aguardo…
J
Jothar_Aleksander1 like
Se você reparar, o método lerDados() guarda cada uma das informações em variáveis globais correspondentes. Se são globais, qualquer método pode operar com elas. Quando eu chamo o salvarCliente(Cliente cliente), esse método recebe o método o retorno do método retornarCliente() que instancia um novo objeto cliente e coloca as informações das variáveis globais no atributos. Logo, toda vez que selecionar a opção 2 (salvar) instanciará um novo objeto cliente e então serão objetos diferentes. Logo, não haverá sobreposição.
No caso eu fiz separado, mas você pode salvar logo depois de ler. No meu código, se o cara esquecer de selecionar a opção 2 depois de ler os dados de um cliente, esse cliente será perdido (não será adicionado à lista).
H
heriquecido
M E U D E U S ! TESTADO !!! OBG Jothar você salvou meu Dia! Deus te Abençoe :DDDDDDDDDDDDDDDDDD
J
Jothar_Aleksander
Havia um problema com o método lerDados() Não estava ‘lendo’ o nome e sim lixo do buffer. A correção:
publicvoidlerDados(){Scannerleitor=newScanner(System.in);System.out.print("ID: ");id=leitor.nextInt();System.out.print("Nome: ");//Limpar o scannerleitor.nextLine();nome=leitor.nextLine();System.out.print("Apelido: ");apelido=leitor.nextLine();System.out.print("Idade: ");idade=leitor.nextInt();System.out.print("Documento: ");//Limpar o scannerleitor.nextLine();documento=leitor.nextLine();}
J
Judeun
Desse jeito eu queria , mas o problema que ele sempre sobrepoem os dados do Cliente Anterior.