Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
### Цель

Целью этой домашней работы является получение одобрения по выбранной теме, функциям и ролям проектной работы.

---

### Описание

1. Выберите название темы
2. Напишите список ролей для максимально возможной версии вашего приложения, то есть все ваши, даже самые смелые, пожелания.
3. Напишите какие функции будут у каждой роли.
4. Напишите список из максимум 4 самых базовых функций.

---

### Критерии оценивания

- Пункт 1 - 2 баллов
- Пункт 2 - 2 балла
- Пункт 3 - 4 балла
- Пункт 4 - 2 балла

Минимальный проходной балл - 6.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
### Цель

В этом задании мы закрепим знания, полученные в ходе занятий, и создадим базовое интерактивное консольное приложение, используя основные принципы работы с переменными, методами и операторами управления.

---

### Описание

Вам предстоит создать консольное приложение с интерактивным меню:

1. Приветствие: При запуске программы отображается сообщение приветствия со списком доступных команд: /start, /help, /info, /exit.
2. Обработка команды /start: Если пользователь вводит команду /start, программа просит его ввести своё имя. Сохраните введенное имя в переменную. Программа должна обращаться к пользователю по имени в каждом следующем ответе.
3. Обработка команды /help: Отображает краткую справочную информацию о том, как пользоваться программой.
4. Обработка команды /info: Предоставляет информацию о версии программы и дате её создания.
5. Доступ к команде /echo: После ввода имени становится доступной команда /echo. При вводе этой команды с аргументом (например, /echo Hello), программа возвращает введенный текст (в данном примере "Hello").
6. Основной цикл программы: Программа продолжает ожидать ввод команды от пользователя, пока не будет введена команда /exit.

### Примечание

Для получения информации из консоли используйте `Console.ReadLine()`.

---

### Критерии оценивания

- Отображение приветственного сообщения и списка команд: 1 балл
- Правильная обработка команды /start и сохранение имени: 2 балла
- Корректное обращение к пользователю по имени: 1 балл
- Отображение справочной информации по команде /help: 1 балл
- Отображение информации о версии и дате создания по команде /info: 1 балл
- Обработка команды /echo с аргументом: 2 балла
- Поддержка цикла для продолжения работы программы: 1 балл
- Код написан аккуратно и без ошибок: 1 балл

Минимальное количество баллов для сдачи ДЗ: 6 баллов
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
### Цель

Вам предстоит расширить функционал консольного приложения из ДЗ 2, добавив работу со структурой данных `List<string>`. Приложение будет управлять списком задач с помощью трёх новых команд.

---

### Описание

1. Создайте новую команду /addtask
- Пользователь сможет добавлять задачи в список.
- После ввода команды /addtask, бот должен попросить ввести описание задачи.
- Сохраните задачу в список (или массив) и отобразите сообщение о том, что задача добавлена.

2. Создайте новую команду /showtasks
- При вводе команды /showtasks бот должен отобразить список всех добавленных задач.
- Если задачи ещё не добавлены, необходимо вывести сообщение о том, что список пуст.

3. Создайте новую команду /removetask
- Бот должен позволить пользователю удалять задачи по номеру в списке.
- После ввода команды /removetask, бот должен отобразить список задач с номерами.
- Затем бот должен запросить у пользователя номер задачи для удаления и удалить выбранную задачу из списка.

4. Модифицируйте команду /help
- Обновите команду /help, добавив к ней описание новых команд: /addtask, /showtasks и /removetask.

5. Реализуйте обработку ошибок
- Если пользователь пытается удалить задачу, когда список пуст, программа должна уведомить его об этом.
- Также, если введён неверный номер задачи при удалении, бот должен уведомить об этом и попросить ввести корректный номер.


По завершению укажите сколько времени вам понадобилось, чтобы выполнить это задание.

Пример работы программы:

```
Добро пожаловать! Доступные команды: /start, /help, /info, /echo, /addtask, /showtasks, /removetask, /exit

/start
Пожалуйста, введите ваше имя: Иван
Привет, Иван! Чем могу помочь?

/addtask
Пожалуйста, введите описание задачи: Купить продукты
Задача "Купить продукты" добавлена.

/addtask
Пожалуйста, введите описание задачи: Сделать домашнее задание
Задача "Сделать домашнее задание" добавлена.

/showtasks
1. Купить продукты
2. Сделать домашнее задание

/removetask
Вот ваш список задач:
1. Купить продукты
2. Сделать домашнее задание
Введите номер задачи для удаления: 1
Задача "Купить продукты" удалена.

/showtasks
1. Сделать домашнее задание

Важно! Используйте List<string> для хранения задач.
```
---

### Критерии оценивания

- Пункты 1-3 - 6 баллов
- Пункт 4 - 2 балла
- Пункт 5 - 2 балла

Для зачёта домашнего задания достаточно 6 баллов.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
### Цель

Расширение функционала приложения, разработанного в предыдущих домашних заданиях:

- Работа с исключениями
- Создание собственного типа исключения
- Валидация данных

---

### Описание

