ai galera eh o seguinte, to fazendo um sisteminha simples aki. eh uma loja, nela eu faço cadastro de clientes, cadastro de produtos e faço compras.
tenho a classe cliente que tem nome, cpf como atributos
a classe produto que tem codigo,preço como atributos
tenho a classe gerenciadorCliente que possui os metodos de cadsatrar e pesquisar um cliente
e a classe gerenciadorProduto que tem tb seus metodos de cadastrar e pesquisar um produto.
e tenho a classe venda que eh o main.
o problema que ta dando é que quando eu cadastro 2 produtos por exemplo, o primeiro some.
alguem poderia me ajudar?
e tambem se é necessario essas classes de gerenciadorCliente e Produto.
eis a classe:
importjava.util.ArrayList;importjavax.swing.JOptionPane;publicclassVenda{publicstaticvoidmain(Stringargs[]){Produtop=newProduto();GerenciadorProdutogp=newGerenciadorProduto();GerenciadorClientegc=newGerenciadorCliente();intopc;Stringconfirma,codigo=null;do{opc=Integer.parseInt(JOptionPane.showInputDialog("BEM VINDO\n 1 - Comprar\n 2 - Cadastrar\n 3 - Pesquisar"));switch(opc){case1:codigo=JOptionPane.showInputDialog("Digite o codigo do produto:");if(gp.buscarProduto(codigo)){confirma=String.valueOf(JOptionPane.showInputDialog(p.getNome()+" "+p.getPreco()+"\n Confirmar Compra? S/N?"));if(confirma.equalsIgnoreCase("S"))JOptionPane.showMessageDialog(null,"Compra Realizada");elseJOptionPane.showMessageDialog(null,"Compra Cancelada");}elseJOptionPane.showMessageDialog(null,"Produto nao cadastrado");break;case2:opc=Integer.parseInt(JOptionPane.showInputDialog("O QUE DESEJA CADASTRAR?\n 1 - Cliente\n 2 - Produto"));if(opc==1){}if(opc==2){Stringnome=JOptionPane.showInputDialog("Digite o nome do produto:");codigo=JOptionPane.showInputDialog("Digite o codigo do produto:");doublepreco=Double.parseDouble(JOptionPane.showInputDialog("Digite o preço do produto:"));p.setNome(nome);p.setCodigo(codigo);p.setPreco(preco);gp.cadastrarProduto(p);}break;}}while(opc!=3);}}
Cara…
não sei se entendi… mas acho que você terá que criar três listas. Uma para armazenar os clientes (List), uma para armazenar os produtos (List) e uma para armazenar as vendas. Só assim para você manter os dados cadastrados anteriormente.
Aí, cada vez que cadastrar um produto, por exemplo, você o adicionará na lista de produtos. Desta maneira terá todos os produtos cadastrados contidos nesta lista.
ou seja, uma lista pra clientes, e outra pra produto.
o que será que ta faltando?
eu cadastro 2, ai oprimeiro some!
evertonsilvagomesjav
diego_sepa o que esta acontecendo é o seguinte, vc instanciou sua classe Produto fora do loop, do-while, então vc esta utilizando um unico objeto para fazer o cadastro e esta sobrescrevendo suas variaveis (nome, codigo e preço), para resolver este problema de exibir somente o ultimo vc deve instanciar o objeto Produto dentro do loop, segue o exemplo:
#importjava.util.ArrayList;##importjavax.swing.JOptionPane;###publicclassVenda{#publicstaticvoidmain(Stringargs[]){#Produtop=newProduto();// aqui vc esta instanciando, tire ele daqui.#GerenciadorProdutogp=newGerenciadorProduto();#GerenciadorClientegc=newGerenciadorCliente();#intopc;#Stringconfirma,codigo=null;#do{##opc=Integer.parseInt(JOptionPane.showInputDialog("BEM VINDO\n 1 - Comprar\n 2 - Cadastrar\n 3 - Pesquisar"));##// instancie-o aqui...Produto p = new Produto();#switch(opc){#case1:#codigo=JOptionPane.showInputDialog("Digite o codigo do produto:");#if(gp.buscarProduto(codigo)){#confirma=String.valueOf(JOptionPane.showInputDialog(p.getNome()+" "+p.getPreco()+"\n Confirmar Compra? S/N?"));#if(confirma.equalsIgnoreCase("S"))#JOptionPane.showMessageDialog(null,"Compra Realizada");#else#JOptionPane.showMessageDialog(null,"Compra Cancelada");#}#else##JOptionPane.showMessageDialog(null,"Produto nao cadastrado");###break;#case2:#opc=Integer.parseInt(JOptionPane.showInputDialog("O QUE DESEJA CADASTRAR?\n 1 - Cliente\n 2 - Produto"));#if(opc==1){##}#if(opc==2){##Stringnome=JOptionPane.showInputDialog("Digite o nome do produto:");#codigo=JOptionPane.showInputDialog("Digite o codigo do produto:");#doublepreco=Double.parseDouble(JOptionPane.showInputDialog("Digite o preço do produto:"));#p.setNome(nome);#p.setCodigo(codigo);#p.setPreco(preco);#gp.cadastrarProduto(p);##}###break;##}##}while(opc!=3);####}#}#
D
diego_sepa
bom, eu acredito que tenha dado certo
porem, eu cadastro, qd vou em compra que digito o codigo ele aparece como null e sem preço nenhum.
o que pode ser?
Diego o que esta acontecendo é o seguinte, como o "case 1" não usa o objeto corrente para setar valores ás variáveis nome, cod e preco dos produtos quando vc tenta exibi-lo da "null" aos objetos Strings e "0" á preco que é um double primitivo. Para resolver este problema na classe GerenciadorProduto faça o seguinte:
publicclassGerenciadorProduto{privateArrayList<Produto>listaProdutos=newArrayList<Produto>();ProdutoprodutoAchado;// declare aqui um atributo do tipo Produto.publicvoidcadastrarProduto(Produtoproduto){listaProdutos.add(produto);}// fim do método de cadastro publicbooleanbuscarProduto(Stringcodigo){for(Produtop:listaProdutos){if(codigo.equals(p.getCod())){produtoAchado=p;// Pereceba que se o método encontrar o código ele atribui o objeto encontrado á variavél prodAchadoreturntrue;}}returnfalse;}// fim do método de buscarProduto// criei esse metodo de listar só para ver se estava cadastrando realmente.publicvoidlistaProduto(){for(Produtoprod:this.listaProdutos){System.out.println(prod.getCod()+"\n"+prod.getNome()+"\n"+prod.getPreco());}}// fim do Método de listarProduto.}
E no main faça o seguinte:
publicclassView{publicstaticvoidmain(Stringargs[]){GerenciadorProdutogp=newGerenciadorProduto();GerenciadorClientegc=newGerenciadorCliente();intopc;Stringconfirma,codigo=null;do{opc=Integer.parseInt(JOptionPane.showInputDialog("BEM VINDO\n 1 - Comprar\n 2 - Cadastrar\n 3 - Listar"));Produtop=newProduto();switch(opc){case1:codigo=JOptionPane.showInputDialog("Digite o codigo do produto:");if(gp.buscarProduto(codigo)){confirma=String.valueOf(JOptionPane.showInputDialog(gp.produtoAchado.getNome()+" "+gp.produtoAchado.getPreco()+"\n Confirmar Compra? S/N?"));// Perceba que estou usando á variável produtoAchado para buscar nome e preco ok?if(confirma.equalsIgnoreCase("S"))JOptionPane.showMessageDialog(null,"Compra Realizada");elseJOptionPane.showMessageDialog(null,"Compra Cancelada");}elseJOptionPane.showMessageDialog(null,"Produto nao cadastrado");break;case2:opc=Integer.parseInt(JOptionPane.showInputDialog("O QUE DESEJA CADASTRAR?\n 1 - Cliente\n 2 - Produto"));if(opc==1){}if(opc==2){Stringnome=JOptionPane.showInputDialog("Digite o nome do produto:");codigo=JOptionPane.showInputDialog("Digite o codigo do produto:");doublepreco=Double.parseDouble(JOptionPane.showInputDialog("Digite o preço do produto:"));p.setNome(nome);p.setCod(codigo);p.setPreco(preco);gp.cadastrarProduto(p);}break;case3:gp.listaProduto();break;}}while(opc!=0);}}