Fórum Lógica para programa que clacula a data de aniversário. #3552

12/03/2009

0

Estou tentado criar uma lógica para calcular a idade da pessoa através dos dados de data mês e ano de nascimento.

gostaria que observasse meu código e me mostrasse o melhor caminho para chegar ao meu objetivo. O tmb o meu script tá dando erro de exception.é bem simples:
namespace Aniversario
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
           
        }

        private void btnCalc_Click(object sender, EventArgs e)
        {
            if (txtnome.Text == "" || txtano.Text == "" || txtdia.Text == "" || txtmes.Text == "")
            {
                lberro.Text = "ATENÇÃO: Todos os campos precisam ser preenchidos.";
            }
            else
            {
                try
                {
                    DateTime agora = DateTime.Now;
                    int mes = agora.Month;
                    int dia = agora.Day;
                    int Idade, AuxIdade,aux2, aux3;
                    int AnoAtula = 2009;
                    aux2 = Convert.ToInt32(txtano.Text);

                    int mesnasc = Convert.ToInt32(txtmes);
                    int dianasc = Convert.ToInt32(txtdia);
                   
                    AuxIdade = Convert.ToInt32(txtano.Text);

                    if (aux2 < 1900 || aux2 > 2009)
                    {
                        lberro.Text = "Você está digitando um ano forda do aceitável";

                       
                    }
                    else
                    {
                        Idade = AnoAtula - AuxIdade;    
                        lbresultado.Text = Convert.ToString(Idade);

                        if (mes == mesnasc)
                        {
                            if (dianasc > dia)
                            {
                                Idade += -1;

                                if (mes < mesnasc)
                                {
                                    Idade += -1;
                                    string resulFinal = Convert.ToString(Idade);
                                    lbresulfinal.Text = resulFinal.ToString();
                                }
 
                            }
   
                        }
                      
                    }
                }
                catch (Exception )
                {

                    lberro.Text = "Ocorreu em erro";
                }
            }

         }
       
           
        private void btnlimpa_Click(object sender, EventArgs e)
        {
            txtnome.Text = "";
            txtano.Text = "";
            txtdia.Text = "";
            txtmes.Text = "";
            lberro.Text = "";
            lbresultado.Text = "";
            lberro.Text = "";
            lberro2.Text = "";

        }

        private void txtnome_TextChanged(object sender, EventArgs e)
        {

        }

        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

    }
}
outra coisa.
essa forma que estou fazendo conversão está correta?


Lorena Menelli

Lorena Menelli

Responder

Posts

12/03/2009

[devmedia .net]

Oi Lorena, tudo bem com você ?   Bom sua solução é bem mais simples do que imagina ok ! Se deseja calcular a idade de uma pessoa basta fazer o código abaixo.. Pode copiar e colar que vai funcionar...

