Ajuda com JOptionPane;

3 respostas
K

Pessoal novamente peço uma ajuda com o código que estou desenvolvendo para um exercício da Faculdade a questão pede o seguinte:

5. Crie um mini sistema de cadastramento de clientes, com os seguintes requisitos:
? Deve armazenar os dados dos clientes através de um registro contendo o nome, endereço,
cpf do cliente;
? Deve conter um estrutura para armazenar vários clientes (um vetor de clientes) declarada
globalmente;
? Deve conter um módulo de:
Cadastramento de cliente;
Visualização de um cliente através do código. O código é o índice do vetor clientes;
Visualizar os dados de todos os clientes;
Permitir que o usuário possa escolher um das ações desempenhadas por estes módulos;
____________________________________________________________________________________________

Já consegui fazer uma parte porém estou tendo dificuldade em adequar o código para utilizar o JOptionPane no lugar do Scanner, utilizando o Scanner consigo acessar o que quero porém ainda da um erro na visualização dos clientes mas acho que consigo desenrrolar isso, meu problema está em como chamar uma opção utilizada no menu e passar para dentro do main.

Segue o código:
import javax.swing.JOptionPane;
import java.util.Scanner;
public class registro
{
static Ficha[ ]armazena;
static int i;
static int quantidade;

static void menu()// Passar a opção Digitada Aqui la para o Void
{ int n;
n = Integer.parseInt(JOptionPane.showInputDialog(null, "Escolha uma opção:\n1: Cadastro de clientes."+
"\n2: Consultar dados de um cliente.\n3: Visualizar dados de todos os clientes."));
}

static void armazena(){
Ficha a = new Ficha();
a.nome = JOptionPane.showInputDialog("Digite o nome do cliente:");
a.endereco = JOptionPane.showInputDialog("Digite o endereço do cliente:");
a.cpf = JOptionPane.showInputDialog("Digite o cpf do cliente:");

if (i<armazena.length){
armazena[i] = a;
JOptionPane.showMessageDialog(null, "Cliente " + i + " cadastrado com sucesso.");
i=i+1;
}
}
static void visualiza(){
Scanner s = new Scanner(System.in);
System.out.println("Digite o código do cliente.");
int b = s.nextInt();
if (b<quantidade){
System.out.println("Cliente " + b + ":");
System.out.println("Nome: " + armazena[b].nome);
System.out.println("Endereço: " + armazena[b].endereco);
System.out.println("CPF: " + armazena[b].cpf);
}else{
System.out.println("Não há clientes cadastrados com este código.");
}
}
static void visaogeral(){
for(int z = 0; z<quantidade; z++){
System.out.println("Cliente " + z + ":");

System.out.println("Nome: " + armazena[z].nome);
System.out.println("Endereço: " + armazena[z].endereco);
System.out.println("CPF: " + armazena[z].cpf);
System.out.println();

}
}
public static void main(String[ ] args)
{
armazena = new Ficha[1000];
i=0;
quantidade=0;
menu();// Utilizar a opção aqui.
int n = Integer.parseInt(JOptionPane.showInputDialog(null));
while (n>0){
switch (n){
case 1:
armazena();

quantidade = quantidade+1;
break;
case 2:
visualiza();
break;
case 3:
visaogeral();
break;
default:
}
menu();
n = Integer.parseInt(JOptionPane.showInputDialog(null));

}

}

}

Estou tentando passar a opção digitada no menu para o if porém não sei como usando o JOptionPane, se puderem me dar uma luz agradeço.

Abraços

Obs. O Código no Scanner está quase ok, a intenção é passar para o JOptionPane.

3 Respostas

kenneth

Fala brow,

Se eu entendi, voce nao ta conseguindo pegar a opcao escolhida pelo
usuario no menu, certo?

Bom, se for isso, voce tem 2 formas de resolver:

1 - Utilizando um atributo na classe.

//...
 private int opcao = 0;
 //...
 
 // Ae, dentro do metodo menu, vc joga o valor que leu para este atributo:
 static void menu(){
 //...
 this.opcao = n;
 //...

2 - Utilizar um retorno no metodo menu(), sendo esta a mais adequada na minha opiniao:

// mude a declaracao do metodo para
static int menu(){
//...
}

// E na hora de executar...
int opcao = menu();

E, mais uma opiniao, nao deixe de qualificar seus atributos/metodos
com public, private ou protected.

Abraco!

A

Bom da, tente analizar o código, qualquer dvida é só pedir!

public class DadosPessoas {
	private String nome;
	private String endereco;
	private String cpf;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome)throws Exception {
		if(nome.trim().length() ==0)throw new Exception("Você deve informar um nome");
		this.nome = nome;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco)throws Exception  {
		if(endereco.trim().length() == 0)throw new Exception("Você deve informar um endereço");
		this.endereco = endereco;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf)throws Exception  {
		if(cpf.trim().length() == 0)throw new Exception("Você deve informar um cpf");
		if(cpf.length() != 11)throw new Exception("Informe um cpf válido.\nSomente números");
		for(byte i = 0; i < cpf.length(); i++){
			if(Character.isLetter(cpf.charAt(i)))
				throw new Exception("O cpf não pode conter letras");
		}
		this.cpf = cpf;
	}
	
	public String toString(){
		return "\nNome: " + nome + "\nEndereço: " + endereco + "\nCPF: " + cpf;
	}
}
Classe com o método main
import static javax.swing.JOptionPane.*;

