Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gustavo.abarroso

Problema com Atributo ArrayList em uma Lista Genérica de clientes

Recommended Posts

Estou tentando criar uma lista genérica de clientes, onde posso adicionar pessoasFisicas e pessoasJuridicas.

 

Dentro da classe clientes possuo os atributos nome, lista de endereços e limite de crédito.
A classe pessoaFisica herda de cliente os atributos acima citados além de possuir o atributo cpf.
A classe pessoaJuridica herda de cliente seus atributos e possui também, nomeFantasia e cnpj.

 

O problema que está acontecendo é o seguinte: na hora que cadastro mais de uma pessoa física por exemplo e puxar o relatório, me vem a lista de endereços inteira (conforme foto em anexo) ao invés de vim a lista da pessoa de cada posição do ArrayList de clientes. Como resolvo isso?

 

		public void cadastrar() {
		int op, resp;
		System.out.println("\n==[Cadastro de clientes]==");
		System.out.println("Digite 1 para cadastrar pessoa fisica.");
		System.out.println("Digite 2 para cadastrar pessoa juridica.");
		System.out.print("=> ");
		op = input.nextInt();
		switch (op) {
		case 1:
			System.out.println("\n==[Pessoa fisica]==");
			System.out.print("Informe o nome: ");
			nome = inputs.nextLine();
			do {
				listaEndFisica.add(retornaUmEndereco());
				System.out.println("Continuar cadastrando endereços? 1-Sim/0-Não");
				resp = input.nextInt();
			} while (resp != 0);
			System.out.print("Informe o limite de crédito: ");
			limiteCredito = input.nextDouble();
			System.out.print("informe o cpf: ");
			cpf = inputs.nextLine();
			PessoaFisica pessoaFisica = new PessoaFisica(nome, listaEndFisica, limiteCredito, cpf);
			listaCliente.add(pessoaFisica);
			System.out.println("\nPessoa fisica adicionado com sucesso! ");
			break;
		case 2:
			System.out.println("\n==[Pessoa Juridica]==");
			System.out.print("Informe o nome: ");
			nome = inputs.nextLine();
			do {
				listaEndJuridica.add(retornaUmEndereco());
				System.out.println("Continuar cadastrando endereços? 1-Sim/0-Não");
				resp = input.nextInt();
			} while (resp != 0);
			System.out.print("Informe o limite de crédito: ");
			limiteCredito = input.nextDouble();
			System.out.print("Informe o nome fantasia: ");
			nomeFantasia = inputs.nextLine();
			System.out.print("Informe o cnpj: ");
			cnpj = inputs.nextLine();
			PessoaJuridica pessoaJuridica = new PessoaJuridica(nome, listaEndJuridica, limiteCredito, nomeFantasia, cnpj);
			listaCliente.add(pessoaJuridica);
			System.out.println("\nPessoa juridica adicionado com sucesso! ");
			break;
		default:
			System.out.println("opção inválida! ");
		}
	}

		public void relatorio() {
		if (listaCliente.isEmpty()) {
			System.out.println("Não existem clientes cadastrados! ");
		} else {
			for (Cliente c : listaCliente) {
				if (c instanceof PessoaFisica) {
					System.out.println("\n-=[Pessoas Fisicas]=-");
					System.out.println("Nome: " + c.getNome());
					System.out.println("-=[Endereço(s) Associado(s)]<-");
					for (Endereco end : listaEndFisica) {
						System.out.println("Logradouro: " + end.getLogradouro());
					}
					System.out.println("Limite de crédito: " + c.getLimiteDeCredito());
					System.out.println("Cpf: " + ((PessoaFisica) c).getCpf());
				} else if (c instanceof PessoaJuridica) {
					System.out.println("\n-=[Pessoas Juridicas]=-");
					System.out.println("Nome: " + c.getNome());
					System.out.println("-=[Endereço(s) Associado(s)]<-");
					for (Endereco end : listaEndJuridica) {
						end.getLogradouro();
						System.out.println("Logradouro: " + end.getLogradouro());
					}
					System.out.println("Limite de crédito: " + c.getLimiteDeCredito());
					System.out.println("Nome fantasia: " + ((PessoaJuridica) c).getNomeFantasia());
					System.out.println("Cnpj: " + ((PessoaJuridica) c).getCnpj());
				}
			}
		}
	}

 