protected void btnCalcular_Click(object sender, EventArgs e) { DateTime dtNascimento = new DateTime(int.Parse(txtAno.Text),int.Parse(txtMes.Text),int.Parse(txtDia.Text)); int idade = DateTime.Now.Year - dtNascimento.Year; if (DateTime.Now.Month < dtNascimento.Month || (DateTime.Now.Month == dtNascimento.Month && DateTime.Now.Day < dtNascimento.Day)) { //Diminui 1 da idade pois o c lculo ‚ feito em cima dos anos idade--; } Label1.Text = idade.ToString(); } Abraços Carlos Jr
Responder

Gostei + 0

12/03/2009

[devmedia .net]

Oi Lorena, conseguiu resolver o problema com o código que eu enviei... Aguardo retorno Abraços Carlos Jr
Responder

Gostei + 0

12/03/2009

Lorena Menelli

Oi Carlos, boa tarde

Muito bom mesmo, dessa forma o código fica bem simples e facíl.

nessa parte o dtNascimento recebe os dados de txtAno, txtMes, txtDia e depois disso vc criou uma variável idade que subtrai ano atual e dtnascimento( mais dtNascimento recebeu dados de 3 txt - dia, mes e ano). Como que o C# calcula isso, pq vc recupera apenas ano da instância com dtNacimento.year. Eu poderia por exemplo usar dtNascimento.Months ( para outro objetivo) que iria recuperar txtMes.text?

Por exemplo se eu usasse apenas um MaskedTextBox e no imput mask configurar para Short Date daria certo tmb?
Responder

Gostei + 0

12/03/2009

Lorena Menelli

Desculpe .. eu posso perguntar isso?  pq me falaram que só posso fazer uma pergunta por chamada.

Responder

Gostei + 0

12/03/2009

[devmedia .net]

Oi Lorena, fique tranquila.. na verdade você pode fazer mais perguntas sim, mas deve ser dentro do mesmo problema, meu objetivo é resover seu problema..   Utilizei dessa maneira, pois era assim que estava no seu código, eu quis fazer da mesma maneira.   Se utilizar o maskedit também fucniona normalmente.. Pode utilizar a mesma lógica, inclusive utilzar os meses também, ele vai fazer o calcula com meses..   Existe também um método DateTime dt = new DateTime(); dt.Subtract(DateTime.Now) ; // Por exemplo ele retorna um TimeSpan que é uma parte de data...   vamos super que utilizou o maskedit.. muda apenas a primeira linha DateTime dtNascimento = DateTime.Parse(txtData.Text); int idade = DateTime.Now.Year - dtNascimento.Year; if (DateTime.Now.Month < dtNascimento.Month || (DateTime.Now.Month == dtNascimento.Month && DateTime.Now.Day < dtNascimento.Day)) { //Diminui 1 da idade pois o c lculo ‚ feito em cima dos anos idade--; } Label1.Text = idade.ToString();   Abraços Carlos Jr
Responder

Gostei + 0

12/03/2009

Lorena Menelli

ótimo .. muito obrigada..

endendi perfeitamente.

pode fechar ..

abraçu
Responder

Gostei + 0

16/03/2009

Lorena Menelli

oi Carlos,

estou com mais uma duvida sobre esse problema. No meu pc o programa de calcular data de aniversário funcionou perfeitamente mais quando eu fui testar em outro pc ele não rodou. daí eu coloquio try e ocorreu uma exceção. Com isso resolvi criar esse mesmo codigo com WebForms mais alguma coisa está dando errado.

Year, Month, and Day parameters describe an un-representable DateTime. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime.

Source Error:

Line 17: protected void Button1_Click(object sender, EventArgs e)
Line 18: {
Line 19: DateTime dtNascimento = new DateTime(int.Parse(txtdia.Text), int.Parse(txtmes.Text), int.Parse(txtano.Text));
Line 20:
Line 21: int idade = DateTime.Now.Year - dtNascimento.Year;

meu código

  protected void Button1_Click(object sender, EventArgs e)
        {
            DateTime dtNascimento = new DateTime(int.Parse(txtdia.Text), int.Parse(txtmes.Text), int.Parse(txtano.Text));

            int idade = DateTime.Now.Year - dtNascimento.Year;

            if (DateTime.Now.Month < dtNascimento.Month || (DateTime.Now.Month == dtNascimento.Month && DateTime.Now.Day < dtNascimento.Day))
            {
                idade--;

            }
            lbresult.Text = idade.ToString();
           
        }

txtdia, txtmes, txtano é DropDownList:


<asp:DropDownList ID="txtdia" runat="server">
                        <asp:ListItem>1</asp:ListItem>
                        <asp:ListItem>2</asp:ListItem>
                        <asp:ListItem>3</asp:ListItem>
                        <asp:ListItem>4</asp:ListItem>
                        <asp:ListItem>5</asp:ListItem>
                        <asp:ListItem>6</asp:ListItem>
                        <asp:ListItem>7</asp:ListItem>
                        <asp:ListItem>8</asp:ListItem>
                        <asp:ListItem>9</asp:ListItem>
                        <asp:ListItem>10</asp:ListItem>
                        <asp:ListItem>11</asp:ListItem>
                        <asp:ListItem>12</asp:ListItem>
                        <asp:ListItem>13</asp:ListItem>
                        <asp:ListItem>14</asp:ListItem>
                        <asp:ListItem>15</asp:ListItem>
                        <asp:ListItem>16</asp:ListItem>
                        <asp:ListItem>18</asp:ListItem>
                        <asp:ListItem>19</asp:ListItem>
                        <asp:ListItem>20</asp:ListItem>
                        <asp:ListItem>21</asp:ListItem>
                        <asp:ListItem>22</asp:ListItem>
                        <asp:ListItem>23</asp:ListItem>
                        <asp:ListItem>24</asp:ListItem>
                        <asp:ListItem>25</asp:ListItem>
                        <asp:ListItem>26</asp:ListItem>
                        <asp:ListItem>27</asp:ListItem>
                        <asp:ListItem>28</asp:ListItem>
                        <asp:ListItem>29</asp:ListItem>
                        <asp:ListItem>30</asp:ListItem>
                        <asp:ListItem>31</asp:ListItem>
                        <asp:ListItem></asp:ListItem>
                    </asp:DropDownList>
                </td>
                <td class="style3">
                    <asp:DropDownList ID="txtmes" runat="server">
                        <asp:ListItem Value="1">janeiro</asp:ListItem>
                        <asp:ListItem Value="2">fevereiro</asp:ListItem>
                        <asp:ListItem Value="3">marco</asp:ListItem>
                        <asp:ListItem Value="4">abril</asp:ListItem>
                        <asp:ListItem Value="5">maio</asp:ListItem>
                        <asp:ListItem Value="6">junho</asp:ListItem>
                        <asp:ListItem Value="7">junho</asp:ListItem>
                        <asp:ListItem Value="8">agosto</asp:ListItem>
                        <asp:ListItem Value="9">setembro</asp:ListItem>
                        <asp:ListItem Value="10">outubro</asp:ListItem>
                        <asp:ListItem Value="11">novembro</asp:ListItem>
                        <asp:ListItem Value="12">dezembro</asp:ListItem>
                    </asp:DropDownList>
                </td>
                <td>
                    <asp:DropDownList ID="txtano" runat="server">
                        <asp:ListItem>2008</asp:ListItem>
                        <asp:ListItem>2007</asp:ListItem>
                        <asp:ListItem>2006</asp:ListItem>
                        <asp:ListItem>2005</asp:ListItem>
                        <asp:ListItem>2004</asp:ListItem>
                        <asp:ListItem>2003</asp:ListItem>
                        <asp:ListItem>2001</asp:ListItem>
                        <asp:ListItem>2000</asp:ListItem>
                        <asp:ListItem>1999</asp:ListItem>
                        <asp:ListItem>1998</asp:ListItem>
                        <asp:ListItem>1997</asp:ListItem>
                        <asp:ListItem>1996</asp:ListItem>
                        <asp:ListItem>1995</asp:ListItem>
                        <asp:ListItem>1994</asp:ListItem>
                        <asp:ListItem>1993</asp:ListItem>
                        <asp:ListItem>1992</asp:ListItem>
                        <asp:ListItem>1991</asp:ListItem>
                        <asp:ListItem>1990</asp:ListItem>
                        <asp:ListItem>1989</asp:ListItem>
                        <asp:ListItem>1988</asp:ListItem>
                        <asp:ListItem>1987</asp:ListItem>
                        <asp:ListItem>1986</asp:ListItem>
                        <asp:ListItem>1985</asp:ListItem>
                        <asp:ListItem>1984</asp:ListItem>
                        <asp:ListItem>1984</asp:ListItem>
                        <asp:ListItem>1983</asp:ListItem>
                        <asp:ListItem>1982</asp:ListItem>
                        <asp:ListItem>1981</asp:ListItem>
                        <asp:ListItem>1980</asp:ListItem>
                        <asp:ListItem>1979</asp:ListItem>
                        <asp:ListItem>1978</asp:ListItem>
                        <asp:ListItem>1977</asp:ListItem>
                        <asp:ListItem>1976</asp:ListItem>
                        <asp:ListItem>1975</asp:ListItem>
                        <asp:ListItem>1974</asp:ListItem>
                        <asp:ListItem>1973</asp:ListItem>
                        <asp:ListItem>1972</asp:ListItem>
                        <asp:ListItem>1971</asp:ListItem>
                        <asp:ListItem>1970</asp:ListItem>
                        <asp:ListItem>1969</asp:ListItem>
                        <asp:ListItem>1968</asp:ListItem>
                        <asp:ListItem>1967</asp:ListItem>
                        <asp:ListItem>1966</asp:ListItem>
                        <asp:ListItem>1965</asp:ListItem>
                        <asp:ListItem>1964</asp:ListItem>
                        <asp:ListItem>1963</asp:ListItem>
                        <asp:ListItem>1962</asp:ListItem>
                        <asp:ListItem>1961</asp:ListItem>
                        <asp:ListItem>1960</asp:ListItem>
                        <asp:ListItem>1959</asp:ListItem>
                        <asp:ListItem>1958</asp:ListItem>
                        <asp:ListItem>1957</asp:ListItem>
                        <asp:ListItem>1956</asp:ListItem>
                        <asp:ListItem>1955</asp:ListItem>
                        <asp:ListItem>1954</asp:ListItem>
                        <asp:ListItem>1953</asp:ListItem>
                        <asp:ListItem>1952</asp:ListItem>
                        <asp:ListItem>1951</asp:ListItem>
                        <asp:ListItem>1950</asp:ListItem>
                        <asp:ListItem>1949</asp:ListItem>
                        <asp:ListItem>1948</asp:ListItem>
                        <asp:ListItem>1947</asp:ListItem>
                        <asp:ListItem>1946</asp:ListItem>
                        <asp:ListItem>1945</asp:ListItem>
                        <asp:ListItem>1943</asp:ListItem>
                        <asp:ListItem>1942</asp:ListItem>
                        <asp:ListItem>1941</asp:ListItem>
                        <asp:ListItem>1940</asp:ListItem>
                        <asp:ListItem>1939</asp:ListItem>
                        <asp:ListItem>1938</asp:ListItem>
                        <asp:ListItem>1937</asp:ListItem>
                        <asp:ListItem>1936</asp:ListItem>
                        <asp:ListItem>1935</asp:ListItem>
                        <asp:ListItem>1934</asp:ListItem>
                        <asp:ListItem>1933</asp:ListItem>
                        <asp:ListItem>1931</asp:ListItem>
                        <asp:ListItem>1930</asp:ListItem>
                        <asp:ListItem>1929</asp:ListItem>
                        <asp:ListItem>1928</asp:ListItem>
                        <asp:ListItem>1927</asp:ListItem>
                        <asp:ListItem>1926</asp:ListItem>
                        <asp:ListItem>1925</asp:ListItem>
                        <asp:ListItem>1924</asp:ListItem>
                        <asp:ListItem>1923</asp:ListItem>
                        <asp:ListItem>1922</asp:ListItem>
                        <asp:ListItem>1921</asp:ListItem>
                        <asp:ListItem>1920</asp:ListItem>
                        <asp:ListItem>1919</asp:ListItem>
                        <asp:ListItem>1918</asp:ListItem>
                        <asp:ListItem>1917</asp:ListItem>
                        <asp:ListItem>1916</asp:ListItem>
                        <asp:ListItem>1915</asp:ListItem>
                        <asp:ListItem>1914</asp:ListItem>
                        <asp:ListItem>1913</asp:ListItem>
                        <asp:ListItem>1912</asp:ListItem>
                        <asp:ListItem>1911</asp:ListItem>
                        <asp:ListItem>1910</asp:ListItem>
                        <asp:ListItem>1909</asp:ListItem>
                        <asp:ListItem>1908</asp:ListItem>
                        <asp:ListItem>1907</asp:ListItem>
                        <asp:ListItem>1906</asp:ListItem>
                        <asp:ListItem>1905</asp:ListItem>
                        <asp:ListItem>1904</asp:ListItem>
                        <asp:ListItem>1903</asp:ListItem>
                        <asp:ListItem>1902</asp:ListItem>
                        <asp:ListItem>1901</asp:ListItem>
                        <asp:ListItem>1900</asp:ListItem>
                    </asp:DropDownList>

Pode me explicar isso?
Responder

Gostei + 0

16/03/2009

[devmedia .net]

Oi Lorena, tudo bem ? Seu erro está simples de resolver...
Seu controle txtDia e txtMes é um DropDownList, portanto para acessar o item selecionado não se usa o txtDia.Text ou txtMes.Text , você deve utilizar : txtDia.SelectedItem.Text e txtMes.SelectedItem.Value (nesse caso é pq o número do mês está na propriedade value) e txtano.SelectedItem.Text   Altere a chamada   DateTime dtNascimento = new DateTime(int.Parse(txtdia.SelectedItem.Text), int.Parse(txtmes.Selected.Value), int.Parse(txtano.SelectedItem.Text));   Outra dica que lhe dou é... Se o controle de tela é um TextBox coloque o nome com o Prefixo txt, caso seja um dropdownlist coloque ddl , fica mais fácil interpretar o tipo do controle.   Abraços   Carlos Jr
Responder

Gostei + 0

16/03/2009

Lorena Menelli

 Naum de certo ... Server Error in '/' Application. Year, Month, and Day parameters describe an un-representable DateTime. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime.

Source Error:

Line 17: protected void Button1_Click(object sender, EventArgs e) Line 18: { Line 19: DateTime dtNascimento = new DateTime(int.Parse(txtdia.SelectedItem.Text), int.Parse(txtmes.SelectedItem.Value), int.Parse(txtano.SelectedItem.Text)); Line 20: int idade = DateTime.Now.Year - dtNascimento.Year; Line 21:
Source File: C:\Documents and Settings\Administrador\Meus documentos\Visual Studio 2008\niver\niver\Default.aspx.cs    Line: 19       protected void Button1_Click(object sender, EventArgs e) { DateTime dtNascimento = new DateTime(int.Parse(txtdia.SelectedItem.Text), int.Parse(txtmes.SelectedItem.Value), int.Parse(txtano.SelectedItem.Text)); int idade = DateTime.Now.Year - dtNascimento.Year; if (DateTime.Now.Month < dtNascimento.Month || (DateTime.Now.Month == dtNascimento.Month && DateTime.Now.Day < dtNascimento.Day)) { idade--; } lbresult.Text = idade.ToString(); }
Responder

Gostei + 0

16/03/2009

[devmedia .net]

Olá Lorena, você está passando os parâmetros errado.. Favor verificar na construção do DateTime os parâmetros...   Devem ser na ordem, ano mes dia... Você está passando errado...   DateTime dtNascimento = new DateTime(int.Parse(ddlAno.SelectedItem.Text), int.Parse(ddlMes.SelectedItem.Value), int.Parse(ddlDia.SelectedItem.Text)); Abraços   Carlos Jr
Responder

Gostei + 0

17/03/2009

Lorena Menelli

Ok Carlos, deu certo.

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar