ПРОГРАММНАЯ РЕАЛИЗАЦИЯ МЕТОДА ОБНАРУЖЕНИЯ РЕГУЛЯРНОСТЕЙ - Студенческий научный форум

X Международная студенческая научная конференция Студенческий научный форум - 2018

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ МЕТОДА ОБНАРУЖЕНИЯ РЕГУЛЯРНОСТЕЙ

Бережная И.В. 1, Зайцева Т.В. 1
1Белгородский государственный национальный исследовательский университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
ВВЕДЕНИЕ

Данная курсовая работа посвящается "Программной реализации методом обнаружения регулярностей". Предметная область работы, это выбор торта методом обнаружения регулярностей.

Актуальность данной темы заключается в том, что к выбору торта нужно отнестись серьёзно, так как выбор не вкусного или не качественного продукта может привести как к заболеванию, так и к испорченному настроению себе и не только. Тем самым метод обнаружение регулярностей поможет определится с выбором торта каждому человеку индивидуально. Узнать какие торты больше всего предпочитают выбирать.

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

Задачи, которые необходимо реализовать в курсовой работе:

  • провести анализ предметной области "Выбор торта";

  • описать метод обнаружения регулярностей;

  • выбрать подходящую методологию и построить модель схемы обработки информации;

  • спроектировать модель базы данных;

  • изучить стандарты моделирования пользовательского интерфейса;

  • спроектировать пользовательский интерфейс для программного продукта;

  • реализовать программу для выбора торта по определенным критерием, заданным в системе.

Для достижения выше перечисленных задач, необходимо подробно изучить предметную область и метод обнаружения регулярностей, при помощи которого будет, осуществляется поставленная задача. Осуществить поиск проблем и смоделировать решение автоматизации. Спроектировать простой и понятный интерфейс для пользователей и реализовать в виде программного продукта.

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

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

Предметом курсовой работы является выбор торта по заданным критериям методом определения регулярности любого выбора. Практическая значимость полученных результатов заключается в возможности быстрого получения результатов по выбору торта. Определения регулярностей выбора различных тортов.

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

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

Данная курсовая работа состоит из 3 разделов, 28 страниц, 1 таблицы, 23 рисунков.

1 Теоретическая часть

1.1 Анализ предметной области

Предметная область «Выбор торта». Почти в каждом городе существует либо кондитерская фабрика, либо филиал этой фабрики. Основной задачей кондитерской фабрики есть производство и сбыт кондитерских изделий.

Торт – один из самых любимых десертов всех времен и народов. Торты бывают очень разнообразными, начиная от простых коржей, пропитанных джемом, и заканчивая многослойными «башнями» со свежими фруктами и марципаном на верхушке.

Выбор торта - это не повседневная еда, это угощение на праздник, чтобы порадовать себя и знакомых каким-нибудь любимым или экспериментальным вкусом торта. У всех есть так же определенные любимые вкусы, и нет никаких проблем с приобретением "знакомых" тортов. Но также постоянно выбранный торт и вкус торта со временим приестся и надоест, хочется что-то в него другого добавить или изменить совсем торт.

Каким образом осуществляется выбор торта. Людям нужно непременно видеть, что у торта внутри, в противном случае у торта нет никаких шансов быть купленным. Перед тем как выбрать торт нужно узнать по подробней о нем, из чего он состоит. Но на упаковке частенько есть фото разреза, вот по нему так же можно выбрать, то есть визуально определить какие коржи, крема, добавки и наполнители в нем. Но также видеть торт в разрезе необязательно, а вот знать: из чего, где, когда и кем он приготовлен - обязательное условие для покупки.

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

В курсовой работе осуществляется выбор торта. Для выбора торта нужно учитывать много различных факторов. Составлен перечень вопросов для конкретной предметной области и перечень ответов исходя из которых можно получить результат выбора торта. Исходя из выбранных ответов вытекает регулярность выбора торта. Можно понять настолько выбранный торт подходит под выбранные ответы на вопросы. Система предполагает выбор нескольких ответов на поставленные вопросы.

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

