Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using Works9and10;
- using static System.Console;
- namespace Works9and10
- {
- class dateTime // Каждое свойство имеет get{}, но, в принципе, оно не используется, но без него наследование, как я понял, невозможно, поэтому пришлось оставить.
- {
- static string[] monthsList =
- {
- "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь",
- "декабрь"
- };
- private static int day;
- private static string month;
- private static int year;
- private static int hour;
- private static int minute;
- private static int monthCode;
- public static int Day
- {
- get { return day;}
- set // День не может быть больше 31
- {
- if (value > 31)
- {
- WriteLine("Incorrect date (by day)(day can't be more than 31");
- System.Environment.Exit(1);
- }
- else
- {
- day = value;
- }
- }
- }
- public static string Month
- {
- get { return month;}
- set
- {
- if (monthsList.Any(str => str == Convert.ToString(value).ToLower())) // Проверка есть ли введённый месяц в списке месяцев
- {
- int indx = Array.IndexOf(monthsList, Convert.ToString(value));
- monthCode = indx + 1; // На будущее для вывода краткой даты
- int[] monthsRange = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // Проверка позволяет ли введённый месяц сохранить число. ( НЕ МОЖЕТ БЫТЬ 31 НОЯБРЯ, 31 АПРЕЛЯ и т.д.)
- if (day <= monthsRange[indx]) // если совместить monthsList и monthsRange, то можно увидеть, что месяц с индексом i (monthsList[i]) имеет максимум (monthsRange[i]) дней.
- {
- month = value;
- }
- else
- {
- WriteLine("Incorrect date (by month)(the day number is too large for this month)");
- System.Environment.Exit(1);
- }
- }
- else
- {
- WriteLine("Incorrect month (not found in months list)");
- System.Environment.Exit(1);
- }
- }
- }
- public static int Year
- {
- get { return year; }
- set
- {
- if (value > 0) // Год должен быть положительным
- {
- if (day == 29 & month == "февраль") // Если у нас день и месяц - это 29 февраля, то необходимо проверить, чтобы год был обязательно високосным
- {
- if ((value % 4 == 0 & value % 100 != 0) | (value % 400 == 0))
- {
- year = value;
- }
- else
- {
- WriteLine("Incorrect date (by year)(29 feb may be only in leap year)");
- System.Environment.Exit(1);
- }
- }
- else
- {
- year = value;
- }
- }
- else
- {
- WriteLine("Incorrect date (by year)(Value should be positive)");
- System.Environment.Exit(1);
- }
- }
- }
- public static int Hour
- {
- get { return hour; }
- set // Проверка, чтобы значение часов было в пределах 0-23
- {
- if (0 <= value & value < 24)
- {
- hour = value;
- }
- else
- {
- WriteLine("Incorrect date (by hour)(Value should be between 0 and 24)");
- System.Environment.Exit(1);
- }
- }
- }
- public static int Minute
- {
- get { return minute;}
- set // Проверка, чтобы значение минут было в рамках 0-59
- {
- if (0 <= value & value < 60)
- {
- minute = value;
- }
- else
- {
- WriteLine("Incorrect date (by minute)(Value should be between 0 and 59)");
- System.Environment.Exit(1);
- }
- }
- }
- public static void GetInfo() // Обращение именно к переменным хз зачем сделал, правильнее было бы к свойствам всё же
- {
- WriteLine("Заданная дата:"+"\n"+"{0} {1} {2}\t{3}:{4}",day,month,year,hour,minute);
- }
- public static int MonthCode // read-only переменная для вывода месяца в кратком виде
- {
- get { return monthCode; }
- }
- }
- class shortDateTime : dateTime // Задание 2, наследование класса dateTime и пересоздание GetInfo() на вывод краткой даты
- {
- new public static void GetInfo() // new чтобы IDE не подчеркивал, что идёт перекрытие GetInfo() из dateTime
- {
- WriteLine("Краткая заданная дата:\n"+"{0}.{1}.{2}\t{3}:{4}",Day,MonthCode,Year,Hour,Minute);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- WriteLine("Write number of day");
- dateTime.Day = Convert.ToInt32(ReadLine());
- WriteLine("Write name of months(На русском в именительном падеже)");
- dateTime.Month = ReadLine();
- WriteLine("Write year");
- dateTime.Year = Convert.ToInt32(ReadLine());
- WriteLine("Write hour");
- dateTime.Hour = Convert.ToInt32(ReadLine());
- WriteLine("Write minute");
- dateTime.Minute = Convert.ToInt32(ReadLine());
- WriteLine(new String('-',20));
- dateTime.GetInfo();
- shortDateTime.GetInfo();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment