Member 13090852 Ответов: 0

[Age calculator C#] как реализовать контроль високосного года?


Привет,

Краткое резюме: я очень новичок в C#, и это мой первый раз, когда я программирую на этом языке. У меня больше опыта работы со скриптовыми языками. Для задания в колледже мы должны сделать калькулятор возраста, который вычисляет возраст в днях пользователя на основе ввода поля со списком.

Мой вопрос заключается в том, как (и где) я могу реализовать контроль високосного года в своем коде? Я осознаю дату и время.IsLeapYear, однако я очень незнаком с синтаксисом и не знаю, с чего начать.

Я добавил свой код ниже, чтобы вы могли видеть мой прогресс до сих пор. Я работаю в Visual Studio 2017.

P.S. Я также должен где-то реализовать блок try/catch, но, как я уже сказал выше, я не знаю, с чего начать. К чему это приведет?

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace NumberOfDaysOld
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //=========================================================
            // DISPLAYS MONTHS OF THE YEAR IN THE MONTH COMBOBOX
            //=========================================================
            string[] monthArray = new string[12];
            monthArray[0] = "January";
            monthArray[1] = "February";
            monthArray[2] = "March";
            monthArray[3] = "April";
            monthArray[4] = "May";
            monthArray[5] = "June";
            monthArray[6] = "July";
            monthArray[7] = "August";
            monthArray[8] = "September";
            monthArray[9] = "October";
            monthArray[10] = "November";
            monthArray[11] = "December";

            for (int index = 0; index < monthArray.Length; index++)
            {
                comboBoxMonth.Items.Add(monthArray[index]);
            }

            //=========================================================
            // DISPLAYS YEARS 1900 TO CURRENT YEAR IN THE YEAR COMBOBOX
            //=========================================================

            for (int i = 1900; i <= DateTime.Now.Year; i++)
            {
                comboBoxYear.Items.Add(i.ToString());
            }

            //=========================================================
            // DISPLAYS DATES OF THE MONTH IN THE DAYS COMBOBOX
            //=========================================================

            for (int i = 1; i <= 31; i++)
            {
                comboBoxDay.Items.Add(i.ToString());
            }

        }

        private void timerDateTime_Tick(object sender, EventArgs e)
        {
            //=========================================================
            // DISPLAYS THE DATE AND TIME IN REALTIME
            //=========================================================

            labelDate.Text = DateTime.Now.ToShortDateString();
            labelTime.Text = DateTime.Now.ToLongTimeString();
        }

        private void comboBoxDay_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void comboBoxMonth_SelectedIndexChanged(object sender, EventArgs e)
        {

        }


        private void buttonCalculate_Click(object sender, EventArgs e)
        {
            DateTime dob = new DateTime(Convert.ToInt32(comboBoxYear.SelectedItem), comboBoxMonth.SelectedIndex + 1, Convert.ToInt32(comboBoxDay.SelectedItem));
            TimeSpan diff = DateTime.Now - dob;
            int days = (int)diff.TotalDays;
            MessageBox.Show(textBoxForename.Text + " is days old " + days.ToString());
        }

        }
    }
}

[no name]

https://msdn.microsoft.com/en-us/library/system.datetime.isleapyear(v=против 110). aspx
https://msdn.microsoft.com/en-us/library/0yd65esw.aspx

PIEBALDconsult

Зачем делать это трудным путем?
Система.DateTime dt0 = новая система.Дата и время (2016, 02, 01 ) ;
Система.DateTime dt1 = новая система.Дата и время (2016, 03, 01 ) ;
Система.TimeSpan ts = dt1 - dt0 ;
Система.Приставка.WriteLine ( ts. TotalDays ) ;

Richard Deeming

Я думаю, вы просто хотите проверить, является ли выбранный день меньше или равен количество дней в выбранном месяце[^]?

Нет необходимости в каком-либо специальном коде високосного года; DateTime тип позаботится об этом за вас.

Nick_3141592654

Что касается попытки поймать, о которой вы спрашивали. Это, по-видимому, задание колледжа, цель которого, по-видимому, состоит в том, чтобы вы: (а) узнали что-то и (Б) продемонстрировали, что вы это узнали.

Учитывая эти цели, почему бы вам не потратить 15 минут на чтение о try-catch, чтобы понять, для чего он предназначен, и тогда вы будете знать, где его целесообразно использовать.

Если кто-то просто скажет: "О, вы можете положить его сюда ..." - вы ничего не узнаете.

0 Ответов