Ir para conteúdo
Fórum Script Brasil
  • 0

Usando Classe como tipo de Atributo


Felipe C. Araujo

Pergunta

Estou implementando código do Projeto Interdisciplinar da faculdade deste semestre, para deixar o código mais organizado resolvi criar uma classe Endereço com campos rua, bairro, etc, em vez de jogar tudo na classe Pessoa como poderão ver abaixo.

Na classe Pessoa declarei um atributo endereco do tipo Endereco, porém minha dúvida é como farei para ler estes dados quando criar um novo objeto pessoa e como irei gravar e ler os dados de um arquivo, acho que vendo o código vocês entenderão o que estou tentando dizer.

Aproveitando a edição para complementar. Tenho neste projeto também mais 2 classes que usam estendem de pessoa (Extends Pessoa), Cliente e Funcionário, daria para fazer a Leitura e Gravação dos dois tipos de pessoa em classes separadas, que na minha opinião ficaria mais fácil, mas gostaria de saber a opinião de vocês também para saber se faço as classes de leitura e gravação de cliente e uma outra de leitura e gravação de funcionário ou somente deixo o método como está na classe pessoa gravando os dois tipos de pessoa.

Classe Endereço

public class Endereco {

    private String rua;
     
    private String bairro;
     
    private String cidade;
     
    private String estado;
     
    private int numero;
     
    private int cep;

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public int getCep() {
        return cep;
    }

    public void setCep(int cep) {
        this.cep = cep;
    }
    
    /*
     * Não sei se é necessário o toString
     */

    //@Override
    //public String toString() {
    //    return rua + bairro + cidade + estado + numero + cep;
    //}
     
}
Classe Pessoa
import java.io.*;
import javax.swing.JOptionPane;

public class Pessoa {

    private String nome;
    private int telefone;
    private String email;
    private int celular;
    private Endereco endereco;
    private int rg;
    private int cpf;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getTelefone() {
        return telefone;
    }

    public void setTelefone(int telefone) {
        this.telefone = telefone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getCelular() {
        return celular;
    }

    public void setCelular(int celular) {
        this.celular = celular;
    }

    public Endereco getEndereco() {
        return endereco;
    }

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

    public int getRg() {
        return rg;
    }

    public void setRg(int rg) {
        this.rg = rg;
    }

    public int getCpf() {
        return cpf;
    }

    public void setCpf(int cpf) {
        this.cpf = cpf;
    }

    public boolean cadastrar() {
        boolean ret = false; //não foi possível gravar
        try {
            PrintWriter pw = new PrintWriter(new FileWriter(getNome() + ".txt")); //nome do arquivo
            /*
             * dados da pessoa.
             *
             */
            pw.println(getNome());
            pw.println(getTelefone());
            pw.println(getEmail());
            pw.println(getCelular());
            pw.println(getEndereco());
            pw.println(getRg());
            pw.println(getCpf());
            pw.flush(); //tranfere dados da memória para o HD
            pw.close(); //fecha e salva
            ret = true;
        } catch (IOException erro) { //mensagem caso o cadastro não seja bem sucedido
            JOptionPane.showMessageDialog(null, "Falha ao gravar o cadastro!");
        }

        return ret;
    }

    public Pessoa alterar() {
        Pessoa c = null; //inicialmente o objeto c pessoa está vazio
        try {
            BufferedReader br = new BufferedReader(new FileReader(getNome() + ".txt")); //Abre o arquivo
            c = new Cliente();
            /*
             * Lê os dados
             * Cada br.readLine lê uma linha
             */
            c.setNome(br.readLine());
            c.setTelefone(Integer.parseInt(br.readLine()));
            c.setEmail(br.readLine());
            c.setCelular(Integer.parseInt(br.readLine()));
            //c.setEndereco(br.readLine()); //ver como abrir linhas do tipo Endereco
            c.setRg(Integer.parseInt(br.readLine()));
            c.setCpf(Integer.parseInt(br.readLine()));
            br.close();
        } catch (IOException erro) {
            JOptionPane.showMessageDialog(null, "Falha ao ler o arquivo!");
        }
        return c;
    }

    public void apagar() {
        
    }
}

Os professores que lecionam as disciplinas que fazem parte do Projeto Interdisciplinar não dão o devido apoio e nem tiram todas as dúvidas, por isso recorri à este fórum.

Peço desculpas se postei de maneira incorreta alguma coisa ou se o tópico ficou muito comprido e agradeço desde já ajudas futuras.

Qualquer dúvida por favor postem que irei responder o mais rápido possível.

Editado por Felipe C. Araujo
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

i aew Felipe C. Araujo, vamos por partes:

Na classe Pessoa declarei um atributo endereco do tipo Endereco, porém minha dúvida é como farei para ler estes dados quando criar um novo objeto pessoa
Pessoa p =  new Pessoa();
p.getEndereco().getRua();
p.getEndereco().getBairro();
p.getEndereco().getCidade();
p.getEndereco().getEstado();
p.getEndereco().getNumero();
p.getEndereco().getNumero();
p.getEndereco().getCep();

Tenho neste projeto também mais 2 classes que usam estendem de pessoa (Extends Pessoa), Cliente e Funcionário, daria para fazer a Leitura e Gravação dos dois tipos de pessoa em classes separadas, que na minha opinião ficaria mais fácil, mas gostaria de saber a opinião de vocês também para saber se faço as classes de leitura e gravação de cliente e uma outra de leitura e gravação de funcionário ou somente deixo o método como está na classe pessoa gravando os dois tipos de pessoa.

bom levando em consideração que a objeto Pessoa sempre é um Funcionario ou Cliente, eu declararia a classe Pessoa como abstrata para os métodos de ler e gravar serem escritos nas classes que a herdam.

espero que ajude abraço!

Link para o comentário
Compartilhar em outros sites

