Разработка обучающего блока по дисциплине 'Базы данных и системы управления базами данных'

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    67,07 Кб
  • Опубликовано:
    2015-12-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка обучающего блока по дисциплине 'Базы данных и системы управления базами данных'

Реферат

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

Объектом исследования является дисциплина «Базы данных и системы управления базами данных», а также методы автоматизации подачи и проверки знаний по данной дисциплине.

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

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

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

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

Содержание

Введение

. Обзор и анализ методов и средств реализации поставленной задачи

.1 Общая организация учебного процесса

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

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

. Функциональное моделирование, разработка и проектирование алгоритма обучающего блока

.1 Функциональная модель обучающего блока

.2 Алгоритм работы обучающего блока

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

. Описание структуры и технологии разработки обучающего блока

.1 Описание структуры обучающего блока

.2 Состав и организация информационного обеспечения обучающего блока

.3 Разработка графического интерфейса

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

.5 Описание программной реализации задачи

.5.1 Организация взаимодействия обучающего блока с базой данных

.5.2 Программная реализация основных функций приложения

. Апробация механизмов функционирования обучающего блока

. Организационно-экономическое обоснование проекта

.1 Расчет общей трудоемкости разработки программного обеспечения

.2 Расчёт затрат на разработку программного продукта

.3 Формирование цены при создании программного обеспечения

. Сведения об охране труда. Защита от ионизирующих излучений в производственной среде оператора ЭВМ

.1 Общие сведения

.2 Система защиты от ионизирующего излучения

Заключение

Перечень условных обозначений и сокращений

Список использованных источников

Приложение А Диаграмма декомпозиции общей функциональной модели

Приложение Б Диаграмма потоков данных системы

Приложение В Схема базы данных

Приложение Г Текст программы «Обучающий блок по дисциплине «Базы данных и системы управления базами данных»

Приложение Д Руководство программиста

Приложение Е Руководство пользователя

Приложение Ж Руководство системного программиста

Введение


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

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

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

Задачей данного дипломного проекта является разработка обучающего блока по дисциплине «Базы данных и системы управления базами данных», который должен обладать набором следующих функций:

-  динамическая автоматизация процесса обучения;

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

-       система тестирования, где будут комплексно проверяться уровень знаний пользователя по данной дисциплине;

-       административный режим, где будет происходить управление ресурсами приложения.

Для решения поставленной задачи потребовалось:

-  изучение предметную область разрабатываемого приложения;

-       разработка функциональной модели, структурной схемы и алгоритма функционирования программного средства (ПС);

-       разработка, верификация и апробация обучающего блока.

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

1. Обзор и анализ методов и средств реализации поставленной задачи


1.1 Общая организация учебного процесса


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

В качестве важнейших задач обучения выступают следующие:

-  стимулирование познавательной активности учащихся;

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

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

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

-       выработка и совершенствование учебно-познавательных умений и навыков;

-       формирование умения самостоятельно углублять и пополнять свои знания (самообразование);

-       развитие творческих способностей учащихся.

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

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

Основными, можно назвать такие методы, как:

-  словесные методы (рассказ, объяснение, беседа, учебная дискуссия);

-       наглядные методы (метод иллюстраций и метод демонстраций);

-       практические методы (анализ конкретных производственных ситуаций, имитационные упражнения, метод дидактических игр, метод упражнений, исследовательский метод, метод «мозгового штурма», метод проектов и метод педагогических мастерских);

-       методы контроля обучения (устные, письменные индивидуальные и фронтальные контроли, а также практические, машинные и комбинированные контроли) [1].

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

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

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

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

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

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

В настоящее время активно используется электронный видеопроектор (ЭВП). ЭВП - устройство, позволяющее проецировать как статическое, так и движущееся изображение с компьютера, видеомагнитофона или видеокамеры на большой экран. Преимущества видеоинформации, предъявляемой ЭВП, в ее оперативности, возможности «обнажать» наиболее важное, существенное в учебном материале. Сочетание зрительного и звукового образа с научным комментарием создает предпосылки для овладения живым опытом во всем многообразии его проявления, вызывает всплеск эмоций, возбуждает интерес, активизирует мыслительную деятельность ученика [3].

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

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

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

Обучающие программы имеют дидактические преимущества по сравнению с традиционным учебником:

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

-       осуществляется интеграция значительных объемов информации на едином носителе;

-       представляется возможность выбора индивидуальной схемы изучения материала;

-       осуществляется обратная связь через систему тестов, что позволяет корректировать процесс изучения материала.

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

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

-  красочные и создающие уникальный дизайн, элементы интерфейса, аналогов которым, в данной области, нет;

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

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

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

-       процесс обучения организован в динамической интерпретации.

Высокая оснащенность учебной, материально-технической базы учреждений НПО не только повышает качество профессионального обучения учащихся, но и позволяет сократить время, затрачиваемое на освоение конкретных умений и навыков, снижает затраты труда как преподавателей (мастеров производственного обучения), так и учащихся [4].

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


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

) «Pascal» - данный язык программирования был разработан в качестве языка обучения с хорошими навыками и основам программирования, поскольку он требует очень дисциплинированный подход при написании кода. Паскаль не рассматривается в качестве сильного и мощного языка вроде C, C + + или Java. Он используется по сей день, но уже считается морально устаревшим. Несмотря на это он легок в изучении и прививает грамотность и навыки программирования.

) «Delphi» - это продукт Borland International» для быстрого создания приложений. Высокопроизводительный инструмент визуального построения приложений включает в себя настоящий компилятор кода и предоставляет средства визуального программирования, несколько похожие на те, что можно обнаружить в «Microsoft Visual Basic» или в других инструментах визуального проектирования. В основе «Delphi» лежит язык «Object Pascal», который является расширением объектно-ориентированного языка «Pascal». «Delphi» производит небольшие по размерам (до 15-30 Кбайт) высокоэффективные исполняемые модули (.exe и .dll). С другой стороны небольшие по размерам и быстро исполняемые модули означают, что требования к клиентским рабочим местам существенно снижаются - это имеет немаловажное значение и для конечных пользователей.

) «C++Builder» - наиболее совершенная визуальная среда быстрой разработки на «C++» для «Windows». В ее состав входит около 200 самых различных компонентов, а создание законченной программы требует минимум усилий. Ближайший конкурент «Borland C++Builder» - это не система «Microsoft Visual C++», которая построена по другой схема, а «Microsoft Visual Basic». Однако эффективность программ, создаваемых с помощью «С++ Builder», в десятки раз превосходит быстродействие программ, написанных на «MS Visual Basic». Да и по числу свободных доступных компонентов равных среде «C++ Builder» сегодня не найти.

Для реализации программного средства выбран язык программирования «C++ Builder», т.к. средствами описанной выше системы в полной степени можно осуществить необходимые для полноценного функционирования системы, возможности. Поэтому проект будет реализован именно в этой среде разработки.

У этой системы есть прямой аналог - среда «Borland Delphi», технология работы с которой полностью совпадает с технологией, принятой в «C++Builder». Только в «Delphi» программный код пишется не на языке «C++», а на объектно-ориентированной версии «Паскаля» - «ObjectPascal». Но в «Borland C++Builder» позволительно писать программу при желании одновременно и на «C++», и на «Паскале».

Вместо отдельного инструментария, оперирующего визуальными элементами управления, в «C++Builder» интегрирована так называемая Палитра компонент, разделенная картотечными вкладками на несколько функциональных групп. Функциональные возможности поставляемых компонент можно достаточно просто модифицировать, а также разрабатывать компоненты, обладающие совершенно новым оригинальным поведением.

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

«C++Builder» поддерживает основные принципы объектно-ориентированного программирования - инкапсуляцию, полиморфизм и множественное наследование, а также нововведенные спецификации и ключевые слова в стандарте языка «C++».

«C++Builder» обеспечивает высокое быстродействие при компиляции и сборке 32-разрядных приложений, включая OLE взаимодействие клиент-сервер. Система даже отображает время, затраченное на основные этапы построения программ. Результирующие программы хорошо оптимизированы по скорости исполнения и затратам памяти. Хотя отладочный режим низкого уровня полностью интегрирован в среду «C++Builder», к отладке также придется привыкать. Инспектор объектов и другие средства остаются доступными во время работы программы, поэтому вносить изменения можно в процессе отладки

«C++ Builder» поддерживает связь с различными базами данных 3-х видов: «dBASE» и «Paradox»: «Sybase», «Oracle», «InterBase» и «Informix»; «Excel», «Access», «FoxPro» и «Btrieve». Механизм BDE (Borland Database Engine) придает обслуживанию связей с базами данных удивительную простоту и прозрачность. Проводник «Database Explorer» позволяет изображать связи и объекты баз данных графически.

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

Для проектирования БД выбран «MS ACCESS», который настоящее время является одним из популярных настольных программных систем управления базами данных. Среди причин такой популярности стоит отметить:

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

)        глубоко развитые возможности интеграции с другими программными продуктами, входящими в состав «MS Office», а также с любыми программными продуктами, поддерживающими технологию «OLE».

«MS Access» - высокопроизводительная система управления реляционными базами данных, которая входит в состав профессиональной версии интегрированного пакета «Microsoft Office».

Данная СУБД предназначена для разработки настольных баз данных и создания приложений баз данных архитектуры «клиент-сервер», работающих под управления операционных систем семейства «Windows». Эта система доступна для пользователя любого уровня. Она работает с объектами, к которым относятся таблицы, запросы, формы, отчеты, модули. Все связанные между собой объекты организованны в один файл, называемый базой данных [5].

обучающий информационный интерфейс

2. Функциональное моделирование, разработка и проектирование алгоритма обучающего блока


2.1 Функциональная модель обучающего блока


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

Функциональная декомпозиция - базируется на анализе функций системы. При этом возникает вопрос, о том что выполняет система, независимо от того, как она функционирует. Основанием разбиения на функциональные подсистемы служит общность функций, выполняемых группами элементов [6].

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

Рисунок 2.1 - Общая функциональная схема ПС «Обучающий блок»

На данной схеме показано, что входными параметрами являются:

­    логин и пароль пользователя;

­    статус пользователя;

­    оцифрованные учебные пособия;

­    ТБД «Пользователи»;

­    ТБД «Главы»;

­    ТБД «Темы»;

­    ТБД «Подтемы»;

­    ТБД «Пункты»;

­    ТБД «ЗапросТест»;

­    ТБД «ЗапросТестВопросы»;

­    ТБД «СтатистикаЗапросТеста»;

­    ТБД «СтандартТест»;

­    ТБД «СтандартТестВопросы»;

­    ТБД «СтатистикаСтандартТеста»;

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

-  локальная статистика и динамика и уровня знаний;

-       набор новых учебных материалов;

-       набор новых тестов и их вариантов;

-       распечатанный учебный материал.

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

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

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

2.2 Алгоритм работы обучающего блока


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

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

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

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

2.3 Проектирование лингвистического обеспечения обучающего блока


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

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

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

В качестве предупреждения выступают диалоги стандартного вида, реализованные по средствам стандартных функций и методов среды программирования «C++Builder». Далее приведены общие ситуации, которые могут возникнуть при ошибочных действиях пользователя, что, в свою очередь, может привести к критическим последствиям в работе автоматизированной системы:

-  в случаях ввода некорректных или нелогичных данных;

-       в случаях, когда не указаны данные, необходимые для выполнения определенных функций;

-       при отсутствии базы данных в одном каталоге с исполняемым файлом;

-       в случаях ввода повторяющихся имен и названий;

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

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

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

3. Описание структуры и технологии разработки обучающего блока


3.1 Описание структуры обучающего блока


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

Основными блоками обучающей системы являются: блок регистрации и авторизации; блок обучения; блок администрирования; блок тестирования; блок динамики и статистики; блок вывода результатов тестов.

Структурная схема представлена на рисунке 3.1.

Рисунок 3.1 - Структурная схема обучающего блока

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

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

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

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

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

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

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

3.2 Состав и организация информационного обеспечения обучающего блока


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

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

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

-  пользователи;

-       главы;

-       темы;

-       подтемы;

-       пункты;

-       стандарт Тест;

-       стандарт ТестВопросы;

-       стандарт ТестСтатистика;

-       запрос Тест;

-       запрос ТестВопросы;

-       запрос ТестСтатистика.

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

Для индексирования таблиц, ускорения поиска, исключения записи неуникальных данных каждая таблица содержит поле типа «ID», которые являются ключевыми [8].

Полномасштабная модель базы данных представлена в приложении Б.

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

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

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

Таблица 3.1 - Структура таблицы БД «Пользователи»

Название поля

Тип поля

Описание

IDПользователя

Целое

Уникальный идентификатор пользователя, ключевое поле

Логин

Текстовый (255)

Имя пользователя, указываемое при авторизации


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

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

Таблица 3.2 - Структура таблицы БД «Главы»

Название поля

Тип поля

Описание

IDГлавы

Целое

Уникальный идентификатор главы, ключевое поле

Наименование Главы

Текстовый (255)

Название главы

Имя Файла

Текстовый (255)

Наименование *html файла, в котором хранится обучающая информация по текущей главе


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

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

Таблица 3.3 - Структура таблицы БД «Темы»

Название поля

Тип поля

Описание

IDТемы

Целое

Уникальный идентификатор темы, ключевое поле

IDГлавы

Целое

Уникальный идентификатор главы

Наименование Темы

Текстовый (255)

Название темы

Имя Файла

Текстовый (255)

Наименование *html файла, в котором хранится обучающая информация по текущей теме

Запрос Тест

Логический

Наличие или отсутствие теста по запросам по данной теме

Стандарт Тест

Логический

Наличие или отсутствие стандартного теста по данной теме


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

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

Таблица 3.4 - Структура таблицы БД «Подтемы»

Название поля

Тип поля

Описание

ID Подтемы

Целое

Уникальный идентификатор подтемы, ключевое поле

IDТемы

Целое

Уникальный идентификатор темы

Наименование Подтемы

Текстовый (255)

Название подтемы

Имя Файла

Текстовый (255)

Наименование *html файла, в котором хранится обучающая информация по текущей подтеме


Таблица 3.5 - Структура таблицы БД «Пункты»

Название поля

Тип поля

Описание

IDПункта

Целое

Уникальный идентификатор пункта, ключевое поле

ID Подтемы

Целое

Уникальный идентификатор подтемы

Наименование Пункта

Текстовый (255)

Название пункта

Имя Файла

Текстовый (255)

Наименование *html файла, в котором хранится обучающая информация по текущему пункту


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

Таблицы «ЗапросТест» и «СтандартТест» содержат перечень созданных стандартных тестов и тестов по запросам, их тему и название. Их структуры и назначение полей приведены в таблицах 3.6 и 3.7.

Таблица 3.6 - Структура таблицы БД «ЗапросТест»

Название поля

Тип поля

Описание

ID Запрос Теста

Целое

Уникальный идентификатор теста по запросам, ключевое поле

ID Темы

Целое

Уникальный идентификатор темы

Название Теста

Текстовый (255)

Наименование теста по запросам


Таблица 3.7 - Структура таблицы БД «СтандартТест»

Название поля

Тип поля

Описание

IDСтандарт Теста

Целое

Уникальный идентификатор стандартного теста, ключевое поле

