Fórum Lógica para programa que clacula a data de aniversário. #3552
12/03/2009
0
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
Curtir tópico
+ 0Posts
12/03/2009
[devmedia .net]
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
Gostei + 0
12/03/2009
[devmedia .net]
Gostei + 0
12/03/2009
Lorena Menelli
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?
Gostei + 0
12/03/2009
Lorena Menelli
Gostei + 0
12/03/2009
[devmedia .net]
Gostei + 0
12/03/2009
Lorena Menelli
endendi perfeitamente.
pode fechar ..
abraçu
Gostei + 0
16/03/2009
Lorena Menelli
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?
Gostei + 0
16/03/2009
[devmedia .net]
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
Gostei + 0
16/03/2009
Lorena Menelli
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(); }
Gostei + 0
16/03/2009
[devmedia .net]
Gostei + 0
17/03/2009
Lorena Menelli
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)