Автоматическая категоризация клиентов коучинга

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

Кафедра математического обеспечения вычислительных систем

УДК 004.91

АВТОМАТИЧЕСКАЯ КАТЕГОРИЗАЦИЯ КЛИЕНТОВ КОУЧИНГА






Курсовая работа

«Автоматическая категоризация клиентов коучинга»


Работу выполнил студент группы ПМИ 1,2

курса механико-математического факультета

Ковалёв А.И.

Научный руководитель:

Cт. преподаватель кафедры МОВС мех.-мат. ф-та ПГУ

Катаева С.В.








Пермь 2012

Оглавление


Аннотация

Оглавление

Введение

Глава 1. Введение в предметную область, проблематика решаемых задач

.1 Описание предметной области коучинга, основные понятия

.2 Проблематика решаемой задачи

.3Актуальность разработки приложения

Глава 2. Формализация задач

.1 Описание методик

.2Формализация задачи

Глава 3. Разработка и реализация прикладной программы

.1 Среда разработки приложения

.2 Разработка структур хранения и получения данных

.3 Разработка прикладной программы на базе WindowsForms

.3.1 Описание реализованных форм

.3.2 Описание пользовательских классов

.3.3 Описание принципа работы программы

Заключение

Библиографический список

Приложения

Приложение 1.Класс «Declaration».

Приложение 2. Класс «Prog_Tool».

Приложение3. Класс «Sql_Tool».

Аннотация


Ковалёв А.И., студент 3-го курса механико-математического факультета ПГУ.

Автоматическая категоризация клиентов коучинга. Курсовая работа / Пермский государственный национальный исследовательский университет; - Пермь, 2012. -42с.,16 ил., 6 библиотечных названий,

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

Введение


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

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

Объектом исследования данной работы являются методы автоматизации работы коуча. В курсовой работе Ситникова Г.М. за третий курс был реализован АРМ, позволяющий регистрировать коучей, их клиентов, а также проводить коуч-сессии. Однако на нем был реализован лишь базовый сценарий коучинга, и не были реализованы тесты для проверки психологического состояния и мотивации клиента. Таким образом, появилась необходимость создания программы-теста для определения психологического состояния клиента. Поэтому предметом исследования своей работы я выбрал автоматизацию категоризации клиентов коучинга. Предварительная категоризация клиентов коучинга позволит не только ускорить работу коуча, но и выбрать подходящий сценарий техники модификации опыта (далее по тексту - ТМО) для разрешения выявленных психологических проблем клиента.

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

Целью данной работы является:

·изучение различных методик, используемых для определения психологического состояния клиента;

·разработка способа категоризации клиентов на основе изученных методик;

·разработка алгоритма категоризации;

·реализация прикладной программы.

Поставленная цель определила основные задачи работы:

·формализация метода «Личностные кластеры»;

·построение модели теста;

·разработка и реализация программы на основе исходного метода;

·описание практического применения программы.

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

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

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


Глава 1. Введение в предметную область, проблематика решаемых задач


.1 Описание предметной области коучинга, основные понятия


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

Коучинг - это инструмент личностного и профессионального развития. Специалистом в данной области является коуч, который непосредственно взаимодействует с клиентом. Процесс коучинга называется сессией и может проходить как при участии коуча, так и без него. Результат сессии напрямую зависит от психологического состояния клиента, которое определяется коучем перед началом сессии. Определить психологическое состояние клиента можно двумя способами: первый - проведение специальной беседы с клиентом перед началом сессии, с целью обнаружения первоначальных психологических проблем, и второй - проведения тестов на основе различных методик, для получения более полной психологической картины клиента. Нас будет интересовать второй вариант, т.е. проведение теста на основе методики «Личностные кластеры» Стива Менсинга. Как и было сказано ранее, кластеры представляют собой набор утверждений свойственных большинству людей. Сами кластеры представляют собой определенную проблему, например одиночество, ревность, бессонница, уязвимость и др. Базовым методом решения проблемы является сценарий ТМО. Определяемая структура сессии называется сценарием и, вообще говоря, зависит от решаемой задачи (проблемы клиента).

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


.2 Проблематика решаемой задачи


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

С психологической точки зрения, эта задача не нова. В середине прошлого века профессором кафедры психологии Н. Д. Левитовым, в качестве психологической категории, было введено новое понятие - психологическое состояния. Психологическое состояние, так или иначе, характеризует психику человека, определяют своеобразие разных психических процессов. Например, восприятие художественной картины сопровождается определенным эстетическим состоянием, которое может перейти в новое состояние под впечатлением от этой картины уже после ее восприятия. Психологические состояния тесно связаны с индивидуальными особенностями личности. Дальнейшее изучение этого термина привело к проблеме создания чёткой классификации состояний. Трудность классификации психологических состояний состоит в том, что часто они пересекаются или даже совпадают друг с другом настолько тесно, что их достаточно сложно «развести» - например, состояние некоторой напряженности часто появляется на фоне состояний утомления, монотонии, агрессии и ряда других состояний. Тем не менее, существует много вариантов их классификаций. Чаще всего их делят на эмоциональные, познавательные, мотивационные, волевые. Описаны и продолжают изучаться и другие классы состояний: функциональные, психофизиологические, астенические, пограничные, кризисные, гипнотические и другие состояния. Из-за различной вариации классификаций состояний, многие профессиональные психологи создали свои методики и тесты для их определения, поэтому большую ценность эта работа представляет именно со стороны объединения психологических и информационных аспектов.