IDТемы

Целое

Уникальный идентификатор темы

Название Теста

Текстовый (255)

Наименование стандартного теста


Ключевое поле таблицы «ЗапросТест» связано с таблицами «СтатистикаЗапросТеста» и «ЗапросТестВопросы», а ключевое поле таблицы «СтандартТест», в свою очередь, связано с таблицами «СтатистикаСтандартТеста» и «СтандартТестВопросы», где тестам ставится в соответствие перечень вопросов и статистические данные.

Таблицы «ЗапросТестВопросы» и «СтандартТестВопросы» предназначены для хранения и управления вопросами для тестов выбранного типа. Для вопросов указаны их балловые стоимости, варианты ответов для стандартных тестов, используемые операторы для тестов по запросам, верные ответы и, при желании, графические приложения. Структуры и назначение полей описанных выше ТБД приведены в таблице 3.8 и 3.9.

Таблица 3.8 - Структура таблицы БД «ЗапросТестВопросы»

Название поля

Тип поля

Описание

IDЗапросВопроса

Целое

Уникальный идентификатор вопроса для теста по запросам, ключевое поле

IDТемы

Целое

Уникальный идентификатор темы

IDЗапросТеста

Целое

Уникальный идентификатор теста по запросам

Предметная область

Текстовый (255)

Общая предметная область для заданного вопроса

Вопрос

Текстовый (255)

Задаваемый вопрос

INSERT

Логический

Наличие или отсутствие оператора INSERT в ответе на заданный вопрос

SELECT

Логический

Наличие или отсутствие оператора SELECT в ответе на заданный вопрос

DELETE

Логический

Наличие или отсутствие оператора DELETE в ответе на заданный вопрос

UPDATE

Логический

Наличие или отсутствие оператора UPDATE в ответе на заданный вопрос

WHERE

Логический

Наличие или отсутствие оператора WHERE в ответе на заданный вопрос

Верный ответ

Текстовый(255)

Верно составленный запрос по заданному вопросу

ЦенаВопроса

Десятичное

Получаемый балл за верный ответ на текущий вопрос

Приложение

OLE

Графическое приложение к вопросу


Таблица 3.9 - Структура таблицы БД «СтандартТестВопросы»

Название поля

Тип поля

Описание

IDСтандартВопроса

Целое

Уникальный идентификатор вопроса для стандартного теста, ключевое поле

IDЗапросТеста

Уникальный идентификатор теста по запросам

Предметная область

Текстовый (255)

Общая предметная область для заданного вопроса

Вопрос

Текстовый (255)

Задаваемый вопрос

Вариант1

Текстовый (255)

Первый вариант ответа на заданный вопрос

Вариант2

Текстовый (255)

Второй вариант ответа на заданный вопрос

Вариант3

Текстовый (255)

Третий вариант ответа на заданный вопрос

Вариант4

Текстовый (255)

Четвертый вариант ответа на заданный вопрос

Вариант5

Текстовый (255)

Пятый вариант ответа на заданный вопрос

Вариант6

Текстовый (255)

Шестой вариант ответа на заданный вопрос

Верный ответ

Текстовый(255)

Верный ответ на заданный вопрос

ЦенаВопроса

Десятичное

Получаемый балл за верный ответ на текущий вопрос

Приложение

OLE

Графическое приложение к вопросу


Таблицы «СтатистикаЗапросТеста» и «СтатистикаСтандартТеста» накапливают в себе данные о результатах прохождения тестов для каждого пользователя. Их структуры и назначения полей представлены в таблицах 3.10 и 3.11.

Таблица 3.10 - Структура таблицы БД «СтатистикаЗапросТеста»

Название поля

Тип поля

Описание

IDПользователя

Целое

Уникальный идентификатор пользователя

IDЗапросТеста

Целое

Уникальный идентификатор теста по запросам

Оценка

Десятичное

Отметки, получаемые пользователем за прохождение тестов по запросам


Таблица 3.11 - Структура таблицы БД «СтатистикаСтандартТеста»

Название поля

Тип поля

Описание

IDПользователя

Целое

Уникальный идентификатор пользователя

IDСтандартТеста

Целое

Уникальный идентификатор стандартного теста

Оценка

Десятичное

Отметки, получаемые пользователем за прохождение стандартных тестов


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

3.3 Разработка графического интерфейса


Ключевым средством взаимодействия пользователя с программой является графический пользовательский интерфейс (Graphical User Interface, GUI). GUI любого программного продукта является одним из ключевых факторов его популярности.

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

На практике программирование Windows-приложений предполагает экстенсивное использование различных инструментальных средств и мастеров. Таким образом, учитывая стандарты выбранной операционной системы, программное средство будет иметь оконный интерфейс. Это обусловлено, прежде всего, тем, что окна являются основными элементами графического интерфейса в операционных системах (ОС) семейства «Windows». Они представляют собой прямоугольные области, которые имеют свои настройки, свойства и типы [11].

Графическая часть обучающего блока включает в себя окна четырех типов:

-  главное окно - содержит все элементы навигации по программе, а также дополнительную информацию, необходимую для удобства работы с ПС;

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

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

-       окна вывода информации и статистики - служат для вывода информации различного вида, а также статистики и графиков.

Главное окно программы будет содержать следующие элементы управления и вывода информации:

-  заголовок окна, который содержит название программы и назначение окна;

-       кнопки системного меню, которые отвечают за изменение размера, минимизацию и закрытие программы;

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

-       область приветствия;

-       область вывода дня недели, текущей даты и времени;

-       пользовательская панель инструментов, содержащая кнопки для доступа к основным функциям программы;

-       административная панель, включает в себя кнопку для доступа к административным элементам управления ПС;

-       строка состояния, отображающая информацию обо всех режимах работы программы.

Схема главного окна графического интерфейса (вид окна для административной учетной записи) представлена на рисунке 3.2

Рисунок 3.2 - Схема главного окна графического интерфейса: 1 - заголовок окна; 2 - кнопки системного меню; 3 - область названия окна; 4 - строка состояния; 5 - область приветствия; 6 - область вывода дня недели, даты и времени; 7 - административная панель; 8 - пользовательская панель; 9 - кнопка для доступа к стадии обучения; 10 - кнопка для доступа к стадии тестирования; 11 - кнопка для вывода статистики и графиков; 12 - выход; 13 - кнопка для доступа в административную часть приложения

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

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

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

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

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

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

3.4 Описание использованных компонентов


Библиотека визуальных компонент, или VCL (Visual Component Library) позволяет визуально создавать программные приложения, не прибегая к кодированию классов "вручную", или кодированию в рамках стандартных библиотек MFC (Microsoft Foundation Class), или OWL (Object Windows Library).

Библиотека VCL интегрирована в среду C++Builder, что, в отличие от других систем программирования, позволяет манипулировать классами визуальных компонент при проектировании приложения, на стадии создания его прототипа. Поведение и вид ваших компонент определяются по мере разработки приложения, хотя можно модифицировать их и в процессе выполнения программы.

Для разработчика компоненты представляют собой объекты на C++. Некоторые компоненты инкапсулируют поведение типовых элементов управления, предоставляемых операционными системами «Windows». Другие компоненты вводят совершенно новые видимые и невидимые элементы, программный код которых полностью определяет их поведение.

В ходе разработки были использованы следующие компоненты:

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

2)      компонент «TTimer». Cлужит для инициирования какого-либо события через определенные интервалы времени. В разрабатываемой системе данный компонент служит для отсчета времени в блоке тестирования и управления воспроизведением flash-роликов;

)        компоненты для работы с базами данных:

а) компонент «TADOQuery». Он применяется для выполнения произвольных запросов SQL. Это могут быть запросы просмотра данных SELECT и запросы изменения данных INSERT, DELETE, UPDATE, ALTER TABLE, CREATE TABLE. В разрабатываемом ПС он служит для выборки, добавления, редактирования и удаления данных из базы данных;

б) компонент «TADOConnection». Он является, своего рода, концентратором соединения с хранилищем данных. Для установления связи нужно с помощью свойства ConnectionString сформировать связные параметры и затем установить значение True в свойство Connected. В приложении используется для соединения остальных компонентов ADO с базой данных;

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

г) компонент «TDBGrid». Этот компонент является дальнейшим развитием обычной таблицы (StringGrid), но предназначен исключительно для отображения и редактирования связанной с БД информации. В приложении обеспечивает вывод значений таблиц с целью редактирования;

) компонент «TLabel». Предназначен для отображения статического текста. Свойством Caption можно задать отображаемый текст. В программе данный компонент используется для общения с пользователем и удобства восприятия пользовательского интерфейса;

5) компонент «TButton». Представляет собой стандартную кнопку Windows, инициирующую какое-либо действие. Используется для управления процессами приложения [12];

) компонент «TShockwaveFlash». Служит для обеспечения работы и взаимодействия C++ Builder с Flash-анимацией (файлы *.swf). Компонент не является элементом VCL по умолчанию, необходимо импортировать его из библиотек Flash.ocx или SWFlash.ocx. В приложении данный компонент используется для воспроизведения и управления flash-анимацией;

) компонент «CppWebBrowser». Используется для визуального просмотра веб-страниц. Служит для отображения подготовленных лекций.

) компонент «TChart». Позволяет строить двух- и трехмерные диаграммы на основе различных данных, является наследником класса TPanel и наследует все свойства панели. В программе используется для построения динамики уровня знаний пользователя в статистических целях;

) компонент «TTreeView». Служит для отображения сложных данных отображающихся в виде списка или дерева. Используется для построения дерева категорий учебного материала.

Использованные компоненты позволили в полной мере реализовать ранее спроектированный интерфейс пользователя, обеспечить необходимый функционал программного средства [13].

3.5 Описание программной реализации задачи


3.5.1 Организация взаимодействия обучающего блока с базой данных

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

Для работы СУБД MS Access применяется технологии OLE DB - интерфейс системного уровня с дополнительным прикладным уровнем, который получил название ADO (ActiveX Data Objects), предназначенным для прикладных задач. Для доступа к источникам данных БД MS Access используется драйвер Microsoft.Jet.OLEDB.4.0 и провайдер Jet 4.0.

Взаимодействие компонентов ADO и провайдера осуществляется на основе универсальной для Windows технологии ActiveX, причем провайдер реализуется как СОМ-сервер, а ADO-компоненты - как COM-клиенты.

При создании программы для работы с базой данных следует использовать связанные компоненты-наборы ADOQuery, ADODataSet и ADOConnection [14]. Схема связи данных с объектами ADO в среде разработки приложений С++ Builder приведена на рисунке 3.3.

Рисунок 3.3 - Схема связи данных с объектами ADO

Для организации взаимодействия по приёму и передаче данных между базой данных и обучающим блоком применяется технология SQL-запросов - инструкций, выполняющих операции над таблицами. SQL (англ. Structured Query Language - «язык структурированных запросов») - универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. Компонент «TADOQuery» применяется для выполнения произвольных запросов SQL.

При разработке обучающего блока были использованы следующие операторы языка DML (манипуляции данными):

-  SELECT - производит выборку указанных данных;

-       INSERT - производит добавление новых данных в указанную таблицу;

-       UPDATE - производит обновление уже имеющихся данных;

-       DELETE - производит удаление строк из указанной таблицы.

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

Рисунок 3.4 - Пример использования запроса на выборку данных

На рисунке 3.5 представлен пример запроса на удаление данных. Запрос производит удаление выбранного теста вместе со всеми подчиненными ему вопросами.

Рисунок 3.5 - Пример использования запроса на удаление данных

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

На рисунке 3.7 приведен пример использования запроса на добавление данных. С помощью оператора SELECT производиться добавление новых данных в указанную таблицу, предварительно взяв значения, указанные пользователем.

Рисунок 3.6 - Пример использования запроса на выборку данных

Рисунок 3.7 - Пример использования запроса на добавление данных

3.5.2 Программная реализация основных функций приложения

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

Для реализации функции регистрации и авторизации была организована работа с данными, хранящимися в реестре «Windows». Реестр («Windows Registry»), или системный реестр - иерархически построенная база данных параметров и настроек в большинстве операционных систем семейства «Windows». Реестр содержит информацию и настройки для аппаратного и программного обеспечения, профилей пользователей, предустановки [15]. При регистрации, логин и пароль, указанные пользователем, записываются как параметры для ключа реестра (HKEY_CURRENT_USER\BlockDB\Users), который автоматически создается при первом запуске программы. После успешной регистрации, создается три новых параметра и обновляется один постоянный, который несет в себе информацию о количестве уже зарегистрировавшихся пользователей. Параметр «User_n» содержит логин пользователя, параметр «Password_n» содержит пароль, а параметр «Status_n» - статус, где n - порядковый номер пользователя. Помимо записи в реестр, вновь созданный логин записывается и в ТБД «Пользователи». Это необходимо для более удобной и продуктивной работы с ведением статистики. В момент авторизации происходит соотношение введенных логина и пароля с теми, что существуют в базе реестра, и, если совпадение найдено, то пользователь, в соответствии со своим статусом, получает доступ к определенному количеству функций.

Программная реализация регистрации нового пользователя представлена на рисунке 3.8.

Рисунок 3.8 - Программная реализация регистрации нового пользователя

Графики, отображающие динамику уровня знаний пользователя, строятся в соответствии с его результатами. Это происходит под управлением компонента «TChart». Программная реализация организации построения графика представлена на рисунке 3.9.

Рисунок 3.9 - Программная реализация построения графика

Организация передвижения компонента «TImage» мышью по форме осуществлена с помощью работы со свойствами «OnMouseMove», «OnMouseDown», «OnMouseUp». Программная реализация данной возможности, с учетом добавления ограниченного полигона для передвижения, представлена на рисунке 3.10.

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

Обучающая часть приложения организована в виде дерева категорий и области отображения данных. Дерево строится автоматически с помощью компонента «TTreeView». Данные для дерева берутся из БД. Область отображения данных представлена компонентом «TCppWebBrowser», в который подгружаются html-страницы. Программная реализация постройки первого уровня дерева категорий представлена на рисунке 3.12.

Листинг программного средства приведён в приложении В.




Рисунок 3.10 - Реализация возможности перемещения компонента «TImage» с помощью мыши по определенному полигону

Рисунок 3.11 - Программная реализация проверки правильности собранного запроса

Рисунок 3.12 - Программная реализация постройки первого уровня дерева

4. Апробация механизмов функционирования обучающего блока


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

Для начала следует запустить исполняемый файл «BlockDB.exe», после чего начнется воспроизведение Flash-ролика, в процессе воспроизведения которого происходит проверка наличия БД в одном каталоге с исполняемым файлом. В случае если база будет не обнаружена, пользователь получит уведомление о ее отсутствии (рисунок 4.1), после чего откроется стандартное диалоговое окно выбора файлов, к которому применен фильтр на открытие файлов исключительно формата *mdb (рисунок 4.2). В случае если указан новый путь к БД или она изначально находилась в необходимом каталоге, пользователю предстоит пройти регистрацию, если программа запускается первый раз, либо, в противном случае, сразу этап авторизации.

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

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

Рисунок 4.1 - Уведомление об отсутствии необходимой базы данных

Рисунок 4.2 - Выбор нового пути к базе данных

Рисунок 4.3 - Уведомление о том, что введенный логин уже зарегистрирован

Рисунок 4.4 - Уведомление об ошибочной авторизации

Рисунок 4.5 - Главное меню программы (вид для административной учетной записи)

Окно носит исключительно ознакомительный характер, тем самым, исключая возникновение ошибок в данной области приложения. Факт того, что вся информация в данном модуле выводится с помощью компонента «TCppWebBrowser», являющийся своего рода обозревателем окна, которое формирует «Internet Explorer» (IE), предполагает то, что все ошибки, которые могут быть связаны с отображением html-страниц, обрабатываются напрямую ядром IE.

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

Рисунок 4.6 - Модуль обучения

Рисунок 4.7 - Модуль отображения статистики

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

Главное окно административной панели (рисунок 4.9) имеет навигационное предназначение. Добавление стандартных тестов и тестов по запросам, их редактирование и удаление происходит по схожим технологиям, поэтому рассмотрим пример добавления теста по запросам (рисунок 4.10), для изучения ошибочных ситуаций в целом по модулю администрирования. В качестве примера, следует проверить реакцию программы на добавление теста с именем, которое уже существует в базе (реакция программы представлена на рисунке 4.11), а также попытку не указывать некоторые из данных, необходимых для создания вопроса (реакция приложения приведена на рисунке 4.12). Кроме того, при попытке указать несколько операторов SQL одного и того же типа, системой будет выведено уведомление о невозможности совершения данного действия (рисунок 4.13).

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

Рисунок 4.8 - Осуществление теста по запросам

Рисунок 4.9 - Главное окно административной панели

Рисунок 4.10 - Добавление теста по запросам

Рисунок 4.11 - Попытка создать тест с именем, которое уже существует в базе

Рисунок 4.12 - Обработка ситуации, при которой одно из обязательных полей не заполнено

Рисунок 4.13 - Попытка подключить несколько операторов SQL

5. Организационно-экономическое обоснование проекта


5.1 Расчет общей трудоемкости разработки программного обеспечения


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

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

Таблица 5.1 - Перечень и объем функций программного продукта

Код функции

Наименование (содержание) функции

Объем функций (строк исходного кода)



исходный

уточненный

Ввод, анализ входной информации, генерация кодов и процессор входного языка

101

Организация ввода информации

110

150

102

Контроль, предварительная обработка и ввод информации

430

435

104

Обработка входного языка и формирование таблиц

900

240

107

Организация ввода-вывода информации в интерактивном режиме

220

325

109

Управление вводом-выводом

1980

420

Формирование, ведение и обслуживание базы данных

202

Формирование базы данных

1750

252

203

Обработка наборов и записей базы данных

2350

550

206

Манипулирование данными

8670

1105

209

Загрузка базы данных

2950

120

Расчетные задачи, формирование и вывод на внешние носители документов сложной формы и файлов

705

Формирование и вывод на внешние носители

2850

320

707

Графический вывод результатов

330

300

Итого:

22540

4217


Единицей измерения объема программы является строка исходного кода программы. Общий объем ПО (V0) определяется исходя из количества и объема функций, реализуемых программой, по каталогу функций программного обеспечения, и рассчитывается по формуле (5.1):

 , (5.1)

где Vi - объем отдельной функции программы; - общее число функций.

Объем строк исходного кода зависит от того, на каком языке программирования происходит разработка приложения. Программа «Обучающий блок по дисциплине «Базы данных и системы управления базами данных» реализована в среде разработки «C++ Builder» и нормативный объем строк исходного кода для выбранных категорий функций соответствует выбранной среде разработки. Таким образом, объем функций исходного кода (V0) равен:

Vo=110+430+900+220+1980+1750+2350+8670+2950+2850+330=22540строк

Определение уточненного объема функций исходного кода определяется по следующей формуле (5.2):

, (5.2)

где: Vyi - уточнённый объем отдельной функции программного продукта;- общее число функций.

Vv =150+435+240+325+420+252+550+1105+120+320+300 = 4217 строк

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

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

, (5.3)

где: Ki - коэффициент, соответствующий степени повышения сложности;

n - количество учитываемых характеристик.

Программа обеспечивает хранение, ведение и поиск данных в сложных структурах, поэтому коэффициент, соответствующий степени повышения сложности (Ki) равен 0,07.

Подставив соответствующее значение в формулу (5.3), получаем:

Программное средство является развитием имеющегося аналога и предназначено для использования в освоенной среде ОС, но на новом типе (новой конфигурации) ПК. Новизна ПО соответствует категории В, в следствии чего Kн = 0,63. При разработке приложения доля используемых стандартных модулей составила 50%, следовательно Kт = 0,65. Новизне ПО категории В соответствует следующее распределение трудоемкости по стадиям:

-  Kтз = 0,08 (техническое задание);

-       Kэп = 0,19 (эскизный проект);

-       Kтп = 0,28 (технический проект);

-       Kрп = 0,24 (рабочий проект).

Еще одним фактором, влияющим на трудоемкость разработки программного обеспечения, является коэффициент, учитывающий средства разработки ПО (Кур). Программа разработана при помощи среды разработки «C++ Builder», следовательно, Кур = 1,0.

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

Трудоемкость работ на стадиях техническое задание, эскизный проект и технический проект определяется по формуле:

, (5.4)

Трудоемкость работ на стадии рабочего проекта определяется по формуле:

, (5.5)

Общая трудоемкость разработки ПО (ТО) определяется суммированием нормативной (скорректированной) трудоемкости приложения по стадиям разработки:

, (5.6)

где: Туi - нормативная (скорректированная) трудоемкость разработки ПО на i-й стадии (чел./дн.); - количество стадий разработки.

Подставив соответствующие значения в формулы (5.4 - 5.6), получаем:yI = 213*(0,08+0,19+0,28)*1,07*0,63*1,0 = 79 чел./дн.yII = 213*0,24*1,07*0,63*1,0*0,65 = 22 чел./дн.

ТО = 79 + 22 = 101 чел./дн.

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

Таблица 5.2 - Результаты расчетов общей трудоемкости ПО

Показатели

Стадии разработки

Итого


ТЗ

ЭП

ТП

РП


Общий объем ПО (VО), количество стр.

-

-

-

-

22540

Общий уточненный объем ПО (Vy), количество строк

-

-

-

-

4217

Категория сложности ПО

-

-

-

-

2

Нормативная трудоемкость разработки ПО (Тн), чел./дн.

-

-

-

-

213

Коэффициент повышения сложности ПО (Кс)

1,07

1,07

1,07

1,07

-

Коэффициент, учитывающий новизну ПО (Кн)

0,63

0,63

0,63

0,63

-

Коэффициент, учитывающий степень использования стандартных модулей (Кт)

-

-

-

0,65

-

Коэффициент, учитывающий средства разработки ПО (Кур)

1,0

1,0

1,0

1,0

-

Коэффициенты удельных весов трудоемкости стадий разработки ПО (КТЗ, КЭП, КТП, КРП, КВН)

0,08

0,19

0,28

0,24

0,79

Распределение нормативной трудоемкости ПО по стадиям, чел./дн.

11

27

41

35

116

Общая трудоемкость разработки ПО (ТО), чел./дн.

79



22

101


5.2 Расчёт затрат на разработку программного продукта


В состав затрат на разработку программного продукта входят следующие статьи расходов:

-  затраты труда на создание программного продукта (затраты по основной, дополнительной заработной плате и соответствующие отчисления) (Зтр);

-  затраты на изготовление эталонного экземпляра (Зэт);

-  затраты на технологию (затраты на приобретение и освоение программных средств, используемых при разработке программного продукта; затраты на ПО, используемое как эталон) (Зтех);

-       затраты на машинное время (расходы на содержание и эксплуатацию технических средств разработки, эксплуатации и сопровождения) (Змв);

-       затраты на материалы (информационные носители) (Змат);

-       затраты на энергию, на использование каналов связи (для отдельных видов);

-       общепроизводственные расходы (затраты на управленческий персонал, на содержание помещений) (Зобщ_пр);

-       непроизводственные (коммерческие) расходы (затраты связанные с рекламой, поиском заказчиков, поставками конкретных экземпляров) (Знепр).

Однако, поскольку разработка программного обеспечения в рамках дипломной работы не требует ряда затрат, то они не будут учитываться в расчетах. Таким образом, суммарные затраты на разработку ПО (Зр) определяются по формуле:

, (5.7)

Расходы на оплату труда разработчика с отчислениями рассчитываются по формуле:

, (5.8)

где ЗПосн - основная заработная плата разработчика, руб.;

ЗПдоп - дополнительная заработная плата разработчиков, руб.;

ОТЧзп - сумма отчислений от заработной платы (социальные нужды, страхование от несчастных случаев), руб.

Основная заработная плата разработчика рассчитывается по следующей формуле:

, (5.9)

где Сср_час - средняя часовая тарифная ставка разработчика ПО;

ТО - общая трудоемкость разработки, чел./час.;

Кув - коэффициент, учитывающий доплаты стимулирующего характера (Кув = 1,5-2,0). Принимается Кув = 2.

Сср_час = Тариф.оклад/167,3 ч. (5.10)

Тариф.оклад = Тариф. ставка.* Тариф. коэф. (5.11)

Сср_час = 580 000/167,3 = 3466,8 руб.

Дополнительная заработная плата разработчика определятся по формуле:

, (5.12)

Отчисления от основной и дополнительной заработной платы (отчисления на социальные нужды и обязательное страхование) рассчитываются по формуле:

, (5.13)

где Hзп - процент отчислений на социальные нужды и обязательное страхование от суммы основной и дополнительной заработной платы. Принимается Hзп = 35 %.

Подставив соответствующие значения в формулы (5.8 - 5.13), получаем:

ЗПосн = 3466,8 * 101 * 2 = 700293,6 руб.

ЗПдоп = 700293,6 * 0,5 = 350146,8 руб.

ОТЧзп = (700293,6 + 350146,8) * 0,35 = 367 654,1 руб.

Зтр = 700293,6 + 350146,8 + 367654,1 = 1418 094,5 руб.

Затраты машинного времени определяются по формуле:

, (5.14)

где Сч - стоимость одного часа машинного времени (руб.).

В таблице 5.3 представлены данные, необходимые для расчёта стоимости машино-часа.

Таблица 5.3 - Показатели по предприятию

Показатель

Усл. обозн.

Ед. изм.

Значение, руб.

Балансовая стоимость компьютера

БК

Рублей

5050000

Балансовая стоимость принтера

БП

Рублей

800 000

Мощность, потребляемая компьютером

МК

КВт

0,35

Полезный фонд времени работы компьютера за период работы

FK

Час

802

Стоимость 1кВт/час

С

Рублей

770,6

Мощность, потребляемая принтером

МП

КВт

0,05

Полезный фонд времени работы принтера за год

Час

840

Площадь на 1 рабочее место *

Spm

М2

7,0

Стоимость 1м2 производственной площади

Спл

Рублей

200000

Норма амортизации для оборудования

Нао

%

20

Норма амортизации для зданий

Напл

%

5

Отчисления на текущий ремонт оборудования

PO

%

4,1


Определение стоимости потребляемой электроэнергии, руб.:

, (5.15)

где Квр - коэффициент, учитывающий использование по времени (Квр = 0,8);

Кс - коэффициент, учитывающий потери в сети (Кс = 1,05).

Сэл = (0,35*802+0,05*840)*770,6*0,8*1,05 = 208 885 руб.

Определение суммы амортизационных отчислений, руб.:

, (5.16)

Сао = ((5050000+800000)*(20/100))+(7*200000*(5/100)) = 1240000 руб.

Определяем затраты на текущий ремонт оборудования, руб.:

, (5.17)

Зр = (5050000 + 800 000)*(4,1/100) = 239 850 руб.

Затраты на один машино-час, руб.:

, (5.18)

СМчэл) = 208 885 /802 = 260,5 руб.

СМчао) = 1240000/802 = 1546 руб.

СМчр) = 239 850/802 = 299 руб.

Результаты данных расчетов представлены в таблице 5.4.

Таблица 5.4 - Расчет затрат на 1 машино-час

Показатель

Усл. обозн.

Значение, рублей.



На год (ЗМг)

На 1 маш./ч. (СМч)

Стоимость потребляемой энергии

Сэл

208 885

260,5

Сумма ежегодных амортизационных отчислений.

Сао

1240000

1546

Затраты на текущий ремонт оборудования.

Зр

239 850

299

Итого:

1688735

2105,5


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

Затраты на машинное время включают:

-  время, требуемое на составление программы по готовой блок-схеме;

-       время на отладку программы на ЭВМ; время на редактирование, распечатку и оформление документации.

Для расчета машинного времени ЭВМ, необходимого для разработки и отладки проекта следует использовать формулу:

, (5.19)

где tI - срок реализации первой группы стадий разработки ПО, включающей техническое задание, эскизный проект и технический проект;II - срок реализации второй стадии «Рабочий проект»;см - продолжительность рабочей смены (ч). Принимается Fсм = 8 ч;

Ксм - количество рабочих смен. Принимается Ксм = 1.

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

В итоге, получаем, что машинное время ЭВМ, необходимое для разработки и отладки проекта, составляет:

tЭВМ = (79 ´ 0,45 + 22) ´ 8 ´ 1 = 460,4 ч.

Затраты машинного времени на разработку ПО составили:

, (5.20)

ЗМВ = 2105,5 ´ 1 ´ 460,4 = 969 372 руб.

Затраты на изготовление эталонного экземпляра (Зэт) определяют по формуле:

, (5.21)

где Кэт - коэффициент, учитывающий размер затрат на изготовление эталонного экземпляра. Принимается Кэт = 0,05.

Подставив соответствующие значения в формулу (5.21), получаем:

Зэт = (1418 094 + 0 + 969 372) * 0,05 = 119 373 руб.

Итого получаем суммарные затраты на разработку ПО:

ЗР = 1418094 + 0 + 969372 +119373 = 2506 839 руб.

Накладные расходы составляют 50% от суммарных затрат на разработку и составляют 1253 419,5 руб. [17].

В таблице 5.5 приведен расчет затрат на материалы, необходимые для реализации программного средства.

Таблица 5.5 - Расчет затрат на материалы

Наименование

Техническая характеристика

Кол-во

Отпускная цена, в рублях

Сумма, рублей

Красящая лента (заправка картриджа)

CANNON 520

1

60000

60000

Бумага

А4(80 Мг)

500

55000

55000

Диск

CD-R

1

5200

5500

Папка

Диплом

1

40000

40000

Итого:

160500


5.3 Формирование цены при создании программного обеспечения


Фонд оплаты труда (ФОТ) составляет сумму основной, дополнительной заработных плат и отчислений программиста:

,6 + 350146,8 + 367654,1 = 1418094,5 руб.

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

372 + 1418 094,5 + 119 373 = 2506839,5 руб.

Полная себестоимость считается суммированием следующих показателей: программная себестоимость, затраты на материалы и накладные расходы [18]:

,5 + 160 500 + 1253 419,5 = 3920 759 руб.

Итоговые результаты расчетов приведены в таблице 5.6.

Таблица 5.6 - Итоговые результаты расчетов

Статья затрат

Сумма

Основная заработная плата разработчика, руб

700293,6

