Создать класс дата (Григорианский календарь). Перегрузить операторы для следующих операций: сложение даты и заданного количества дней, вычитание из даты заданного количества дней, вычисление числа дней, прошедших между двумя датами.
Есть такой код:
Код:
using System;
namespace ЛР9_ООП
{
class Date
{
int day;
Month month;
int year;
enum Month
{
January = 1,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
}
public Date(int day, int month, int year)
{
this.year = year;
if (!CorrectMonth(month))
throw new Exception("Неверно указан месяц");
this.month = (Month)month;
if (!CorrectDay(day))
throw new Exception("Неверно указан день");
this.day = day;
}
private bool CorrectMonth(int month)
{
return (month >= 1 && month <= 12) ? true : false;
}
private bool CorrectDay(int day)
{
return (day >= 1 && day <= DayInMonth()) ? true : false;
}
private bool IsLeapYear()
{
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
return true;
return false;
}
private int DayInMonth()
{
switch (month)
{
case Month.February:
return IsLeapYear() ? 29 : 28;
case Month.April:
case Month.June:
case Month.September:
case Month.November:
return 30;
default:
return 31;
}
}
public void AddDays(int days)
{
day += days;
int dayInCurrentMonth;
while (day > (dayInCurrentMonth = DayInMonth()))
{
day -= dayInCurrentMonth;
NextMonth();
}
}
private void NextMonth()
{
if ((int)++month > 12)
{
month = Month.January;
NextYear();
}
}
private void NextYear()
{
year++;
}
public override string ToString()
{
return $"{day:d2}.{(int)month:d2}.{year}";
}
public static Date operator +(Date ob, int days)
{
Date result = new Date(ob.day, (int)ob.month, ob.year);
result.AddDays(days);
return result;
}
public static Date operator ++(Date ob)
{
Date result = new Date(ob.day, (int)ob.month, ob.year);
result.AddDays(1);
return result;
}
public static Date operator --(Date ob)
{
Date result = new Date(ob.day, (int)ob.month, ob.year);
result.DownDays(1);
return result;
}
private void DownDays(int days)
{
day -= days;
while (day < 1)
{
PrevMonth();
day += DayInMonth();
}
}
private void PrevMonth()
{
if ((int)--month < 1)
{
month = Month.December;
PrevYear();
}
}
private void PrevYear()
{
year--;
}
}
class Program
{
static void Main()
{
Date myDate = new Date(18, 11, 2021);
Console.WriteLine("Текущая дата - " + myDate);
myDate.AddDays(10);
Console.WriteLine("Дата через 10 дней - " + myDate);
myDate.AddDays(365);
Console.WriteLine("Дата через 365 дней - " + myDate);
Console.WriteLine("Текущая дата - " + myDate);
myDate += 5;
Console.WriteLine("Дата через 5 дней - " + myDate);
Console.WriteLine("Текущая дата - " + myDate);
myDate--;
myDate--;
Console.WriteLine("Прошедшая дата (2 дня) - " + myDate);
Console.ReadKey();
}
}
}
Срок до завтра.