Ниже представлена таблица с вопросами и выбором возможных вариантов ответов Таблица 1.1.

Таблица 1.1 – Вопросы пользователю

Вопросы задаваемые пользователям

Ответы на задаваемые вопросы

Какие коржи вы предпочитаете?

Слоенный, Бисквитный, Творожный, Медовый, Песочный.

Какой крем вы предпочитаете?

Масленый, Сметанный, Заварной, Белковый, Сливочный.

Выберите тип наполнителя:

Фрукты, Джем, Сгущённое молоко, Суфле.

 
 
 
 

Выберите форму торта:

Круглая, Квадратная, Треугольная, Сердце-подобная, Овальная.

 

Таблица 1.1 – Вопросы пользователю

Выберите пропитку:

Фруктовая, Кофейная,

Сахарная, Алкогольная, Сок.

Выберите добавки:

Кокосовая стружка, Мак, Шоколад, Зефир, Фрукты.

Выберите фирму торта:

Татьяна, Нива, Тортышка, Сладкое искусство, Рошен.

Выберите количество коржей:

2, 3, 4, 5, 6.

Выберите украшение торта:

Узоры, Глазурь, Надписи, Айсинг, Картины.

Укажите ваш любимый торт:

Наполеон, Сметанник, Белочка, Вишня в шоколаде, Фруктик, Медовик, Прага, Графские развалины, Рафаэло, Муравейник.

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

1.2 Метод обнаружения регулярностей

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

Метод обнаружения регулярностей основан на научном предположении о том, что каждый объект внутри цепочки понятий, которые использует человек в определенные моменты времени, с определенной регулярностью, имеет очень тесную и точную ассоциативную взаимосвязь между темой обсуждения и используемыми понятиями внутри строго ограниченной обсуждаемой темы.

Суть метода обнаружения регулярностей заключается в том, что для проводимого эксперимента выбирается тема обсуждения и произвольным образом отбирается некоторое количество понятий по выбранной предметной области. Эксперту предъявляется список вопросов с просьбой построить ассоциативную цепочку между вопросом и характеристикой из числа отобранных. Процедура повторяется до тех пор, пока эксперт не совершит ответ на все необходимые системе вопросы, причём каждый раз начальные понятия должны быть разными.

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

Реализация этого метода делится на этапы. Этап формализации - выбираются все ключевые понятия и отношения, которые выбираются из числа существующих.

Этап выполнения - создаётся программа по определения регулярностей исходя из выбранных ответов на поставленные вопросы. Затем на данном этапе по результатам тестирования создается конечный продукт, пригодный для использования.

Этап тестирования - выбор ответов на все поставленные вопросы. Для этого инженер по знаниям подбирает примеры, обеспечивающие проверку всех возможностей разработанной программы.

Этап опытной эксплуатации - на этом этапе проверяется пригодность программы. Пригодность для пользователя определяется в основном удобством работы с ней и ее полезностью. Под полезностью понимается способность в ходе работы решать поставленные задачи.

2 Модель схемы обработки информации

В данном разделе осуществляется реализация блок-схемы обработки информации. Как обрабатывается информация в программе представлено визуально в блок-схеме.

Блок-схема - распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности.

Элементы блок-схем алгоритмов представляет собой совокупность символов, соответствующих этапам работы алгоритма и соединяющих их линий.Пунктирная линия используется для соединения символа с комментарием. Сплошная линия отражает зависимости по управлению между символами и может снабжаться стрелкой. Стрелку можно не указывать при направлении дуги слева направо и сверху вниз. Каждый блок обозначает отдельное действие.

У данного программного продукта есть два режима запуска программы “Режим пользователя” и “Режим эксперта”.

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

Режим эксперта предназначен для отображения общей статистической информации о прохождении тестирования всеми пользователями в системе. Результаты отображаются в процентной системе, где 0% - наименьшая регулярность, а 100% - наивысшая регулярность, которая отображает что все пользователи выбрали данный критерий.

Перейдем к рассмотрению режима пользователя. На рисунке 2.1 изображен алгоритм работы программы в режиме пользователя. Далее подробно описана работа алгоритма. Программа обращается к базе данных, которая в свою очередь возвращает набор вопросов и вариантов ответов, для пользователя. Программа формирует таблицу с вариантами ответа. После чего пользователь выбирает ему приоритетные критерии. Последний вопрос всегда самый главный, в нем идет речь о любимом или любимых тортах пользователя. Далее пользователю отображается таблица с результатами, в которой отображено количество подходящих и не подходящих критериев, которые выбрал пользователь. После чего отправляется запрос в базу данных, для записи статистической информации.

Рисунок 2.1 - Схема работы пользователя

Далее перейдем к рассмотрению режима эксперта. На рисунке 2.2 изображен алгоритм работы программы в режиме эксперта. Далее подробно описана работа алгоритма. Пользователю предоставляется список тортов, из которых он выбирает один. В этот момент программа обращается к базе данных, которая в свою очередь возвращает набор характеристик о торте. Программа формирует таблицу с вопросами, характеристиками и коэффициентом регулярности.

Рисунок 2.2 - Схема работы эксперта

В данном разделе было рассмотрены два режима работы программного продукта, реализующего метод обнаружения регулярностей. Далее можно перейти к реализации приложения.

Перед реализацией программы была изучена предметная область и проектирование интерфейса. После чего составляла база данных для программы. На рисунке 2.3 представлена логическая модель базы данных и связи взаимодействия между ними.

Рисунок 2.3 - Логическая модель база данных

Ниже представлен физическая модель базы данных на рисунке 2.4 Поскольку логическая модель разрабатывалась на русском языке, то для физической имена таблиц и колонок необходимо задать на английском языке или транслите, как сделано в данной работе.

Рисунок 2.4 - Физическая модель базы данных

Данные модели предназначены для хранения статистической информации после прохождения тестирования пользователем.

3 Практическая часть

3.1 Программная реализация

Программа была написана на языке программирования С#. Язык С# - это очередная ступень бесконечной эволюции языков программирования. Его создание вызвано процессом усовершенствования и адаптации, который определял разработку компьютерных языков в течение последних лет. С# опирается на прошлые достижения постоянно развивающегося искусства программирования.

Реализован программный продукт в программном продукте Microsoft Visual Studio Community 2015. При помощи Windows Form.

Visual Studio Community 2015 - это бесплатная полнофункциональная интегрированная среда разработки с мощными, эффективными возможностями для кодирования, инструментами кроссплатформенных разработок мобильных приложений и облачных приложений, а также доступом к тысячам расширений. Она предоставляет быстрый доступ к инструментам, элементам управления и шаблонам, которые помогут максимально использовать возможности Visual Studio.

Рисунок 3.1 - Листинг подключения и запроса к базе данных

На рисунке 3.1 изображено подключение к базе данных, а также запрос всех имеющихся запросов и исполнение этих вопросов. После циклом программа показывает формы с всеми имеющимися вопросами в базе, далее закрываем подключение к базе.

Рисунок 3.2 - Структура хранения ответов пользователей

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

Рисунок 3.3 - Вывод правильных и не правильных ответов

Запрос, для вывода правильных и не правильных ответов показан на рисунке 3.3, исходя из ответа на последний вопрос "Укажите любимый торт", после выбора и формируется отношению подходящих и не подходящих критериев к выбранному торту.

Рисунок 3.4 - Листинг формирует таблицу в форме эксперта

На рисунке 3.4 изображен код, который формирует таблицу на форме эксперт, тем самым показывает результаты по выбранным критериям и определяет регулярность результата к выбранному торту.