Sem título.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

No momento que você cadastra um novo PF ele carrega a lista de endereços pois ele herda da classe clientes e no código não está fazendo ligação entre o nome e o endereço ele não sabe quem é quem.
Pelo que mostra na imagem os dois tem o mesmo CPF mas acredito que seja essa herança que esteja fazendo com que no relatório saia a lista de endereços completa, no meu sistema ele faz a verificação se já existe aquele numero de CPF.
 

Sugestão: Utilize banco de dados para armazenar suas informações, crie 2 tabelas uma para PF e outra para PJ

EX: Tabela PF
Cliente: 
Nome: 
CPF: 

 

Em seguida utilize o código abaixo:

Faz as importações e vinculos com o banco de dados e cria a classe cadastrar_pf

 

Spoiler

private void cadastrar_pf (){ // CLASSE
     String sql = "insert into TBPF (cliente, nome, cpf) values (?,?,?); // INSIRA NA TABELA PF NAS COLUNAS CLIENTE, NOME E CPF OS VALORES QUE O USUÁRIO DIGITAR, COMO NÃO SABEMOS COLOCAMOS ?
     try { // TENTE PREPARAR A CONEXÃO PARA REALIZAR A INSERÇÃO
         pst = conexao.prepareStatement(sql); // MEU METODO QUE TRAZ A CONEXÃO COM O BANCO
         
         pst.setString(1, txtCliente.getText()); // PEGA O NOME QUE O USUARIO DIGITAR NO CAMPO 
         pst.setString(2, txtNome.getText()); // PEGA O NOME QUE O USUARIO DIGITAR NO CAMPO 
         pst.setString(3, txtCPF.getText()); // PEGA O CPF QUE O USUARIO DIGITAR NO CAMPO


          int adicionado = pst.executeUpdate(); // EXECUTA A QUERY ATUALIZANDO A INFORMAÇÃO NO BANCO DE DADOS
         if(adicionado > 0){
             JOptionPane.showMessageDialog(null," Cliente cadastrado com sucesso.");  
         }
        
     } catch (HeadlessException | SQLException e) { // CASO O CLIENTE JÁ ESTEJA CADASTRADO
         JOptionPane.showMessageDialog(null,"Cliente já cadastrado!");
         System.out.println(e);
     }
 }

 

O PRINT QUE DEIXEI ANEXO É UMA PARTE DO CÓDIGO E DA TELA DE CADASTRO DE EQUIPAMENTOS QUE ESTOU IMPLEMENTANDO EM MEU SISTEMA.JAVA1.thumb.jpg.6765c96924442db1daa890a1ac37d26d.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Estou escrevendo um Sistema Java Web e quando clico no Botão Salvar, o Java acusa esse erro:

      ERROR: Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null
       
      Já tentei de várias formas resolver esse problema, mas não estou conseguindo.

      Por favor, alguém pode me ajudar identificar a origem e resolver o problema acima ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Estou enfrentando um problema que não consigo entender.

      Após Instalar o MySql versão 8.0.36, funciona corretamente realizando as conexões.

      O problema é:
      ---[ após reiniciar o micro, o MySql não faz as conexões.
      --[ tenta localizar este arquivo, mas não acha: my.ini
       
      Onde localizo ou configuro este arquivo na Pasta MySql ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, preciso de ajuda em Relação a Instalar o Jasper Reports no Eclipse, pois a opção de Eclipse Marketplace, não encontra para instalar.
       
      Já tentei de todas as formas mas não consegui, alguém conhece alguma rotina explicando este procedimento ?
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amantes da informática.
       
      Saudações.
       
      Estou usando o Eclipse Mars versão 4.5.0  e o 4.5.2, acredito que deva ter versões mais novas. 
      Sou novato em JAVA e estou encontrando alguns problema em Instalação de alguns plugins, como por exemplo:
       
      1) quando tento instalar o JBoss Tools através do Eclipse Marteplace, o Eclipse não o encontra na lista de plugins.
      2) se tento instalar através do Install New Software, abaixa alguns arquivos, mas também não instala o JBoss.
      3) se abro o site e arrasto o download para a área de trabalho do Eclipse, também não instala o JBoss.
       
      Caros amigos, existe outra alguma forma de instalar o JBoss Tools no Eclipse e como seria ?
       
      Grato,
       
      Cesar
       
       
    • Por ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.