public class Cadastro {

	private static DadosPessoas registros[] = new DadosPessoas[1000];
	private static int contf = 1;

	public static void main(String[] args) {
		int op = menu();
		switch (op) {
		case -1:
			System.exit(0);
		case 0:
			cadastrar();
			break;
		case 1:
			consultar();
			break;
		case 2:
			consultarTodos();
			break;
		}
	}

	private static void consultarTodos() {
		String aux = "";
		int cont = 1;
		boolean bl = false;
		for (DadosPessoas d : registros) {
			if (d == null)
				break;
			bl = true;
			aux += "\n\nCódigo: " + cont + d;
			cont++;
		}
		if (bl == true)
			showMessageDialog(null, aux, "Lista de pessoas cadastradas", INFORMATION_MESSAGE);
		else
			showMessageDialog(null, "Nenhuma pessoa cadastrada");
		main(null);
	}

	private static void consultar() {
		if (registros == null)
			showMessageDialog(null, "Nenhuma pessoa cadastrada", "Aviso", 2);
		else
			while (true) {
				String aux = showInputDialog("Informe o código da pessoa");
				if (aux == null)
					break;
				int op = Integer.parseInt(aux);
				if(op <= 0){
					showMessageDialog(null, "Código inválido", "Erro", ERROR_MESSAGE);
					continue;
				}
				if (registros[op-1] == null)
					showMessageDialog(null,
							"Nenhuma pessoa cadastrada com esse código",
							"Alerta", ERROR_MESSAGE);
				else {
					DadosPessoas d = registros[op-1];
					showMessageDialog(null, "Código: " + op + d, "Consulta por código", INFORMATION_MESSAGE);
				}
			}
		main(null);
	}

	private static void cadastrar() {
		for (; contf <= registros.length; contf++) {

			DadosPessoas d = new DadosPessoas();

			String aux = "";
			while (true) {
				aux = showInputDialog("Informe o nome da pessoa");
				if (aux == null)
					break;
				try {
					d.setNome(aux);
					break;
				} catch (Exception ex) {
					showMessageDialog(null, ex.getMessage(), "Erro",
							ERROR_MESSAGE);
				}
			}
			if (aux == null)
				break;

			while (true) {
				aux = "";
				aux = showInputDialog("Informe o endereço da pessoa");
				if (aux == null)
					break;
				try {
					d.setEndereco(aux);
					break;
				} catch (Exception ex) {
					showMessageDialog(null, ex.getMessage(), "Erro",
							ERROR_MESSAGE);
				}
			}
			if (aux == null) {
				showMessageDialog(null, "Cadastro não completado", "Alerta", 2);
				break;
			}

			while (true) {
				aux = "";
				aux = showInputDialog("Informe o cpf da pessoa");
				if (aux == null)
					break;
				try {
					d.setCpf(aux);
					break;
				} catch (Exception ex) {
					showMessageDialog(null, ex.getMessage(), "Erro",
							ERROR_MESSAGE);
				}
			}
			if (aux == null) {
				showMessageDialog(null, "Cadastro não completado", "Alerta", 2);
				break;
			}

			registros[contf - 1] = d;
			showMessageDialog(null,
					"Cadastro da pessoa " + contf +  " Realizado com sucesso!!!", "Aviso", 2);
		}
		main(null);
	}

	private static int menu() {
		return showOptionDialog(null, "O que deseja fazer", "Selecione", 0,
				QUESTION_MESSAGE, null, new String[] { "Cadastrar pessoa",
						"Consultar pessoa", "Ver todos os cadastros" },
				"Cadastrar pessoa");
	}
}

Neste exemplo importei o método estático do JOptionPane, para evitar toda a vez escrever JOptionPane..., para o menu, utilizei o showOptionDialog que faz parte do JOptionPane, na classe DadosPessoas, deixei todos os atributos privados, pois como já deve saber, cada classe é responçavel por protegem o que é seu... e para acessar estes atributos foi utilizado métodos estaticos que servem para armazenar e ler os dados dos atributos, o método to String doi utilizado para montar a mensagem de consulta..., Qualquer dúvida é só pedir!!!

K

Opá, desculpem a demora a responder.
Conseguir terminar graças a vocês.
Obrigado.

Abraços


Alessandro09

Acabei de testar aqui no eclipse e ficou show o programa.
era exatamente isso que estava tentando fazer, agora vou analisar o código com calma para aprender pois isso é o que vale.
muito obrigado.

Criado 4 de outubro de 2010
Ultima resposta 10 de out. de 2010
Respostas 3
Participantes 3