Программа состоит из нескольких форм. Первое форма - это главная окно приложения "Меню", в котором выбирается режим пользователя или эксперта. Выбрав пользовательский режим последующие формы будут с вопросами и вариантами ответов. Последняя форма - эксперт с результатами эксперимента.

3.2 Тестовый пример

При запуске пользователем программы перед ним появляется меню, в котором предлагается выбрать один из двух режимов работы, “Режим пользователя” и “Режим эксперта”. На рисунке 3.1 изображено главное меню программного продукта.

Рисунок 3.1 - Главное меню программы

Далее рассмотрим пример работы в режиме пользователя. Система задает вопрос пользователю “Какие коржи вы предпочитаете?” и предоставляет соответствующие варианты ответов. Далее система, неоднократно задает вопросы пользователю. Результат работы отображен на рисках 3.2 - 3.11.

Рисунок 3.2 – Вопрос пользователю "Какие коржи вы предпочитаете?"

Рисунок 3.3 - Вопрос пользователю "Какой крем вы предпочитаете?"

Рисунок 3.4 - Вопрос пользователю "Выберете тип наполнителя:"

Рисунок 3.5 - Вопрос пользователю "Выберете форму торта:"

Рисунок 3.6 - Вопрос пользователю "Выберите пропитку:"

Рисунок 3.7 - Вопрос пользователю "Выберете добавки:"

Рисунок 3.8 - Вопрос пользователю "Выберите фирму торта:"

Рисунок 3.9 - Вопрос пользователю "Выберите количество коржей:"

Рисунок 3.10 - Вопрос пользователю "Выберите украшение торта:"

Рисунок 3.11 - Вопрос пользователю "Укажите ваш любимый торт:"

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

Рисунок 3.12 – Результаты отображающееся пользователю

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

Рисунок 3.13 - Результат полученных критериев

Далее будет рассмотрен пример работы режима эксперта, на начальной форме нажав на кнопку "Эксперт" будет выводится пустая форма. Окно, которое отображается пользователю изображено на рисунке 3.14.

Рисунок 3.14 – Режим эксперта

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

Рисунок 3.15 - Ответ на заданный вопрос

В данном разделе была описана реализация алгоритма работы метода обнаружения регулярностей и пример работы алгоритма.

Заключение

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

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

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

Главные вопросы, которые были рассмотрены в данной курсовой работе:

  1. Проанализирована предметная область "Выбор торта".

  2. Были изучены методы реализации и выбран одного метод.

  3. Построена модель схемы обработки информации в виде блок-схемы.

  4. Спроектирована база данных, пользовательский интерфейс и реализована программа.

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

Таким образом, все задачи в курсовой работе решены и поставленные цели были достигнуты.

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

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

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

Так же данный метод можно применить к другой предметной области. Так же создав новую базу данных и составить новый список перечисленных вопросов и ответов. И получить результаты по необходимой предметной области.