В то время как психология представляет собой древнюю науку, берущую свое начало от древних мыслителей, таких как Гиппократ, Платон и Аристотель, информатика, как отдельная наука появилась относительно недавно. Отличительной особенностью информатики является быстрый темп её развития, что позволяет ей эффективно проникать в различные сферы современной жизни. Вспомните, например, развитие компьютеров от первых одноядерных персональных машин до многопроцессорных мощных вычислительных систем, используемых для управления космическими аппаратами. Быстрое появление информационных технологий в различных математических сферах, таких как экономика и статистика, довольно понятное явление. В то же время развитие информатики в различных гуманитарных сферах, например философии и социологии, значительно медленнее. Поэтому такие задачи как, создание прикладного программного обеспечения для решения психологических проблем, в настоящий момент остаются малоизученными и малораспространёнными. Этот факт позволяет говорить об актуальности, рассмотренной в этой работе, задачи.


1.3 Актуальность разработки приложения

коучинг программа windows forms

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

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

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

·позволит коучам повысить эффективность определения проблематики клиента, так как понизится роль человеческого фактора;

·методика, на которой основан алгоритм, позволит детализировать проблематику клиента, что обеспечит более чёткую классификацию проблем клиента;

·возможность не только определять актуальное психологическое состояние клиента, но и в соответствие с выявленной проблемой, предложить сценарий для её решения - аналогов программы, предоставляющей такой возможности нет;

·возможность динамической компоновки аспектов метода, что с психологической точки зрения повышает точность результата, так как клиент не сможет преднамеренно влиять на результат;

·в результате позволяет клиенту самому проработать возникшие психологические проблемы без помощи психолога или коуча, что позволяет автоматизировать некоторую часть их работы;

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

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


Глава 2. Формализация задач


.1 Описание методик


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

·Отсутствие эмоциональной поддержки;

·Одиночество;

·Отделённость;

·Трудоголизм;

·Уязвимость;

·Ощущение себя жертвой;

·Ощущение себя нежеланным;

·Застревание;

·Апатия;

·Недисциплинированность;

·Жертвенность;

·Ревность;

·И другие.

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

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

·я знаю, что я в любом случае буду одинок;

·я недостоин того, чтобы со мной имели долговременные отношения;

·я очень боюсь того, что меня отвергнут или покинут;

·я требую, чтобы мой партнер был со мной как можно больше;

·И другие.

В свою очередь существует методика позволяющая классифицировать аспекты по определённым психологическим задачам, таким как:

·Психогигиена;

·Трансформация личностных характеристик;

·Избавление от зависимостей;

·Достижение целей;

·Улучшение отношений;

·Психогенный компонент заболеваний;

·Улучшение финансовой ситуации;

·Гармонизация различных сфер жизни;

·Принятие решения;

·Самоопределение, поиск себя;

·Избавление от страха, тревоги, других негативных состояний;

·Улучшение ситуации в конкретной жизненной сфере.

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

На основе научных разработок коучей для решения различных психологических проблем были созданы специализированые сценарии ТМО. Какой именно сценарий выбрать решает коуч, после дополнительной беседы с клиентом. Всего существует 8 сценариев:

·для планирования;

·для цели;

·для личностных качеств;

·для состояния;

·для будущих событий;

·для другой точки зрения;

·для действия;

·Стандартный ТМО.

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

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


.2 Формализация задачи


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

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

·отсутствуют чёткие критерии категоризации клиентов;

·отсутствует чёткая постановка задачи, так как используется новые передовые методы.

В предыдущем разделе были рассмотренные различные методики для определения проблематики клиента и определены исходные кортежи данных. Теперь приведём их к формальному виду и установим связи между ними. Пусть кортежи аспектов, сценариев, задач и кластеров будут принадлежать соответственным множествам: А, S,T,C. На основе семантического анализа и работы с профессиональным коучем, было установлено, что между этими множествами существуют сложные связи. Каждому элементу a из множества A может соответствовать несколько элементов t из множества T. Аналогично прообразу t соответствует несколько образов c из множества С. На математическом языке эти связи можно представить сюръективными отображениями:



Из это следует, что также существует отображение:



Одному элементу sиз множества S соответствует только один элемент из множества T. Это задаётся биективным отображением:



Во всех случаях законы F,G,H иKпредставлены линейной функцией.

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

Рис. 1. Схема элементов метода «Личностные кластеры»


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

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

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

Алгоритм категоризации клиента:

.Получить набор аспектов отвечающих за психологическое состояние клиента;

.По полученным ответам определить кластеры, соответствующие проблематики клиента;

.Сформировать список кластеров, в порядке более приоритетной проблемы;

.Отсеять из окончательного результата кластеры, не набравшие достаточный уровень доверия;

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

.Для каждой задачи сгенерировать сценарий, по которому происходит её решение.

На основе разработанного алгоритма категоризации клиентов опишем принцип работы программы. Пусть задан список всех аспектов метода «Личностных кластеров». По случайному параметру перемешиваем этот список. Это делается для того, что бы каждый раз, при запуске приложения, получать новую последовательность аспектов. Из отсортированного множества на экран клиенту выводится ограниченный список аспектов. Среди них пользователь отмечает утверждения, которые, как ему кажется, он может отнести на свой счёт. Вывод теста определяется тем, сколько ответов определенного типа дал клиент. Для этого необходимо будет не только вести подсчёт ответов клиента, но и запоминать к каким кластерам и задачам относятся данные ответы. Для выполнения этой задачи каждому аспекту будет присваиваться два номера - первый будет отвечать за номер кластера, к которому относится аспект, а второй номер задачи. Так как каждый аспект может быть отнесён сразу к нескольким задачам, то второй номер будет представлять собой список номеров задач. Такой подход позволяет более эффективно вести подсчёт результата теста. Результат категоризации будет представлен в двух частях. Первая часть показывает клиенту список кластеров, к которым относятся его проблемы. Этот список определяется количеством попавших в кластер ответов клиента. Необязательно выводить весь список кластеров, может случиться ситуация, что по результатам ответов клиента набралось множество кластеров, к которым относится очень малое количество аспектов. Для такой ситуации вводится понятие - уровень доверия к кластеру. Если кластер не смог преодолеть порог уровня доверия то это говорит о том, что данная проблема незначительна, и лучше сосредоточить внимание на более приоритетных кластерах. По результатам отмеченных аспектов будет сформирован список кластеров, отсортированный в порядке приоритета. Из полученного списка клиент сам сможет выбирать какую проблему ему рассматривать первой.

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

При реализации алгоритма необходимо так же обеспечить:

·возможность расширения любого из множеств A, S, T, C, так как при развитии соответствующих методик могут появиться новые элементы этих множеств;

·возможность динамической компоновки аспектов метода для исключения субъективного восприятия клиентом результатов теста;

·возможность редактирования набора аспектов, который соответствует ответам клиента;

·возможность сохранять и загружать результаты по средствам механизмов сериализации и десериализации.

Теперь у нас есть необходимое формальное описание, что бы приступить к реализации теста.

Глава 3. Разработка и реализация прикладной программы


.1 Среда разработки приложения


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

Во-первых, так как наше приложение должно быть построено в форме диалога с пользователем, то нам понадобится графический пользовательский интерфейс. Для реализации этого интерфейса будет использовать средство WindowsForms на базе классов .NET Framework classlibrary платформы Microsoft .NET Framework. Классы .NET Framework classlibrary имеют собственную модель программирования, которая более совершеннее, чем модели, основанные на Win32 API или MFC, обладают улучшенной защитой и содержат более богатые возможности для написания полнофункциональных приложений. Главная выгода от написания Windows-приложений с использованием WindowsForms - это то, что WindowsForms гомогенизируют (создают более однородную (гомогенную) структуру) программную модель и устраняют многие ошибки и противоречия от использования Windows API. Для работы с WindowsForms будем использовать объектно-ориентированный язык программирования высокого уровня C#, так как он обладает всей необходимой функциональностью для работы с этим средством.

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

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


.2 Разработка структур хранения и получения данных


Для хранения различных элементов метода «Личностные кластеры» будем использовать реляционную базу данных. Прежде всего, нам надо будет сохранять аспекты, количество которых, в общем случае, может быть неограниченным. Далее нам надо будет хранить информацию о кластерах и задачах. Для возможности сохранения и загрузки понадобится запоминать список пользователей и отмеченные ими аспекты. Также для генерации случайных последовательностей утверждений понадобится хранить отсортированные множества аспектов. Теперь, когда перед нами сформулированы все эти задачи, приступим к их реализации. Для этого рассмотрим схему (рис.2).


Рис. 2. Схема реляционной базы данных

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

·Таблица «Statement» содержит информацию обо всех аспектах. В соответствие с требованием, рассмотренным в формализации задачи, каждому аспекту соответствует определённый номер кластера и список номеров задач. Номер кластера представлен полем «Number_cluster»,а номера задач полями «Number_task_1»,«Number_task_2»,«Number_task_3». Количество задач одновременно присваиваемых аспекту равно трём, что в рамках задачи вполне достаточно. Поле «ID» содержит числовой номер присваиваемый аспекту. В поле «Text» хранится текстовая информация об утверждении, с которой потом предстоит работать пользователю;

·Таблица «Description_cluster» содержит описание всех кластеров. В поле «ID» содержится числовой номер кластера. Поле «Name» хранит информацию о названии кластера. В поле «Description_text» находится текстовое описание проблематики соответствующей кластеру;

·Таблица «Description_task» содержит описание всех задач, выполнение которыхнеобходимо при проработке кластера. Поле «ID» хранит числовой номер задачи. В поле «Description_text» содержится название задачи;

·Таблица «Save_User» содержит список всех клиентов, которые использовали сохранение во время выполнения программы. Поле «ID» хранит числовой номер, который автоматически присваивается клиенту. В полях «User_Name» и «Password» содержатся соответственно имя и пароль учётной записи клиента. В следующих полях хранится служебная информация необходимая для восстановления состояния приложения при загрузке. Поле «Ran» содержит параметр в зависимости от которого генерируется случайная последовательность аспектов. В поле «Current_count» запоминается индекс «[Index]» последнего считанного утверждения из таблицы «Add_IDst», этот индекс нужен для выделения ограниченного списка из общего множества аспектов. Поле «Check_list» хранит текущий номер ограниченного списка аспектов - листа, а в «Ch_l_last» сохраняется последний достигнутый номер листа, подробное представление о листе будет дано позже, эти номера нужны будут при загрузке списков утверждений уже проработанных клиентом. Накопление сохранений во время работы приложения может привести к росту объёма и потери скорости в работе базы данных, поэтому будем удалять всё сохранённые данные клиента при загрузке этих данных. Реализация этой идеи обеспечивается за счёт механизма каскадного удаления, при удалении «ID» клиента из этой таблицы, автоматически будут удаляться данные из таблиц «Save_Cluster_check», «Save_check_list» и «Save_Answer»;

·Таблица «Add_IDst» представляет собой последовательность идущих по порядку индексов - поле «[Index]» и соответствующим им номеров аспектов - поле «ID_key». Эта таблица играет ключевую роль в работе со сгенерированной случайной последовательностью аспектов;

·Таблица «Save_Answer» содержит информацию об ответах клиента. Поле «ID_cluster» хранит номер кластера, каждому кластеру соответствует номер задачи в поле «ID_task». Счётчик попавших в задачу ответов содержит поле «Task_check». Последнее поле «IDUser» хранит информация о номере клиента, которому принадлежат эти данные. Назначение этой таблицы заключается в восстановлении данных о количестве данных ответов в каждой задаче каждого кластера;

·Таблица «Save_Cluster_check» нужна для хранения количества ответов попавших в тот или иной кластер. Для этого в поле «ID_cluster» будем запоминать номер кластера, а для хранения количества попавших в него ответов будем использовать поле «Cluster_check». Последнее поле «IDUser» будет так же, как и в предыдущей таблице, содержать информация о номере клиента, которому принадлежат эти данные;

