Загрузка данных
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
}
}