Библиографические источники

  1. Троелсен Э. С# и платформа [Текст] / Э. Троелсен. – СПб.: Питер, 2008. - 1456 с.

  2. Дольников В. Л. Основы программирования на языке С#. Примеры лабораторных работ: лабораторный практикум [Текст] / В. Л. Дольников, О. П. Якимова, П. Г. Демидова. – Ярославль: ЯрГУ, 2010. – 64 с.

  3. Бостром Н. Искусственный интеллект. Этапы. Угрозы. Стратегии [Текст] /Н. Бострома. - Москва: «Манн, Иванов и Фербер», 2016. - 496 с.

  4. Тоискин В.С. Интеллектуальные информационные системы: Учебное пособие [Текст] / В.С. Тоискин. – Ставрополь: Изд-во СГПИ, 2009. – 181 с.

  5. Рассел С. Искусственный интеллект и универсальное мышление. [Текст] / С. Рассел, П. Норвиг. - Москва: «Вильямс», 2016. – 1408 с.

  6. Студопедия | https://studopedia.ru/3_112384_etap-kontseptualizatsii.html [Электронный ресурс] – Режим доступа https://studopedia.ru/, свободный.

  7. Матвеев М.Г. Модели и методы искусственного интеллекта. Применение в экономике: Учеб. пособие [Текст] / М.Г. Матвеев, А.С. Свиридов, Н.А. Алейникова. – Москва: ИНФА-М, 2008, - 447 с

  8. Путькина Л.В. Интеллектуальные информационные системы [Текст] / Л.В. Путькина, Т.Г. Пискунова. - СПб.: СПбГУП, 2008, - 223 с.

  9. Тригуб С.Н. С# ускоренный курс для профессионалов [Текст]/ С.Н. Тригуб. – Москва: ООО «И.Д. Вильямс». 2008. – 576 с.

  10. Дубровин А.Д. ИНТЕЛЛЕКТУАЛЬНЫЕ ИНФОРМАЦИОННЫЕ СИСТЕМЫ: Учебное пособие для студентов факультета МИСИТ Московского Государственного университета культуры и искусств, обучающихся по специальности 080801 - прикладная информатика (в менеджменте) [Текст]/ А.Д. Дубровин, О.В. Шлыкова. – Москва: МГУКИ, 2008. - 268с.

  11. Пальмов С. В. Интеллектуальный анализ данных: учебное пособие [Текст] / С. В. Пальмов. – Самара: ПГУТИ, 2017. – 124 с.

  12. Гаврилова Т.А. Инженерия знаний. Модели и методы. [Текст] / Т.А. Гаврилова, Д.В. Кудрявцев, Д.И. Муромцев. - СПб.: «Лань», 2016. – 324 с.

  13. Кузин А.В. Базы данных [Текст]/ А.В. Кузин, С.В. Левонисова. - Москва: Академия, 2012. - 317с.

  14. Салыкин Е.А. Основы программирования на языке С# [Текст]/ Е. А. Салыкин, Ю. В. Левин, С. В. Землянко, М. Ю. Фомин. – Волгоград : ИУНЛ ВолгГТУ, 2012. – 20 с.

  15. Павловская Т.А. С#. Программирование на языке высокого уровня: Учебник для вузов [Текст] /Т.А. Павловская. – СПб.: Питер, 2009. – 432 с.

  16. Интуит | https://www.intuit.ru/studies/courses/1122/167/lecture/4582?page=2 [Электронный ресурс] – Режим доступа https://www.intuit.ru/, свободный.

  17. Поиск регулярных последовательностей в промоторах из геномов различных групп организмов с использованием критерия серий. [Электронный документ]: 2008 А.А. Шеленков, Е.В. Коротков (http://www.matbio.org/downloads/Shelenkov2008(3_1).pdf). Проверено 2008г.

  18. Кох А. В. Разработка и создание экспертных систем [Текст]/ А.В. Кох. - Казань: Молодой ученый, 2017. с. 246-249.

  19. Каткова, А. Л. Экспертные системы: учебно-методическое пособие [Текст]/ А.Л. Каткова. - Шадринск: Шадр. гос.пед. ин-т. 2011.-92 с.

  20. Тоискин В.С. Интеллектуальные информационные системы: [Текст]/ В.С. Тоискин. – Ставрополь: СГПИ, 2009. – 181 с.

Приложение

using MySql.Data.MySqlClient;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Cakes

{

public partial class Form2 : Form

{

public struct RightAnswer

{

public int id_answer;

public string answer;

public int count_answer;

}

List list_data;

MySqlConnection connect;

string connect_query = "server=localhost;user=root;database=cakes;password=0000;";

public Form2(List list_data_temp)

{

InitializeComponent();

connect = new MySqlConnection(connect_query);

list_data = list_data_temp;

FiilTable();

}

private void FiilTable()

{

foreach (var item in list_data)

{

if (item.text_question == "Укажите ваш любимый торт:")

{

int j = 0;

if (item.dgv == null)

return;

for (int i = 0; i < item.dgv.Length; i++)

{

if (Convert.ToBoolean(item.dgv[i].answer) == true)

{

dataGridView1.Rows.Add(1);

CheckValue(item.dgv[i].variant, j);

ChangeCountSelect(item.dgv[i].variant);

dataGridView1[0, j].Value = item.dgv[i].variant;

j++;

}

}

}

else

{

int j = 0;

if (item.dgv == null)

return;

for (int i = 0; i < item.dgv.Length; i++)

{

if (Convert.ToBoolean(item.dgv[i].answer) == true)

{

//MessageBox.Show(item.dgv[i].variant);

}

}

}

}

dataGridView1.AllowUserToAddRows = false;

}

private void CheckValue(string cake_name, int j)

{

connect.Open();

int id = GetIDCake(cake_name);

connect.Close();

connect.Open();

List temp_answer = new List();

string sql = "select value_cake.id_value_cake, answer_question.answer_question_name,value_cake.count_right_answer from cake, value_cake, answer_question where value_cake.id_cake =" + id + " and value_cake.id_cake = cake.id_cake and value_cake.id_answer_question = answer_question.id_answer_question;";

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

while (reader.Read())

{

RightAnswer temp = new RightAnswer();

temp.id_answer = Convert.ToInt32(reader[0]);

temp.answer = reader[1].ToString();

temp.count_answer = Convert.ToInt32(reader[2]);

temp_answer.Add(temp);

}

connect.Close();

int count_right = 0;

foreach (var item in list_data)

{

if (item.text_question != "Укажите ваш любимый торт:")

{

for (int i = 0; i < item.dgv.Length; i++)

{

if (Convert.ToBoolean(item.dgv[i].answer) == true)

{

foreach (var item2 in temp_answer)

{

if(item2.answer == item.dgv[i].variant)

{

ChangeAnswerCount(item2.id_answer, item2.count_answer);

count_right++;

break;

}

}

}

}

}

}

dataGridView1[1, j].Value = count_right.ToString();

dataGridView1[2, j].Value = (9 - count_right).ToString();

}

private void ChangeAnswerCount(int id, int count_answer)

{

count_answer++;

string sql = "UPDATE `cakes`.`value_cake` SET `count_right_answer`="+ count_answer +" WHERE `id_value_cake`='" + id + "';";

connect.Open();

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

connect.Close();

}

private void ChangeCountSelect(string cake_name)

{

connect.Open();

int id = GetIDCake(cake_name);

connect.Close();

if (id != -1)

{

connect.Open();

int count_select = GetCountSelect(id, cake_name);

connect.Close();

count_select++;

string sql = "UPDATE `cakes`.`cake` SET `count_select`='" + count_select.ToString() + "' WHERE `id_cake`='" + id.ToString() + "';";

connect.Open();

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

connect.Close();

}

}

int GetCountSelect(int id, string name_cake)

{

string sql = "select * from cake;";

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

while (reader.Read())

{

if (reader[1].ToString() == name_cake)

return Convert.ToInt32(reader[2]);

}

return -1;

}

int GetIDCake(string name_cake)

{

string sql = "select * from cake;";

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

while (reader.Read())

{

if (reader[1].ToString() == name_cake)

return Convert.ToInt32(reader[0]);

}

return -1;

}

private void button2_Click(object sender, EventArgs e)

{

Expert exp = new Expert();

exp.ShowDialog();

Close();

}

}

}

using MySql.Data.MySqlClient;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Cakes

{

public partial class Form1 : Form

{

MySqlConnection connect;

string connect_query = "server=localhost;user=root;database=cakes;password=0000;";

Data data = new Data();

StructData data2 = new StructData();

int index;

public Form1(int index_question, string text_group_box)

{

InitializeComponent();

index = index_question;

ConnectDB();

FillTable();

groupBox1.Text = text_group_box;

data.text_question = text_group_box;

data.number_question = index_question;

}

private void FillTable()

{

string sql = "SELECT * FROM answer_question where id_question = " + index + ";";

// объект для выполнения SQL-запроса

connect.Open();

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

int i = 0;

while (reader.Read())

{

dataGridView1.Rows.Add(1);

string temp_name = reader[2].ToString();

if(temp_name[temp_name.Length-1] == ' ')

{

temp_name = temp_name.Remove(temp_name.Length - 1);

}

dataGridView1[0, i].Value = reader[0].ToString();

dataGridView1[1, i].Value = temp_name;

i++;

}

dataGridView1.AllowUserToAddRows = false;

connect.Close();

}

private void ConnectDB()

{

// создаём объект для подключения к БД

connect = new MySqlConnection(connect_query);

// устанавливаем соединение с БД

connect.Open();

connect.Close();

// закрываем соединение с БД

}

public Data GetData()

{

return data;

}

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)

{

data.dgv = new Dgv[dataGridView1.Rows.Count];

for (int i = 0; i < dataGridView1.Rows.Count; i++)

{

data.dgv[i].variant = dataGridView1[1, i].Value.ToString();

data.dgv[i].answer = Convert.ToBoolean(dataGridView1[2, i].Value);

}

}

private void button1_Click(object sender, EventArgs e)

{

data.dgv = new Dgv[dataGridView1.Rows.Count];

for (int i = 0; i < dataGridView1.Rows.Count; i++)

{

data.dgv[i].variant = dataGridView1[1, i].Value.ToString();

data.dgv[i].answer = Convert.ToBoolean(dataGridView1[2, i].Value);

}

Close();

}

}

}