·Таблица «Save_check_list» хранит информация об отмеченных на листах утверждениях. Поле «ID_list» содержит номер листа, а в поле «ID_st» находится, соответственно, номер аспекта, отмеченного на листе. Поле «IDUser» хранит номер клиента.

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

·Процедура «Add_IDst_In_Table»используется для заполнения таблицы «Add_IDst» сгенерированной последовательностью номеров аспектов;

·Процедура «Add_User» применяется для сохранения информации о клиенте в таблице «Save_User», включая служебные данные;

·Для получения имени и проверки повторного добавления клиента в таблицу «Save_User» используется процедура «Check_User»

·Процедура «Clear_Add_IDst» применяется для очистки таблицы «Add_IDst»;

·Удаление клиента из таблицы «Save_User»по его номеру обеспечивает процедура «Delete_user»;

·Процедура «Get_ID» по переданным в неё начальному и конечному индексу, получает список номеров аспектов из сгенерированной последовательности, хранящийся в таблице «Add_IDst», затем по полученным номерам выводится информация об аспектах из таблицы «Statement»;

·Процедура «Get_ID_st» получает номер аспекта из таблицы «Statement»;

·Для получения информации об описании и название кластеров и задач по их номерам, используются соответственно хранимые процедуры «GetDescriptionCluster» и «GetDescriptionTask»;

·Процедура «Load_an» используется при загрузке данных об ответах клиента, выборка производится сразу из двух таблиц «Save_Answer» и «Save_Cluster_check», что позволяет одновременно получить сведения о количестве попавших аспектов в каждый кластер и задачу;

·Для получения данных о листах и отмеченных на них аспектах из таблицы «Save_check_list» используется хранимая процедура «Load_ch_list». Данные выбираются по номеру клиента;

·Хранимая процедура «MyCount» возвращает информацию об общем количестве аспектов, кластеров и задач. Выборка одновременно происходит из трёх таблиц «Statement», «Description_cluster» и «Description_task»;

·Процедура «Save_an» используется для сохранения информации о количестве попавших в каждую задачу аспектов. Запись происходит в таблицу «Save_Answer»;

·Для сохранения данных об отмеченных на листах аспектах используется процедура «Save_check_list»;

·Хранимая процедура «Save_cl_check» сохраняет информацию об ответах, попавших в каждый кластер, в таблицу «Save_Cluster_check».

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


.3 Разработка прикладной программы на базе WindowsForms


Прежде чем перейти к описанию работы программы, необходимо рассмотреть какие структуры были использованы в её разработке. Средства WindowsForms позволяют создать понятный графический пользовательский интерфейс, а конструктор форм Visual Studio обеспечивает его полную настраиваемость. Таким образом, мы будем заниматься разработкой «WindowsForms приложения». Поэтому, прежде всего, необходимо рассмотреть какие формы были использованы при создании программы.

Языком высокого уровня, на котором написано приложение, является C#. Этот язык спроектирован и разработан специально для применения с Microsoft .NET Framework, что обеспечивает достаточную функциональность для работы со всеми структурами, используемыми в программе. Так как, С# - язык, основанный на современной объектно-ориентированной методологии проектирования, то необходимо будет также ознакомиться с созданными пользовательскими классами.


.3.1 Описание реализованных форм

«Main_Form» является основной формой приложения (рис.3). Эта форма обеспечивает связь с другими формами и реализует основные возможности программы. Рассмотрим основные элементы этой формы.


Рис. 3. Форма «Main_Form»


В верхней части формы расположен элемент «toolStrip1», он содержит в себе контролы для управление тестом. Вкладка «toolStripDropDownButton2» открывает меню для возможности сохранения, загрузки или выхода. Выбор сохранения или загрузки вызывает форму «Load_Save». Кнопка «StartTest» начинает тестирование, соответственно кнопка «EndTest» его прерывает. Для получения различной справочной информации используется вкладка «toolStripDropDownButton1». Что бы отобразить необходимые справочные данные вызывается форма «Info».

Элемент «Tab_Control» содержит 7 контролов «tabPage», они обеспечивают вывод разнообразной информации. При достижении различных этапов в ходе тестирования происходит смена «tabPage». Элемент «tabPageMain» содержит изображение-заставку, переключение на него происходит при состоянии простоя программы. Страница «tabPageTest» содержит элемент «checkedListBox1», который позволяет выводить аспекты в виде списка с флажками. Каждый такой список содержит ограниченное количество аспектов, для краткости будем называть его листом. Для перемещения между листами на элементе «tabPageTest» размещены кнопки «Prev» и «Next», при этом программа запоминает отмеченные пользователем аспекты на листе. Переключение на элемент «tabPageRezult» происходит в случае удачного завершения теста, т.е. если удалось сформировать список проблемных кластеров. Элемент «tabPageCluster» содержит информацию о выбранном кластере и список задач необходимых для его разрешения. Вывод информации при неудачных завершениях категоризации обеспечивается страницами «tabPageError» и «tabPageRecommend». Переключение на «tabPageError» происходит в случае, если не был выбран ни один аспект, при этом клиента попросят пройти тест ещё раз. А если выбранных аспектов оказалось не достаточно для составления списка кластеров, то переключение происходит на «tabPageRecommend», клиенту будут предложены общие рекомендации.

Дополнительные компоненты содержатся в элементе «statusStrip1», который расположен в самом низу формы. Контрол «StatusProg» выводит различные статус сообщение полученные в ходе работы программы. Элемент «ProgressTest» показывает количество пройденных аспектов теста.

Следующая форма «Load_Save» вызывается при сохранении или загрузки состояния теста (рис.4). Выбор между загрузкой и сохранением осуществляется по флагу, переданному в конструктор формы. При выполнении обоих действий происходит проверка на существование клиента в базе данных.


Рис. 4. Форма «Load_Save»


