using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Media.TextFormatting; using ColorTextBlock.Avalonia; using MsBox.Avalonia; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Runtime.Intrinsics.Arm; using System.Xml.Linq; using Tmds.DBus.Protocol; namespace task4_styles_second { public partial class MainWindow : Window { public MainWindow() { try { InitializeComponent(); dpBirthday.MaxYear = maxDate; checkBD.IsVisible = false; sign.IsVisible = false; } catch(Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } public DateTime maxDate = System.DateTime.Now; /// /// Вычисление знака зодиака и животного по восточному гороскопу (вызов функций и вывод на экран) /// /// /// private void DoHoroskope(object sender, RoutedEventArgs e) { sign.Text = ""; //каждый раз при выборе одного из вариантов гороскопа поле со значением гороскопа очищается if ((rb1.IsChecked == true || rb2.IsChecked == true) && dpBirthday.SelectedDate is null) checkBD.IsVisible = true; //вывод предупреждения если дата рождения не заполнена else if (rb1.IsChecked == true) { sign.Text = ZodiakSign(DateTime.Parse(dpBirthday.SelectedDate.ToString())); sign.IsVisible = true; } else { sign.Text = ChineseHoroskope(DateTime.Parse(dpBirthday.SelectedDate.ToString())); sign.IsVisible = true; } } /// /// Метод с вычислением части 1 задания /// /// /// private void TimeCount(object sender, RoutedEventArgs e) { rb1.IsChecked = false; rb2.IsChecked = false; sign.Text = ""; tbLeapYears.Text = ""; checkBD.IsVisible = false; string date = dpBirthday.SelectedDate.ToString(); int days = 1, months = 1, years = 1; DateTime birthdayDate = DateTime.MinValue; if (date != "") { birthdayDate = Convert.ToDateTime(date); years = DateTime.Now.Year - birthdayDate.Year; months = DateTime.Now.Month - birthdayDate.Month; days = DateTime.Now.Day - birthdayDate.Day; } else { checkBD.IsVisible = true; return; } if (days < 0) { months--; if (DateTime.Now.Month > 1) days += DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month - 1); else days += DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); } if (months < 0) { years--; months += 12; } tbCount.Text = years + " лет, " + months + " месяцев, " + days + " дней"; tbDayWeek.Text = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[Convert.ToInt32(birthdayDate.DayOfWeek)] + ", \nтакие же дни недели выпадали\n " + CountDaysWeek(birthdayDate) + " раз"; tbLeapYearsCount.Text = " " + LeapYears(birthdayDate).Count; if (LeapYears(birthdayDate).Count == 0) tbLeapYears.Text += "Високосные года отсутствуют"; else { for (int i = 0; i < LeapYears(birthdayDate).Count; i++) { if (i != 0 && i % 5 == 0) { tbLeapYears.Text += "\n"; } tbLeapYears.Text += LeapYears(birthdayDate)[i] + " "; } } Console.WriteLine(); } /// /// Метод определения животного (и стихии) по восточному гороскопу /// /// Дата рождения /// Животное определенной стихии string ChineseHoroskope(DateTime birthdayDate) { string[] animals = { "Крыса", // 0 "Бык", // 1 "Тигр", // 2 "Кролик", // 3 "Дракон", // 4 "Змея", // 5 "Лошадь", // 6 "Коза", // 7 "Обезьяна", // 8 "Петух", // 9 "Собака", // 10 "Свинья" // 11 }; string[] elements = { " стихии металл", // 0 или 1 " стихии вода", // 2 или 3 " стихии дерево", // 4 или 5 " стихии огонь", // 6 или 7 " стихии земля" // 8 или 9 }; int indexAnimal = (birthdayDate.Year - 4) % 12; int indexElement = (birthdayDate.Year % 10) / 2; return animals[indexAnimal] + elements[indexElement]; } /// /// Определение знака зодиака /// /// Дата рождения /// Знак зодиака string ZodiakSign(DateTime birthdayDate) { int month = birthdayDate.Month; int day = birthdayDate.Day; if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) return "Овен"; else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) return "Телец"; else if ((month == 5 && day >= 21) || (month == 6 && day <= 20)) return "Близнецы"; else if ((month == 6 && day >= 21) || (month == 7 && day <= 22)) return "Рак"; else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) return "Лев"; else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) return "Дева"; else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) return "Весы"; else if ((month == 10 && day >= 23) || (month == 11 && day <= 21)) return "Скорпион"; else if ((month == 11 && day >= 22) || (month == 12 && day <= 21)) return "Стрелец"; else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) return "Козерог"; else if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) return "Водолей"; else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) return "Рыбы"; else return "Неверная дата"; } /// /// Метод определения количества дня рождений, которые человек отпраздновал в тот же день недели за всю жизнь /// /// Дата рождения /// Количество дней int CountDaysWeek(DateTime birthdayDate) { int numDays = 0; for (int i = birthdayDate.Year + 1; i <= DateTime.Now.Year; i++) { if (new DateTime(i, birthdayDate.Month, birthdayDate.Day).DayOfWeek == birthdayDate.DayOfWeek) numDays++; } return numDays; } /// /// Метод определения списка високосных лет, прошедших со дня рождения человека /// /// Дата рождения /// Лист с високосными годами List LeapYears(DateTime birthdayDate) { int numYears = 0; List listYears = new(); listYears.Clear(); for (int i = birthdayDate.Year + 1; i <= DateTime.Now.Year; i++) { if (DateTime.IsLeapYear(i)) { numYears++; listYears.Add(i); } } return listYears; } } }