E ae pessoal,
salve salve, há um tempo atrás eu pedi ajuda para criar a minha classe computador (já resolvido, vlw galera!)
agora está com outro bug o meu projeto :?
[code]
package TestaProjeto;
import javax.swing.;
import java.util.;
public class Main {
public static void main(String[] args) {
int escolha = 0;
Computador pc = new Computador();
Cliente c = new Cliente();
Promocao promo = new Promocao();
while (escolha !=6){
escolha = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Computador"
+ "\n2- Clientes"
+ "\n3- Promoções"
+ "\n6- Sair"));
switch (escolha){
case 1:
pc.menuComputador();
break;
case 2:
c.menuCliente();
break;
case 3:
promo.menuPromocao();
break;
}
}
}
}[/code]
O erro é o seguinte, se vc iniciar o programa e escolher cada variável apenas 1x tudo funciona que é uma blz,
exemplo: eu escolho a opção 2 ai ele abre a classe Cliente, eu consigo cadastrar o meu cliente, consigo busca-lo e etc… eu coloquei um opção q volta da classe Cliente para o Main, até ai ok, agora se vc tentar entrar novamente na classe Cliente simplesmente não vai, e se eu mudo o código para algo do tipo…
case 2:
Cliente c = new Cliente();
c.menuCliente();
break;
Simplesmente eu não consigo achar mais os meus clientes que eu cadastrei na primeira vez q eu rodei, e agora? :?:
*PS: É um trabalho simples de faculdade, n preciso de BD nem nda disso… eu só queria q enquanto o meu programa rodasse eles n perdesse os dados…
Utiliza Do e While ao invés só de While
do{
//faz algo
}
While(opc!=6)
opção 6:
case 6:
System.exit(o);
break;
no switch você pode colocar um Default também:
Default:
JOptionPane.showMessageDialog(null,"Digite as opções 1, 2 ,3 ou 6 para sair");
break;
Fala Bruno,
arrumei o programa que nem vc recomendou ficou mais clean, mas continua no mesmo problema =/
dpois q eu acesso a 1x o menu Clientes eu n consigo acessar novamente…
[quote=Hermes “Dada”]Fala Bruno,
arrumei o programa que nem vc recomendou ficou mais clean, mas continua no mesmo problema =/
dpois q eu acesso a 1x o menu Clientes eu n consigo acessar novamente…
[/quote]
voce pode criar uma outra classe chamada Executor, coloque toda esta estrutura do/while dentro de um metodo desta classe
dentro deste método voce instancia os objetos das outras classes do mesmo modo
ja na classe Pc por exemplo, no metodo menuComputador(); ao digitar a opção correspondente a voltar ao outro menu, chame a função criada na classe Executor.
na classe PC voce pode criar um getPc() por exempo, pra retornar o Objeto com os atributos preenchidos,
ou getters dos atributos, para utilizar os mesmos atributos no objeto criado na classe Executor
não sei se isto é uma boa pratica de programação, devem existir maneiras mais “corretas”
existe um Design Pattern chamado Singleton também, não sei se é o seu caso
talvez os mais experientes ajudem
Fiz uns testes com uma outra classe e deu certo… então o problema não está no código do Main e sim no código do cliente?!
List<Cliente> listaCliente = new ArrayList<Cliente>(); // muito útil !
void menuCliente(){ // ok
Cliente c = new Cliente();
while (escolha !=3){
escolha = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Cadastrar cliente"
+ "\n2- Buscar cliente"
+ "\n3- Sair"));
switch (escolha){
case 1:
c.cadastrando();
break;
case 2:
c.buscaCliente();
break;
}
}
}
[quote=Bruno Ferreira][quote=Hermes “Dada”]Fala Bruno,
arrumei o programa que nem vc recomendou ficou mais clean, mas continua no mesmo problema =/
dpois q eu acesso a 1x o menu Clientes eu n consigo acessar novamente…
[/quote]
voce pode criar uma outra classe chamada Executor, coloque toda esta estrutura do/while dentro de um metodo desta classe
dentro deste método voce instancia os objetos das outras classes do mesmo modo
ja na classe Pc por exemplo, no metodo menuComputador(); ao digitar a opção correspondente a voltar ao outro menu, chame a função criada na classe Executor.
[/quote]
boa isso pode dar certo, vou testar aqui…
Olá poste o código do método menuCliente para que fique mais fácil entender o seu problema
atualizei minha resposta, da uma olhada pra ver se ajuda
List<Cliente> listaCliente = new ArrayList<Cliente>(); // muito útil !
void menuCliente(){ // ok
Cliente c = new Cliente();
while (escolha !=3){
escolha = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Cadastrar cliente"
+ "\n2- Buscar cliente"
+ "\n3- Sair"));
switch (escolha){
case 1:
c.cadastraCliente();
break;
case 2:
c.buscaCliente();
break;
}
}
}
Pronto, segue o método menuCliente()
[quote=Hermes “Dada”]Fiz uns testes com uma outra classe e deu certo… então o problema não está no código do Main e sim no código do cliente?!
[code]
List listaCliente = new ArrayList(); // muito útil !
void menuCliente(){ // ok
Cliente c = new Cliente();
while (escolha !=3){
escolha = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Cadastrar cliente"
+ "\n2- Buscar cliente"
+ "\n3- Sair"));
switch (escolha){
case 1:
c.cadastrando();
break;
case 2:
c.buscaCliente();
break;
}
}
}
[/code][/quote]
neste menu falta o caso 3
se o cara digitar 3 acontece o que?
tem que chamar uma função, que faz aquilo que voce fez no main
[quote=Bruno Ferreira][quote=Hermes “Dada”]Fiz uns testes com uma outra classe e deu certo… então o problema não está no código do Main e sim no código do cliente?!
[code]
List listaCliente = new ArrayList(); // muito útil !
void menuCliente(){ // ok
Cliente c = new Cliente();
while (escolha !=3){
escolha = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Cadastrar cliente"
+ "\n2- Buscar cliente"
+ "\n3- Sair"));
switch (escolha){
case 1:
c.cadastrando();
break;
case 2:
c.buscaCliente();
break;
}
}
}
[/code][/quote]
neste menu falta o caso 3
se o cara digitar 3 acontece o que?
tem que chamar uma função, que faz aquilo que voce fez no main[/quote]
Interessante, n sabia dessa função eu coloquei ela no método menuCliente() só o q acontece é q ele quita do programa e n volta pro menu do Main, vou tentar arrumar isso agora e acho q vai dar certo
haha acabei de descobrir q eu n sei fazer isso, como eu coloco um método q volte para o main? Eu coloquei uma nova opção no Switch q eh a Voltar e agora ?
Algo do tipo…
[code]
List listaCliente = new ArrayList(); // muito útil !
void menuCliente(){ // ok
int escolha = 0;
while (escolha !=3){
escolha = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Cadastrar cliente"
+ "\n2- Buscar cliente"
+ "\n3- Sair"));
switch (escolha){
case 1:
System.out.println("cadastrar Cliente");
Cliente c = criarCliente();
listaCliente.add(c);
break;
case 2:
System.out.println("pesquizar Cliente");
String clienteNome = "joao";
pesquizaCliente(listaCliente, clienteNome);
break;
}
}
}
public static void main(String[] args){
Principal principal = new Principal();
int escolha = 0;
while (escolha !=6){
escolha = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Computador"
+ "\n2- Clientes"
+ "\n3- Promoções"
+ "\n6- Sair"));
switch (escolha){
case 1:
System.out.println("menuComputador");
break;
case 2:
principal.menuCliente();
break;
case 3:
System.out.println("menuPromoção");
break;
}
}
}[/code]
Testei aqui criando uma nova classe chamada ExibeMenu, testa ai:
[code]package guj;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
public class ExibeMenu {
public Cliente cliente;
List<Cliente> listaCliente ;
public void menu(List list) {
int opc = 0;
cliente=new Cliente();
//se a lista for nula, como na primeira vez que é chamada, ela é instanciada
if(list==null)
list=new ArrayList<Cliente>();
//seta a lista do objeto instanciado aqui, para a que veio como parâmetro
cliente.listaCliente = list;
do{
opc = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Computador"
+ "\n2- Cliente"
+ "\n3- Sair"));
switch(opc){
case 1:
break;
case 2:
cliente.menuCliente();
break;
case 3:
JOptionPane.showMessageDialog(null,"Programa Fechado");
System.exit(3);
default:
JOptionPane.showMessageDialog(null,"Insira apenas os numeros 1,2 ou 3");
break;
}
}while(opc!=3);
}
}
[/code]
mudei as outras duas classes tambem:
[code]package guj;
import javax.swing.;
import java.util.;
public class Cliente {
String cadastro_inicio;
String nome;
String endereco;
String RG;
String CPF;
String telefone;
String cadastro_final;
int opc;
//para o numero de cadastro não começar em zero, mudei pra 1
int numCadastro = 1;
List<Cliente> listaCliente = new ArrayList<Cliente>();
void menuCliente(){ // menu da classe Cliente
do{
opc = Integer.parseInt(JOptionPane.showInputDialog("Menu:"
+ "\n1- Cadastrar cliente"
+ "\n2- Buscar cliente"
+ "\n3- Voltar"));
switch (opc){
case 1:
this.cadastraCliente();
break;
case 2:
this.buscaCliente();
break;
case 3:
/*instancia exibemenu, para voltar ao menu principal
chamando a função menu daquela classe e mandando a
lista como parametro para objeto cliente instanciado
naquela classe*/
ExibeMenu e=new ExibeMenu();
e.menu(this.getLista());
break;
default:
JOptionPane.showMessageDialog(null,"Insira apenas os numeros 1,2 ou 3");
break;
}
}while(opc != 3);
}
//metodo para retornar a lista
private List getLista(){
return listaCliente;
}
public void cadastraCliente(){ // Inicia o cadastro do Cliente
Cliente cliente = new Cliente();
cliente.nome = JOptionPane.showInputDialog("NOME:");
cliente.endereco = JOptionPane.showInputDialog("ENDEREÇO", "Rua, 00");
cliente.telefone = (JOptionPane.showInputDialog("TELEFONE:", "0000-0000"));
cliente.RG = JOptionPane.showInputDialog("RG:", "00.000.000-0");
cliente.CPF = JOptionPane.showInputDialog("CPF:", "000.000.000-00");
cliente.cadastro_final = "\nNúmero de cadastro: "+numCadastro+"\nNome: "+cliente.nome+"\nEndereço: "+cliente.endereco+"\nTelefone: "+cliente.telefone+"\nRG: "+cliente.RG+"\nCPF: "+cliente.CPF;
JOptionPane.showMessageDialog(null, "CADASTRO DO CLIENTE: "+cliente.cadastro_final);
listaCliente.add(cliente);
numCadastro += 1;
}
void buscaCliente(){ // Busca um cliente no cadastro pelo indice do List
int num = Integer.parseInt(JOptionPane.showInputDialog("Insira o Número do cadastro"))-1;//coloquei -1 para mostrar o numero de cadastros começando por 1
Cliente c=listaCliente.get(num);
JOptionPane.showMessageDialog(null, "CADASTRO DO CLIENTE: "+c.cadastro_final);
}
}
[/code]
[code]package guj;
public class Main {
public static void main(String[] args) {
//instanciando a classe exibemenu
ExibeMenu e=new ExibeMenu();
e.menu(null);
}
}[/code]
Agradecer ao pessoal que me ajudou e especialmente ao Bruno
ficou show o programa agora está rodando do jeito que eu queria :twisted:
vou aproveitar como a entrega do trabalho é até o dia 11 e tentar mexer na perfumaria do projeto
vlw pessoal
abs