Форма «Info» вызывается для представления различной справочной информации. В элемент «richTextBox1»загружается текст в формате rtf. Всего можно получить три вида справочной информации: о тесте, соответствующий файл «Info.rtf», о программе - файл «prog.rtf» и помощь - файл «help.rtf». Выбор, какой файл загружать, осуществляется по флагу, передаваемому в конструктор формы при вызове.

Форма «Scenario» вызывается для проработки полученного списка задач (рис.5). На данном этапе разработки программы реализована только проработка стандартного сценария ТМО.


Рис. 5 .Форма «Scenario»


.3.2 Описание пользовательских классов

Класс «Statement_cl» отражает структуру аспекта рис.6. Поле «id_st» содержит номер аспекта, присвоенный ему в базе данных. Поля «n_cl» и «n_task» хранят информацию о номере кластера и задачи, к которым относится аспект «id_st». В поле «text» хранится утверждение аспекта. Метод «Statement_cl» реализует конструктор класса.

Рис. 6. Класс «Statement_cl»


Класс «Answer» создаётся для подсчёта количества аспектов попавших в кластеры и соответствующие им задачи рис.7. Поле «count_answer» хранит числовое значение соответствующее количеству попавших в кластер аспектов. Поле «task_answer» представляет собой массив, индекс которого соответствует номеру задачи. Тогда каждый элемент массива выступает в роли счётчика аспектов попавших в задачи. Одноименный с название класса метод «Answer» реализует конструктор этого класса.


Рис. 7. Класс «Answer»


Класс «Check_statement» нужен для хранения информации об отмеченных на листах утверждениях рис.8. Поле «check_st_in_list» представляет собой массив логического типа, размер которого равен количеству аспектов одновременно выводящихся на лист. Таким образом, индекс массива равен номеру аспекта в листе, если элемент под индексом имеет метку «true»то это значит, что он был отмечен клиентом. Хранить информацию об отметках нужно для того, что бы пользователь смог вернуться к ранее отмеченным утверждениям и исправить свой ответ, если это необходимо. Метод «Check_statement» реализует конструктор класса.

Рис. 8. Класс «Check_statement»


Статистический класс «Declaration» является хранилищем всех глобальных структур и параметров, использованных в приложении рис.9. Такая структура удобна при редактировании приложения. Описание каждого параметра приведено в комментариях программы, см. приложение 1, поэтому подробно опишем только важные структуры. Делегаты «ChangeElementLoad» и «ChangeStatus» представляют собой методы для изменения элементов и статус-сообщения главной формы соответственно. Они нужны для работы с элементами «Main_Form» из других форм. Динамический массив «sort_list_stat» используется для формирования случайной последовательности аспектов. Сначала в него загружаются все номера аспектов из таблицы «Statement», затем они перемешиваются, в зависимости от случайно сформированного параметра. Перемешанный массив сохраняют в таблицу «Add_IDst». Массив «list_stat» представляет собой массив структур «Statement_cl», он используется для чтения информации об аспектах для формируемого листа. Динамический массив «list_answer» состоит из структур «Answer», представляет собой счётчик аспектов попавших в кластер и соответствующую ему задачу. Индекс массива равен номеру кластера. Список листов, с отмеченными утверждениями, хранится в массиве «check_list». Использование динамических структур обусловлено тем, что в процессе развития методики тестирования могут появиться новые кластеры и задачи, что приведёт к расширению базы данных.

Рис. 8. Класс «Declaration»


Статистические классы «Prog_Tool» и «Sql_Tool» содержат все различные методы, используемые в приложении, рис.9 и рис.10 соответственно. Класс «Prog_Tool» включает в себя методы, используемые непосредственно в самой программе, в то время как класс «Sql_Tool» специализируется на обеспечении связи с базой данных - в нем реализованы вызовы хранимых процедур. Назначение каждого метода приведено в коде программы, поэтому здесь описываться не будет см. приложение 2 и приложение 3.


Рис. 9. Класс «Prog_Tool» Рис. 10. Класс «Sql_Tool»

.3.3 Описание принципа работы программы

Теперь, когда были описаны все реализованные формы и классы, приступим к описанию общего принципа работы самой программы. Ещё до загрузки приложения, на этапе инициализации элементов главной формы, происходит установка связи с базой данных «Sql_Tool.Initialize_Sql_Tool», определения количества аспектов, кластеров и задач «Sql_Tool.Count», задаётся начальный вид элементов главной формы «Change_element» (рис.11).


Рис. 11. Стартовое меню


При запуске теста (рис.12), в первую очередь формируется случайная последовательность аспектов «Prog_Tool.Generate_Random_Key». Фактор случайности зависит от взятого параметра. Такой подход, в дальнейшем, позволит не включать в сохранение данных сформированную последовательность, достаточно будет лишь сохранить параметр. Для чтения аспектов используется метод «Sql_Tool.Read_Cluster», параметры, передаваемые в этот метод, соответствуют диапазону аспектов, которые необходимо считать из таблицы «Add_IDst». Считанные аспекты выводится в «checkedListBox1». Параметр «Declaration.Current_count» хранит информацию об индексе последнего добавленного аспекта.

Рис. 12. Запуск теста


Для получения следующего листа аспектов клиент нажимает кнопку «Следующий» (рис.13). Прежде чем формировать новый список, необходимо обработать ответы старого. Для этого в цикле мы проходим по всем отмеченным утверждениям старого листа, увеличивая счётчики попавших аспектов в структуре «list_answer» и формируя лист с отмеченными утверждениями для массива «check_list». Далее идёт проверка условия - если номер текущего листа больше последнего достигнутого, то добавляем его в массив «check_list», иначе обновляем старый лист в массиве. Разобравшись со старым листом, формируем новый, снова считывая аспекты из базы данных «Sql_Tool.Read_Cluster». Если загруженный лист уже встречался ранее, то расставляем на нём метки оставленные клиентом. При этом необходимо следить за достижением конца списка аспектов, так как это приведёт к изменению элементов главной формы.

