123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- 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;
- /// <summary>
- /// Вычисление знака зодиака и животного по восточному гороскопу (вызов функций и вывод на экран)
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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;
- }
- }
- /// <summary>
- /// Метод с вычислением части 1 задания
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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();
- }
- /// <summary>
- /// Метод определения животного (и стихии) по восточному гороскопу
- /// </summary>
- /// <param name="birthdayDate">Дата рождения</param>
- /// <returns>Животное определенной стихии</returns>
- 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];
- }
- /// <summary>
- /// Определение знака зодиака
- /// </summary>
- /// <param name="birthdayDate">Дата рождения</param>
- /// <returns>Знак зодиака</returns>
- 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 "Неверная дата";
- }
- /// <summary>
- /// Метод определения количества дня рождений, которые человек отпраздновал в тот же день недели за всю жизнь
- /// </summary>
- /// <param name="birthdayDate">Дата рождения</param>
- /// <returns>Количество дней</returns>
- 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;
- }
- /// <summary>
- /// Метод определения списка високосных лет, прошедших со дня рождения человека
- /// </summary>
- /// <param name="birthdayDate">Дата рождения</param>
- /// <returns>Лист с високосными годами</returns>
- List<int> LeapYears(DateTime birthdayDate)
- {
- int numYears = 0;
- List<int> 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;
- }
- }
- }
|