https://learn.modsen.app/courses
- This
- Significant folders and files names
- Namespaces in short form:
namespace MyNamespace;
Необходимо создать программу, которая будет функционировать как калькулятор с поддержкой переменных и пользовательских функций. Программа должна предоставлять пользователю интерфейс для ввода математических выражений, которые могут содержать числа, операторы (сложение, вычитание, умножение, деление), скобки, переменные и пользовательские функции.
1. Напишите программу, которая будет работать как калькулятор, позволяющий пользователю выполнять математические операции, а также использовать переменные и определять свои функции.
2. Программа должна предложить пользователю ввести выражение. Выражение может содержать числа, операторы (сложение, вычитание, умножение, деление), скобки, переменные и пользовательские функции.
3. Реализуйте парсинг введенного выражения и его вычисление. Поддержите обработку ошибок ввода.
4. Для переменных реализуйте возможность их определения и использования. Например, пользователь может ввести "x = 5" и затем использовать переменную x в дальнейших выражениях.
5. Поддержите определение пользовательских функций. Например, пользователь может определить функцию "f(x,y) = x+y " и затем использовать эту функцию в дальнейших вычислениях.
6. Обеспечьте возможность работы с дробными числами и отрицательными числами.
7. Предложите пользователю возможность выхода из программы или ввода нового выражения после каждого вычисления.
8. Напишите тесты для вашей программы, чтобы убедиться в ее корректной работы
-
интерфейс
UI-фреймворк: WPF- основная вкладка:
-поле ввода выражений(вычисление динамически, т.е. при вводе значения парсер сразу вычисляет выражение, при малейшем изменении значение в поле вывода меняется)
-поле вывода(при нажатии на поле, вся выведенная информация -перемещается в поле ввода, поле вывода чистится)
-кнопка с меню ввода переменных
-кнопка с меню ввода функций - меню ввода переменных:
-поле для ввода имени переменной
-поле для ввода значения переменной
-кнопка добавления переменной - меню ввода функций:
-кнопка для добавления полей ввода аргументов
-поля, добавляемые по кнопке, для ввода аргументов(переменных функции)
-поле ввода алгоритма функции(Пример: x+y*2)
-поле добавления функции
- основная вкладка:
-
парсер
- парсинг выражения в структуру данных
- замена переменных на их значения
- замена функций на результат их выполнения
-
класс вычисления распаршенных данных
- вызывает парсер и получает структуру данных, хранящую выражение
- проходится по структуре данных и выполняет вычисления
- учитывает порядок операторов и скобок
- обработка ошибок(деление на 0 и т.п.)
-
определение пользовательских переменных
- словарь с ключами и их значениями
- проверка повторяющихся ключей и если такой существует - предложить пользователю замену
-
выполнение пользовательских функций
- словарь с ключами и объектами класса функции
- класс функции, содержащий в себе конструктор, принимающий params double[]
- при получении параметров и строки функции - парсит с помощью парсер выражение и записывает в переменную результата своё значение.
-
тесты
- создать тесты для операторов
- создать тесты с различными скобками
- создать тесты с функциями в функциях
- создать тесты с использованием переменных
- создать тесты с передачей переменных в функции
- создать тесты с наложением операторов друг на друга
-
обработка ошибок
Данное задание рассчитано на выполнение в течение двух недель. Основной целью проекта является разработка интернет-магазина с использованием ASP.NET Core Web API. Проект включает в себя создание функционала для управления товарами, категориями, заказами и элементами заказов в базе данных. Дополнительно предусмотрен механизм аутентификации пользователей для обеспечения безопасности системы.
Постройте концептуальное решение для вашего проекта, опираясь на N-Layer Architecture. Разделите проект на уровни: Presentation Layer, Business Logic Layer, Data Access Layer. Начните разработку Data Access Layer, который будет обеспечивать взаимодействие с базой данных. Создайте модели, соответствующие таблицам базы данных, таким как:
- Таблица Products: содержит информацию о товарах.
- Таблица Categories: содержит информацию о категориях товаров.
- Таблица Orders: содержит информацию о заказах с ссылкой на таблицу Users.
- Таблица OrderItems: содержит информацию о товарах в каждом заказе с ссылкой на таблицу Products.
- Таблица Users: содержит информацию о пользователях.
- Для работы с базой данных используйте EF Core.
- Примените подход Code First для создания схемы базы данных.
- Воспользуйтесь EF Fluent API для конфигурации моделей.
- Для управления изменениями в схеме базы данных применяйте миграции.
Начните создавать необходимые репозитории для взаимодействия с базой данных. Реализуйте репозитории для товаров, категорий, заказов, товаров в заказах и пользователей. Ожидаемый функционал включает:
- Создание, чтение, обновление и удаление товаров.
- Получение списка всех товаров.
- Получение подробной информации о конкретном товаре по его Id.
- Получение товаров по определенной категории.
- Создание, чтение, обновление и удаление категорий.
- Возможность просмотра всех категорий.
- Создание новых заказов.
- Получение списка всех заказов.
- Получение всех заказов по конкретному пользователю.
- Получение информации о конкретном заказе по его Id, включая состав заказанных товаров и их количества.
Асинхронное программирование Внедрите асинхронное программирование для
работы с базой данных, используя асинхронные методы в репозиториях для
обеспечения эффективной и отзывчивой работы с базой данных.
Начните реализацию Business Logic Layer. Создайте классы, которые будут
использоваться как входные параметры и выходные данные в сервисах.
Определите интерфейсы с методами для всех сервисов на основе этих классов.
Добавьте валидацию входных параметров (классов) через FluentValidation.
Продолжайте разрабатывать Business Logic Layer. Сделайте реализацию всех
интерфейсов для сервисов и соответствующих методов. Внутри сервисов
тщательно проверяйте корректность входных данных и условий выполнения
операций. В случае обнаружения некорректных данных или отсутствия
необходимых условий, выбрасывайте свои собственные исключения с четкими
сообщениями об ошибке. Например, при попытке аутентификации пользователя,
если указанный пользователь не найден, выбрасывайте исключение. Аналогично,
перед удалением или обновлением модели, проверяйте ее существование, и в
случае отсутствия выбрасывайте соответствующее исключение.
Добавьте функционал для регистрации новых пользователей и аутентификации
пользователей через JWT. Создайте необходимые сервисы для этих операций,
включая мапперы для удобного преобразования классов с похожими данными.
Затем приступите к разработке Presentation Layer.
В рамках данного проекта создайте контроллеры с минимальной логикой.
Контроллеры должны вызывать соответствующие сервисы и возвращать результат
клиенту. Все исключительные ситуации, включая ошибки, должны обрабатываться
через глобальный обработчик исключений. Глобальный обработчик должен
обеспечивать централизованное управление исключениями для всего
приложения, предоставляя клиенту понятные ошибки.
Настройте созданные валидаторы через FluentValidation, чтобы они автоматически
выполняли валидацию входных параметров при вызове соответствующих
сервисов. Реализуйте принцип Automatic Validation, где система автоматически
применяет валидацию, не требуя явного вызова из кода.
Убедитесь, что ваши валидаторы подключены к соответствующим классам входных
параметров сервисов. Кроме того, ваши контроллеры в Presentation Layer должны
автоматически инициировать валидацию, когда получают запросы от клиента.