Дополнительная заработная плата разработчика, руб.

350146,8

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

367 654,1

Затраты на оплату труда разработчика, руб.

1418 094,5

Стоимость машино-часа, руб.

2105,5

Машинное время ЭВМ, ч.

460,4

Затраты машинного времени, руб.

969 372

Затраты на изготовление эталонного экземпляра, руб.

119 373

Накладные расходы

1253419,5

Затраты на технологию, руб.

0

Затраты на материалы

160500

Программная себестоимость

2506839,5

Полная себестоимость

3920 759


В ходе проведения расчетов были выяснены основные показатели, такие как полная себестоимость, составляющая 3920 759 рублей и общая трудоемкость разработки - 101 человеко-день. Анализируя данные показатели, очевидно, что итоговая полная себестоимость является оптимальной.

6. Сведения об охране труда. защита от ионизирующих излучений в производственной среде оператора ЭВМ


6.1 Общие сведения


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

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

Ионизирующее излучение бывает электромагнитным (фотонным) и корпускулярным.

К электромагнитному излучению относятся гамма-излучение и рентгеновское излучение.

Корпускулярное излучение представляет собой поток частиц с массой покоя отличной от нуля (альфа- и бета- частицы, протоны, нейтроны и др.).

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

Радиационная опасность зависит от вида излучения (коэффициент качества излучения). Тяжелые заряженные частицы и нейтроны более опасны, чем рентгеновское и гамма-излучение.

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

Известно, что 2/3 общего состава ткани человека составляют вода и углерод. Вода под воздействием излучения расщепляется на водород Н и гидроксильную группу ОН, которые либо непосредственно, либо через цепь вторичных превращений образуют продукты с высокой химической активностью: гидратный окисел НО2 и перекись водорода Н2О2. Эти соединения взаимодействуют с молекулами органического вещества ткани, окисляя и разрушая его.

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

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

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

6.2 Система защиты от ионизирующего излучения

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

ГОСТ 12.4.120 "Система стандартов безопасности труда. Средства коллективной защиты от ионизирующих излучений. Общие технические требования"дана классификация указанных средств в зависимости от их назначения, способы защиты, конструктивному исполнению и другим признакам.

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

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

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

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

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

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

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

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

Результаты всех видов радиационного контроля должны регистрироваться и храниться в течение 30 лет [19].

Заключение


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

-  динамическая автоматизация процесса обучения;

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

-       система тестирования, где будут комплексно проверяться уровень знаний пользователя по данной дисциплине;

-       административный режим, где будет происходить управление ресурсами приложения.

Спроектированная программа имеет ряд преимуществ перед своими аналогами, наиболее существенными среди них являются:

-  красочные и создающие уникальный дизайн, элементы интерфейса;

-       организация прохождения тестов по запросам, где процесс тестирования проходит не в стандартной форме, а с использованием различных графических элементов;

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

-       реализация пользовательского и административного режимов;

-       динамичная организация процесса обучения, красочное и удобное оформление лекций.

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

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

Перечень условных обозначений и сокращений


АИС - Автоматизированная Информационная Система.

БД - База Данных.

ОП - Обучающая Программа.

ПС - Программное средство.

СУБД - Система Управления Базами Данных.

ТБД - Таблица Базы Данных.

ТСО - Технические Средства Обучения.

ЭВМ - Электронная Вычислительная Машина.

ЭВП - Электронный Видеопроектор.(ActiveX Data Objects) - интерфейс системного уровня с дополнительным прикладным уровнем.(Borland Database Engine) - 32-битный движок баз данных под Microsoft Windows для доступа к базам данных из Borland Delphi, C++ Builder, IntraBuilder, Paradox for Windows и Visual dBASE for Windows.

DML (Data Manipulation Language) - язык управления (манипулирования) данными.

DQL (Doctrine Query Language) - язык построения запросов (выборка данных).

GUI (Graphical User Interface) - графический интерфейс пользователя. Разновидность интерфейса, где элементы, представленные пользователю на

дисплее, исполнены в виде графических изображений.(Microsoft Foundation Class) - библиотека на языке C++, разработанная Microsoft и призванная облегчить разработку GUI-приложений.(Object Windows Library) - библиотека классов, разработанная фирмой Borland для создания оконных приложений на языках С и Pascal.(Structured Query Language) - язык структурированных запросов. Универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.(Visual Component Library) - объектно-ориентированная библиотека для разработки программного обеспечения, разработанная компанией Borland.

Список использованных источников


1.    Семушина Л.Г. Содержание и технологии обучения в средних специальных учебных заведениях : Учеб. пособие для преп. учреждений сред. проф. образования. / Л.Г. Семушина, Н.Г. Ярошенко. - М.; Мастерство, 2001. - 272 с

2.      Минич О.А. Информационные технологии в образовании. / О.А. Минич. - Минск: Красико-Принт, 2008. - 176с. - (Педагогическая мастерская).

.        Технологии оценки качества обучения. / В.А. Красильникова // Приложение № 10 к журналу «Профессиональное образование» - Москва, 2003.

.        Институт международных программ российского университета дружбы народов [Электронный ресурс] : Технологии создания электронных обучающих средств - 2011.

.        Конструирование программ и языки программирования : курс лекций / С.Я. Гоначрова-Грабовская [и др.] ; под ред. С.Я. Гоначаровой-Грабовской. - Минск : БГУ, 2007.

.        Черемных С.В. Моделирование и анализ систем. IDEF-технологии: практикум / С.В. Черемных, И.О. Семенов, В.С. Ручкин. - М.: Финансы и статистика, 2005. - 192 с.

.        Маклаков,С.В. BPwin и ERwin. CASE - средства разработки информационных систем. / С.В. Маклаков - М.: ДИАЛОГ - МИФИ, 2007.

.        Марков А.С. Базы данных. Введение в теорию и методологию: Учебник. / А.С. Марков, К. Ю. Лисовский. - М.: Финансы и статистика, 2004. - 512 с.

.        Горелов А. Эффективная работа с СУБД . / А. Горелов, Р. Ахаян, С. Макашарипов. - СПб.: Питер, 2000. - 704 с.

.        Малыхина, М.П. Базы данных: основы, проектирование, использование. / М.П. Малыхина. - СПб.: БХВ - Петербург, 2004. - 512 с.

11.  Основы алгоритмизации и программирования в среде C++Builder : учеб.-метод. Пособие / сост. В.К. Абрамович [и др.] ; под общ. ред. Р.П. Пшекова. - Минск : БГУ, 2006.

12.    Архангельский А.Я. Программирование в Borland C++Builder. / А.Я. Архангельский - М.: «издательство БИНОМ», 2003. - 1152 с.

.        Глушков С.В. «Программирование в среде Borland C++Builder 6». / С.В. Глушков, В.Н. Зорянский. - М.: ООО Издательство «Премьера», 2003.

.        Прата С. Язык программирования С++. Лекции и упражнения. Учебник: Пер. с англ. / С.Прата. - СПб.: ООО «ДиаСофтЮП», 2003. - 1104 с.

.        Пахомов Б.И. С/С++ и Borland C++Builder 6 для начинающих. / Б.И. Пахомов. - СПб.: Издательство «БХВ-Петербург», 2006. - 640 с.

.        «Вычислительные системы, сети и телекоммуникации» : Учебник / А.П. Пятибаров [и др.] ; под ред. проф. А.П. Пятибратова. - М.: Финансы и статистика, 2004 г.

.        Методические рекомендациями по планированию, учету и калькулированию себестоимости научно-технической продукции. - Утв. Приказом председателя Государственного комитета по науке и технологиям Республики Беларусь № 156 от 31.08.1998, рег. № 8/1117 от 11.10.1999.

.        Крум Э.В. «Экономика предприятия» учебное пособие. / Э. В. Крум, Т.В. Елецких. - 2-е изд., Минск: Выш.шк., 2010-304 с.

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

 

Приложение А


Декомпозиция общей функциональной модели

Рисунок А.1 - Декомпозиция общей функциональной модели

Приложение Б


Диаграмма потоков данных

Рисунок Б.1 - Диаграмма потоков данных

Приложение В


Схема базы данных

Рисунок В.1 - Схема базы данных

Приложение Г


Текст программы «Обучающий блок по дисциплине «Базы данных и системы управления базами данных»

Текст модуля Unit1.cpp

#include <vcl.h>

#pragma hdrstop

//форма регистрации и авторизации

#include "Unit1.h"

#include <Registry.hpp> //подключение библиотеки необходимой для работы программы с реестром

#include "Unit2.h"

#include "Unit3.h"

#include "Unit13.h"

#pragma package(smart_init)

#pragma link "ShockwaveFlashObjects_OCX" // подключениt библиотеки ShockwaveFlash

#pragma resource "*.dfm"*Form1; *Reg1=new TRegistry; // переменная для выполнения действий над ресстром

TRegistry *Reg2=new TRegistry;*Reg3=new TRegistry; // регистрацияi;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{->OpenKey("BlockDB\\Users",0); //Параметр «Users» хранит количество пользователей(Reg1->ValueExists("Number")) //Проверяем, есть ли такой параметр

{->RootKey=HKEY_CURRENT_USER;->OpenKeyReadOnly("BlockDB\\Users");=Reg2->ReadInteger("Number");2->CloseKey();

delete Reg2;

} // если такой параметр есть, то происходит считывание его значения

Else //если данный параметр отсутствует, то происходит его создание

{

Reg2->RootKey=HKEY_CURRENT_USER;

Reg2->OpenKey("BlockDB\\Users",true);

Reg2->WriteInteger("Number",i);

i=Reg2->ReadInteger("Number");

Reg2->CloseKey();

delete Reg2;

}->CloseKey();Reg1;

}__fastcall TForm1::Timer1Timer(TObject *Sender) //Действия, выполняемые через определенный интервал времени

{->GotoFrame(250); // Перейти на 250 кадр анимации->Play(); //воспроизведение Flash-анимации

}__fastcall TForm1::Button1Click(TObject *Sender)

{->Enabled = false;->Movie = ExtractFilePath(Application->ExeName) + "Flash/Reg_v3.swf"; //загрузка ролика->Play();->Enabled = true;->Visible = false;->Visible = false;->Enabled = true;->Visible = false;->Visible = false;->Visible = true;

}__fastcall TForm1::Timer2Timer(TObject *Sender)

{->GotoFrame(75); // Перейти на 250 кадр анимации->Play();

}__fastcall TForm1::Timer3Timer(TObject *Sender)

{->Visible = true;->Visible = true;->Enabled = false;

}__fastcall TForm1::Timer4Timer(TObject *Sender)

{->Visible = true;->Visible = true;->Enabled = false;

}__fastcall TForm1::Timer5Timer(TObject *Sender)

{->Visible = true;->Enabled = false;

}__fastcall TForm1::Edit1Change(TObject *Sender) //Активация кнопки в случае, если значения введены

{(Edit1->Text != "" && Edit2->Text != "")->Visible = true;->Visible = false;

}__fastcall TForm1::Edit2Change(TObject *Sender)

{(Edit1->Text != "" && Edit2->Text != "")->Visible = true;->Visible = false;

}__fastcall TForm1::Button2Click(TObject *Sender) //действия, выполняемые при авторизации

{username = (Edit1->Text);pass = (Edit2->Text);k,m;(Edit1->Text=="" || Edit2->Text=="") (0,"Нельзя оставлять поля пустыми", "Ошибка", MB_OK);

else

{(k=0;k!=i+1;k++)

{*Reg4=new TRegistry;->RootKey=HKEY_CURRENT_USER;->OpenKeyReadOnly("BlockDB\\Users");str;=Reg4->ReadString("User_"+IntToStr(k));

if (username == str)

{

AnsiString passr, status;

passr=Reg4->ReadString("Password_"+IntToStr(k));=Reg4->ReadString("Status_"+IntToStr(k));

Reg4->CloseKey();

delete Reg4;(passr == pass)

{

MessageBox(0,"Успешная авторизация!","Успех!",MB_OK);

Edit1->Text = "";

Edit2->Text = "";(status == "Admin")->Button4->Visible = true;->Enabled = false;->Enabled = false;->Enabled = false;->Enabled = false;->Enabled = false;->Stop();->Label1->Caption = (username);->Hide();->Show();

break;

}

{

MessageBox(0,"Неверный пароль!","Ошибка",MB_OK);

Edit2->Text = "";

}

}

else if(k==i)

{

MessageBox(0,"Неверное имя пользователя!","Ошибка",MB_OK);

Edit1->Text = "";

Edit2->Text = "";

}

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender) //действия, выполняемые при авторизации

{->ADOQuery1 -> Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM Пользователи");->ADOQuery1 -> Active = true;user = (Edit3->Text);password = (Edit4->Text);l=0;kolvo=0;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(user == (Form3->ADOQuery1->Fields->FieldByName("Логин")->Value)) { (0,"Пользователь с таким логином уже зарегистрирован. Введите другое имя.", "Ошибка", MB_OK);

Edit3->Text = "";

Edit4->Text = "";

l=1;

}

Form3->ADOQuery1->Next();

}++;kolvous = (kolvo);->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("INSERT INTO Пользователи (IDПользователя, Логин)");->ADOQuery1->SQL->Add(" VALUES ("+ kolvous +", '"+ user +"')");->ADOQuery1->ExecSQL();=i+1;->RootKey=HKEY_CURRENT_USER;->OpenKey("BlockDB\\Users",true);->WriteInteger("Number",i);->WriteString(("User_"+IntToStr(i)),(user));->WriteString(("Password_"+IntToStr(i)),(password));->WriteString(("Status_"+IntToStr(i)),"User");3->CloseKey();

MessageBox(0,"Ваша регистрация произошла успешно.","Успешная регистрация",MB_OK);

Edit3->Text = "";->Text = "";->Visible = false;->Visible = false;->Enabled = false;->Movie = ExtractFilePath(Application->ExeName) + "Flash/Autoriz_v6.swf";->Play();->Enabled = true;->Enabled = true;->Enabled = true;->Visible = false;

}

}__fastcall TForm1::Edit3Change(TObject *Sender)

{(Edit3->Text != "" && Edit4->Text != "")->Visible = true;->Visible = false;

}__fastcall TForm1::Edit4Change(TObject *Sender)

{(Edit3->Text != "" && Edit4->Text != "")->Visible = true;->Visible = false;

}__fastcall TForm1::Button4Click(TObject *Sender)

{->Enabled = false;->Visible = false;->Visible = false;->Enabled = false;->Movie = ExtractFilePath(Application->ExeName) + "Flash/Autoriz_v6.swf";->Play();->Enabled = true;->Enabled = true;->Enabled = true;->Visible = false;

}__fastcall TForm1::FormCreate(TObject *Sender)

{->Movie = ExtractFilePath(Application->ExeName) + "Flash/Autoriz_v6.swf";->Play();->Enabled = true;

}__fastcall TForm1::Timer6Timer(TObject *Sender)

{->Position = ProgressBar1->Position + 15;(ProgressBar1->Position == 100)

{->Visible = false;->Enabled = false;

}

}

Текст модуля Unit2.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

#include "Unit1.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit8.h"

#include "Unit10.h"

#include "Unit14.h"

#pragma package(smart_init)

#pragma link "ShockwaveFlashObjects_OCX"

#pragma resource "*.dfm"*Form2;

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm2::Button5Click(TObject *Sender)

{>Terminate();

}__fastcall TForm2::Button1Click(TObject *Sender)

{->Hide();->Show();

}__fastcall TForm2::Button2Click(TObject *Sender)

{->Hide();->Show();

}__fastcall TForm2::Button4Click(TObject *Sender)

{->Hide();->Show();

}__fastcall TForm2::Button3Click(TObject *Sender)

{->Hide();->Show();

}__fastcall TForm2::FormShow(TObject *Sender)

{->Movie = ExtractFilePath(Application->ExeName) + "Flash/MainTitle.swf";->Play();dayweek;CurrentDate = Date();Day = DayOfWeek(Date());(Day == 1) dayweek = "Воскресенье";(Day == 2) dayweek = "Понедельник";(Day == 3) dayweek = "Вторник";(Day == 4) dayweek = "Среда";(Day == 5) dayweek = "Четверг";(Day == 6) dayweek = "Пятница";(Day == 7) dayweek = "Суббота";->Caption = ("Сегодня "+dayweek+", \n"+CurrentDate);

}__fastcall TForm2::Timer1Timer(TObject *Sender)

{->Caption=Time().FormatString("hh:mm:ss");->Interval=1000;

}

Текст модуля Unit3.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit3.h"

#include "Unit4.h"

#include "Unit7.h"

#include "Unit9.h"

#include "Unit1.h"

#include "Unit10.h"

#include "Unit12.h"

#include "Unit13.h"

#include "Unit14.h"

#include "Unit15.h"

#include "Unit16.h"

#pragma package(smart_init)

#pragma link "AcroPDFLib_OCX"

#pragma link "SHDocVw_OCX"

#pragma resource "*.dfm"*Form3;

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm3::TreeView1Click(TObject *Sender)

{text = TreeView1->Selected->Text;->Caption = (text);(TreeView1->Selected->Level==0 || TreeView1->Selected->Level==1){-> Active = false;->SQL->Clear();->SQL->Add("SELECT Главы.НаименованиеГлавы, Темы.НаименованиеТемы, Главы.ИмяФайла, Темы.ИмяФайла FROM Главы, Темы");-> Active = true;->First();(!ADOQuery1->Eof) {->Fields[0];(ADOQuery1->Fields->FieldByName("НаименованиеГлавы")->Value == (Label1->Caption)) {->Caption = (DirectoryListBox1->Directory+"\\Lessons\\"+ADOQuery1->Fields->FieldByName("Главы.ИмяФайла")->Value);->Navigate(StringToOleStr(Label2->Caption));

}if (ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value == (Label1->Caption)) {->Caption = (DirectoryListBox1->Directory+"\\Lessons\\"+ADOQuery1->Fields->FieldByName("Темы.ИмяФайла")->Value);->Navigate(StringToOleStr(Label2->Caption));

}->Next();

}

}(TreeView1->Selected->Level==2 || TreeView1->Selected->Level==3){-> Active = false;->SQL->Clear();->SQL->Add("SELECT Подтемы.НаименованиеПодтемы, Пункт.НаименованиеПункта, Подтемы.ИмяФайла, Пункт.ИмяФайла FROM Подтемы, Пункт");-> Active = true;->First();(!ADOQuery1->Eof) {->Fields[0];(ADOQuery1->Fields->FieldByName("НаименованиеПодтемы")->Value == (Label1->Caption)) {->Caption = (DirectoryListBox1->Directory+"\\Lessons\\"+ADOQuery1->Fields->FieldByName("Подтемы.ИмяФайла")->Value);->Navigate(StringToOleStr(Label2->Caption));

}if (ADOQuery1->Fields->FieldByName("НаименованиеПункта")->Value == (Label1->Caption)) {->Caption = (DirectoryListBox1->Directory+"\\Lessons\\"+ADOQuery1->Fields->FieldByName("Пункт.ИмяФайла")->Value);->Navigate(StringToOleStr(Label2->Caption));

}->Next();

}

}

}__fastcall TForm3::FormShow(TObject *Sender)

{

// построение 1 уровня-> Active = false;->SQL->Clear();->SQL->Add("SELECT * FROM Главы");-> Active = true;->First();(!ADOQuery1->Eof) {->Items->Add(NULL,ADOQuery1->Fields->FieldByName("НаименованиеГлавы")->Value);->Next();}

// построение 2 уровняn=TreeView1->Items->Count;i=0; n--;(i<=n){(TreeView1->Items->Item[i]->Level==0){-> Active = false;->SQL->Clear();->SQL->Add("SELECT НаименованиеТемы FROM Темы,Главы WHERE НаименованиеГлавы='"+TreeView1->Items->Item[i]->Text+"' and главы.IDГлавы=Темы.IDГлавы");-> Active = true;->First();(!ADOQuery1->Eof) {*Node1 = TreeView1->Items->Item[i];->Items->AddChild(Node1,ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value);++;->Next();}}++;}

//построение 3 уровня=TreeView1->Items->Count;=0; n--;(i<=n){(TreeView1->Items->Item[i]->Level==1){-> Active = false;->SQL->Clear();->SQL->Add("SELECT НаименованиеПодтемы FROM Темы,Подтемы WHERE НаименованиеТемы='"+TreeView1->Items->Item[i]->Text+"' and Подтемы.IDТемы=Темы.IDТемы");-> Active = true;->First();(!ADOQuery1->Eof) {*Node1 = TreeView1->Items->Item[i];->Items->AddChild(Node1,ADOQuery1->Fields->FieldByName("НаименованиеПодтемы")->Value);++;->Next();}}++;}

//построение 4 уровня=TreeView1->Items->Count;=0; n--;(i<=n){(TreeView1->Items->Item[i]->Level==2){-> Active = false;->SQL->Clear();->SQL->Add("SELECT НаименованиеПункта FROM Пункт,Подтемы WHERE НаименованиеПодтемы='"+TreeView1->Items->Item[i]->Text+"' and Пункт.IDПодтемы=Подтемы.IDПодтемы");-> Active = true;->First();(!ADOQuery1->Eof) {*Node1 = TreeView1->Items->Item[i];->Items->AddChild(Node1,ADOQuery1->Fields->FieldByName("НаименованиеПункта")->Value);++;->Next();}}++;}

}

//---------------------------------------------------------------------------__fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action)

{>Terminate();

}

Текст модуля Unit4.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit4.h"

#include "Unit3.h"

#include "Unit6.h"

#include "Unit7.h"

#include "Unit2.h"

#include "Unit11.h"

#include "Unit14.h"

#pragma package(smart_init)

#pragma link "ShockwaveFlashObjects_OCX"

#pragma resource "*.dfm"*Form4;viX0,viY0;fMove;tr = "True";fls = "False";block1=0, block2=0, block3=0;blk1, blk2, blk3;sel=0, ins=0;result=0;verno=0;neverno=0;svodka=0;__fastcall TForm4::TForm4(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm4::Image1MouseDown(TObject *Sender,Button, TShiftState Shift, int X, int Y)

{(Button != mbLeft) return;= X;= Y;= true;

((TControl *)Sender)->BringToFront();

}__fastcall TForm4::Image1MouseMove(TObject *Sender, TShiftState Shift,X, int Y)

{(fMove)

{

((TImage *)Sender)->(

((TImage *)Sender)->Left + X - viX0,

((TImage *)Sender)->Top + Y - viY0,

((TImage *)Sender)->Width,

((TImage *)Sender)->Height);

}(((TImage *) Sender)->Top < 255)

((TImage *) Sender)->Top = 255;(((TImage *) Sender)->Left <1)

((TImage *) Sender)->Left = 0;(((TImage *) Sender)->Top > 530)

((TImage *) Sender)->Top = 530;(((TImage *) Sender)->Left >1196)

((TImage *) Sender)->Left = 1196;

}__fastcall TForm4::Image1MouseUp(TObject *Sender, TMouseButton Button,Shift, int X, int Y)

{= false;(((TImage *)Sender)->Top > (Bevel1->Top) && ((TImage *)Sender)->Top < (Bevel1->Top)+20 && ((TImage *)Sender)->Left > (Bevel1->Left) && ((TImage *)Sender)->Left < (Bevel1->Left)+20){

((TImage *)Sender)->Left = Bevel1->Left;

((TImage *)Sender)->Top = Bevel1->Top;

}(((TImage *)Sender)->Top > (Bevel2->Top) && ((TImage *)Sender)->Top < (Bevel2->Top)+20 && ((TImage *)Sender)->Left > (Bevel2->Left) && ((TImage *)Sender)->Left < (Bevel2->Left)+20){

((TImage *)Sender)->Left = Bevel2->Left;

((TImage *)Sender)->Top = Bevel2->Top;

}(((TImage *)Sender)->Top > (Bevel3->Top) && ((TImage *)Sender)->Top < (Bevel3->Top)+20 && ((TImage *)Sender)->Left > (Bevel3->Left) && ((TImage *)Sender)->Left < (Bevel3->Left)+20){

((TImage *)Sender)->Left = Bevel3->Left;

((TImage *)Sender)->Top = Bevel3->Top;

}(((TImage *)Sender)->Left == Bevel1->Left) block1 = ((TImage *)Sender)->Tag;(((TImage *)Sender)->Left == Bevel2->Left) block2 = ((TImage *)Sender)->Tag;(((TImage *)Sender)->Left == Bevel3->Left) block3 = ((TImage *)Sender)->Tag;

}

//---------------------------------------------------------------------------__fastcall TForm4::FormClose(TObject *Sender, TCloseAction &Action)

{>Terminate();

}

//---------------------------------------------------------------------------__fastcall TForm4::FormCreate(TObject *Sender)

{

/* BorderStyle = bsNone;= 0;= 0;=Screen->Width;=Screen->Height; */=true; // для того, чтобы убрать мерцание Image при движении

}

//---------------------------------------------------------------------------__fastcall TForm4::Button5Click(TObject *Sender)

{=svodka+1;->Caption = "";=""; blk2=""; blk3="";(Image1->Left != Bevel1->Left && Image4->Left != Bevel1->Left && Image3->Left != Bevel1->Left && Image2->Left != Bevel1->Left)= 0;(Image6->Left != Bevel2->Left && Image9->Left != Bevel2->Left && Image10->Left != Bevel2->Left)= 0;(Image5->Left != Bevel3->Left && Image11->Left != Bevel3->Left)= 0;(block1 == 1) blk1 = "INSERT";(block1 == 2) blk1 = "DELETE";(block1 == 3) blk1 = "UPDATE";(block1 == 4) blk1 = "SELECT";(block2 == 5) blk2 = "INTO";(block2 == 6) blk2 = "SET";(block2 == 7) blk2 = "FROM";(block3 == 8) blk3 = "VALUES";(block3 == 9) blk3 = "WHERE";(ins == 1)->Caption = (blk1+" "+blk2+" "+Edit1->Text+" "+blk3+" "+Edit2->Text);(sel == 1) {->Caption = (blk1+" "+Edit1->Text+" "+blk2+" "+Edit2->Text);(Bevel3->Visible == true)->Caption = (blk1+" "+Edit1->Text+" "+blk2+" "+Edit2->Text+" "+blk3+" "+Edit3->Text);

}->Top = 496;->Left = 20;->Top = 496;->Left = 164;->Top = 496;->Left = 308;->Top = 496;->Left = 452;->Top = 496;->Left = 596;->Top = 496;->Left = 740;->Top = 496;->Left = 884;->Top = 496;->Left = 1028;->Top = 496;->Left = 1172;str = (Label4->Caption);(Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value == str) {= result+1;= verno+1;(svodka == 1) {->Label21->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image1->Visible = true;

}(svodka == 2) {->Label22->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image2->Visible = true;

}(svodka == 3) {->Label23->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image3->Visible = true;

}(svodka == 4) {->Label24->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image4->Visible = true;

}(svodka == 5) {->Label25->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image5->Visible = true;

}(svodka == 6) {->Label26->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image6->Visible = true;

}(svodka == 7) {->Label27->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image7->Visible = true;

}(svodka == 8) {->Label28->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image8->Visible = true;

}(svodka == 9) {->Label29->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image9->Visible = true;

}(svodka == 10) {->Label30->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image10->Visible = true;

}

}{= StringReplace(str,",",", ",TReplaceFlags()<< rfReplaceAll); // подставляет пробел после запятой= StringReplace(str,"("," (",TReplaceFlags()<< rfReplaceAll);= StringReplace(str,"S (","S (",TReplaceFlags()<< rfReplaceAll);->Caption = str;(Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value == str) {= result+1;= verno+1;(svodka == 1) {->Label21->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image1->Visible = true;

}(svodka == 2) {->Label22->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image2->Visible = true;

}(svodka == 3) {->Label23->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image3->Visible = true;

}(svodka == 4) {->Label24->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image4->Visible = true;

}(svodka == 5) {->Label25->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image5->Visible = true;

}(svodka == 6) {->Label26->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image6->Visible = true;

}(svodka == 7) {->Label27->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image7->Visible = true;

}(svodka == 8) {->Label28->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image8->Visible = true;

}(svodka == 9) {->Label29->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image9->Visible = true;

}(svodka == 10) {->Label30->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Image10->Visible = true;

}

}{= neverno+1;(svodka == 1) Form11->Label21->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 2) Form11->Label22->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 3) Form11->Label23->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 4) Form11->Label24->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 5) Form11->Label25->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 6) Form11->Label26->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 7) Form11->Label27->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 8) Form11->Label28->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 9) Form11->Label29->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;(svodka == 10) Form11->Label30->Caption = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;

}

}= 0;=0;->ADOQuery1->Next();title;= Form3->ADOQuery1->Fields->FieldByName("Вопрос")->Value;cols = title.Length();(cols > 70) {(int k=93;k!=70;k--)

{(title[k] == ' ') {.Insert ("\n",k+1);;

}

}->Caption = (title);

}->Caption = Form3->ADOQuery1->Fields->FieldByName("Вопрос")->Value;

->Caption = Form3->ADOQuery1->Fields->FieldByName("ГлавноеУсловие")->Value;(!(TBlobField*)Form3->ADOQuery1->FieldByName("Приложение")->IsNull)

