Dúvida no algorítimo de cadastro de clientes

9 respostas
G

Olá pessoal, eu estou tentando fazer um código em Java que faça exatamente isso:

Crie um programa que gerencie os clientes de uma empresa. O programa deverá conter o menu de opções:
? Adicionar Cliente (nome, e-mail, endereço)
? Remover Cliente
? Pesquisar Cliente
? Imprimir quantidade de clientes
? Listar todos os clientes
? Sair

Pois bem, eu consegui fazer isso:

// CLASSE PRINCIPAL
import java.util.Scanner;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Principal
{
	public static void main(String[] args)
	{
		int fim = 0;

		do
		{
			ArrayList<Cliente> dados = new ArrayList<Cliente>();

			String menu;
			int escolha;
			Scanner scan = new Scanner(System.in);

			menu = JOptionPane.showInputDialog("MENU\n\n" +
					"1 - Adicionar cliente\n" +
					"2 - Remover cliente\n" +
					"3 - Pesuisar cliente\n" +
					"4 - Imprimir quantidade de clientes\n" +
					"5 - Listar todos os clientes\n" +
					"0 - Sair\n");

			escolha = Integer.parseInt(menu);


			if(escolha == 1)
			{
				//Adicionar cliente.
			}
			else if(escolha == 2)
			{
				//Remover cliente.
			}
			else if(escolha ==3)
			{
				//Pesquisar cliente.
			}
			else if(escolha == 4)
			{
				//Imprimir quantidade de clientes.
			}
			else if(escolha == 5)
			{
				//Pesquisar clientes.
			}
			else if(escolha == 0)
			{
				fim = 1;
			}
			else
			{
				System.out.println("Opção inválida!");
			}


		}

		while(fim != 1);

	}

}


//CLASSE CLIENTE
public class Cliente
{
	private String nome;
	private String email;
	private String endereco;

	public Cliente(String nome, String email, String endereco)
	{
		this.nome = nome;
		this.email = email;
		this.endereco = endereco;
	}

	public String getNome()
	{
		return nome;
	}

	public void setNome(String nome)
	{
		this.nome = nome;
	}
	//------------------------------------
	public String getEmail()
	{
		return email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}
	//------------------------------------
	public String getEndereco()
	{
		return endereco;
	}