Перед выполнением нужно ознакомиться с [Правила отправки домашнего задания на проверку](https://github.com/OTUS-NET/C-Sharp-Basic/blob/main/Homeworks/README.md)

1. Добавить глобальный try catch
- Добавьте try catch в метод Main
- catch должен отлавливать все виды исключений и выводить в консоль сообщение “Произошла непредвиденная ошибка: “ с информацией об исключении (Type, Message, StackTrace, InnerException)
2. Добавить ограничение на максимальное количество задач
- При старте приложения выводите текст «Введите максимально допустимое количество задач»
- Ожидайте ввод из консоли. Это должно быть число от 1 до 100, иначе нужно выбросить исключение `ArgumentException` с сообщением.
- В методе Main добавьте отдельный catch для типа ArgumentException и в нем выводите в консоль только сообщение из исключения.
- Создайте свой тип исключения `TaskCountLimitException`, который в конструкторе должен принимать только int taskCountLimit, а сообщение должно быть вида $“Превышено максимальное количество задач равное {taskCountLimit}“ https://learn.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions
- Добавьте проверку на максимально допустимое количество задач в обработчик команды /addtask. Если количество превышено, то нужно выбросить исключение `TaskCountLimitException`.
- В методе Main добавьте отдельный catch для типа `TaskCountLimitException` и в нем выводите в консоль только сообщение из исключения.
- Попадание в catch не должно останавливать работу приложения
3. Добавить ограничение на максимальную длину задачи
- При старте приложения выводите текст «Введите максимально допустимую длину задачи»
- Ожидайте ввод из консоли. Это должно быть число от 1 до 100, иначе нужно выбросить исключение `ArgumentException` с сообщением.
- Создайте свой тип исключения `TaskLengthLimitException`, который в конструкторе должен принимать int taskLength, int taskLengthLimit, а сообщение должно быть вида $“Длина задачи ‘{taskLength}’ превышает максимально допустимое значение {taskLengthLimit}“.
- Добавьте проверку на максимально допустимую длину задачи в обработчик команды /addtask. Если длина превышена, то нужно выбросить исключение `TaskLengthLimitException`.
- В методе Main добавьте отдельный catch для типа `TaskLengthLimitException` и в нем выводите в консоль только сообщение из исключения.
- Попадание в catch не должно останавливать работу приложения
4. Добавить проверку на дубликаты задач
- Создайте свой тип исключения `DuplicateTaskException`, который в конструкторе должен принимать string task, а сообщение должно быть вида $“Задача ‘{task}’ уже существует“.
- Добавьте проверку на дубликаты задач в обработчик команды /addtask. Если пользователь пытается добавить уже существующую задачу., то нужно выбросить исключение `DuplicateTaskException`.
- В методе Main добавьте отдельный catch для типа `DuplicateTaskException`и в нем выводите в консоль только сообщение из исключения.
- Попадание в catch не должно останавливать работу приложения
5. Добавить метод int ParseAndValidateInt(string? str, int min, int max), который приводит полученную строку к int и проверяет, что оно находится в диапазоне min и max. В противном случае выбрасывать ArgumentException с сообщением. Добавить использование этого метода в приложение.
6. Добавить метод void ValidateString(string? str), который проверяет, что строка не равна null, не равна пустой строке и имеет какие-то символы кроме проблема. В противном случае выбрасывать ArgumentException с сообщением. Добавить использование этого метода в приложение.
7. Вынести обработчики команд в отдельные методы

---

### Критерии оценивания

- Пункты 1-3 - 6 баллов
- Пункт 4 - 1 балл
- Пункт 5 - 1 балл
- Пункт 6 - 1 балл
- Пункт 7 - 1 балл

Для зачёта домашнего задания достаточно 6 баллов.
61 changes: 61 additions & 0 deletions Homeworks/v2/05 ООП классы/Task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
### Цель

Расширение функционала приложения, разработанного в предыдущих домашних заданиях:

- Работа с классами
- Добавление новых команд

---

### Описание

Перед выполнением нужно ознакомиться с [Правила отправки домашнего задания на проверку](https://github.com/OTUS-NET/C-Sharp-Basic/blob/main/Homeworks/README.md)

1. Изменение логики команды `/start`
- Добавить класс `ToDoUser`
- Свойства
- Guid UserId //Заполняется в конструкторе. Guid.NewGuid()
- string UserName //Имя пользователя
- DateTime RegisteredAt //Заполняется в конструкторе. DateTime.UtcNow
- У класса должен быть один конструктор с аргументом string userName
- Добавить использование класса `ToDoUser` для сохранения информации о пользователе вместо хранения только имени.
2. Добавление класса `ToDoItem`
- Добавить enum `ToDoItemState` с двумя значениями
- Active
- Completed
- Добавить класс `ToDoItem`
- Свойства
- Guid Id //Заполняется в конструкторе. Guid.NewGuid()
- ToDoUser User
- string Name
- DateTime CreatedAt //Заполняется в конструкторе. DateTime.UtcNow
- ToDoItemState State //Заполняется в конструкторе. ToDoItemState.Active
- DateTime? StateChangedAt
- У класса должен быть один конструктор с аргументами ToDoUser user, string name
- Добавить использование класса `ToDoItem` вместо хранения только имени задачи
3. Изменение логики `/showtasks`
- Выводить только задачи с `ToDoItemState.Active`
- Добавить вывод CreatedAt и Id. Пример: Имя задачи - 01.01.2025 00:00:00 - 17056344-0e03-4a21-b0dd-f0d30a5abf49
4. Добавление команды `/completetask`
- Добавить обработку новой команды `/completetask`
- Найти задачу по Id
- Обновить State на ToDoItemState.Completed
- Обновить StateChangedAt
- Пример: `/completetask 73c7940a-ca8c-4327-8a15-9119bffd1d5e`
5. Добавление команды `/showalltasks`
- Добавить обработку новой команды `/showalltasks`. По ней выводить команды с любым `State` и добавить `State` в вывод
- Пример: (Active) Имя задачи - 01.01.2025 00:00:00 - ffbfe448-4b39-4778-98aa-1aed98f7eed8
6. Обновить `/help`

---

### Критерии оценивания

- Пункт 1 - 2 балла
- Пункт 2 - 2 балла
- Пункт 3 - 2 балла
- Пункт 4 - 2 балла
- Пункт 5 - 1 балл
- Пункт 6 - 1 балл

Для зачёта домашнего задания достаточно 8 баллов.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading