Constructor method to calculate age

0

I am making a very simple client registration application I would like to know how to program a method that calculates and returns the age (in years) from the AnoNascimento attribute. I know how to do, for example, a "public static int Calculation (DateTime x)", but to do a constructor method to calculate the age from the birth year I really did not understand.

Below I put a print of the screen and the part of the code that is interesting to analyze:

List<Pessoa>listcadastro=newList<Pessoa>();publicclassPessoa{privatestringnome;privatestringendereço;privatestringano_nascimento;privatestringtelefone;publicstringNome{get{returnnome;}privateset{nome=value;}}publicstringEndereço{get{returnendereço;}privateset{endereço=value;}}publicstringAno_nascimento{get{returnano_nascimento;}privateset{ano_nascimento=value;}}publicstringTelefone{get{returntelefone;}privateset{telefone=value;}}publicPessoa(stringnome,stringendereço,stringano_nascimento,stringtelefone){this.nome=nome;this.endereço=endereço;this.ano_nascimento=ano_nascimento;this.telefone=telefone;}}privatevoidbt_salvar_Click(objectsender,EventArgse){listcadastro.Add(newPessoa(txt_ano.Text,txt_nome.Text,txt_endereco.Text,txt_telefone.Text));dataGridView1.DataSource=null;dataGridView1.DataSource=listcadastro;}privatevoidnovoMenuItem_Click_1(objectsender,EventArgse){txt_nome.Enabled=true;txt_ano.Enabled=true;txt_endereco.Enabled=true;txt_telefone.Enabled=true;if(bt_pjuridica.Checked){txt_registro.Enabled=true;txt_registro.Mask="00,000,000/0000-00";
    }

    if (bt_pfisica.Checked)
    {
        txt_registro.Enabled = true;
        txt_registro.Mask = "000,000,000-00";
    }
}
    
asked by anonymous 03.03.2017 / 02:44

2 answers

0

Actually the constructor will not calculate the age, unless you have an Age property and the constructor assigns the value to that property.

    public class Pessoa
    {
        private string nome;
        private string endereço;
        private int ano_nascimento;
        private string telefone;
        private int idade;

        public string Nome
        {
            get
            {
                return nome;
            }

            private set
            {
                nome = value;
            }
        }

        public string Endereço
        {
            get
            {
                return endereço;
            }

            private set
            {
                endereço = value;
            }
        }

        public int Ano_nascimento
        {
            get
            {
                return ano_nascimento;
            }

            private set
            {
                ano_nascimento = value;
            }
        }

        public int Idade
        {
            get
            {
                return idade;
            }

            private set
            {
                idade = value;
            }
        }

        public string Telefone
        {
            get
            {
                return telefone;
            }

            private set
            {
                telefone = value;
            }
        }

        public Pessoa(string nome, string endereço, int ano_nascimento, string telefone)
        {
            this.nome = nome;

            this.endereço = endereço;

            this.ano_nascimento = ano_nascimento;

            this.telefone = telefone;

            this.idade = DateTime.Now.Year - ano_nascimento;

        }
    }

Your save button will have a quick change

private void bt_salvar_Click(object sender, EventArgs e)
{

    listcadastro.Add(new Pessoa(int.Parse(txt_ano.Text), txt_nome.Text, txt_endereco.Text, txt_telefone.Text));

    dataGridView1.DataSource = null;
    dataGridView1.DataSource = listcadastro;
}
    
03.03.2017 / 02:56
1

You have done several methods (as you did before) to return and set the values in the properties, however there is no need to use so you can write the properties this way:

public string nome { get; set; }
//ou um set privado
public string idade { get; private set; }

is easier to understand. And returning age in years would look like this:

public static int calcularIdade(DateTime x)
{
  TimeSpan idade = DateTime.Now - x;
  //divide a quantidade de dias por 365.25(por causa dos anos bissextos) e da um cast pra int, não tem erro
  int anos = (int)(idade.Days / 365.25)
  return anos;
}
    
08.03.2017 / 17:27