Рис. 13. Получения нового списка аспектов


Если клиенту понадобится вернуться к предыдущим утверждениям для редактирования своих ответов, то он воспользуется кнопкой «Назад» (рис.14). Функционал этой кнопки повторяет структуры кнопки «Следующий», но в обратном порядке. Сначала мы формируем новый лист с расставленными флагами и только потом уменьшаем счётчики ответов клиента. Здесь необходимо отслеживать достижения начала списка аспектов, для соответствующего изменения элементов формы.


Рис. 14. Возврат к предыдущему списку аспектов

При достижении конца теста клиент нажимает кнопку «Завершить тест». При нажатии этой кнопки, происходит обработка ответов последнего листа и формируется отсортированный список ответов, реализуется методом «Prog_Tool.Sort_Answer». «Sort_answer» полученный в итоге двумерный массив, отсортированный по убыванию количества аспектов попавших в кластер. Второй индекс массива представляет собой список из двух элементов, в первом храниться процентное значение количества набранных кластером аспектов, а во втором номер кластера из базы данных. Далее, проверяя условие минимального порога прохождения кластера, строим список гиперссылок, соответствующий выбранным кластерам (рис.15). Обработку получения информации о кластере обеспечивает событие «Link_Clicked».


Рис. 15. Завершение тестирования


Для каждого выбранного кластера формируется отсортированный список задач (рис.16). Затем вместе с информацией о кластере клиенту, выводится сформированный список, который соответствует тем задачам, которые должен решить клиент для успешного разрешения проблемы кластера.

Рис. 16. Список задач


Для каждой задачи из списка планируется вызывать специальный сценарий для её решения. На данном этапе разработки реализован вызов стандартного сценария ТМО (рис.17).


Рис. 17. Сценарий ТМО


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

Заключение


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

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

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

Библиографический список


1.Джесс Либерти. Создание .Net-приложений. Программирование на C#. СПб: Питер, 2003. 688с.

2.MSDN: Microsoft Development, MSDN Subscriptions, Resources, and More [Электронный ресурс] : URL: #"justify">.Professorweb .Net&Web-proggraming [Электронный ресурс] : URL: #"justify">.EmoclearSelf-Helpapedia [Электронный ресурс] : URL: #"justify">.Майлз Дауни. Эффективный коучинг: Уроки коуча коучей. М.: Добрая книга, 2007. 288 с.

.Чарльз Петцольд. Программирование с использованием Microsoft Windows Forms. СПб: Питер, 2006. 432с.


Приложения


Приложение 1.Класс «Declaration».

class Declaration

{static string Path = Prog_Tool.GetPath();//получаем каталог исполняемого файла

/******Делегаты******/delegate void NoParam_del();delegate void StringParam_del(bool f,string s);

public static NoParam_del ChangeElementLoad;//делегат для изменения элементов на главной формеstatic StringParam_del ChangeStatus;//делегат для изменения статуса на главной форме

/******Для Sql******/static SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename="+ System.IO.Path.Combine(Path, "Data\\Личностные кластеры.mdf")+";Integrated Security=True;Connect Timeout=30;User Instance=True");static SqlDataAdapter dataAdapter = new SqlDataAdapter();static SqlCommand cmd = new SqlCommand();

/******Глобальные параметры и структуры******/static int count_cluster_stat = 0;//кол-во утверждений

public static int count_cluster = 0;//кол-во кластеровstatic int count_task = 0;//кол-во задач

public static ArrayList sort_list_stat = new ArrayList();//массив с помощь которого будут генерироватся случайные последовательности аспектов

public static ArrayList list_stat = new ArrayList();//хранит аспекты текущего листа

public static ArrayList list_answer = new ArrayList();//массив классов Answer,хранит количество аспектов попавших в каждый кластер и задачу,индекс равен номеру кластераstatic ArrayList check_list = new ArrayList();//хранит информацию о том, какие утверждения были отмечены на листеstatic int Check_list_page = -1;//номер листа - ограниченного списка аспектов, нужен для возможности перемещения между листами с отмеченными утверждениями

public static int Check_list_lastpage = 0;//последний номер достигнутого листа

public static int kol_vo_elem = 18;//размер листа, т.е. количество аспектов на одном листеstatic int Current_count = 0;//индекс последнего аспекта из таблицы Add_IDststatic int Add_count = 0;//кол-во добавленных в лист аспектовstatic int Current_ran = 0;//текущий параметр для генерации случайных утверждений

public static int ID_user = 0;//комер текущего клиента

public static int cl_select = 5;//% порог который должны набрать кластеры чтобы попасть в вывод

public static TabPage[] Tab_Page = new TabPage[7];//сохраняем коллекцию страниц Tab_Control

}

Приложение 2. Класс «Prog_Tool».

Prog_Tool

