# Лабораторная работа №6.1. ООП. Основы.

>Реализовать **одно** задание, номер которого выдаст преподаватель

Разработать класс для объекта. Сформировать набор данных и реализовать выборки с помощью LINQ-запросов. 

Список полей и выборок приведён примерный - во всех заданиях должны быть реализованы свойства с типами **int**, **double**, **DateTime** или **TimeSpan**, **string**, **boolean** и выборки с использованием этих свойств.

>Тип **TimeSpan** хранит *часы*, *минуты*, *секунды* - обычно используется для хранения результата вычитания двух дат, но можно использовать и сам по себе.

В разных выборках, кроме собственно выборки данных, использовать дополнительные методы LINQ-запросов (сортировка, лимит и т.д.)

Если работу с CSV ещё не проходили, то сформировать список исходных данных программно (не менее 5-ти элементов), например:

```cs
var Users = new List<User>
{
    new User {Name="Том", Age=23},
    new User {Name="Боб", Age=25},
    ...
};
```

Переменные с типом **DateTime** и **TimeSpan** создаются с помощью конструкторов:

```cs
var BirthDay = new DateTime(2002, 1, 31);
var DateDiff = new TimeSpan(33, 0, 0);
```

Напоминаю структуру проекта:

```cs
namespace HelloApp
{
    // описываем новый класс в пространстве имен (namespace)
    class Person
    {
        // используем CamelCase - все слова (в переменных и методах) с большой буквы
        public string FirstName;
        public DateTime BirthDay;
    }
    // существующий класс не трогаем
    class Program
    {
        static void Main(string[] args)
        {
            // формируем набор данных (список объектов вашего типа)
            var Users = new List<Person>
            {
                new Person {FirstName="Том", BirthDay=new DateTime(2002,1,31)},
                new Person {FirstName="Боб", BirthDay=new DateTime(2004,12,1)}
            };

            // дальше LINQ-запросы
        }
    }
}
```

1. **Student**: Фамилия, Имя, Отчество, Дата рождения, Адрес, Телефон, Факультет, Курс. Данные загрузить из CSV-файла. Вывести:
    * список студентов заданного факультета; 
    * списки студентов для каждого факультета и курса;
    * список студентов, родившихся после заданного года.

2. **Abiturient**: Фамилия, Имя, Отчество, Адрес, Оценки, Дата. Данные загрузить из CSV-файла. Вывести:

    * список абитуриентов, имеющих неудовлетворительные оценки; 
    * список абитуриентов, сумма баллов у которых не меньше заданной;
    * выбрать N абитуриентов, имеющих самую высокую сумму баллов, и список абитуриентов, имеющих полупроходной балл.

3. **Aeroflot**: Пункт назначения, Номер рейса, Тип самолета, Время вылета, Дни недели. Данные загрузить из CSV-файла. Вывести:

    * список рейсов для заданного пункта назначения; 
    * список рейсов для заданного дня недели;
    * список рейсов для заданного дня недели, время вылета для которых больше заданного.

4. **Book**: Автор, Название, Издательство, Год, Количество страниц. Данные загрузить из CSV-файла. Вывести:

    * список книг заданного автора; 
    * список книг, выпущенных заданным издательством;
    * список книг, выпущенных после заданного года.

5. **Worker**: Фамилия и инициалы, Должность, Год поступления на работу, Зарплата. Данные загрузить из CSV-файла. Вывести:

    * список работников, стаж работы которых на данном предприятии превышает заданное число лет; 
    * список работников, зарплата которых больше заданной;
    * список работников, занимающих заданную должность.

6. **Train**: Пункт назначения, Номер поезда, Время отправления, Число общих мест, Купейных, Плацкартных. Данные загрузить из JSON-файла. Вывести:

    * список поездов, следующих до заданного пункта назначения; 
    * список поездов, следующих до заданного пункта назначения и отправляющихся после заданного часа;
    * список поездов, отправляющихся до заданного пункта назначения и имеющих общие места.

7. **Product**: Наименование, Производитель, Цена, Срок хранения, Количество. Данные загрузить из JSON-файла. Вывести:

    * список товаров для заданного наименования; 
    * список товаров для заданного наименования, цена которых не превышает указанной;
    * список товаров, срок хранения которых больше заданного.

8. **Patient**: Фамилия, Имя, Отчество, Адрес, Номер медицинской карты, Диагноз. Данные загрузить из JSON-файла. Вывести:

    * список пациентов, имеющих данный диагноз; 
    * список пациентов, номер медицинской карты которых находится в заданном интервале.

9. **Bus**: Фамилия и инициалы водителя, Номер автобуса, Номер маршрута, Марка, Год начала эксплуатации, Пробег. Данные загрузить из JSON-файла. Вывести:

    * список автобусов для заданного номера маршрута; 
    * список автобусов, которые эксплуатируются больше 10 лет;
    * список автобусов, пробег у которых больше 10 000 км.

10. **Customer**: Фамилия, Имя, Отчество, Адрес, Телефон, Номер кредитной карточки, Номер банковского счета. Данные загрузить из JSON-файла. Вывести:

    * список покупателей в алфавитном порядке; 
    * список покупателей, номер кредитной карточки которых находится в заданном интервале.

11. **Процедурный кабинет**: забор различных анализов

12. **Автосалон**

