12 abril 2010

Usando ARRAY em Java para cadastro de clientes

Existem várias possibilidades para o uso de arrays. Elaborei um exemplo para demonstrar a utilização aplicando sobre um cadastro de clientes. Objetivo deste exemplo é mostrar uma maneira de utilizar array com Java.


Para saber o que é um array veja a definição da Wikipédia sobre array. Os principais pontos que devem ser observados para entender o uso de Array em Java na minha opinião são:
  • Um array em Java precisa ser declarado usando os colchetes ( [ ] );
  • O caso mais comum do uso de array requer que este seja inicializado (alocar memória) e neste momento, deve-se informar o seu tamanho; Ex. String[] listaClientes = new String[quantidade];
  • Para acessar os dados do array basta usar os colchetes, seguido por seu índice. Ex. listaClientes[i] = JOptionPane.showInputDialog("Nome do cliente "+(i+1));
  • Quando um array for criado na memória ele será inicializado com valores default do tipo de dados conforme o tipo de sua declaração. Ou seja, um array de tipo String terá valor null em cada elemento disponível até que seja atribuído outro valor String. Se for tipo primitivo int, o valor default é 0 (zero) para cada elemento; float será 0.0 e assim sucessivamente;
  • Para determinar o tamanho do array de forma dinâmica devemos usar o atributo length. Ex. listaClientes.length
  • Para recuperar os valores devemos usar o seu índice. Veja a ilustração acima. Ex. listaClientesTemporario += listaClientes[i] + "\n"
O programa a seguir utiliza um exemplo para cadastrar clientes e recuperar os seus dados cadastrados na memória. Tentei levar em consideração todos os pontos mencionados.




 

import javax.swing.JOptionPane;

/**

* Esse programa visa exemplificar a utilização de array, aplicando sobre um

* cadastro de clientes.

*

* @author Douglas Daniel Del Frari

*/

public class CadastroClientes {

// array de clientes

private static String[] listaClientes;

private static String menu = "CADASTRO CLIENTES\n\n" +

"1 --> Cadastrar clientes\n" +

"2 --> Listar clientes\n" +

"3 --> Sair";

/**

* Método inicial das aplicações Java SE

* @param args argumentos opcionais

*/

public static void main(String[] args) {

// escolha do usuario

String opcao = "";

do {

opcao = JOptionPane.showInputDialog(menu);

if (opcao.equals("1")) {

// cadastrar clientes

cadastrarClientes();

} else if (opcao.equals("2")) {

// listar clientes

listarClientes();

}

} while (!opcao.equals("3")); // comparacao usando String

} // fim do main

/**

* Lista os clientes cadastrados no ARRAY.

*/

private static void listarClientes() {

if (listaClientes!=null) {

// acumula a listagem numa variavel local

String listaClientesTemporario = "Lista de Clientes \n\n";

for (int i = 0; i < listaClientes.length; i++) {

listaClientesTemporario += listaClientes[i] + "\n";

}

// exibe na tela a listagem de clientes

JOptionPane.showMessageDialog(null,listaClientesTemporario);

} else {

// se nao tiver clientes o ARRAY será null, entao pode-se tratar com

// uma mensagem personalizada.

JOptionPane.showMessageDialog(null,

"É necessário realizar cadastro de clientes primeiro");

}

}

/**

* Esse metodo cadastra os usuarios na quantidade

* informada pelo usuario.

*/

private static void cadastrarClientes() {

// utiliza o metodo showInputDialog para perguntar a quantidade e

// converte o valor de String para inteiro e armazena na variavel

// local quantidade.

int quantidade = Integer.parseInt(JOptionPane

.showInputDialog("Quantos clientes deseja cadastrar?"));

// inicializa o ARRAY com tamanho informado pelo usuario

listaClientes = new String[quantidade];

// percorre todo tamanho do ARRAY e cadastra seus elementos

for (int i = 0; i < quantidade; i++) {

listaClientes[i] = JOptionPane.showInputDialog("Nome do cliente "+(i+1));

}

JOptionPane.showMessageDialog(null, "Clientes cadastrados");

}

} // fim da classe



Considerações
Observe que o exemplo propõe utilizar uma variável global (atributo listaClientes) que é um tipo array de String. Isto porque utilizou-se métodos que são utilizados forá do escopo do método principal (main). Além disso, propomos utilizar uma interface gráfica usando a classe JOptionPane e dois dos seus métodos estáticos (showMessageDialog para exibir dados e showInputDialog para fazer a entrada de dados do usuário).

O array foi inicializado somente após o usuário determinar a quantidade de clientes a ser cadastrada. Assim podemos percorrer o cadastro de cada cliente até o fim do array (ver o método cadastrarClientes()). Se o usuário optar pela visualização da listagem de clientes antes de cadastrar algum cliente, optamos por mostrar uma mensagem para alertar que é necessário realizar o cadastro antes de listar (basta verificar se o array não está nulo - if (listaClientes!=null))

Essa solução não leva em consideração possíveis erros do usuário. Por exemplo, se no momento de informar a quantidade de clientes a ser cadastrada ele colocar um valor que não pode ser convertido para inteiro (ex. um caracter qualquer), teremos um erro de lógica e uma exceção será gerada. Neste caso precisaríamos usar um tratamento de exceção (try/catch).

Questões para debate
  1. Por que foi utilizado uma variável do tipo String para pegar a opcão de escolha do usuário durante a exibição da menu principal? Qual a diferença se usássemos o tipo inteiro?
  2. Modularizar o programa em partes menores trás algumas vantagens? Quais?
  3. O que acontece quando acabar o espaço deste tamanho (quantidade)?

6 comentários:

Unknown disse...

Foi usado uma variavel do tipo string pq quando se usa o JOpitonpane, ele n retorna um valor inteiro .
por isso deve ser feito em string e dpois a converção. :D

Jefferson POO - FACOL

Anônimo disse...

O Jcreator mostra 4 erros no Cadastro. Não consegui localizar. Me parece que essa linha está errada:for (int i = 0; i <>
listaClientesTemporario += listaClientes[i] + "\n";

Obrigado.

Unknown disse...

o sintaxe do for é:
for(;;incremento)

portanto, no post (por conta do copy&paste, ficou errado). O correto é:
for (int i=0; i <
for (int i = 0; i < listaClientes.length; i++) {
...
}

Anônimo disse...

Se eu quiser adcionar uma opção de apagar clientes, por exemplo, como faço ?

Unknown disse...

Para apagar registros pode-se atribuir null para a posição corrente que se deseja apagar. Ex. lista[posicaoApagar] = null;

Cleidson Santos disse...

Me ajudou muito, muito bom!