  • 0
i aew Felipe C. Araujo, vamos por partes:
Na classe Pessoa declarei um atributo endereco do tipo Endereco, porém minha dúvida é como farei para ler estes dados quando criar um novo objeto pessoa
Pessoa p =  new Pessoa();
p.getEndereco().getRua();
p.getEndereco().getBairro();
p.getEndereco().getCidade();
p.getEndereco().getEstado();
p.getEndereco().getNumero();
p.getEndereco().getNumero();
p.getEndereco().getCep();

Tenho neste projeto também mais 2 classes que usam estendem de pessoa (Extends Pessoa), Cliente e Funcionário, daria para fazer a Leitura e Gravação dos dois tipos de pessoa em classes separadas, que na minha opinião ficaria mais fácil, mas gostaria de saber a opinião de vocês também para saber se faço as classes de leitura e gravação de cliente e uma outra de leitura e gravação de funcionário ou somente deixo o método como está na classe pessoa gravando os dois tipos de pessoa.
bom levando em consideração que a objeto Pessoa sempre é um Funcionario ou Cliente, eu declararia a classe Pessoa como abstrata para os métodos de ler e gravar serem escritos nas classes que a herdam.

espero que ajude abraço!

Opa, ajudou sim, obrigado.

Eu preciso criar um objeto do tipo Endereco pra ele poder armazenar as variáveis também ou só criando um objeto pessoa resolve?

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvido. Só mais uma dúvida.

Como eu faço para receber uma data do tipo Date?

Por enquanto a parte de "entrada de dados" está assim:

Cliente p = new Cliente();
            p.setNome(JOptionPane.showInputDialog("Nome:"));
            p.setTelefone(Integer.parseInt(JOptionPane.showInputDialog("Telefone:")));
            p.setCelular(Integer.parseInt(JOptionPane.showInputDialog("Celular:")));
            p.setEmail(JOptionPane.showInputDialog("Email:"));
            p.getEndereco().setBairro(JOptionPane.showInputDialog("Bairro:"));
            p.getEndereco().setCep(Integer.parseInt(JOptionPane.showInputDialog("CEP:")));
            p.getEndereco().setCidade(JOptionPane.showInputDialog("Cidade:"));
            p.getEndereco().setEstado(JOptionPane.showInputDialog("Estado:"));
            p.getEndereco().setNumero(Integer.parseInt(JOptionPane.showInputDialog("Número:")));
            p.getEndereco().setRua(JOptionPane.showInputDialog("Rua:"));
            p.setRg(Integer.parseInt(JOptionPane.showInputDialog("RG:")));
            p.setCpf(Integer.parseInt(JOptionPane.showInputDialog("CPF:")));
            //p.setDataNascimento(JOptionPane.showInputDialog("Data de Nascimento:"));
            p.setSexo(JOptionPane.showInputDialog("Sexo:"));
            p.setVip(Boolean.getBoolean(JOptionPane.showInputDialog("VIP:")));
            p.cadastrar();

Só preciso saber como entrar com uma data do tipo Date e acabaram minhas dúvidas, assim que resolver isto posto os códigos certos para futuras dúvidas.

Obrigado à todos que ajudaram ou ao menos leram o tópico.

Link para o comentário
Compartilhar em outros sites

  • 0

i aew Felipe C. Araujo, tenta assim:

SimpleDateFormat formatoDeEntrada = new SimpleDateFormat("dd/MM/yyyy");
        String stringData = JOptionPane.showInputDialog("Data:");
        try {
            Date data = formatoDeEntrada.parse(stringData);
            JOptionPane.showMessageDialog(null, data.toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }
e os imports são esses:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

falow, abraço!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...