Skip to content

maklybae/UniversityCoursesJSON

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

КДЗ_3_1 (Вариант 14)

Attention: этот файл написан в полуформальном стиле.

Цель этого послания

Согласно требованиям условия:

  1. Поскольку в описаниях классов присутствует «простор» для принятия решений, то каждое такое решение должно быть описано в комментариях к коду программы. Например, если выбран тип исключения, то должно быть письменно обоснованно, почему вы считаете его наиболее подходящим в рамках данной задачи.
  1. исходный код должен содержать комментарии, объясняющие неочевидные фрагменты и решения, резюме кода, описание целей кода (см. материалы лекции 1, модуль 1);

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

Иерархия меню

Целью являлось создание легко расширяющегося меню, чтобы после добавления любой новой функции не основную логику программы. На схеме Таким образом, получаем абстрактный класс MenuPage от которого будут наследоваться все остальные классы-страницы меню. Объекты этого класса хранят текущий выбранный пункт и имеют методы для отрисовки меню и запуска выбранной функции. Статический класс AppMenu используется для хранения данных из JSON файла, а также текущий пункт меню, то есть AppMenu является неким "интерфейсом общения" между меню со всеми функциями и данными. Также этот класс имеет статический метод ShowMenu, который рендерит текущую страницу меню, хранящуюся в CurrentPage свойстве.

Хранение данных и вспомогательные классы

В библиотеке классов

По заданию определены только классы Course и JSONParser, однако было принято решение о создание двух дополнительных классов (+1 класс исключения, бросаемого при неудачной обработке JSON файла) в библиотеке.

CourseHelper

Статический класс содержит методы для обработки объектов типа Course, а именно сортировка и выборка, про которые будет написано позже. Также содержит необходимые поля, используемые при обработке (например, словарь, который определяет типы конкретного JSON поля по названию)

InputOutputHelper

Статический класс содержит методы по вводу/выводу данных потока Console (возможно перенаправленного). Методы этого класса формируют из строк потокового ввода одну строку, которая впоследствии будет проверяться с помощью регулярных выражений, и выводят форматированные строки в поток вывода.

В проекте консольного приложения

DataConverterLinker

Статический класс содержит методы, которые связывают получение данных для последующей обработки с библиотекой классов, а также преобразовывает данные в другие типы (например в массив массивов для табличного вывода)

Обработка данных

Сортировка

Реализована "умная" сортировка по нескольким полям. С помощью выбора различных полей в списке (press Enter) формируется упорядоченный список полей. Сначала объекты сортируются по первому полю: при равенстве этих полей используется сортировка по второму выбранному полю, и т.д. Для каждого поля можно выбрать порядок сортировки (по возрастанию или по убыванию) ВАЖНО: Сортировка по полю students происходит по количеству элементов в списке (то есть количеству студентов)

Выборка (фильтрация данных)

Тут так же можно делать использовать несколько полей. Отмечаются (press Enter) поля, по которым будет происходить фильтрация. Затем запрашиваются значения конкретных полей. ВАЖНО: Значение, введенное для поиска для поля students, ищется как элемент списка students всех объектов. То есть происходи поиск по конкретному студенту.

Получение и сохранение данных

Получение данных

Всего есть два основных способа:

Получение JSON текста из консоли

ВАЖНО: Необходимо в конце ввода файла нажать Ctrl+Z (или Command+D на macOS), чтобы обозначить конец ввода.

Получение JSON файла из системы

Реализован простейший File Manager для получения файла. Предлагается перейти в корневые папки (диски), родительскую папку для текущей и список JSON файлов (с соответствующим расширением) в текущей папке.

Сохранение обработанных данных

Количество вариантов для сохранения точно удовлетворит потребность пользователя). Можно сохранить в текущую папку, в папку, запомненную программой как последнюю, из которой считывался файл, на рабочий стол. Можно просто вывести данные в формате JSON или не сохранять в текущий момент, а сделать обработанный файл обрабатываемым для последующей обработки)))))))

Финальный штрих

С остальными решениями можно ознакомится в коде программы с XML и обычными комментариями.

About

Homework HSE CS SE '27 C# Programming. CLI app with JSON processing

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages