Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2021, 17:56   #1
tara-ta-ta
Пользователь
 
Регистрация: 25.10.2019
Сообщений: 36
По умолчанию Перегрузка с#

Создать класс дата (Григорианский календарь). Перегрузить операторы для следующих операций: сложение даты и заданного количества дней, вычитание из даты заданного количества дней, вычисление числа дней, прошедших между двумя датами.

Есть такой код:
Код:
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();
        }
    }
}
Срок до завтра.
tara-ta-ta вне форума Ответить с цитированием
Старый 21.11.2021, 17:56   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

tara-ta-ta, обращайтесь e-mail: informatik101@mail.ru
Telegram: @alexcoder1
vk.com/alexcoder1
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка new cocomo Помощь студентам 0 15.01.2016 23:32
перегрузка new f.hump Общие вопросы C/C++ 6 10.04.2013 17:23
перегрузка в c++ Ioane Помощь студентам 1 06.06.2012 12:19
C++ Перегрузка GLAM1 Общие вопросы C/C++ 7 01.04.2011 15:49
C++ Перегрузка GLAM1 Помощь студентам 3 31.03.2011 21:09