Разработать программу наполнения БД и выборки из нее по критериям
1. Сравнение критериев отдельных существующих продуктов и формирование списка критериев, по совкупности однозначно определяющих только трех выбранных.
при невозможности однозначного определения - отображение таблицы из продуктов и определяющих критериев, подходящих под данные требования.
2. Сравнение критериев отдельных существующих продуктов и формирование списка критериев, по совокупности определяющих одного наилучшего
3. Поиск и выдача подходящего продукта (списка продуктов) по одному или нескольким сформированным ранее критериям.
4. Справочное отображение списка поддерживаемых продуктовых имен без дублей.
5. Справочное отображение списка имен и значений критериев для выбранного продуктового наименования и ключевого критерия.
6. Редактирование и заведение критериев, наименований продуктов.
#результат работы:
-внятный исходный код, который можно поддерживать и который компилируется в работающую программу под Windows.
-работающая программа
-бесплатное исправление багов при их нахождении (если я сам не смогу исправить)
Предпочтительное выполнение MYSQL+C# (Windows), графический интерфейс.
Альтернативы - обсуждаемы.
Полное наполнение базы данных будет сделано мною сильно позже, отладка на тестовом наборе (предоставляется в виде таблички в Excel).
Предусмотреть 2 вида доступа к данным: пользовательский - без пароля и админский с паролем ( с возможностью редактирования и наполнения).
Сроки - 1 месяц. Вряд ли потребуется больше...но обсуждаемо.
------ Ниже чуть более подробно как оно должно работать в моем понимании ----
Информация о продуктах хранится в базе данных в нескольких таблицах:
-тип критерия (id, наименование критерия, признак "наилучшести")
Критерии могут быть:
-Бинарными (да/нет), при этом признак наилучшести может быть как "Да" так и "Нет" в зависимости от критерия
-Цифровыми (целочисленные или с плавающей точкой), при этом признак наилучшести может быть как "чем меньше тем лучше " так и "чем больше тем лучше"
-продукт (id, наименование, id ключевого критерия ).
-принадлежность (id продукта, id критерия, значение критерия( Да/Нет или цифровое), источник критерия)
источник критерия - тестовое поле с информацией откуда был получен критерий в свободной форме. Используется для справки.
Вспомогательная таблица для разграничения доступа:
-имя админа, хэш пароля
1.
Параметры при запуске алгоритма:
Первый продукт (текстовое поле)- наименование+ ключевой критерий (ниспадающий список ключевых критериев)
Второй продукт (текстовое поле)- наименование или его часть (если вводится часть и вариантов больше чем 1 - дать показать пользователю варианты для выбора)
Третий продукт (текстовое поле)- наименование или его часть (если вводится часть и вариантов больше чем 1 - дать показать пользователю варианты для выбора)
"Источник" (галка) - в итоговой выдаче показывается 3я колонка с источником информации
"Точность" (галка) - точная граничная выдача (см ниже)
"Вода"(галка) -
при выборе данного параметра в итоговый список критериев добавляются все параметры, даже те, которые идентичны у всех продуктов таблицы
при отсутствии данного параметра в итоговый список критериев добавляются только те параметры, которые лучше хотя бы одного продукта
вне списка выбранных трех.
(Очевидно что если признак наилучшести критерия -"Да", значение критерия для первого продукта "Нет" и "Вода" не выбрана - то критерий не добавляется)
Дальше проще написать буквами, чем словами.
Пусть выбранные продукты имеют наименования П1, П2, П3 и рассматриваемые их критерии k1, k2, k3.
Критерии данного наименования для прочих продуктов - ki.
Квых - выходной публикуемый критерий.
Пустой критерий для определенного продукта (отсутствие значения) - продукт не участвует в анализе и сравнении по данному критерию.
В случае цифровых критериев значение цифрового критерия в выдаче определяется следующм образом чтобы отсечь другие продукты, которые хуже
критериев выбранных, когда это возможно.
Если "чем меньше тем лучше"
Если "Точность" то
если ki>max(k1, k2, k3) || "Вода" => Kвых="не более чем" + max(k1, k2, k3)
Иначе
если min(ki)>max(k1, k2, k3) => Kвых="не более чем" + (min(ki)-max(k1, k2, k3))/2+max(k1,k2, k3)
иначе
если "Вода" => Kвых="не более чем" + max(k1, k2, k3)
Если "чем больше тем лучше"
Если "Точность" то
если ki<min(k1, k2, k3) || "Вода" => Kвых="не менее чем" + min(k1, k2, k3)
Иначе
если max(ki)<min(k1, k2, k3) => Kвых="не менее чем" + min(k1,k2, k3)- ((min(k1, k2, k3)-max(ki))/2)
иначе
если "Вода" => Kвых="не менее чем" + min(k1, k2, k3)
Итоговая выдача представляет из себя текстовый список (доступный для copy-paste) вида:
"Наименование критерия" "значение критерия"
"Наименование критерия2" "значение критерия2"
Если хотя бы 1 критерий в общем наборе критериев дробный, то значение критерия в итоговом списке может быть дробным.
Иначе оно целочисленное округляется в меньшую сторону для "не более чем.." и в большую для "не более чем.."
2.Параметры при запуске алгоритма:
Первый продукт (текстовое поле)- наименование+ определяющий критерий (ниспадающий список)
"Точность" (галка) - точная граничная выдача (см ниже)
"Вода"(галка) -
при выборе данного параметра в итоговый список критериев добавляются все параметры, даже те, которые идентичны у всех продуктов таблицы
при отсутствии данного параметра в итоговый список критериев добавляются только те параметры, наилучшие по сравнению хотя бы с одним из остальных
(Очевидно что если признак наилучшести критерия -"Да", значение критерия для первого продукта "Нет" и "Вода" не выбрана - то критерий не добавляется)
В случае цифровых критериев значение цифрового критерия в выдаче определяется следующм образом чтобы отсечь другие продукты, которые хуже
критериев выбранных, когда это возможно.
Логический выбор по аналогии с вышенаписанными формулами п.1.
Итоговая выдача представляет из себя текстовый список (доступный для copy-paste) вида:
"Наименование критерия" "значение критерия"
"Наименование критерия2" "значение критерия2"
3. Необходимо обеспечить возможность поиска:
- по текстовому вводу (текстовое поле), в котором сформированы данные в виде наименование критерия значение. Первым в списке идет ключевой критерий.
(контрольная проверка - результат программы из п.1 или п.2 должен приводить к выводу соответствующих имен продуктов и их ключевых критериев)
-по отдельным критериям, т.е. должно быть 3 поля- ниспадающее с именем критерия с быстрым вводом, текстовое со значением критерия и ниспадающий список ("" < > = <= >= ).
Т.е можно с помощью данного пункта найти все продукты по критерию Ширина < 940мм / ширина < 940 / шиРина, мм < 940
и "Наличие меха" "" Да (защита от неправильного ввода - при пустом значении в ниспадающем списке - возможно выбрать только Да или Нет)
4. Просто всплывающее окошко со списком
5. Всплывающее окно с таблицей Критерий-значение-источник критерия и заголовком таблицы с именем продукта и ключевым критерием.
==
по редактированию базы: удобно для одного продукта отображать сразу таблицу критериев с возможностью их редактирования и общей кнопки их сохранения.
поиск по имени продукта и ключевому критерию.
возможность копировать неключевые критерии между продуктами разом (полезно если продукты различаются только парой критериев).