using MySql.Data.MySqlClient;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Cakes

{

public partial class Expert : Form

{

MySqlConnection connect;

public Expert()

{

InitializeComponent();

connect = new MySqlConnection("server=localhost;user=root;database=cakes;password=0000;");

FillComboBox();

}

private void FillComboBox()

{

connect.Open();

string sql = "select * from cake where count_select > 0;";

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

while (reader.Read())

{

string temp_name = reader[1].ToString();

if (temp_name[temp_name.Length - 1] == ' ')

{

temp_name = temp_name.Remove(temp_name.Length - 1);

}

comboBox1.Items.Add(temp_name);

}

connect.Close();

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

dataGridView1.Rows.Clear();

dataGridView1.AllowUserToAddRows = false;

connect.Open();

int id = GetIDCake(comboBox1.Text);

connect.Close();

connect.Open();

string sql = "select cake.count_select, answer_question.answer_question_name, value_cake.count_right_answer, question.question_text from cake, value_cake, answer_question, question where cake.id_cake = value_cake.id_cake and question.id_question = answer_question.id_question and answer_question.id_answer_question = value_cake.id_answer_question and cake.id_cake = " + id + ";";

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

int i = 0;

while (reader.Read())

{

dataGridView1.Rows.Add(1);

dataGridView1[1, i].Value = reader[1];

double all_step = Convert.ToDouble(reader[0].ToString());

double current_step = Convert.ToDouble(reader[2].ToString());

double result = (current_step / all_step);

dataGridView1[0, i].Value = reader[3].ToString();

dataGridView1[2, i].Value = result.ToString("0.00%").ToString();

i++;

}

connect.Close();

}

int GetIDCake(string name_cake)

{

string sql = "select * from cake;";

MySqlCommand command = new MySqlCommand(sql, connect);

MySqlDataReader reader = command.ExecuteReader();

while (reader.Read())

{ if (reader[1].ToString() == name_cake)

return Convert.ToInt32(reader[0]);

}

return -1;

}

}

Просмотров работы: 115