Загрузка данных


using System;

namespace Шмфтщм_Laba02
{
    // Начало задания 3
    // Создание собственного исключения для некорректных дат
    public class InvalidDateException : Exception
    {
        public InvalidDateException(string message) : base(message) { }
    }

    // Создание класса Human со свойствами и методом расчета возраста
    public class Human
    {
        public string LastName { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string Gender { get; set; }
        public int BirthDay { get; set; }
        public int BirthMonth { get; set; }
        public int BirthYear { get; set; }

        public int GetAge(int currentDay, int currentMonth, int currentYear)
        {
            try
            {
                if (currentDay < 1 || currentDay > 31 || currentMonth < 1 || currentMonth > 12 || currentYear < 1)
                {
                    throw new InvalidDateException("Указаны некорректные параметры текущей даты.");
                }
                if (BirthDay < 1 || BirthDay > 31 || BirthMonth < 1 || BirthMonth > 12 || BirthYear < 1)
                {
                    throw new InvalidDateException("Указаны некорректные параметры даты рождения.");
                }

                int age = currentYear - BirthYear;

                if (currentMonth < BirthMonth || (currentMonth == BirthMonth && currentDay < BirthDay))
                {
                    age--;
                }

                if (age < 0)
                {
                    throw new InvalidDateException("Дата рождения не может быть позже текущей даты.");
                }

                return age;
            }
            catch (InvalidDateException)
            {
                throw; // Оператор throw для передачи исключения вверх
            }
        }
    }
    // === Конец задания 3 ===

    // === Начало задания 4 ===
    // Создание класса Student и наследование его от Human
    public class Student : Human
    {
        public string Group { get; set; }
    }
    // === Конец задания 4 ===

    class Program
    {
        static void Main(string[] args)
        {
            // === Начало задания 2 ===
            // Прописывание блока try...catch в методе Main
            try
            {
                // === Начало задания 6 ===
                // Создание массива объектов класса Student на 20 ячеек
                Student[] students = new Student[20];
                // === Конец задания 6 ===

                // === Начало задания 5 ===
                // Создание 20 уникальных объектов в блоке try и заполнение ими массива
                for (int i = 0; i < students.Length; i++)
                {
                    string gender = (i % 2 == 0) ? "Мужской" : "Женский";
                    string group = (i % 3 == 0) ? "ПОИТ-11" : "ИСИТ-21";
                    int birthYear = (i < 5) ? 2012 : 2004;

                    students[i] = new Student
                    {
                        LastName = "Фамилия_" + (i + 1),
                        FirstName = "Имя_" + (i + 1),
                        MiddleName = "Отчество_" + (i + 1),
                        Gender = gender,
                        BirthDay = 15,
                        BirthMonth = 5,
                        BirthYear = birthYear,
                        Group = group
                    };
                }
                // === Конец задания 5 ===

                int currentDay = 23;
                int currentMonth = 10;
                int currentYear = 2026;

                // === Начало задания 7 ===
                // Вывод на консоль данных совершеннолетних студентов
                Console.WriteLine("=== СОВЕРШЕННОЛЕТНИЕ СТУДЕНТЫ ===");
                foreach (var student in students)
                {
                    if (student.GetAge(currentDay, currentMonth, currentYear) >= 18)
                    {
                        Console.WriteLine($"{student.LastName} {student.FirstName} {student.MiddleName} ({student.BirthDay}.{student.BirthMonth}.{student.BirthYear} г.р.)");
                    }
                }
                Console.WriteLine();
                // === Конец задания 7 ===

                // === Начало задания 8 ===
                // Вывод на консоль студентов одной конкретной указанной группы
                string targetGroup = "ПОИТ-11";
                Console.WriteLine($"=== СТУДЕНТЫ ГРУППЫ {targetGroup} ===");
                foreach (var student in students)
                {
                    if (student.Group == targetGroup)
                    {
                        Console.WriteLine($"{student.LastName} {student.FirstName} {student.MiddleName} - Группа: {student.Group}");
                    }
                }
                Console.WriteLine();
                // === Конец задания 8 ===

                // === Начало задания 9 ===
                // Вывод количества девушек и юношей в виде строки определенного формата
                int girlsCount = 0;
                int boysCount = 0;

                foreach (var student in students)
                {
                    if (student.Gender == "Женский")
                    {
                        girlsCount++;
                    }
                    else if (student.Gender == "Мужской")
                    {
                        boysCount++;
                    }
                }

                Console.WriteLine($"Количество девушек: [{girlsCount}], количество юношей: [{boysCount}]");
                // === Конец задания 9 ===

            }
            catch (InvalidDateException ex)
            {
                // Вывод сообщения об ошибке в случае собственного исключения
                Console.WriteLine($"Ошибка валидации даты: {ex.Message}");
            }
            catch (Exception ex)
            {
                // Вывод сообщения об ошибке в случае возникновения любой исключительной ситуации
                Console.WriteLine($"Произошла непредвиденная ошибка: {ex.Message}");
            }
            // === Конец задания 2 ===

            Console.ReadKey();
        }
    }
}