	public void setEndereco(String endereco)
	{
		this.endereco = endereco;
	}

Eu não consigo fazer com que as informações do cliente sejam armazendas no ArrayList, e pesquisando na internet achei meio confuso e não entendi direito como fazer. Agradeço a quem puder me explicar melhor e até me dar alguma sugestão pra melhorar o código.

9 Respostas

Reginildo

Você precisa utilizar métodos da classe ArrayList. Aqui abaixo uns links bem esclarecedores do assunto:



G

Obrigado pela ajuda Reginildo, baseado no que eu entendi, certamente entendi algo errado, eu tentei implementar a adição de cliente no código, mas algo saiu errado. Agradeço se alguém puder me ajudar a corrigir.

import java.util.Scanner;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Principal
{
	public static void main(String[] args)
	{
		int fim = 0;
		ArrayList<Cliente> dados = new ArrayList<Cliente>();//Aqui eu criei o ArrayList dados.
		Cliente chamada;//Aqui eu fiz a chamada dos métodos da classe cliente.

		do
		{
			String menu;
			int escolha;

			menu = JOptionPane.showInputDialog("MENU\n\n" +
					"1 - Adicionar cliente\n" +
					"2 - Remover cliente\n" +
					"3 - Pesuisar cliente\n" +
					"4 - Imprimir quantidade de clientes\n" +
					"5 - Listar todos os clientes\n" +
					"0 - Sair\n");

			escolha = Integer.parseInt(menu);


			if(escolha == 1)
			{
				String entrada = JOptionPane.showInputDialog("Digite o nome do usuário.");
				chamada.setNome(entrada);//Pelo que entendi aqui eu deveria passar a String
										//Que vai ser incluida no Nome.

				dados.add(Cliente);//Aqui eu tentei adicionar o Nome no ArrayList cliente
								   //Porém recebo o erro "Cliente cannot be resolved".
								   //O que estou fazendo de errado?

			}
			else if(escolha == 2)
			{
				//Remover cliente.
			}
			else if(escolha ==3)
			{
				//Pesquisar cliente.
			}
			else if(escolha == 4)
			{
				//Imprimir quantidade de clientes.
			}
			else if(escolha == 5)
			{
				//Pesquisar clientes.
			}
			else if(escolha == 0)
			{
				fim = 1;
			}
			else
			{
				System.out.println("Opção inválida!");
			}


		}

		while(fim != 1);

	}

}
filipi

Seu erro acontece porque no ArrayList deve passar como parâmetro seu objeto chamada, e não o tipo dele no caso, Cliente.
Ficaria:

dados.add(chamada)

E utilize um switch/case ao invés de fazer vários else if para a escolha… Dê uma olhada neste link para ver como aplicar.

valeu.

G
filipi:
Seu erro acontece porque no ArrayList deve passar como parâmetro seu objeto chamada, e não o tipo dele no caso, Cliente. Ficaria:
dados.add(chamada)

E utilize um switch/case ao invés de fazer vários else if para a escolha... Dê uma olhada neste link para ver como aplicar.
http://www.javaprogressivo.net/2012/09/o-comando-switch-fazendo-escolhas-em_6667.html

valeu.

filipi, obrigado por responder. Então, eu fiz as alterações que você falou e ainda assim estou recebendo um erro dizendo que a variável chamada não foi inicializada, segue o código:

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Principal
{
	public static void main(String[] args)
	{
		int fim = 0;
		ArrayList<Cliente> dados = new ArrayList<Cliente>();
		Cliente chamada;

		do
		{
			String menu;
			int escolha;

			menu = JOptionPane.showInputDialog("MENU\n\n" +
					"1 - Adicionar cliente\n" +
					"2 - Remover cliente\n" +
					"3 - Pesuisar cliente\n" +
					"4 - Imprimir quantidade de clientes\n" +
					"5 - Listar todos os clientes\n" +
					"0 - Sair\n");

			escolha = Integer.parseInt(menu);


			switch (escolha)
			{
				case 1:
					String entrada;
					entrada = JOptionPane.showInputDialog("Digite o nome do cliente:");
					chamada.setNome(entrada);//The local variable chamada may not have been initialized

					entrada = JOptionPane.showInputDialog("Digite o email do cliente:");
					chamada.setEmail(entrada);//The local variable chamada may not have been initialized

					entrada = JOptionPane.showInputDialog("Digite o endereço do cliente:");
					chamada.setEndereco(entrada);//The local variable chamada may not have been initialized

					dados.add(chamada);//The local variable chamada may not have been initialized

					// Teste JOptionPane.showMessageDialog(null, dados);
					break;

				case 2:
					//Remover cliente
					break;

				case  3:
					//Pesquisar cliente
					break;

				case 4:
					//Listar clientes
					break;

				case 0:
					fim = 1;


			}


		}

		while(fim != 1);

	}

}
G
Cliente chamada;

tente:

Cliente chamada = null; se fizer isso você deve instanciar o Cliente posteriormente antes de usa-lo ou você tera NullPointerException

ou

Cliente chamada = new Cliente();

acho que é mais ou menos isso:

G

[quote=gejava]Cliente chamada;

tente:

Cliente chamada = null; se fizer isso você deve instanciar o Cliente posteriormente antes de usa-lo ou você tera NullPointerException

ou

Cliente chamada = new Cliente();

acho que é mais ou menos isso:

Eu já tentei fazer Cliente chamada = new Cliente();Porém eu recebo o erro “The constructor Cliente() is undefined.”

G

cara, talvez você esteja começando errado.
tente ler o link, altere seu código e diga se funciona.

S

Amigo, você ja tentou inicializar a String entrada?
Além disso, você deve iniciar um cliente novo para cada vez que você for executar o programa por conta do do…while, caso contrário, ele adiciona sempre o mesmo cliente na lista.

Tente fazer seu código ficar mais limpo e claro, não existe em usar uma variável para cada entrada, fica mais fácil de trabalhar e caso outra pessoa leia seu código, ela vai entender o que você quiz dizer.

Tente fazer seu código assim:

do {
   Cliente cliente = new Cliente();
   //...
   switch (escolha) {
      case 1:
         String nome = JOptionPane.showInputDialog("Digite o nome do usuário.");
         String email = JOptionPane.showInputDialog("Digite o email do cliente:");
         String endereco = JOptionPane.showInputDialog("Digite o endereço do cliente:");

         cliente.setNome(nome);
         cliente.setEmail(email);
         cliente.setEndereco(endereco);

         dados.add(cliente);
         break;
         //...
      }
   }

Espero poder ter lhe ajudado.

filipi

GuilhermeRamalho, perceba que seu erro mudou. Como esse próprio erro diz, a Classe Cliente não possui método construtor, método que deve existir ao instanciar um objeto da classe.

Ao invés de usar Cliente chamada
Faça

Cliente chamada = new Cliente();

E na classe cliente crie um método construtor

public Cliente() {}

Isso resolverá seu problema. Depois de uma lida em algum material sobre esse método, para entender mais sobre o que se trata

Abraço

Criado 21 de agosto de 2014
Ultima resposta 25 de ago. de 2014
Respostas 9
Participantes 5