{static Statement_cl get_list_statement(SqlDataReader dr_loc)//считываем информацию об аспектах

{_cl stat = new Statement_cl();.id_st = (int)dr_loc["ID"];.n_cl = (int)dr_loc["Number_Cluster"];.n_task[0] = (int)dr_loc["Number_Task_1"];.n_task[1] = (int)dr_loc["Number_Task_2"];.n_task[2] = (int)dr_loc["Number_Task_3"];.text = dr_loc["Text"].ToString();stat;

}static void Initialize_sort_list_stat()//заполняем массив номерами аспектов из бд

{dr = Sql_Tool.Get_ID_statement();(dr.Read())

{.sort_list_stat.Add((int)dr["ID"]);

}.Close();

} static void Generate_Random_Key(bool f)//генерация случайной последовательности аспектов

{(f)

{main_ran = new Random();//для генерации определённой последовательности

Declaration.Current_ran = main_ran.Next(0, Declaration.count_cluster_stat - 1);

}ran = new Random(Declaration.Current_ran);//для генерации последовательности зависящей от Current_rana=0;i=0;buff=0;.sort_list_stat.Clear();//очистка массива аспектов

Prog_Tool.Initialize_sort_list_stat();//заполняем массив номерами аспектов из бд

//затем перемешиваем их ,и отправляем в бд

for (i = 0; i < Declaration.count_cluster_stat; i++)

{= ran.Next(0, Declaration.count_cluster_stat-1);=(int)Declaration.sort_list_stat[a];.sort_list_stat[a] = Declaration.sort_list_stat[i];.sort_list_stat[i] = buff;

}_Tool.Add__Random_IDkey();//запись последовательности в бд

Declaration.sort_list_stat.Clear();

}static void Initialize_List_Answer()//инициализация массива ответов

{buff;(int i = 0; i < Declaration.count_cluster; i++)

{= new Answer();.list_answer.Add(buff);

}

}static void Initialize_Check_stat_list()//инициализация массива хранящего листы

{_statement buff;(int i = 0; i < Declaration.Check_list_lastpage; i++)

{= new Check_statement();.check_list.Add(buff);

}

}static void Reset()//сброс данных

{_Tool.Clear_Table_Add_IDkey();//очищаем таблицу сгенерированой последовательности

Declaration.list_answer.Clear();//очищаем массив ответов.list_stat.Clear();//очистка массива текущих аспектов.check_list.Clear();//очищаем отметки на листах_Tool.Initialize_List_Answer();//создаём массив пустого списка ответов

}static int[,] Sort_Answer(int f)//сортировка массива ответов для вывода списка кластеров и задач

{buffA;//буффер для объекта ответ

int[,] tmp = new int[1, 2];[,] sort_answer;(f==-1)

{_answer = new int[Declaration.count_cluster, 2];//i-кол-во утверждений попавших в кластер,j-номер кластера(int i = 0; i < Declaration.count_cluster; i++)

{= (Answer)Declaration.list_answer[i];_answer[i, 0] = (int)Math.Round((double)buffA.count_answer / Declaration.count_cluster_stat * 100);//переводим кол-во утверждений в кластере в процент от общего числа утверждений_answer[i, 1] = i;

}

}

{= (Answer)Declaration.list_answer[f];_answer = new int[Declaration.count_task, 2];//i-кол-во утверждений попавших в задачу,j-номер задачи(int i = 0; i < Declaration.count_task; i++)

{_answer[i, 0] = (int)Math.Round((double)buffA.task_answer[i] / buffA.count_answer * 100);//переводим кол-во утверждений в task в процент от общего числа утверждений

sort_answer[i, 1] = i;

}

}

//сортировка массива по кол-ву пoпавших в кластер/задачу аспектов

for (int i = 0; i < sort_answer.GetLength(0); i++)(int j = sort_answer.GetLength(0) - 1; j > i; j--)(sort_answer[j-1,0] < sort_answer[j,0])

{[0,0] = sort_answer[j-1,0];[0,1] = sort_answer[j-1,1];_answer[j-1,0] = sort_answer[j ,0];_answer[j-1,1] = sort_answer[j ,1];_answer[j ,0] = tmp[0,0];_answer[j ,1] = tmp[0,1];

}sort_answer;

}static string GetPath()//получаем путь запускаемого файла

{fullAppName = Application.ExecutablePath;//Получает путь для исполняемого файла, запустившего приложение, включая исполняемое имя.fullAppPath = System.IO.Path.GetDirectoryName(fullAppName);//Возвращает для указанной строки пути сведения о каталоге.fullAppPath;

}

}

Приложение3. Класс «Sql_Tool».static class Sql_Tool