{(!Image13->Visible)->Visible=true;* strm= new TMemoryStream;*ptJpg=new TJPEGImage;

((TGraphicField*) Form3->ADOQuery1->FieldByName("Приложение"))->SaveToStream(strm);>Seek(0,0);(*(Word*)strm->Memory==0xD8FF)->Picture->Graphic=ptJpg;->Picture->Graphic->LoadFromStream(strm);

// Image13->Canvas->Rectangle(0,0,Image13->Width,Image13->Height);strm;ptJpg;

}->Visible = false; ->Visible = false;->Visible = false;->Visible = false;(Form3->ADOQuery1->Fields->FieldByName("SELECT")->Value == tr ||->ADOQuery1->Fields->FieldByName("DELETE")->Value == tr) {= 1;->Bevel1->Visible = true;->Bevel1->Left = 15;->Bevel1->Top = 302;->Bevel2->Visible = true;->Edit1->Visible = true;->Edit2->Visible = true;(Form3->ADOQuery1->Fields->FieldByName("WHERE")->Value == tr) {->Bevel3->Visible = true;->Edit3->Visible = true;->Edit1->Left = 168;->Edit1->Top = 311;->Edit1->Width = 301;->Bevel2->Left = 483;->Bevel2->Top = 302;->Edit2->Left = 637;->Edit2->Top = 311;->Edit2->Width = 164;->Bevel3->Left = 814;->Bevel3->Top = 302;->Edit3->Left = 969;->Edit3->Top = 311;->Edit3->Width = 353;

}{->Edit3->Visible = false;->Bevel3->Visible = false;->Edit1->Left = 168;->Edit1->Top = 311;->Edit1->Width = 641;->Bevel2->Left = 823;->Bevel2->Top = 302;->Edit2->Left = 979;->Edit2->Top = 311;->Edit2->Width = 342;

}

}(Form3->ADOQuery1->Fields->FieldByName("INSERT")->Value == tr) {= 1;->Bevel1->Visible = true;->Bevel1->Left = 15;->Bevel1->Top = 302;->Bevel2->Visible = true;->Bevel2->Left = 167;->Bevel2->Top = 302;->Bevel3->Visible = true;->Bevel3->Left = 662;->Bevel3->Top = 302;->Edit1->Visible = true;->Edit1->Left = 320;->Edit1->Top = 311;->Edit1->Width = 329;->Edit2->Visible = true;->Edit2->Left = 815;->Edit2->Top = 311;->Edit2->Width = 506;

}(Form3->ADOQuery1->Fields->FieldByName("UPDATE")->Value == tr) {->Bevel1->Visible = true;->Bevel1->Left = 15;->Bevel1->Top = 302;->Bevel2->Visible = true;->Edit1->Visible = true;->Edit2->Visible = true;(Form3->ADOQuery1->Fields->FieldByName("WHERE")->Value == tr) {->Bevel3->Visible = true;->Edit3->Visible = true;->Edit1->Left = 168;->Edit1->Top = 311;->Edit1->Width = 161;->Bevel2->Left = 344;->Bevel2->Top = 302;->Edit2->Left = 500;->Edit2->Top = 311;->Edit2->Width = 349;->Bevel3->Left = 863;->Bevel3->Top = 302;->Edit3->Left = 1017;->Edit3->Top = 311;->Edit3->Width = 304;

}{->Edit3->Visible = false;->Bevel3->Visible = false;->Edit1->Left = 169;->Edit1->Top = 311;->Edit1->Width = 344;->Bevel2->Left = 528;->Bevel2->Top = 302;->Edit2->Left = 683;->Edit2->Top = 311;->Edit2->Width = 639;

}

}->Text = "";->Text = "";->Text = "";(Form3->ADOQuery1->Eof) {->Enabled = false;usernmb;res = (result);ntest = Form3->ADOQuery1->Fields->FieldByName("IDЗапросТеста")->Value;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM Пользователи");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("Логин")->Value == Form2->Label1->Caption)= (Form3->ADOQuery1->Fields->FieldByName("IDПользователя")->Value);->ADOQuery1->Next();

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("INSERT INTO СтатистикаЗапросТеста (IDПользователя, IDЗапросТеста, Оценка)");->ADOQuery1->SQL->Add(" VALUES ("+ usernmb +", "+ ntest +", "+ res +")");->ADOQuery1->ExecSQL();->Label16->Caption = (Form2->Label1->Caption);->Label17->Caption = (verno);->Label18->Caption = (neverno);(verno >= 9)->Label19->Caption = "Отлично";(verno == 7 || verno == 8)->Label19->Caption = "Хорошо";(verno == 5 || verno == 6)->Label19->Caption = "Средне";(verno == 4)->Label19->Caption = "Ниже среднего";(verno <= 3)->Label19->Caption = "Плохо";->Label20->Caption = (result);->Show();

}

}

__fastcall TForm4::Button2Click(TObject *Sender)

{->Hide();->Show();

}__fastcall TForm4::FormShow(TObject *Sender)

{->Enabled = true;->ADOQuery1->Fields[0];title;= Form3->ADOQuery1->Fields->FieldByName("Вопрос")->Value;cols = title.Length();(cols > 70) {(int k=93;k!=70;k--)

{(title[k] == ' ') {.Insert ("\n",k+1);;

}

}->Caption = (title);

}->Caption = Form3->ADOQuery1->Fields->FieldByName("Вопрос")->Value;->Caption = Form3->ADOQuery1->Fields->FieldByName("ГлавноеУсловие")->Value;(!(TBlobField*)Form3->ADOQuery1->FieldByName("Приложение")->IsNull)

{(!Image13->Visible)->Visible=true;* strm= new TMemoryStream;*ptJpg=new TJPEGImage;

((TGraphicField*) Form3->ADOQuery1->FieldByName("Приложение"))->SaveToStream(strm);>Seek(0,0);(*(Word*)strm->Memory==0xD8FF)->Picture->Graphic=ptJpg;->Picture->Graphic->LoadFromStream(strm);

// Image13->Canvas->Rectangle(0,0,Image13->Width,Image13->Height);strm;ptJpg;

}->Visible = false;(Form3->ADOQuery1->Fields->FieldByName("SELECT")->Value == tr ||->ADOQuery1->Fields->FieldByName("DELETE")->Value == tr) {=1;->Bevel1->Visible = true;->Bevel1->Left = 15;->Bevel1->Top = 302;->Bevel2->Visible = true;->Edit1->Visible = true;->Edit2->Visible = true;(Form3->ADOQuery1->Fields->FieldByName("WHERE")->Value == tr) {->Bevel3->Visible = true;->Edit3->Visible = true;->Edit1->Left = 168;->Edit1->Top = 311;->Edit1->Width = 301;->Bevel2->Left = 483;->Bevel2->Top = 302;->Edit2->Left = 637;->Edit2->Top = 311;->Edit2->Width = 164;->Bevel3->Left = 814;->Bevel3->Top = 302;->Edit3->Left = 969;->Edit3->Top = 311;->Edit3->Width = 353;

}{->Edit3->Visible = false;->Bevel3->Visible = false;->Edit1->Left = 168;->Edit1->Top = 311;->Edit1->Width = 641;->Bevel2->Left = 823;->Bevel2->Top = 302;->Edit2->Left = 979;->Edit2->Top = 311;->Edit2->Width = 342;

}

}(Form3->ADOQuery1->Fields->FieldByName("INSERT")->Value == tr) {= 1;->Bevel1->Visible = true;->Bevel1->Left = 15;->Bevel1->Top = 302;->Bevel2->Visible = true;->Bevel2->Left = 167;->Bevel2->Top = 302;->Bevel3->Visible = true;->Bevel3->Left = 662;->Bevel3->Top = 302;->Edit1->Visible = true;->Edit1->Left = 320;->Edit1->Top = 311;->Edit1->Width = 329;->Edit2->Visible = true;->Edit2->Left = 815;->Edit2->Top = 311;->Edit2->Width = 506;

}(Form3->ADOQuery1->Fields->FieldByName("UPDATE")->Value == tr) {=1;->Bevel1->Visible = true;->Bevel1->Left = 15;->Bevel1->Top = 302;->Bevel2->Visible = true;->Edit1->Visible = true;->Edit2->Visible = true;(Form3->ADOQuery1->Fields->FieldByName("WHERE")->Value == tr) {->Bevel3->Visible = true;->Edit3->Visible = true;->Edit1->Left = 168;->Edit1->Top = 311;->Edit1->Width = 161;->Bevel2->Left = 344;->Bevel2->Top = 302;->Edit2->Left = 500;->Edit2->Top = 311;->Edit2->Width = 349;->Bevel3->Left = 863;->Bevel3->Top = 302;->Edit3->Left = 1017;->Edit3->Top = 311;->Edit3->Width = 304;

}{->Edit3->Visible = false;->Bevel3->Visible = false;->Edit1->Left = 169;->Edit1->Top = 311;->Edit1->Width = 344;->Bevel2->Left = 528;->Bevel2->Top = 302;->Edit2->Left = 683;->Edit2->Top = 311;->Edit2->Width = 639;

}

}

}__fastcall TForm4::Timer1Timer(TObject *Sender)

{->Position = ProgressBar1->Position + 1;(ProgressBar1->Position == 100)

{->Enabled = false;

}

}__fastcall TForm4::Image13Click(TObject *Sender)

{->Image1->Picture = Image13->Picture;->Show();

}

Текст модуля Unit5.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit5.h"

#include "Unit4.h"

#include "Unit2.h"

#include "Unit6.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form5;

__fastcall TForm5::TForm5(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm5::Button2Click(TObject *Sender)

{->Label1->Caption = 1;->Hide();->Show();

}__fastcall TForm5::Button1Click(TObject *Sender)

{->Label1->Caption = 0;->Hide();->Show();

}

Текст модуля Unit6.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit6.h"

#include "Unit5.h"

#include "Unit4.h"

#include "Unit3.h"

#include "Unit7.h"

#pragma package(smart_init)

#pragma resource "*.dfm"6 *Form6;

AnsiString tru = "True"; //Для хранения одного из вариантов значения логического поля БД

AnsiString flse = "False"; //Для хранения одного из вариантов значения логического поля БД

AnsiString numb; //Для хранения ID выбранного теста

//---------------------------------------------------------------------------

__fastcall TForm6::TForm6(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm6::FormShow(TObject *Sender)

{(Label1->Caption == "0") {->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT НаименованиеТемы, СтандартТест FROM Темы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("СтандартТест")->Value == tru)->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value);->ADOQuery1->Next();

}

}(Label1->Caption == "1") {->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT НаименованиеТемы, ЗапросТест FROM Темы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("ЗапросТест")->Value == tru)->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value);3->ADOQuery1->Next();

}

} // Вывод тем, на которые есть ЗапросТесты в ComboBox1;

}__fastcall TForm6::Button1Click(TObject *Sender)

{

if (ComboBox1->Text == "")

MessageBox(0,"Вы не выбрали тему для тестирования!","Внимание", MB_OK + MB_ICONWARNING);

else {

AnsiString theme = (ComboBox1->Text); //Сохраняем название выбранной темы

int kolth=0; //Служит для хранения кол-ва тестов на выбранную тему

Form3->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();(Label1->Caption == "0")->ADOQuery1->SQL->Add("SELECT СтандартТест.IDСтандартТеста, Темы.НаименованиеТемы, СтандартТест.НазваниеТеста FROM Темы, СтандартТест WHERE Темы.IDТемы = СтандартТест.IDТемы");(Label1->Caption == "1")->ADOQuery1->SQL->Add("SELECT ЗапросТест.IDЗапросТеста, Темы.НаименованиеТемы, ЗапросТест.НазваниеТеста FROM Темы, ЗапросТест WHERE Темы.IDТемы = ЗапросТест.IDТемы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value == theme)++;

Form3->ADOQuery1->Next();

} //считываем кол-во тестов, которые имеются на выбранную тему

if (kolth > 1) { //Операции, которые выполняются если тестов более одного

AnsiString ds = "Вы выбрали тему: «"+theme+"».\nВ базе хранится несколько вариантов тестов по данной теме.\nСейчас программа случайным путем выберет один из них.\nУДАЧИ!";

MessageBox(0,ds.c_str(),"Уведомление", MB_OK + MB_ICONQUESTION); //Вывод итогов выбора

Form3->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value == theme)->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value);->ADOQuery1->Next();

}();numbtest = 0+rand()%kolth;numbt = (numbtest);->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value == (ListBox1->Items->Strings[numbt])) {(Label1->Caption == "0")= (Form3->ADOQuery1->Fields->FieldByName("IDСтандартТеста")->Value);(Label1->Caption == "1")= (Form3->ADOQuery1->Fields->FieldByName("IDЗапросТеста")->Value);

}->ADOQuery1->Next();

}

}if (kolth == 1) { ds = "Вы выбрали тему: «"+theme+"».\nУДАЧИ!";

MessageBox(0,ds.c_str(),"Уведомление", MB_OK + MB_ICONQUESTION); //Вывод итогов выбора

Form3->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();(Label1->Caption == "0")->ADOQuery1->SQL->Add("SELECT IDСтандартТеста, Темы.НаименованиеТемы, СтандартТест.НазваниеТеста FROM Темы, СтандартТест WHERE Темы.IDТемы = СтандартТест.IDТемы And Темы.НаименованиеТемы = '"+ theme + "'");(Label1->Caption == "1")->ADOQuery1->SQL->Add("SELECT ЗапросТест.IDЗапросТеста, Темы.НаименованиеТемы, ЗапросТест.НазваниеТеста FROM Темы, ЗапросТест WHERE Темы.IDТемы = ЗапросТест.IDТемы And Темы.НаименованиеТемы = '"+ theme + "'");->ADOQuery1->Active = true;(Label1->Caption == "0")= (Form3->ADOQuery1->Fields->FieldByName("IDСтандартТеста")->Value);(Label1->Caption == "1")= (Form3->ADOQuery1->Fields->FieldByName("IDЗапросТеста")->Value);

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();(Label1->Caption == "0")->ADOQuery1->SQL->Add("SELECT * FROM СтандартТестВопросы WHERE IDСтандартТеста = "+ numb + "");(Label1->Caption == "1")->ADOQuery1->SQL->Add("SELECT * FROM ЗапросТестВопросы WHERE IDЗапросТеста = "+ numb + "");->ADOQuery1->Active = true;->Items->Clear();->Items->Clear();->Hide();(Label1->Caption == "0")->Show();(Label1->Caption == "1")->Show();

}

}

Текст модуля Unit7.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit7.h"

#include "Unit3.h"

#include "Unit6.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form7;standresult;resultstand=0;__fastcall TForm7::TForm7(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm7::FormShow(TObject *Sender)

{->ADOQuery1->Fields[0];title;= Form3->ADOQuery1->Fields->FieldByName("Вопрос")->Value;->Caption = (title);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант1")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант2")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант3")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант4")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант5")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант6")->Value);

}__fastcall TForm7::Button2Click(TObject *Sender)

{->Hide();->Show();

}__fastcall TForm7::RadioButton1Click(TObject *Sender)

{(RadioButton1->Checked) standresult = (RadioButton1->Caption);

}__fastcall TForm7::RadioButton2Click(TObject *Sender)

{(RadioButton2->Checked) standresult = (RadioButton2->Caption);

}__fastcall TForm7::RadioButton3Click(TObject *Sender)

{(RadioButton3->Checked) standresult = (RadioButton3->Caption);

}__fastcall TForm7::RadioButton4Click(TObject *Sender)

{(RadioButton4->Checked) standresult = (RadioButton4->Caption);

}__fastcall TForm7::RadioButton5Click(TObject *Sender)

{(RadioButton5->Checked) standresult = (RadioButton5->Caption);

}__fastcall TForm7::RadioButton6Click(TObject *Sender)

{(RadioButton6->Checked) standresult = (RadioButton6->Caption);

}__fastcall TForm7::Button1Click(TObject *Sender)

{(Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value == standresult)= resultstand + 1;->ADOQuery1->Next();title;= Form3->ADOQuery1->Fields->FieldByName("Вопрос")->Value;->Caption = (title);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант1")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант2")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант3")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант4")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант5")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("Вариант6")->Value);(Form3->ADOQuery1->Eof) {("Тест окончен");

}

}__fastcall TForm7::Button3Click(TObject *Sender)

