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


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace StudentTasksApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("=== C# Программа для обработки ведомостей и списков ===");
            Console.WriteLine("Все методы обработки используют демонстрационные данные и записывают результаты в файлы.");
            
            try
            {
                // Выполнение всех уникальных заданий
                Task1_11_Execute();
                Task2_12_Execute();
                Task3_13_Execute();
                Task4_Execute();
                Task5_Execute();
                Task6_Execute();
                Task7_Execute();
                Task8_Execute();
                Task9_Execute();
                Task10_Execute();

                Console.WriteLine("\n[УСПЕХ] Все задания успешно выполнены! Файлы с результатами созданы в текущей директории.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"\n[ОШИБКА] Произошел сбой при выполнении: {ex.Message}");
            }
            
            Console.ReadLine();
        }

        #region Задание 1 & 11: Студенты и Школы
        public class StudentSchool
        {
            public string FullName { get; set; }
            public int BirthYear { get; set; }
            public string Address { get; set; }
            public string SchoolGraduated { get; set; }

            public override string ToString() => $"{FullName} ({BirthYear} г.р.), Адрес: {Address}, Школа: {SchoolGraduated}";
        }

        public static void Task1_11_Execute()
        {
            var students = new List<StudentSchool>
            {
                new StudentSchool { FullName = "Иванов И.И.", BirthYear = 2005, Address = "ул. Ленина 5", SchoolGraduated = "Лицей №1" },
                new StudentSchool { FullName = "Петров П.П.", BirthYear = 2004, Address = "ул. Мира 12", SchoolGraduated = "Школа №10" },
                new StudentSchool { FullName = "Сидоров С.С.", BirthYear = 2006, Address = "ул. Гагарина 3", SchoolGraduated = "Лицей №1" },
                new StudentSchool { FullName = "Алексеев А.А.", BirthYear = 2003, Address = "ул. Новая 8", SchoolGraduated = "Лицей №1" }
            };

            string targetSchool = "Лицей №1";
            
            var result = students
                .Where(s => s.SchoolGraduated.Equals(targetSchool, StringComparison.OrdinalIgnoreCase))
                .OrderBy(s => s.BirthYear)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task1_11_output.txt"))
            {
                sw.WriteLine($"Студенты, окончившие {targetSchool}, отсортированные по году рождения:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 1/11 выполнено.");
        }
        #endregion

        #region Задание 2 & 12: Студенты и Результаты Сессии
        public class StudentSession
        {
            public string FullName { get; set; }
            public string GroupNumber { get; set; }
            public int[] ExamGrades { get; set; } // Результаты 3-х экзаменов

            public override string ToString() => $"{FullName}, Группа: {GroupNumber}, Оценки: {string.Join(", ", ExamGrades)}";
        }

        public static void Task2_12_Execute()
        {
            var students = new List<StudentSession>
            {
                new StudentSession { FullName = "Козлов К.К.", GroupNumber = "ИВТ-21", ExamGrades = new int[] { 4, 5, 4 } },
                new StudentSession { FullName = "Новиков Н.Н.", GroupNumber = "ИВТ-22", ExamGrades = new int[] { 3, 4, 5 } },
                new StudentSession { FullName = "Морозов М.М.", GroupNumber = "ИВТ-21", ExamGrades = new int[] { 5, 5, 5 } },
                new StudentSession { FullName = "Павлов П.А.", GroupNumber = "ИВТ-22", ExamGrades = new int[] { 2, 4, 5 } } // Не сдал (есть двойка)
            };

            // Успешно сдали = все оценки строго выше двойки (>= 3)
            var result = students
                .Where(s => s.ExamGrades.All(grade => grade >= 3))
                .OrderBy(s => s.GroupNumber)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task2_12_output.txt"))
            {
                sw.WriteLine("Студенты, успешно сдавшие сессию, отсортированные по номеру группы:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 2/12 выполнено.");
        }
        #endregion

        #region Задание 3 & 13: Багажная ведомость
        public class BaggageInfo
        {
            public string PassengerName { get; set; }
            public int ItemsCount { get; set; }
            public double TotalWeight { get; set; }
            public double AverageWeight => ItemsCount > 0 ? TotalWeight / ItemsCount : 0;

            public override string ToString() => $"{PassengerName}, Вещей: {ItemsCount}, Общий вес: {TotalWeight} кг, Средний вес: {AverageWeight:F2} кг";
        }

        public static void Task3_13_Execute()
        {
            var baggageList = new List<BaggageInfo>
            {
                new BaggageInfo { PassengerName = "Смирнов А.В.", ItemsCount = 3, TotalWeight = 45.0 },
                new BaggageInfo { PassengerName = "Васильев И.С.", ItemsCount = 1, TotalWeight = 5.0 },
                new BaggageInfo { PassengerName = "Кузнецов П.Д.", ItemsCount = 5, TotalWeight = 60.0 },
                new BaggageInfo { PassengerName = "Попов К.М.", ItemsCount = 2, TotalWeight = 30.0 }
            };

            double targetAverageWeight = 12.0;

            var result = baggageList
                .Where(b => b.AverageWeight > targetAverageWeight)
                .OrderBy(b => b.ItemsCount)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task3_13_output.txt"))
            {
                sw.WriteLine($"Пассажиры со средним весом багажа > {targetAverageWeight} кг (сортировка по количеству вещей):");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 3/13 выполнено.");
        }
        #endregion

        #region Задание 4: Автомобильная ведомость
        public class CarInfo
        {
            public string Brand { get; set; }
            public string LicensePlate { get; set; }
            public string OwnerLastName { get; set; }
            public int PurchaseYear { get; set; }
            public double Mileage { get; set; }

            public override string ToString() => $"{Brand} ({LicensePlate}), Владелец: {OwnerLastName}, Год: {PurchaseYear}, Пробег: {Mileage} км";
        }

        public static void Task4_Execute()
        {
            var cars = new List<CarInfo>
            {
                new CarInfo { Brand = "Toyota", LicensePlate = "А123АА", OwnerLastName = "Тихонов", PurchaseYear = 2015, Mileage = 120000 },
                new CarInfo { Brand = "Lada", LicensePlate = "В456ВВ", OwnerLastName = "Егоров", PurchaseYear = 2010, Mileage = 180000 },
                new CarInfo { Brand = "BMW", LicensePlate = "С789СС", OwnerLastName = "Романов", PurchaseYear = 2019, Mileage = 45000 },
                new CarInfo { Brand = "Ford", LicensePlate = "К111КК", OwnerLastName = "Федоров", PurchaseYear = 2008, Mileage = 250000 }
            };

            int targetYear = 2016;

            var result = cars
                .Where(c => c.PurchaseYear < targetYear)
                .OrderBy(c => c.Mileage)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task4_output.txt"))
            {
                sw.WriteLine($"Автомобили, выпущенные (приобретенные) ранее {targetYear} года, отсортированные по пробегу:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 4 выполнено.");
        }
        #endregion

        #region Задание 5: Сотрудники учреждения
        public class Employee
        {
            public string FullName { get; set; }
            public int HireYear { get; set; }
            public string Position { get; set; }
            public decimal Salary { get; set; }
            public int ExperienceYears { get; set; }

            public override string ToString() => $"{FullName}, Должность: {Position}, Зарплата: {Salary:F2} руб., Стаж: {ExperienceYears} лет";
        }

        public static void Task5_Execute()
        {
            var employees = new List<Employee>
            {
                new Employee { FullName = "Соколов О.Д.", HireYear = 2018, Position = "Инженер", Salary = 45000, ExperienceYears = 8 },
                new Employee { FullName = "Лебедев В.П.", HireYear = 2020, Position = "Техник", Salary = 35000, ExperienceYears = 5 },
                new Employee { FullName = "Козлова Е.Н.", HireYear = 2012, Position = "Ведущий специалист", Salary = 70000, ExperienceYears = 14 },
                new Employee { FullName = "Степанов И.И.", HireYear = 2022, Position = "Стажер", Salary = 25000, ExperienceYears = 2 }
            };

            decimal targetSalary = 50000;

            var result = employees
                .Where(e => e.Salary < targetSalary)
                .OrderBy(e => e.ExperienceYears)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task5_output.txt"))
            {
                sw.WriteLine($"Сотрудники с зарплатой ниже {targetSalary} руб., отсортированные по рабочему стажу:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 5 выполнено.");
        }
        #endregion

        #region Задание 6: Инвентарная ведомость склада
        public class Product
        {
            public string Type { get; set; }
            public decimal Price { get; set; }
            public string Grade { get; set; } // Сорт
            public int Quantity { get; set; }

            public override string ToString() => $"Тип: {Type}, Сорт: {Grade}, Цена: {Price}, Кол-во: {Quantity}";
        }

        public static void Task6_Execute()
        {
            var products = new List<Product>
            {
                new Product { Type = "Цемент", Price = 450, Grade = "Высший", Quantity = 120 },
                new Product { Type = "Кирпич", Price = 25, Grade = "Первый", Quantity = 1500 },
                new Product { Type = "Шпаклевка", Price = 600, Grade = "Высший", Quantity = 45 },
                new Product { Type = "Грунтовка", Price = 350, Grade = "Второй", Quantity = 15 }
            };

            int targetQuantity = 100;

            var result = products
                .Where(p => p.Quantity < targetQuantity)
                .OrderBy(p => p.Quantity)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task6_output.txt"))
            {
                sw.WriteLine($"Продукция с количеством менее {targetQuantity} ед., отсортированная по количеству:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 6 выполнено.");
        }
        #endregion

        #region Задание 7: Инвентарная ведомость игрушек
        public class Toy
        {
            public string Name { get; set; }
            public decimal Price { get; set; }
            public int MinAge { get; set; }
            public int MaxAge { get; set; }

            public override string ToString() => $"Игрушка: {Name}, Цена: {Price} руб., Возраст: от {MinAge} до {MaxAge} лет";
        }

        public static void Task7_Execute()
        {
            var toys = new List<Toy>
            {
                new Toy { Name = "Конструктор", Price = 1500, MinAge = 5, MaxAge = 12 },
                new Toy { Name = "Кукла", Price = 800, MinAge = 3, MaxAge = 7 },
                new Toy { Name = "Машинка р/у", Price = 2500, MinAge = 6, MaxAge = 14 },
                new Toy { Name = "Погремушка", Price = 200, MinAge = 0, MaxAge = 2 }
            };

            int N = 4;
            int M = 10;

            // Проверка пересечения возрастных категорий: игрушка подходит, если ее диапазон пересекает [N, M]
            var result = toys
                .Where(t => t.MinAge <= M && t.MaxAge >= N)
                .OrderBy(t => t.Price)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task7_output.txt"))
            {
                sw.WriteLine($"Игрушки для детей от {N} до {M} лет, отсортированные по стоимости:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 7 выполнено.");
        }
        #endregion

        #region Задание 8: Список вкладчиков банка
        public class Depositor
        {
            public string FullName { get; set; }
            public string AccountNumber { get; set; }
            public decimal Amount { get; set; }
            public int OpenYear { get; set; }

            public override string ToString() => $"{FullName}, Счет: {AccountNumber}, Сумма: {Amount:F2} руб., Год открытия: {OpenYear}";
        }

        public static void Task8_Execute()
        {
            var depositors = new List<Depositor>
            {
                new Depositor { FullName = "Макаров А.Д.", AccountNumber = "408178101", Amount = 150000, OpenYear = 2026 },
                new Depositor { FullName = "Зайцев С.В.", AccountNumber = "408178102", Amount = 450000, OpenYear = 2024 },
                new Depositor { FullName = "Виноградов К.А.", AccountNumber = "408178103", Amount = 23000, OpenYear = 2026 },
                new Depositor { FullName = "Воробьев Ю.М.", AccountNumber = "408178104", Amount = 1200000, OpenYear = 2025 }
            };

            int currentYear = DateTime.Now.Year;

            var result = depositors
                .Where(d => d.OpenYear == currentYear)
                .OrderBy(d => d.Amount)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task8_output.txt"))
            {
                sw.WriteLine($"Вкладчики, открывшие вклад в текущем ({currentYear}) году, отсортированные по сумме:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 8 выполнено.");
        }
        #endregion

        #region Задание 9: Список студентов с двойками
        public class StudentWithGrades
        {
            public string LastName { get; set; }
            public string Faculty { get; set; }
            public int Course { get; set; }
            public string Group { get; set; }
            public int[] Grades { get; set; } // 5 оценок

            public override string ToString() => $"{LastName}, Факультет: {Faculty}, Курс: {Course}, Группа: {Group}, Оценки: {string.Join(", ", Grades)}";
        }

        public static void Task9_Execute()
        {
            var students = new List<StudentWithGrades>
            {
                new StudentWithGrades { LastName = "Кудрявцев", Faculty = "ФИТ", Course = 2, Group = "БПИ-24", Grades = new int[] { 4, 5, 4, 3, 5 } },
                new StudentWithGrades { LastName = "Поляков", Faculty = "ЭФ", Course = 3, Group = "ЭКО-23", Grades = new int[] { 5, 2, 4, 4, 3 } }, // Есть двойка
                new StudentWithGrades { LastName = "Чернов", Faculty = "ФИТ", Course = 1, Group = "БПИ-25", Grades = new int[] { 3, 2, 2, 4, 5 } }, // Есть двойки
                new StudentWithGrades { LastName = "Астахов", Faculty = "ЮФ", Course = 4, Group = "ЮР-22", Grades = new int[] { 5, 5, 4, 5, 5 } }
            };

            var result = students
                .Where(s => s.Grades.Contains(2))
                .OrderBy(s => s.Course)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task9_output.txt"))
            {
                sw.WriteLine("Студенты, имеющие хотя бы одну двойку, отсортированные по курсу:");
                foreach (var item in result) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 9 выполнено.");
        }
        #endregion

        #region Задание 10: Результаты забега (Топ-3 результатов с учетом одинаковых мест)
        public class Runner
        {
            public string FullName { get; set; }
            public int Course { get; set; }
            public string Group { get; set; }
            public double RunResult { get; set; } // Время в секундах (меньше = лучше)

            public override string ToString() => $"{FullName}, Курс: {Course}, Группа: {Group}, Результат: {RunResult} сек";
        }

        public static void Task10_Execute()
        {
            var runners = new List<Runner>
            {
                new Runner { FullName = "Григорьев А.А.", Course = 1, Group = "А-1", RunResult = 11.2 }, 
                new Runner { FullName = "Семенов С.С.", Course = 2, Group = "Б-2", RunResult = 10.9 },   // 1-й лучший результат
                new Runner { FullName = "Ермаков Е.Е.", Course = 1, Group = "А-2", RunResult = 11.5 },   // 3-й лучший результат
                new Runner { FullName = "Мухин М.М.", Course = 3, Group = "В-1", RunResult = 11.5 },     // Тоже 3-й результат (разделили место)
                new Runner { FullName = "Федоров Ф.Ф.", Course = 2, Group = "Б-1", RunResult = 12.1 }
            };

            // Находим 3 лучших уникальных значения времени
            var top3Times = runners
                .Select(r => r.RunResult)
                .Distinct()
                .OrderBy(t => t)
                .Take(3)
                .ToList();

            // Извлекаем всех бегунов, чье время входит в этот топ-3 (включает разделивших победу)
            var winners = runners
                .Where(r => top3Times.Contains(r.RunResult))
                .OrderBy(r => r.RunResult)
                .ToList();

            using (StreamWriter sw = new StreamWriter("task10_output.txt"))
            {
                sw.WriteLine("Студенты, показавшие три лучших результата в забеге (с учетом разделивших места):");
                foreach (var item in winners) sw.WriteLine(item.ToString());
            }
            Console.WriteLine("Задание 10 выполнено.");
        }
        #endregion
    }
}