{static void Initialize_Sql_Tool()// настраиваем элементы БД

{.cmd.Connection = Declaration.conn;.dataAdapter.SelectCommand = Declaration.cmd;.conn.Open();.cmd.CommandType = CommandType.StoredProcedure;

}static void Close_Sql_Tool()//закрываем соединение

{.conn.Close();

}static SqlDataReader Read_Cluster(int a,int b)//читаем номера аспектов в промежутке индекса от [a,b]

{.cmd.Parameters.Clear();dr = null;.cmd.CommandText = "Get_ID";.cmd.Parameters.AddWithValue("@start_index", a);.cmd.Parameters.AddWithValue("@end_index", b);= Declaration.cmd.ExecuteReader();dr;

}static void Clear_Table_Add_IDkey()//очищаем таблицу хранящую случайную последовательность

{.cmd.Parameters.Clear();.cmd.CommandText = "Clear_Add_IDst";.cmd.ExecuteNonQuery();

}static void Add__Random_IDkey()//записываем случайную последователньость в бд

{.cmd.Parameters.Clear();.cmd.CommandText = "Add_IDst_In_Table";(int i = 0; i < Declaration.count_cluster_stat; i++)

{.cmd.Parameters.AddWithValue("@index", i);.cmd.Parameters.AddWithValue("@id", (int)Declaration.sort_list_stat[i]);.cmd.ExecuteNonQuery();.cmd.Parameters.Clear();

}

}static bool Save_User(string name,string password)//сохраняем информацию о клиенте

{.cmd.Parameters.Clear();dr = null;.cmd.CommandText = "Check_User";.cmd.Parameters.AddWithValue("@name", name);

dr = Declaration.cmd.ExecuteReader();(dr.Read())//если имя уже занесено в таблицу то выводим сообщение

{.Close();.Show("Такой пользователь уже существует!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return false;

}

{.Close();.cmd.Parameters.Clear();.cmd.CommandText = "Add_User";.cmd.Parameters.AddWithValue("@name", name);.cmd.Parameters.AddWithValue("@password", password);.cmd.Parameters.AddWithValue("@ran", Declaration.Current_ran);.cmd.Parameters.AddWithValue("@cur_count", Declaration.Current_count);.cmd.Parameters.AddWithValue("@check_l", Declaration.Check_list_page);.cmd.Parameters.AddWithValue("@check_l_last", Declaration.check_list.Count);.cmd.ExecuteNonQuery();true;

}

}static void Count()//получаем количество аспектов,кластеров и задач

{.cmd.Parameters.Clear();dr = null;.cmd.CommandText = "MyCount";= Declaration.cmd.ExecuteReader();.Read();.count_cluster_stat = (int)dr["max_st"];.count_cluster = (int)dr["max_cluster"];.count_task = (int)dr["max_task"];.Close();

}static void Save_Answer(string name)//сохраняем информацию об ответах клиента

{.cmd.Parameters.Clear();dr = null;list = new Answer();.cmd.CommandText = "Check_User";.cmd.Parameters.AddWithValue("@name", name);= Declaration.cmd.ExecuteReader();.Read();.ID_user = (int)dr["ID"];.Close();(int i = 0; i < Declaration.count_cluster; i++)

{= (Answer)Declaration.list_answer[i];(list.count_answer != 0)

{.cmd.Parameters.Clear();.cmd.CommandText = "Save_cl_check";.cmd.Parameters.AddWithValue("@id_cluster", i + 1);.cmd.Parameters.AddWithValue("@cluster_check", list.count_answer);.cmd.Parameters.AddWithValue("@id_user", Declaration.ID_user);.cmd.ExecuteNonQuery();.cmd.Parameters.Clear();(int j = 0; j < Declaration.count_task; j++)

{(list.task_answer[j] != 0)

{.cmd.Parameters.Clear();.cmd.CommandText = "Save_an";.cmd.Parameters.AddWithValue("@id_cluster", i + 1);.cmd.Parameters.AddWithValue("@id_task", j + 1);.cmd.Parameters.AddWithValue("@task_check", list.task_answer[j]);.cmd.Parameters.AddWithValue("@id_user", Declaration.ID_user);.cmd.ExecuteNonQuery();.cmd.Parameters.Clear();

}

}

}

}

}static void Save_check_list()//сохраняем информацию, об отметках на листах

{.cmd.Parameters.Clear();_statement list = new Check_statement();.cmd.CommandText = "Save_ch_list";(int i = 0; i < Declaration.check_list.Count; i++)

{= (Check_statement)Declaration.check_list[i];(int j = 0; j < Declaration.kol_vo_elem; j++)

{(list.check_st_in_list[j])

{.cmd.Parameters.AddWithValue("@ID_l", i);.cmd.Parameters.AddWithValue("@ID_u", Declaration.ID_user);.cmd.Parameters.AddWithValue("@ID_s", j);.cmd.ExecuteNonQuery();.cmd.Parameters.Clear();

}

}

}

}static bool Load_User(string name, string password)//загружаем информацию о клиенте

{pass;.cmd.Parameters.Clear();dr = null;.cmd.CommandText = "Check_User";.cmd.Parameters.AddWithValue("@name", name);= Declaration.cmd.ExecuteReader();(dr.Read())//если имя существует в таблице

{= (string)dr["Password"];(pass == password)

{.ID_user = (int)dr["ID"];.Current_ran = (int)dr["Ran"];.Current_count = (int)dr["Current_count"];.Check_list_page = (int)dr["Check_list"];.Check_list_lastpage = (int)dr["Ch_l_last"];.Close();true;

}

{.Show("Неправельное имя пользователя или пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);.Close();false;

}

}

{.Close();.Show("Неправельное имя пользователя или пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);false;

}

}static void Load_Answer()//загрузка ответов клиента

{.cmd.Parameters.Clear();dr = null;list = new Answer();.cmd.CommandText = "Load_an";.cmd.Parameters.AddWithValue("@id_us", Declaration.ID_user);= Declaration.cmd.ExecuteReader();a = 0;(dr.Read())

{(a != (int)dr["ID_cluster"])

{= (Answer)Declaration.list_answer[(int)dr["ID_cluster"] - 1];.count_answer = (int)dr["Cluster_check"];

}.task_answer[(int)dr["ID_task"]-1] = (int)dr["Task_check"];= (int)dr["ID_cluster"];

}.Close();

}static void Load_check_list()//загрузка отметок на листах

{.cmd.Parameters.Clear();dr = null;_statement list = new Check_statement();.cmd.CommandText = "Load_ch_list";.cmd.Parameters.AddWithValue("@id_us", Declaration.ID_user);= Declaration.cmd.ExecuteReader();(dr.Read())

{=(Check_statement)Declaration.check_list[(int)dr["ID_list"]];.check_st_in_list[(int)dr["ID_st"]] = true;.check_list[(int)dr["ID_list"]] = list;

}.Close();

}static SqlDataReader Get_ID_statement()//получение номера аспекта

{.cmd.Parameters.Clear();.cmd.CommandText = "Get_ID_st";Declaration.cmd.ExecuteReader();

}static void Del_user()//удаление клиента из бд

{.cmd.Parameters.Clear();.cmd.CommandText = "Delete_user";.cmd.Parameters.AddWithValue("@ID_us", Declaration.ID_user);.cmd.ExecuteNonQuery();

}static string Get_cl_text(int a,string b)//получение описания кластера

{.cmd.Parameters.Clear();dr = null;s = "";.cmd.CommandText = "GetDescriptionCluster";.cmd.Parameters.AddWithValue("@id_cl", a);= Declaration.cmd.ExecuteReader();.Read();= (string)dr[b];.Close();s;

}static string Get_task_text(int a)//получение описания задачи

{.cmd.Parameters.Clear();dr = null;s = "";.cmd.CommandText = "GetDescriptionTask";.cmd.Parameters.AddWithValue("@id_task", a);= Declaration.cmd.ExecuteReader();.Read();= (string)dr["Description_text"];.Close();s;

}

}


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