{->ADOQuery1->Next();

}

Текст модуля Unit8.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit8.h"

#include "Unit9.h"

#include "Unit12.h"

#include "Unit13.h"

#include "Unit15.h"

#include "Unit16.h"

#pragma package(smart_init)

#pragma link "ShockwaveFlashObjects_OCX"

#pragma resource "*.dfm"*Form8;

__fastcall TForm8::TForm8(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm8::Button1Click(TObject *Sender)

{->Show();

}__fastcall TForm8::Button3Click(TObject *Sender)

{->Hide();->Show();

}__fastcall TForm8::Button6Click(TObject *Sender)

{->Show();

}__fastcall TForm8::Button2Click(TObject *Sender)

{->Show();

}__fastcall TForm8::Button4Click(TObject *Sender)

{->Show();

}__fastcall TForm8::FormShow(TObject *Sender)

{->Movie = ExtractFilePath(Application->ExeName) + "Flash/Admin_title.swf";->Play();

}

Текст программы Unit9.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit9.h"

#include "Unit8.h"

#include "Unit3.h"

#pragma package(smart_init)

#pragma link "ShockwaveFlashObjects_OCX"

#pragma resource "*.dfm"*Form9;nmbrtz;nmbrthm;kolv=0;

__fastcall TForm9::TForm9(TComponent* Owner)

: TForm(Owner)

{= true;

}

//---------------------------------------------------------------------------__fastcall TForm9::FormShow(TObject *Sender)

}

}__fastcall TForm9::Button1Click(TObject *Sender)

{numbtestz=0; //номер нового ЗапросТестаnumbthm=0; //для хранения ID выбранной темы

bool sovpd=0;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDЗапросТеста, НазваниеТеста FROM ЗапросТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Edit1->Text == Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value) {= 1;(0,"Тест с таким именем уже существует.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);->Text = "";

}->ADOQuery1->Next();

}(sovpd == 0) {->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];++;->ADOQuery1->Next();

}++;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDТемы, НаименованиеТемы FROM Темы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value == ComboBox1->Text)= (Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value);->ADOQuery1->Next();

}= (numbtestz);= (numbthm);->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("INSERT INTO ЗапросТест (IDЗапросТеста, IDТемы, НазваниеТеста) VALUES ("+ nmbrtz +", "+ nmbrthm +", '"+ Edit1->Text +"')");->ADOQuery1->ExecSQL();->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("UPDATE Темы SET Темы.ЗапросТест = True WHERE Темы.IDТемы = "+ nmbrthm +"");->ADOQuery1->ExecSQL();->Enabled = false;->Enabled = false;->Enabled = false;->Visible = false;->Visible = true;->Visible = true;->Visible = true;->Visible = false;->GotoFrame(1);->Play();->Top = 225;->Enabled = true;->Enabled = true;->Enabled = true;->Enabled = true;->Enabled = true;->Enabled = true;

}

}

//---------------------------------------------------------------------------__fastcall TForm9::Button2Click(TObject *Sender)

{numbtestzv=0; //номер нового ЗапросВопросаinsert, select, delet, update, from, where;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDЗапросВопроса FROM ЗапросТестВопросы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];++;->ADOQuery1->Next();

}++;(CheckBox1->Checked) insert = "True"; else insert = "False";(CheckBox2->Checked) select = "True"; else select = "False";(CheckBox3->Checked) delet = "True"; else delet = "False";(CheckBox4->Checked) update = "True"; else update = "False";(CheckBox5->Checked) where = "True"; else where = "False";nmbrzprsvp = (numbtestzv);question = (Edit2->Text);uslovie = (Edit4->Text);qv=0, usl=0, otv=0, op=0, cenvopr=0;

if (uslovie == "")(0,"Вы не указали главное условие. Пожалуйста, заполните необходимые поля.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

else= 1;(question == "")(0,"Вы не задали вопрос. Пожалуйста, заполните необходимые поля.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

else= 1;(Edit3->Text == "")

MessageBox(0,"Вы не указали верный ответ. Пожалуйста, заполните необходимые поля.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

else= 1;(Edit5->Text == "")

MessageBox(0,"Вы не указали цену вопроса. Пожалуйста, заполните необходимые поля.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

else= 1;(insert == "False" && select == "False" && delet == "False" && update == "False")

MessageBox(0,"Вы не указали операторы, используемые в запросе. Пожалуйста, заполните необходимые поля.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

else= 1;(qv == 1 && otv == 1 && cenvopr == 1 && op == 1 && usl == 1)

{= kolv+1;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("INSERT INTO ЗапросТестВопросы (IDЗапросВопроса, IDТемы, IDЗапросТеста, Вопрос, ВерныйОтвет, ЦенаВопроса, ГлавноеУсловие)");->ADOQuery1->SQL->Add(" VALUES ("+ nmbrzprsvp +", "+ nmbrthm +", "+ nmbrtz +", '"+ Edit2->Text +"', '"+ Edit3->Text +"', '"+ Edit5->Text +"', '"+ Edit4->Text +"')");->ADOQuery1->ExecSQL();->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("UPDATE ЗапросТестВопросы SET ЗапросТестВопросы.INSERT = "+ insert +", ЗапросТестВопросы.SELECT = "+ select +", ЗапросТестВопросы.DELETE = "+ delet +", ЗапросТестВопросы.UPDATE = "+ update +", ЗапросТестВопросы.WHERE = "+ where +" WHERE ЗапросТестВопросы.IDЗапросВопроса = "+ nmbrzprsvp +"");->ADOQuery1->ExecSQL();(Image6->Visible == true) {->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM ЗапросТестВопросы");->ADOQuery1->Active = true;->ADOQuery1->Last();->ADOQuery1->Edit();* strm = new TMemoryStream();->Picture->Graphic->SaveToStream(strm);

((TGraphicField*) Form3->ADOQuery1->FieldByName("Приложение"))->LoadFromStream(strm);strm;->ADOQuery1->Post();

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT ВерныйОтвет, ЦенаВопроса FROM ЗапросТестВопросы WHERE IDЗапросВопроса = "+ nmbrzprsvp +"");->ADOQuery1->Active = true;(kolv == 1) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 2) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 3) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 4) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 5) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 6) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 7) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 8) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 9) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);

}(kolv == 10) {->Caption = (Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value);->Caption = (Form3->ADOQuery1->Fields->FieldByName("ЦенаВопроса")->Value);d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,maxball;=Label34->Caption.ToDouble();=Label35->Caption.ToDouble();=Label36->Caption.ToDouble();=Label37->Caption.ToDouble();=Label38->Caption.ToDouble();=Label39->Caption.ToDouble();=Label40->Caption.ToDouble();=Label41->Caption.ToDouble();=Label42->Caption.ToDouble();=Label43->Caption.ToDouble();= d1+d2+d3+d4+d5+d6+d7+d8+d9+d10;->Caption = (maxball);

// Label32->Visible = true;->Visible = true;33->Visible = true; //вывод максимальной оценки за тест

Button4->Visible = true;->Visible = true;->Enabled = false;->Enabled = false;->Enabled = false;->Enabled = false;->Enabled = false;->Enabled = false;->Visible = true;->Text = "";->Visible = false;->Visible = true;->Visible = false;

}->Text = "";->Text = "";->Text = ""; ->Checked = false;->Checked = false;->Checked = false;->Checked = false;->Checked = false;

//Image6->Picture->Assign(0);->Visible = false;

}

}__fastcall TForm9::CheckBox1Click(TObject *Sender)

{(CheckBox1->Checked)

{(CheckBox2->Checked || CheckBox3->Checked || CheckBox4->Checked)

{->Checked = false;(0,"Нельзя использовать несколько операторов одного и того же типа в одном вопросе.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

}

}

}__fastcall TForm9::CheckBox2Click(TObject *Sender)

{(CheckBox2->Checked)

{(CheckBox1->Checked || CheckBox3->Checked || CheckBox4->Checked)

{->Checked = false;(0,"Нельзя использовать несколько операторов одного и того же типа в одном вопросе.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

}

}

}__fastcall TForm9::CheckBox3Click(TObject *Sender)

{(CheckBox3->Checked)

{(CheckBox1->Checked || CheckBox2->Checked || CheckBox4->Checked)

{->Checked = false;(0,"Нельзя использовать несколько операторов одного и того же типа в одном вопросе.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

}

}

}__fastcall TForm9::CheckBox4Click(TObject *Sender)

{(CheckBox4->Checked)

{(CheckBox1->Checked || CheckBox2->Checked || CheckBox3->Checked)

{->Checked = false;(0,"Нельзя использовать несколько операторов одного и того же типа в одном вопросе.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);

}

}

}__fastcall TForm9::ComboBox1Change(TObject *Sender)

{(ComboBox1->Text != "" && Edit1->Text != "")->Visible = true;

}__fastcall TForm9::Edit1Change(TObject *Sender)

{(ComboBox1->Text != "" && Edit1->Text != "")->Visible = true;->Visible = false;

}__fastcall TForm9::Button3Click(TObject *Sender)

{(OpenPictureDialog1->Execute());

{CurrentFile=OpenPictureDialog1->FileName;->Picture->LoadFromFile(CurrentFile);->Visible = true;

}

}__fastcall TForm9::Button4Click(TObject *Sender)

{= 0;->Visible = false;->Enabled = true;->Text = "";->Enabled = true;->Enabled = true;->Visible = true;->Visible = false;->Visible = false;->Visible = false;->Visible = true;->Visible = true;->GotoFrame(1);->Play();->Top = 99;->Text = "";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Visible = false;->Visible = false;->Visible = false;->Visible = false;

}__fastcall TForm9::Button5Click(TObject *Sender)

{= 0;->Visible = false;->Enabled = true;->Text = "";->Enabled = true;->Enabled = true;->Visible = true;->Visible = false;->Visible = false;->Visible = false;->Visible = true;->Visible = true;->GotoFrame(1);->Play();->Top = 99;->Text = "";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Caption = "-";->Visible = false;->Visible = false;->Visible = false;->Visible = false;->Close();

}__fastcall TForm9::FormClose(TObject *Sender, TCloseAction &Action)

{->Clear();

}

Текст программы Unit10.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit10.h"

#include "Unit3.h"

#include "Unit2.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form10;k=0;ocenk;name;IDUser;IDTest;

__fastcall TForm10::TForm10(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm10::Button1Click(TObject *Sender)

{=0;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM ЗапросТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value == ComboBox1->Text)= Form3->ADOQuery1->Fields->FieldByName("IDЗапросТеста")->Value;->ADOQuery1->Next();

}->Series[0]->Clear();->Caption = ComboBox1->Text;->Text = "";->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM СтатистикаЗапросТеста WHERE IDПользователя = "+ IDUser +" And IDЗапросТеста = "+ IDTest +"");3->ADOQuery1->Active = true;

int count=0; // для проверки количества прохождения одного теста

Form3->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {++;->ADOQuery1->Next();

}(count > 1) {->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];++;= Form3->ADOQuery1->Fields->FieldByName("Оценка")->Value;= "Попытка_"+IntToStr(k);->Series[0]->Add(ocenk,name);->ADOQuery1->Next();

}->Caption = (k);

}

else {

// MessageBox(0,"Выводимая по умолчанию динамика не доступна (тест, выводимый по умолчанию пройден один раз). Выберите другой пройденный Вами тест.","Внимание!",MB_OK);

Label4->Caption = "1";

Label5->Caption = "Выбранный тест пройден лишь один раз!";

}

}

//---------------------------------------------------------------------------__fastcall TForm10::FormShow(TObject *Sender)

{->Caption = (Form2->Label1->Caption);(Form2->Button4->Visible == true)->Caption = "Администратор";(Form2->Button4->Visible == false)->Caption = "Пользователь";->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM Пользователи");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("Логин")->Value == Label2->Caption)= Form3->ADOQuery1->Fields->FieldByName("IDПользователя")->Value;->ADOQuery1->Next();

}r=0;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();3->ADOQuery1->SQL->Add("SELECT Пользователи.IDПользователя, СтатистикаЗапросТеста.IDЗапросТеста, ЗапросТест.НазваниеТеста");

Form3->ADOQuery1->SQL->Add("FROM Пользователи INNER JOIN (ЗапросТест INNER JOIN СтатистикаЗапросТеста ON ");

Form3->ADOQuery1->SQL->Add("ЗапросТест.IDЗапросТеста = СтатистикаЗапросТеста.IDЗапросТеста) ON ");

Form3->ADOQuery1->SQL->Add("Пользователи.IDПользователя = СтатистикаЗапросТеста.IDПользователя ");

Form3->ADOQuery1->SQL->Add("WHERE (((Пользователи.IDПользователя)="+ IDUser +"))");

Form3->ADOQuery1->Active = true;->ADOQuery1->First();->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value); //Запись в ComboBox1 первого названия теста->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(ComboBox1->Items->Strings[r] != Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value) {->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value);++;

} //проверка на повторение, если название теста повторяется и уже занесено в ComboBox, то добавление повторных значений исключается

Form3->ADOQuery1->Next();

}->ADOQuery1->First();FirstName = Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value;->Caption = (FirstName);->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM ЗапросТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value == ComboBox1->Items->Strings[0])= Form3->ADOQuery1->Fields->FieldByName("IDЗапросТеста")->Value;->ADOQuery1->Next();

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM СтатистикаЗапросТеста WHERE IDПользователя = "+ IDUser +" And IDЗапросТеста = "+ IDTest +"");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];++;= Form3->ADOQuery1->Fields->FieldByName("Оценка")->Value;= "Попытка_"+IntToStr(k);->Series[0]->Add(ocenk,name);->ADOQuery1->Next();

}->Caption = (k);

}

Текст программы Unit11.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit11.h"

#include "Unit4.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form11;

__fastcall TForm11::TForm11(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm11::FormShow(TObject *Sender)

{->Movie = ExtractFilePath(Application->ExeName) + "Flash/Result_title.swf";->Play();

}

Текст программы Unit12.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit12.h"

#include "Unit8.h"

#include "Unit3.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form12;

__fastcall TForm12::TForm12(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm12::FormShow(TObject *Sender)

{->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT НазваниеТеста FROM ЗапросТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value);->ADOQuery1->Next();

}

}__fastcall TForm12::Button2Click(TObject *Sender)

{

if(Application->MessageBox("Выйти действительно хотите удалить данный тест? Вместе с ним удалятся и все относящиеся к нему вопросы. Изменения будет невозможно отменить.","Внимание!", MB_YESNO + MB_ICONQUESTION)==IDYES) {

Form3->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM ЗапросТест");->ADOQuery1->Active = true;cef;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value == ComboBox1->Text)= Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value;->ADOQuery1->Next();

}cefk=0;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value == cef)= cefk+1;->ADOQuery1->Next();

}(cefk > 1) {->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM Темы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Edit();(Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value == cef)->ADOQuery1->Fields->FieldByName("ЗапросТест")->Value = "False";->ADOQuery1->Next();

}

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("DELETE * FROM ЗапросТест WHERE НазваниеТеста = '"+ ComboBox1->Text +"'");3->ADOQuery1->ExecSQL(); // удаление теста и всех подчиненных ему вопросов

Form3->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDЗапросТеста FROM ЗапросТест");->ADOQuery1->Active = true;n=1;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("IDЗапросТеста")->Value=n;++;->ADOQuery1->Next();

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDЗапросВопроса FROM ЗапросТестВопросы");->ADOQuery1->Active = true;=1;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("IDЗапросВопроса")->Value=n;++;->ADOQuery1->Next();

}->Text = "";->Items->Clear();->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT НазваниеТеста FROM ЗапросТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value);->ADOQuery1->Next();

}

}

}__fastcall TForm12::Button3Click(TObject *Sender)

{->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("ГлавноеУсловие")->Value=Edit3->Text;->ADOQuery1->Post();->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("Вопрос")->Value=Edit1->Text;->ADOQuery1->Post();->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("INSERT")->Value=ComboBox2->Text;->ADOQuery1->Post();->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("SELECT")->Value=ComboBox3->Text;->ADOQuery1->Post();->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("DELETE")->Value=ComboBox4->Text;->ADOQuery1->Post();->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("UPDATE")->Value=ComboBox5->Text;->ADOQuery1->Post();->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("WHERE")->Value=ComboBox6->Text;->ADOQuery1->Post();->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value=Edit2->Text;->ADOQuery1->Post();

}

//---------------------------------------------------------------------------__fastcall TForm12::Button1Click(TObject *Sender)

{numtest;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM ЗапросТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value == ComboBox1->Text)= (Form3->ADOQuery1->Fields->FieldByName("IDЗапросТеста")->Value);->ADOQuery1->Next();

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM ЗапросТестВопросы WHERE IDЗапросТеста = "+ numtest +"");->ADOQuery1->Active = true;->Enabled = true;

}__fastcall TForm12::DBGrid1CellClick(TColumn *Column)

{->Text = Form3->ADOQuery1->Fields->FieldByName("Вопрос")->Value;->Text = Form3->ADOQuery1->Fields->FieldByName("INSERT")->Value;->Text = Form3->ADOQuery1->Fields->FieldByName("SELECT")->Value;->Text = Form3->ADOQuery1->Fields->FieldByName("DELETE")->Value;->Text = Form3->ADOQuery1->Fields->FieldByName("UPDATE")->Value;->Text = Form3->ADOQuery1->Fields->FieldByName("WHERE")->Value;->Text = Form3->ADOQuery1->Fields->FieldByName("ВерныйОтвет")->Value;->Text = Form3->ADOQuery1->Fields->FieldByName("ГлавноеУсловие")->Value;

}

Текст модуля Unit13.cpp

#include <vcl.h>

#pragma hdrstop

#include <Registry.hpp>

#include "Unit13.h"

#include "Unit8.h"

#include "Unit3.h"

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form13;*Reg7=new TRegistry;*Reg8=new TRegistry;*Reg9=new TRegistry;b;

__fastcall TForm13::TForm13(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm13::Button1Click(TObject *Sender)

{->ADOQuery1 -> Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM Пользователи");->ADOQuery1 -> Active = true;user = (Edit1->Text);password = (Edit2->Text);l=0;kolvo=0;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(user == (Form3->ADOQuery1->Fields->FieldByName("Логин")->Value)) { (0,"Пользователь с таким логином уже зарегистрирован. Введите другое имя.", "Ошибка", MB_OK);

Edit1->Text = "";

Edit2->Text = "";

l=1;

}

Form3->ADOQuery1->Next();

}(l == 0) {->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];++;->ADOQuery1->Next();

}++;kolvous = (kolvo);->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("INSERT INTO Пользователи (IDПользователя, Логин)");->ADOQuery1->SQL->Add(" VALUES ("+ kolvous +", '"+ user +"')");->ADOQuery1->ExecSQL();=b+1;->RootKey=HKEY_CURRENT_USER;->OpenKey("BlockDB\\Users",true);->WriteInteger("Number",b);->WriteString(("User_"+IntToStr(b)),(user));->WriteString(("Password_"+IntToStr(b)),(password));->WriteString(("Status_"+IntToStr(b)),"Admin");9->CloseKey();

//delete Reg3;

MessageBox(0,"Регистрация администратора успешно произведена.","Успешная регистрация",MB_OK);

Edit1->Text = "";->Text = "";

}

}__fastcall TForm13::FormShow(TObject *Sender)

{->OpenKey("BlockDB\\Users",0);(Reg7->ValueExists("Number")) //Проверяем, есть ли такой параметр

{->RootKey=HKEY_CURRENT_USER;->OpenKeyReadOnly("BlockDB\\Users");=Reg8->ReadInteger("Number");->CloseKey();Reg8;

}

{

Reg8->RootKey=HKEY_CURRENT_USER;

Reg8->OpenKey("BlockDB\\Users",true);

Reg8->WriteInteger("Number",b);

b=Reg8->ReadInteger("Number");

Reg8->CloseKey();

delete Reg8;

}->CloseKey();Reg7;

}

Текст модуля Unit14.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit14.h"

#include "Unit3.h"

#include "Unit4.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form14;

__fastcall TForm14::TForm14(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm14::Button1Click(TObject *Sender)

{->Close();

}

__fastcall TForm14::FormShow(TObject *Sender)

{->Width = Image1->Width+2;->Height = Image1->Height+2;

}__fastcall TForm14::Image1MouseDown(TObject *Sender,Button, TShiftState Shift, int X, int Y)

{SC_DRAGMOVE = 0xF012;(Button == mbLeft)

{();(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);

}

}

Текст модуля Unit15.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit15.h"

#include "Unit3.h"

#include "Unit8.h"

#pragma package(smart_init)

#pragma link "ShockwaveFlashObjects_OCX"

#pragma resource "*.dfm"*Form15;nmbrtstand;nmbrthmst;kolvst = 0;

__fastcall TForm15::TForm15(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm15::FormShow(TObject *Sender)

{->Movie = ExtractFilePath(Application->ExeName) + "Flash/AddStandTest.swf";->Play();->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT НаименованиеТемы FROM Темы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value);->ADOQuery1->Next();

}

}__fastcall TForm15::Button1Click(TObject *Sender)

{numbteststand=0; //номер нового ЗапросТестаnumbthm=0; //для хранения ID выбранной темы

bool sovpd=0;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDСтандартТеста, НазваниеТеста FROM СтандартТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Edit1->Text == Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value) {= 1;(0,"Тест с таким именем уже существует.","Будьте внимательны!", MB_OK +MB_TOPMOST+ MB_ICONWARNING);->Text = "";

}->ADOQuery1->Next();

}(sovpd == 0) {->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];++;->ADOQuery1->Next();

}++;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDТемы, НаименованиеТемы FROM Темы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НаименованиеТемы")->Value == ComboBox1->Text)= (Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value);->ADOQuery1->Next();

}= (numbteststand);= (numbthm);->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("INSERT INTO СтандартТест (IDСтандартТеста, IDТемы, НазваниеТеста) VALUES ("+ nmbrtstand +", "+ nmbrthmst +", '"+ Edit1->Text +"')");->ADOQuery1->ExecSQL();->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("UPDATE Темы SET Темы.СтандартТест = True WHERE Темы.IDТемы = "+ nmbrthmst +"");->ADOQuery1->ExecSQL();->Enabled = false;->Enabled = false;->Enabled = false;

}

}__fastcall TForm15::Button2Click(TObject *Sender)

{= kolvst + 1;numbteststandv=0; //номер нового ЗапросВопроса->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDСтандартВопроса FROM СтандартТестВопросы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];++;->ADOQuery1->Next();

}++;nmbrstandquest = (numbteststandv);->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("INSERT INTO СтандартТестВопросы (IDСтандартВопроса, IDТемы, IDСтандартТеста, Вопрос, Вариант1, Вариант2, Вариант3, Вариант4, Вариант5, Вариант6)");->ADOQuery1->SQL->Add(" VALUES ("+ nmbrstandquest +", "+ nmbrthmst +", "+ nmbrtstand +", '"+ Edit2->Text +"', '"+ Edit3->Text +"', '"+ Edit4->Text +"', '"+ Edit5->Text +"', '"+ Edit6->Text +"', '"+ Edit7->Text +"', '"+ Edit8->Text +"')");->ADOQuery1->ExecSQL();

}

Текст модуля Unit16.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit16.h"

#include "Unit3.h"

#include "Unit8.h"

#pragma package(smart_init)

#pragma resource "*.dfm"*Form16;

__fastcall TForm16::TForm16(TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm16::FormShow(TObject *Sender)

{->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT НазваниеТеста FROM СтандартТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value);->ADOQuery1->Next();

}

}__fastcall TForm16::Button2Click(TObject *Sender)

{(Application->MessageBox("Выйти действительно хотите удалить данный тест? Вместе с ним удалятся и все относящиеся к нему вопросы. Изменения будет невозможно отменить.","Внимание!", MB_YESNO + MB_ICONQUESTION)==IDYES) {

Form3->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM СтандартТест");->ADOQuery1->Active = true;cef;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value == ComboBox1->Text)= Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value;->ADOQuery1->Next();

}cefk=0;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value == cef)= cefk+1;->ADOQuery1->Next();

}(cefk > 1) {->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM Темы");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Edit();(Form3->ADOQuery1->Fields->FieldByName("IDТемы")->Value == cef)->ADOQuery1->Fields->FieldByName("СтандартТест")->Value = "False";->ADOQuery1->Next();

}

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("DELETE * FROM СтандартТест WHERE НазваниеТеста = '"+ ComboBox1->Text +"'");

Form3->ADOQuery1->ExecSQL(); // удаление теста и всех подчиненных ему вопросов

Form3->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDСтандартТеста FROM СтандартТест");->ADOQuery1->Active = true;n=1;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("IDСтандартТеста")->Value=n;++;->ADOQuery1->Next();

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT IDСтандартВопроса FROM СтандартТестВопросы");->ADOQuery1->Active = true;=1;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Edit();->ADOQuery1->Fields->FieldByName("IDСтандартВопроса")->Value=n;++;->ADOQuery1->Next();

}->Text = "";->Items->Clear();->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT НазваниеТеста FROM СтандартТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];->Items->Add(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value);->ADOQuery1->Next();

}

}

}

__fastcall TForm16::Button1Click(TObject *Sender)

{numtest;->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM СтандартТест");->ADOQuery1->Active = true;->ADOQuery1->First();(!Form3->ADOQuery1->Eof) {->ADOQuery1->Fields[0];(Form3->ADOQuery1->Fields->FieldByName("НазваниеТеста")->Value == ComboBox1->Text)= (Form3->ADOQuery1->Fields->FieldByName("IDСтандартТеста")->Value);->ADOQuery1->Next();

}->ADOQuery1->Active = false;->ADOQuery1->SQL->Clear();->ADOQuery1->SQL->Add("SELECT * FROM СтандартТестВопросы WHERE IDСтандартТеста = "+ numtest +"");->ADOQuery1->Active = true;

}

Приложение Д


Руководство программиста

.        Назначение и условия применения программы

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

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

Для полноценного функционирования программного продукта является обязательным требованием наличие платформы «Windows XP/Vista/7/8». Также необходимо присутствие в системе библиотеки «Flash.ocx» или «SWFlash.ocx», которые необходимы для корректного отображения flash-анимации, интегрированной в оболочку приложения.

.        Характеристика программы

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

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

.        Обращение к программе

Для запуска обучающего блока необходимо запустить исполняемый файл «BlockDB.exe». После чего начнут выполняться все необходимые проверки, будет осуществлено заполнение строковых значений некоторых выпадающих списков. На первой и главной форме реализована функция динамичной регистрации и авторизации, которая работает напрямую со специальными ключами и параметрами реестра, создаваемыми самим приложением. Вся работа в административной панели организована взаимодействием и манипуляцией с данными информационной базы. Здесь происходит удаление, редактирование, добавление, обновление как вновь созданных, так и уже существующих данных. Манипуляции реализуются с помощью языка DML. Работа в остальных модулях приложения, напротив, требует использования языка DQL, для обеспечения взаимодействия с базой данных. Это обусловлено тем, что модули используют уже существующие данные для осуществления своей корректной работы. Работа графических компонент в большинстве своем реализована с помощью сторонних библиотек, поэтому, в большинстве случаев, для корректного отображения всех элементов интерфейса потребуется установка сторонних программных комплексов, таких как, к примеру, «Adobe Flash Player», при установке которого в операционную систему инсталлируется библиотека «Flash.ocx».

.        Входные и выходные данные

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

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

.        Сообщения

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

-  при попытке закрыть приложение система выдаст диалоговое окно с просьбой подтвердить совершенное действие. Текст уведомления: «Вы уверены, что хотите закрыть приложение?»;

-       при попытке регистрации логина, который уже существует в базе, система попросит придумать другое имя. Текст уведомления: «Пользователь с введенным логином уже зарегистрирован в базе, пожалуйста, придумайте другое имя»;

-       при ситуации, когда одно из обязательных для заполнения полей было пропущено пользователем. Система выдаст уведомление вида: «Вы не указали [наименование поля]. Пожалуйста, сделайте это».

Приложение Е


Руководство пользователя

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

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

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

Для работы с программой пользователь не должен обладать никакими специфическими навыками и изучать эксплуатационную документацию. Всю необходимую справочную информацию приложение предоставит по мере необходимости уже во время работы с ним. От пользователя требуется лишь навыки простейшей компьютерной этики. Определенных технических характеристик для персонального компьютера не требуется. Программный продукт будет исправно работать при минимальных технических характеристиках ПК. Для полноценного функционирования программного продукта является обязательным требованием наличие платформы «Windows XP/Vista/7/8». В свою очередь, для корректного отображения всех элементов интерфейса потребуется установка сторонних программных комплексов, таких как, к примеру, «Adobe Flash Player».

Для начала работы с приложением его нужно инсталлировать. В пакет инсталляции входят: исполняемый файл, набор графических элементов, набор оцифрованных и оформленных лекций и база данных. Для проверки работоспособности программы необходимо запустить исполняемый файл «BlockDB.exe». Если при запуске системой не было выведено никаких уведомлений и интегрированный flash-ролик начал свое воспроизведение, то можно констатировать факт наличия полной поддержки всех возможностей обучащего блока.

После успешной авторизации пользователю представляется главное меню, где он может выбрать один из трех режимов работы с приложением:

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

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

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

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

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

Приложение Ж


Руководство системного программиста

1.      Общие сведения о программе

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

.        Характеристика программы

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

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

.        Настройка программы

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

.        Проверка программы

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

.        Дополнительные возможности

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

.        Сообщения системному программисту

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

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

-  при попытке закрыть приложение система выдаст диалоговое окно с просьбой подтвердить совершенное действие. Текст уведомления: «Вы уверены, что хотите закрыть приложение?»;

-       при попытке регистрации логина, который уже существует в базе, система попросит придумать другое имя. Текст уведомления: «Пользователь с введенным логином уже зарегистрирован в базе, пожалуйста, придумайте другое имя»;

-  при ситуации, когда одно из обязательных для заполнения полей было пропущено пользователем. Система выдаст уведомление вида: «Вы не указали [наименование поля]. Пожалуйста, сделайте это».

Похожие работы на - Разработка обучающего блока по дисциплине 'Базы данных и системы управления базами данных'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!