Разработка автоматизированной системы тестирования знаний по дисциплине 'Русский язык'

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

Разработка автоматизированной системы тестирования знаний по дисциплине 'Русский язык'

ВВЕДЕНИЕ


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

Основными стандартными формами тестов на сегодняшний день являются [1]:

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

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

·        задания на установление соответствия;

·        задания на установление правильной последовательности действий.

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

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

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

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

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

Для достижения цели дипломной работы необходимо решить следующие задачи:

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

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

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

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

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

1. автоматизация ТЕСТИРОВАНИЯ


.1 Понятие автоматизации

В XXI веке можно смело говорить о том, что без современных технологий автоматизации не только идти вперёд, но и удержаться на прежнем месте в конкурентной борьбе практически не возможно [2].

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

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

Автоматизированная информационная система − совокупность программных и аппаратных средств, предназначенных для хранения и/или управления данными и информацией и производства вычислений. Разработка прикладного решения может быть осуществлена в короткое время благодаря развитым средствам и возможностям готовых систем посредством конфигурирования [2].

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

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

·        общее повышение надежности информационной системы;

·        разгрузка персонала от рутинных и сложных операций;

·        уменьшение количества внутрифирменных сверок;

·        ускорение подготовки отчетности;

·        повышение достоверности отчетности.

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

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

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

1.2 Постановка задачи

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

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

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

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

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

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

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

2. СИСТЕМА ТЕСТИРОВАНИЯ ЗНАНИЙ

.1 Функциональная модель системы

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

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

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

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

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

·        Модель должна охватывать все стадии жизненного цикла продукции, относящиеся к сфере деятельности предприятия.

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

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

Процесс в функциональной модели есть преобразование входных материалов или информации в продукт на выходе с использованием ресурсов в виде механизма и при выполнении условий, представленных в виде управления. Такую интерпретацию часто называют бизнес-правилом описания процесса. Функциональная модель процессов, разработанная в такой интерпретации, позволяет точно описать бизнес - правила организации, проанализировать их. А затем, выявив «узкие» места и внося изменения в деловой процесс, оценить степень влияния предлагаемых изменений на существующие бизнес - правила [3].

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

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

Рисунок 2.1 - Диаграмма нулевого уровня

Диаграмма первого уровня (декомпозиция нулевого) представлена на рисунке 2.2.

Рисунок 2.2 - Диаграмма первого уровня

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

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

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

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

.2 Проектирование схемы базы данных

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

Каждая СУБД должна удовлетворять следующим требованиям:

·        обеспечивать пользователю возможность создавать новые БД и определять их схему (логическую структуру данных) с помощью специального языка − языка определения данных поддерживать разнообразные представления одних и тех же данных;

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

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

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

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

·        Пользователи, т.е. люди, которые используют данные;

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

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

·        Данные, т.е. строки, хранящиеся в файлах;

·        Система-хост - компьютерная система, в которой хранятся файлы. Доступ к строкам данных осуществляется системой-хостом.

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

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

·        Вопросы - содержит вопросы определенного теста;

·        Ответы - содержит варианты ответов на определенный вопрос;

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

·        Преподаватели - содержит данные о преподавателях дисциплины;

·        Регистрации - содержит данные о регистрациях тестируемых;

·        Тестирование - содержит данные о результатах тестирования.

В соответствии с выделенными сущностями можно построить нашу первую ER-диаграмму. Диаграмма ER («сущность-связь»), построенная на основании выделенных сущностей предметной области и ее правил, имеет следующий вид (рисунок 2.5):

Рисунок 2.5 - Диаграмма «сущность-связь»

Диаграмма на рисунке 2.5 соответствует следующим правилам:

·        Один тест включает в себя 1 и более вопросов;

·        Один вопрос включает в себя 1 и более вариантов ответов;

·        Один тест включает себя одного преподавателя;

·        Одно тестирование включает в себя 1 и более тестов;

·        Одно тестирование включает в себя одну регистрацию.

Теперь опишем атрибуты выделенных ранее основных сущностей предметной области.

Вопросы:

·        Код вопроса;

·        Код теста;

·        Вопрос.

Регистрации:

·        Код регистрации;

·        Учащийся;

·        Класс;

·        Дата.

Тесты:

·        Код теста;

·        Код преподавателя;

·        Тематика;

·        Вопросов;

Тестирование:

·        Код тестирования;

·        Код регистрации;

·        Код теста;

·        Начато;

·        Окончено;

·        Верных ответов;

·        Оценка системы.

Ответы:

·        Код ответа;

·        Код вопроса;

·        Ответ;

·        Правильный.

Преподаватели:

·        Код преподавателя;

·        Преподаватель;

·        Логин;

·        Пароль.

Проверка перечисленных объектов на соответствие различным нормальным формам позволила сделать вывод о нахождении отношений в 4-й нормальной форме. Проектирование физической структуры таблиц базы данных и связей осуществлялось при помощи инструментальной среды AllFusion ERwin Data Modeler.

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

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

AllFusion ERwin Data Modeler (ранее ERwin) - CASE-средство для проектирования и документирования баз данных, которое позволяет создавать, документировать и сопровождать базы данных, хранилища и витрины данных. Модели данных помогают визуализировать структуру данных, обеспечивая эффективный процесс организации, управления и администрирования таких аспектов деятельности предприятия, как уровень сложности данных, технологий баз данных и среды развертывания [3].Data Modeler предназначен для всех компаний, разрабатывающих и использующих базы данных, для администраторов баз данных, системных аналитиков, проектировщиков баз данных, разработчиков, руководителей проектов. Продукт позволяет управлять данными в процессе корпоративных изменений, а также в условиях стремительно изменяющихся технологий. Он сочетает графический интерфейс Windows, инструменты для построения ER-диаграмм, редакторы для создания логического и физического описания модели данных и прозрачную поддержку ведущих реляционных СУБД и настольных баз данных. ERwin Data Modeler создает визуальное представление (модель данных) для решаемой задачи. Это представление может использоваться для детального анализа, уточнения и распространения как части документации, необходимой в цикле разработки [3].

Однако данный продукт далеко не только инструмент для рисования. ERwin автоматически создает базу данных (таблицы, индексы, хранимые процедуры, триггеры для обеспечения ссылочной целостности и другие объекты, необходимые для управления данными). В ERwin существуют два уровня представления и моделирования - логический и физический. Логический уровень означает прямое отображение фактов из реальной жизни. Целевая СУБД, имена объектов и тины данных, индексы составляют второй (физический уровень модели).

Различие между логическим и физическим представлением данных официально признано в 1978 году, когда комитет ANSI/SPARC предложил обобщенную структуру систем баз данных. Эта структура получила название трехуровневой архитектуры. Три уровня архитектуры следующие: внутренний, концептуальный и внешний [3].

Внутренний уровень - это уровень, определяющий физический вид базы данных, наиболее близкий к физическому хранению и связан со способами сохранения информации на физических устройствах хранения. С данным уровнем связаны дисководы, физические адреса, индексы, указатели и т.д. За этот уровень отвечают проектировщики физической БД, которые решают, какие физические устройства будут хранить данные, какие методы доступа будут использоваться для извлечения и обновления данных и какие меры следует принять для поддержания или повышения быстродействия системы управления базами данных. Пользователи не касаются этого уровня [3].

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

Внешний уровень - структурный уровень БД, определяющий пользовательские представления данных. Каждая пользовательская группа получает свое собственное представление данных в БД. Каждое такое представление данных дает ориентированное на пользователя описание элементов данных, из которых состоит представление данных, и отношений между ними. Его можно напрямую вывести из концептуальной схемы. Совокупность таких пользовательских представлений данных и дает внешний уровень [3].

Процесс построения информационной модели состоит из следующих шагов:

-   определение сущностей;

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

-   задание первичных и альтернативных ключей;

-   определение атрибутов сущностей;

-   приведение модели к требуемому уровню нормальной формы;

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

-   генерация базы данных.

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

Рисунок 2.6 - Схема данных (логическая модель ERWin)

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

Рисунок 2.7 - Схема данных (физическая модель ERWin)

2.3 Проектирование архитектуры системы

Обычно, когда говорят «сервер», имеют в виду сервер в архитектуре клиент-сервер, а когда говорят «клиент» - имеют в виду клиент в этой же архитектуре. Суть ее в том, чтобы разделить функции между двумя подсистемами: клиентом, который отправляет запрос на выполнение каких-либо действий, и сервером, который выполняет этот запрос. Взаимодействие между клиентом и сервером происходит посредством стандартных специальных протоколов, таких как TCP/IP и z39.50.

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

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

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

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

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

Основной принцип технологии клиент-сервер заключается в разделении функций приложения на три группы [8]:

·        ввод и отображение данных (взаимодействие с пользователем);

·        прикладные функции, характерные для данной предметной области;

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

Поэтому, в любом клиент-серверном приложении выделяются следующие компоненты [6]:

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

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

·        компонент управления ресурсом.

Связь между компонентами осуществляется по определенным правилам, которые называют «протокол взаимодействия».

Компанией «Gartner Group», специализирующейся в области исследования информационных технологий, предложена следующая классификация двухзвенных моделей взаимодействия клиент-сервер (рисунок 2.8). Двухзвенными эти модели называются потому, что три компонента приложения различным образом распределяются между двумя узлами [7].

Рисунок 2.8 - Классификация моделей клиент-сервер

Исторически первой появилась модель распределенного представления данных, которая реализовывалась на универсальной ЭВМ с подключенными к ней неинтеллектуальными терминалами. Управление данными и взаимодействие с пользователем при этом объединялись в одной программе, на терминал передавалась только «картинка», сформированная на центральном компьютере [7].

Затем, с появлением персональных компьютеров (ПК) и локальных сетей, были реализованы модели доступа к удаленной базе данных. Некоторое время базовой для сетей ПК была архитектура файлового сервера. При этом один из компьютеров является файловым сервером, на клиентах выполняются приложения, в которых совмещены компонент представления и прикладной компонент (СУБД и прикладная программа). Протокол обмена при этом представляет набор низкоуровневых вызовов операций файловой системы. Такая архитектура, реализуемая, как правило, с помощью персональных СУБД, имеет очевидные недостатки − высокий сетевой трафик и отсутствие унифицированного доступа к ресурсам [7].

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

Позже была разработана концепция активного сервера, который использовал механизм хранимых процедур. Это позволило часть прикладного компонента перенести на сервер (модель распределенного приложения). Процедуры хранятся в словаре базы данных, разделяются между несколькими клиентами и выполняются на том же компьютере, что и SQL-сервер. Преимущества такого подхода: возможно централизованное администрирование прикладных функций, значительно снижается сетевой трафик (т.к. передаются не SQL-запросы, а вызовы хранимых процедур). Недостаток − ограниченность средств разработки хранимых процедур по сравнению с языками общего назначения [7].

На практике сейчас обычно используются смешанный подход:

·        простейшие прикладные функции выполняются хранимыми процедурами на сервере;

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

Сейчас ряд поставщиков коммерческих СУБД объявили о планах реализации механизмов выполнения хранимых процедур с использованием языка Java. Это соответствует концепции «тонкого клиента», функцией которого остается только отображение данных (модель удаленного представления данных).

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

Рисунок 2.9 - Модель распределенного приложения

2.4 Построение схемы ресурсов

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

Цели:

·        основная цель - разработка автоматизированной системы тестирования знаний по дисциплине «Русский язык»;

Потребители системы:

·        бюджетная организация (школа), оказывающая услуги по обучению и контролю уровня знаний клиентов (учащихся) по дисциплине «Русский язык».

Общая формулировка задачи:

·        создание автоматизированной системы тестирования знаний по дисциплине «Русский язык».

Основные функции системы:

·        регистрация тестируемого или авторизация преподавателя;

·        добавление или изменение данных теста;

·        добавление, изменение или удаление вопросов теста;

·        добавление, изменение или удаление вариантов ответа вопроса;

·        загрузка и считывание позиций справочников приложения;

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

·        возможность смены текущего пользователя без перезапуска приложения.

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

На рисунке 2.10 представлена предложенная в ходе проектирования схема ресурсов.

Рисунок 2.10 - Схема ресурсов системы

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

·        программный комплекс состоит из клиентского приложения и SQL сервера;

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

·        для соединения с SQL сервером клиент имеет файл настроек, содержащий параметры подключения;

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

·        в зависимости от команды SQL сервер возвращает клиенту наборы строк (результаты выборки);

·        клиентское приложение считывает отправленные SQL сервером данные в элементы управления и компоненты формы.

3. РАЗРАБОТКА ПРОЕКТА СИСТЕМЫ

.1 Выбор программных средств

Программный продукт «Система тестирования знаний» разработан на языке программирования C# с использованием MS Visual Studio 2013 и MS SQL Server 2008.

C# (Си-шарп) − объектно-ориентированный язык программирования для платформы .NET. Разработан в 2000 году Андерсом Хейлсбергом, Скоттом Вилтамутом и Питером Гольде под эгидой Microsoft Research. Основным постулатом С# является высказывание: «всякая сущность есть объект». Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода. C# − это полнофункциональный объектно-ориентированный язык, который поддерживает все три «столпа» объектно-ориентированного программирования: инкапсуляцию, наследование и полиморфизм. Он имеет прекрасную поддержку компонентов, надежен и устойчив благодаря использованию «сборки мусора», обработки исключений, безопасности типов. Язык C# разрабатывался «с нуля» и вобрал в себя много полезных свойств таких языков, как C++, Java, Visual Basic, а также Pascal, Delphi и др. При этом необходимость обратной совместимости с предыдущими версиями отсутствовала, что позволило языку C# избежать многих отрицательных сторон своих предшественников. Выделение и объединение лучших идей современных языков программирования делает язык C# не просто суммой их достоинств, а языком программирования нового поколения [9].# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников − языков C++, Delphi, Modula и Smalltalk − С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (в отличие от Haskell).Синтаксические конструкции С# унаследованы не только от C++, но и от Visual Basic. Например, в С#, как и в Visual Basic, используются свойства классов как C++, С# позволяет производить перегрузку операторов для созданных вами типов (Java не поддерживает ни ту, ни другую возможность). С# − это фактически гибрид разных языков. При этом, С# синтаксически не менее (если не более) чист, чем Java, так же прост, как Visual Basic, и обладает практически той же мощью и гибкостью, что и C++. Подводя итоги, еще раз выделим основные особенности С# [9]:

·        Указатели больше не нужны. В программах на С#, как правило, нет необходимости в работе с ними (однако если вам это потребуется, пожалуйста, − возможности для работы с указателями в вашем распоряжении);

·        Управление памятью производится автоматически;

·        В С# предусмотрены встроенные синтаксические конструкции для работы с перечислениями, структурами и свойствами классов.

·        В С# осталась возможность перегружать операторы, унаследованная от C++. При этом значительная часть возникавших при этом сложностей ликвидирована;

·        Предусмотрена полная поддержка использования программных интерфейсов. Однако в отличие от классического СОМ, применение интерфейсов − это не единственный способ работы с типами, используя различные двоичные модули .NET позволяет передавать объекты (как ссылки или как значения) через границы программных модулей;

·        Также предусмотрена полная поддержка аспектно-ориентированных программных технологий (таких как атрибуты). Это позволяет присваивать типам характеристики (что во многом напоминает COM IDL) для описания в будущем поведения данной сущности.SQL Server 2008 представляет собой платформу для работы с базами данных, обеспечивающую возможность крупномасштабной оперативной обработки транзакций (OLTP), хранения данных и работы с приложениями для электронной торговли, а также является платформой бизнес-аналитики для создания решений по интеграции данных, анализу и составлению отчетов [6].

В структуру Microsoft SQL Server 2008 входят следующие компоненты или, как их иначе называют, «службы» [6]:

·        Компонент Database Engine. Компонент Database Engine представляет собой основную службу для хранения, обработки и обеспечения безопасности данных. Этот компонент обеспечивает управляемый доступ к ресурсам и быструю обработку транзакций, что позволяет использовать его даже в самых требовательных корпоративных приложениях обработки данных. Кроме того, компонент Database Engine предоставляет разносторонние средства поддержания высокого уровня доступности;

·        Службы Analysis Services − многомерные данные. Службы Analysis Services поддерживают обработку OLAP, позволяя проектировать и создавать многомерные структуры, которые содержат данные, собранные из других источников данных (например, реляционных баз данных), и управлять этими многомерными структурами;

·        Службы Analysis Services − интеллектуальный анализ данных. Благодаря службам Analysis Services можно проектировать, создавать и визуализировать модели интеллектуального анализа данных. Разнообразие стандартных алгоритмов интеллектуального анализа данных позволяет создавать такие модели на основе других источников данных;

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

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

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

·        Компонент SQL Server Service Broker Компонент Service Broker призван помочь разработчикам в создании безопасных масштабируемых приложений баз данных. Это новая технология компонента Database Engine предоставляет платформу для взаимодействия на основе обмена сообщениями, благодаря которой независимые компоненты приложений могут действовать как единое целое. В компонент Service Broker включена инфраструктура асинхронного программирования, которая может использоваться как приложениями в пределах одной базы данных или экземпляра, так и распределенными приложениями;Server 2008 представляет «среды» для облегчения выполнения задач разработки и управления: среда SQL Server Management Studio (рисунок 3.1) и среда Business Intelligence Development Studio. В среде Management Studio можно разрабатывать решения компонента SQL Server Database Engine и решения по уведомлению и управлять ими, управлять развернутыми решениями служб Analysis Services, запускать пакеты служб Integration Services и управлять ими, управлять серверами, отчетами и моделями отчетов служб Reporting Services. В среде BI Development Studio можно разрабатывать решения бизнес-аналитики: проекты служб Analysis Services используются для разработки кубов, измерений и структур интеллектуального анализа данных; проекты служб Reporting Services − для создания отчетов; проекты моделей отчетов − для определения моделей отчетов и проекты служб Integration Services − для создания пакетов. Обе эти среды тесно взаимосвязаны с Microsoft Visual Studio и Microsoft Office System [6].

В этих средах SQL Server 2008 предоставляет графические инструменты, необходимые для проектирования, разработки, развертывания и администрирования реляционных баз данных, аналитических объектов, пакетов преобразования данных, топологий репликации, отчетов, серверов отчетов и серверов уведомлений. Кроме того, SQL Server 2008 включает программы командной строки, позволяющие выполнять из командной строки задачи администрирования [6].

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

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

·        создание в базе данных новой таблицы;

·        добавление в таблицу новых записей;

·        изменение записей;

·        удаление записей;

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

Рисунок 3.1 - Окно SQL Server Management Studio

Со временем, SQL усложнился − обогатился новыми конструкциями, обеспечил возможность описания и управления новыми хранимыми объектами (например, индексы, представления, триггеры и хранимые процедуры) − и стал приобретать черты, свойственные языкам программирования. Каждое предложение SQL − это запрос или обращение к базе данных, которое приводит к изменению в базе данных. В соответствии с тем, какие изменения происходят в базе данных, различают следующие типы запросов [6]:

·        запросы на создание или изменение в базе данных новых или существующих объектов (при этом в запросе описывается тип и структура создаваемого или изменяемого объекта);

·        запросы на получение данных;

·        запросы на добавление новых данных;

·        запросы на удаление данных;

·        обращения к СУБД.

Основным объектом хранения реляционной базы данных является таблица, поэтому все SQL-запросы − это операции над таблицами. В соответствии с этим, запросы делятся на:

·        запросы, оперирующие самими таблицами (создание и изменение таблиц);

·        запросы, оперирующие с отдельными записями (или строками таблиц) или наборами записей.

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

·        типа хранимых в каждом поле значений;

·        связей между таблицами (задание первичных и вторичных ключей);

·        информации, необходимой для построения индексов.

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

·        вставка новой строки;

·        изменение значений полей строки или набора строк;

·        удаление строки или набора строк.

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

·        просмотреть полученный набор;

·        изменить все записи набора;

·        удалить все записи набора.

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

.2 Разработка базы данных

SQL Server − система управления реляционными базами данных (СУРБД), разработанная корпорацией Microsoft. Основной используемый язык запросов − Transact-SQL, создан совместно Microsoft и Sybase. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для работы с базами данных размером от персональных до крупных баз данных масштаба предприятия; конкурирует с другими СУБД в этом сегменте рынка [6].

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

Таблица «Ответы» (рисунок 3.2):

·        КодОтвета - PK, int, not null;

·        КодВопроса - FK, int, not null;

·        Ответ - nvarchar(200), not null;

·        Правильный - nvarchar(3), not null.

Рисунок 3.2 - Создание таблицы «Ответы»

клиент сервер база данные

Таблица «Вопросы» (рисунок 3.3):

·        КодВопроса - PK, int, not null;

·        КодТеста - FK, int, not null;

·        Вопрос - nvarchar(100), not null;

Рисунок 3.3 - Создание таблицы «Вопросы»

Таблица «Тестирование» (рисунок 3.4):

·        КодТестирования - PK, int, not null;

·        КодРегистрации - FK, int, not null;

·        КодТеста - FK, int, not null;

·        Начато - smalldatetime, not null;

·        Окончено - smalldatetime, not null;

·        ВерныхОтветов - int, not null;

·        ОценкаСистемы - int, not null.

Таблица «Тесты» (рисунок 3.5):

·        КодТеста - PK, int, not null;

·        КодПреподавателя - FK, int, not null;

·        Тематика - nvarchar(100), not null;

·        Вопросов - int, not null.

Рисунок 3.4 - Создание таблицы «Тестирование»

Рисунок 3.5 - Создание таблицы «Тесты»

Таблица «Регистрации» (рисунок 3.6):

·        КодРегистрации - PK, int, not null;

·        Учащийся - nvarchar(40), not null;

·        Класс - nvarchar(10), not null;

·        Дата - datetime, not null.

Рисунок 3.6 - Создание таблицы «Регистрации»

Таблица «Преподаватели» (рисунок 3.7).

·        КодПреподавателя - PK, int, not null;

·        Преподаватель - nvarchar(50), not null;

·        Логин - nvarchar(10), not null;

·        Пароль - nvarchar(10), not null.

Рисунок 3.7 - Создание таблицы «Преподаватели»

Диаграмма базы данных и связей между таблицами базы данных представлена на рисунке 3.8.

Рисунок 3.8 - Диаграмма базы данных

Между таблицами «Регистрации» и «Тестирование» существует связь один ко многим. Это позволяет нам связывать результаты тестирования с данными зарегистрировавшегося предварительно ученика.

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

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

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

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

3.3 Алгоритм работы программы

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

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

Алгоритм означает точное описание некоторого процесса, инструкцию по его выполнению. Разработка алгоритма является сложным и трудоемким процессом. Алгоритмизация − это техника разработки (составления) алгоритма для решения задач на ЭВМ. Блок-схема обобщенного алгоритма работы программы представлена на рисунке 3.9.

Рисунок 3.9 - Блок-схема алгоритма работы программы

Для записи алгоритма решения задачи применяются следующие изобразительные способы их представления:

·        словесно-формульное описание;

·        блок-схема (схема графических символов);

·        алгоритмические языки;

·        операторные схемы;

·        псевдокод;

3.4 Разработка программного продукта

Со времени появления платформы .NET (примерно в 2001 г.) среди библиотек базовых классов появился API по имени Windows Forms, представленный в основном сборкой System.Windows.Forms.dll. Инструментальный набор Windows Forms предоставляет типы, необходимые для построения графических пользовательских интерфейсов для настольных компьютеров, создания специализированных элементов управления, управления ресурсами (например, строками и значками) и выполнения других задач, возникающих при программировании для пользовательских компьютеров. Имеется и дополнительный API по имени GDI+ (представленный сборкой System.Drawing.dll), который предоставляет дополнительные типы, позволяющие программисту генерировать двухмерную графику, взаимодействовать с сетевыми принтерами и обрабатывать графические данные [9].Forms (и GDI+) применяются в платформе .NET 4.0 и, видимо, будут существовать еще некоторое время (возможно, длительное) в составе библиотеки базовых классов. Правда, после выхода .NET 3.0 компания Microsoft выпустила совершенно новый инструментальный API под названием Windows Presentation Foundation (WPF) [9].

Несомненно, наиболее важным пространством имен Windows Forms является System.Windows.Forms. Типы из этого пространства имен можно разбить на следующие крупные категории [9]:

·        Базовая инфраструктура. Это типы, представляющие базовые операции программ, которые используют Windows Forms (Form и Application), и различные типы, предназначенные для взаимодействия с устаревшими элементами ActiveX, a также для взаимодействия с новыми специальными элементами управления WPF;

·        Элементы управления. Эти типы применяются для создания графических пользовательских интерфейсов (наподобие Button, MenuStrip, ProgressBar и DataGridView), все они являются производными от базового класса Control. Элементы управления допускают настройку на этапе проектирования и видимы (по умолчанию) во время выполнения;

·        Компоненты. Это типы, которые не порождены от базового класса Control, но все-таки могут предоставлять программам Windows Forms визуальные возможности (например, ToolTip и ErrorProvider). Многие компоненты (к примеру, Timer и System.ComponentModel.BackgroundWorker) не видимы во время выполнения, но все-таки допускают настройку на этапе проектирования;

·        Окна стандартных диалогов. В Windows Forms имеется несколько заготовленных диалоговых окон для распространенных операций (например, OpenFileDialog, PrintDialog и ColorDialog).

В мире Windows Forms тип Form представляет любое окно в приложении, включая главное окно самого верхнего уровня, дочерние окна приложений с многодокументным интерфейсом (multiple document interface − MDI), а также модальные и немодальные диалоговые окна. Тип Form содержит множество возможностей, унаследованных от классов-предков, а также из реализуемых им многочисленных интерфейсов.

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

Для создания нового проекта в Visual Studio выберем «New»-«Project», в появившемся окне выберем «Windows Form Application» и заполним предложенные поля.

Для передачи запроса SQL серверу и возврату результата в виде набора строк (запросы на выборку) был реализован метод «GetSQLData», представленный ниже.

В качестве параметра метод принимает строку-запрос, в качестве возвращаемого значения имеет тип «DataTable» − таблицу данных.

public static DataTable GetSQLData(string query)

{ds = new DataSet();myConnection = new SqlConnection(Config.ConnectionString);

{.Open();

}(Exception e1)

{.Show(e1.ToString());

}comm = new SqlCommand(query);.CommandType = System.Data.CommandType.Text;.Connection = myConnection;dataAdapter = new SqlDataAdapter(comm);

{= new DataSet();.Fill(ds);

}

{.Show("Error");

}

{.Close();

}(Exception e3)

{.Show(e3.ToString());

}ds.Tables[0];

}

public static void SetSQLData(string query)

{myConnection = new SqlConnection(Config.ConnectionString);

{.Open();

}(Exception e1)

{.Show(e1.ToString());

}comm = new SqlCommand(query);.CommandType = System.Data.CommandType.Text;.Connection = myConnection;.ExecuteNonQuery();

{.Close();

}(Exception e3)

{.Show(e3.ToString());;

}

}

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

class Config

{static string ConnectionString = GetParam("ConnectionStringSql");string Connection

{

{ConnectionString;

}

{= value;

}

}static string GetPathTo(string ParamName)

{Application.StartupPath +.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings[ParamName].Value;

}

}

}

Переменная «Connection» этого класса является строкой для соединения с сервером. При запуске она инициализируется из файла настроек при помощи метода «GetParam», представленного ниже.

public static string GetParam(string ParamName)

{ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings[ParamName].Value;

}

«App.config» - XML-файл, содержаний переменные и их явно или неявно указываемые значения. Текст сформированного xml-документа пользовательских настроек приведен ниже.

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<connectionStrings>

<clear />

<add name="Тестирование знаний"="Valid Connection String;" />

</connectionStrings>

<appSettings>

<add key="ConnectionStringSql" value="server=localhost; Trusted_Connection=yes; database=Тест; Connection timeout=10"/>

</appSettings>

</configuration>

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

Добавим в обработчик события «OnClick» следующий код для вызова другой формы приложения:

private void button1_Click(object sender, EventArgs e)

{obj = new NewTest();.ShowDialog();

}

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

private void Load_Tables(string query)

{.Items.Clear();dt = Connection.GetSQLData(query);(DataRow row in dt.Rows)

{d = new DateTime();item = new ListViewItem(row[0].ToString());(int i = 1; i < dt.Columns.Count; i++)

{.SubItems.Add(row[i].ToString());

}

listView1.Items.Add(item);

}

}

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

Добавить форму в текущий проект можно из контекстного окна «Solution Explorer», или через меню «Project»-«Add Windows Form». В появившемся окне вводим имя создаваемой формы и жмем «Add».

Начнем с формы авторизации преподавателя и регистрации студента для тестирования («OpenForm»). Используя элементы «GroupBox», «Label», «RadioButton», «TextBox» и «Button» придадим ей следующий вид.

Задачи для этих элементов на данной форме будут следующими:

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

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

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

. Button - подтверждение действия пользователем, считываемое системой.

В случае выбора того или иного элемента «RadioButton» («Ученик» или «Преподаватель»), будут разблокированы поля для ввода данных студента или преподавателя соответственно. По нажатию на кнопку «Начать работу» осуществляется авторизация.

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

Данные из полей «Наименование», «Количество вопросов» и «Преподаватель» считываются и, при помощи запроса на вставку в методе «SetSQLData» класса «Connection» отправляются SQL-серверу.

В случае успеха или неудачи пользователю будет выведено соответствующее сообщение.

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

{query;

{= "Select Преподаватель from Преподаватели";dt = Connection.GetSQLData(query);.DataSource = dt;.DisplayMember = "Преподаватель";

}

{.Show("Ошибка загрузки справочника <Преподаватели>");

}

}

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

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

private void Load_Tables(string query)

{.Items.Clear();dt = Connection.GetSQLData(query);(DataRow row in dt.Rows)

{d = new DateTime();item = new ListViewItem(row[0].ToString());(int i = 1; i < dt.Columns.Count; i++)

{(i == dt.Columns.Count - 1)

{= Convert.ToDateTime(row[i]);.SubItems.Add(d.ToShortDateString());

}

{.SubItems.Add(row[i].ToString());

}

}.Items.Add(item);

}

}

Следующая форма - форма тестирования знаний. Элемент «DateTimePicker» размещен на форме для возможности точного слежения за временем начала и окончания сдачи теста. Данный элемент скрыт от пользователя и не отображается.

Для работы изменения вопросов и ответов теста добавим еще одну форму и придадим ей следующий вид.

Аналогичным путем были созданы и реализованы остальные формы автоматизированной системы тестирования знаний по дисциплине «Русский язык». Более подробно функционал программы представлен в разделе «Руководство пользователя» и в приложении «Листинг кода программы».

3.5 Руководство пользователя

.5.1 Режим «Ученик»

Для запуска приложения необходимо дважды кликнуть на файл «Тест.exe».

После запуска откроется форма для авторизации и регистрации учащегося.

Необходимо выбрать режим «Ученик» и заполнить предложенные для ввода данных поля («Ученик» и «Класс»), после чего нажать кнопку «Начать работу».

После этого откроется главная форма приложения.

Для начала тестирования необходимо выбрать тест в таблице и нажать кнопку «Начать тестирование».

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

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

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

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

3.5.2 Режим «Преподаватель»

Для запуска приложения необходимо дважды кликнуть на файл «Тест.exe».

После запуска откроется форма для авторизации преподавателя и регистрации учащегося.

Необходимо выбрать режим «Преподаватель» и заполнить предложенные для ввода данных поля («Логин» и «Пароль»), после чего нажать кнопку «Начать работу».

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

После этого откроется главная форма приложения.

Для добавления теста необходимо нажать кнопку «Добавить тест».

Откроется форма с полями для заполнения, после ввода данных в которые, необходимо нажать кнопку «Добавить».

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

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

После нажатия кнопки откроется форма для изменения вопросов и вариантов ответа выбранного теста.

Для добавления вопроса нужно заполнить предложенные поля и нажать кнопку «Принять изменения».

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

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

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

ЗАКЛЮЧЕНИЕ

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

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

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

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

Работа системы основывается на данных, хранящихся в таблицах реляционной СУБД Microsoft SQL Server 2008, которая используется в качестве сервера базы данных программной системы.

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

1. Аванесов, В.С. Теория и практика педагогических измерений [эл. рес.]: Трудность теста и тестовых заданий / В.С. Аванесов. - Режим доступа: http://testolog.narod.ru, свободный.

. Гвоздева В.А. Основы построения автоматизированных информационных систем: учеб. - М.: ИНФРА-М; ФОРУМ, 2008. - 320 с.

. Гагарина Л.Г. Разработка и эксплуатация АИС: учеб. - ИНФРА-М, 2011. - 384 с.

. Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD MCSD: официальное пособие Microsoft. - Москва: Русская редакция, 2011. - 478 с.

. Разработка Windows-приложений на основе Visual C# : учеб. - Москва: Electronic pub, 2009. - 424 с.

. Дэвид Сеппа − Microsoft ADO.NET: учеб. - Москва: Русская редакция, 2013. - 640с.

. Доступ к данным из приложений (Microsoft ADO.NET, Microsoft SQL Server): Тематический сборник материалов MSDN Library и MSDN Magazine - Москва: Русская редакция, 2013. - 400 с.

. Мартин, М. Принципы, паттерны и методики гибкой разработки на языке C#: учеб. - Москва: Символ-Плюс, 2011. - 768 с.

. Фленов, М. Библия C#: учеб. - БХВ-Петербург, 2011. - 560 с.

ПРИЛОЖЕНИЕ ЛИСТИНГ КОДА

Форма MainForm.cs

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Windows.Forms;Тест

{partial class MainForm : Form

{MainForm()

{();

}static string test_id, tematics, quest_count;void Load_Tables(string query)

{.Items.Clear();dt = Connection.GetSqlData(query);(DataRow row in dt.Rows)

{item = new ListViewItem(row[0].ToString());(int i = 1; i < dt.Columns.Count; i++)

{.SubItems.Add(row[i].ToString());

}.Items.Add(item);

}

}void MainForm_Load(object sender, EventArgs e)

{obj = new OpenForm();.ShowDialog();

this.Text = "Система тестирования знаний по дисциплине <Русский язык>";sql = "SELECT Тесты.КодПреподавателя, Тесты.КодТеста, Тесты.Тематика, Тесты.Вопросов, Преподаватели.Преподаватель FROM Тесты INNER JOIN Преподаватели ON Тесты.КодПреподавателя = Преподаватели.КодПреподавателя";

Load_Tables(sql);(OpenForm.teacher == "")

{.Enabled = false;.Enabled = false;.Enabled = false;

}

{.Enabled = true;.Enabled = true;.Enabled = true;

}

}void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)

{(e.IsSelected)

{_id = listView1.Items[e.ItemIndex].SubItems[1].Text;= listView1.Items[e.ItemIndex].SubItems[2].Text;_count = listView1.Items[e.ItemIndex].SubItems[3].Text;

}

}void button7_Click(object sender, EventArgs e)

{obj = new TestForm();.ShowDialog();

}void button5_Click(object sender, EventArgs e)

{obj = new ResultForm();.ShowDialog();

}

void button1_Click(object sender, EventArgs e)

{obj = new NewTest();.ShowDialog();

}void button2_Click(object sender, EventArgs e)

{obj = new NewTest();.Edit = true;.ShowDialog();

}void button3_Click(object sender, EventArgs e)

{obj = new EditQuestions();.ShowDialog();

}

}

}

Форма ResultForm.cs

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Тест

{partial class ResultForm : Form

{ResultForm()

{();

}void Load_Tables(string query)

{.Items.Clear();dt = Connection.GetSqlData(query);(DataRow row in dt.Rows)

{item = new ListViewItem(row[0].ToString());(int i = 1; i < dt.Columns.Count; i++)

{.SubItems.Add(row[i].ToString());

}.Items.Add(item);

}

}void ResultForm_Load(object sender, EventArgs e)

{sql = "SELECT Тесты.КодТеста, Регистрации.КодРегистрации, Тестирование.КодТестирования, Тесты.Тематика, Регистрации.Студент, Регистрации.Группа, Тесты.Вопросов, Тестирование.ВерныхОтветов, Тестирование.ОценкаСистемы, Тестирование.Начато, Тестирование.Окончено FROM Тесты INNER JOIN Тестирование ON Тесты.КодТеста = Тестирование.КодТеста INNER JOIN Регистрации ON Тестирование.КодРегистрации = Регистрации.КодРегистрации INNER JOIN Преподаватели ON Тесты.КодПреподавателя = Преподаватели.КодПреподавателя";_Tables(sql);

}

}

}

Форма TestForm.cs

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Тест

{partial class TestForm : Form

{TestForm()

{();

}static string[] quest = new string[Int32.Parse(MainForm.quest_count)];static int cursor = 0;static int right_answers = 0;static string right_answer;static string user_answer;static DateTime start;static int progress = 1;void checkBox1_CheckedChanged(object sender, EventArgs e)

{(checkBox1.Checked)

{_answer = checkBox1.Text;

}

}void checkBox2_CheckedChanged(object sender, EventArgs e)

{(checkBox2.Checked)

{_answer = checkBox2.Text;

}

}void checkBox3_CheckedChanged(object sender, EventArgs e)

{(checkBox3.Checked)

{_answer = checkBox3.Text;

}

}void checkBox4_CheckedChanged(object sender, EventArgs e)

{(checkBox4.Checked)

{_answer = checkBox4.Text;

}

}void VipeCheckbox()

{.Checked = false;.Checked = false;.Checked = false;.Checked = false;

}void CheckAnswer()

{(right_answer == user_answer)

{_answers= right_answers+1;

}++;.Value++;(cursor);

}void StartTest(int cursor)

{.Text = "Тестирование по теме '"+MainForm.tematics+"'. Вопрос №"+(cursor+1)+"";(cursor < Int32.Parse(MainForm.quest_count))

{sql;[] answers = new string[4];quest_id = 0; int id = 0;.Text = quest[cursor];= "Select КодВопроса from Вопросы Where Вопрос='" + quest[cursor] + "' and КодТеста=" + Int32.Parse(MainForm.test_id) + "";dt = Connection.GetSqlData(sql);(DataRow row in dt.Rows)

{_id = Convert.ToInt32(row["КодВопроса"]);

}= "Select Ответ from Ответы Where КодВопроса=" + quest_id + "";dc = Connection.GetSqlData(sql);(DataRow row in dc.Rows)

{[id] = row["Ответ"].ToString();++;

}.Text = answers[0];.Text = answers[1];.Text = answers[2];.Text = answers[3];= "Select Ответ from Ответы Where КодВопроса=" + quest_id + " and Правильный='Да'";ans = Connection.GetSqlData(sql);(DataRow row in ans.Rows)

{_answer = row["Ответ"].ToString();

}

}

{res = Convert.ToDouble(right_answers) / Convert.ToDouble(MainForm.quest_count) * 100;reg_id = 0;sql = "Select КодРегистрации as id from Регистрации";dt = Connection.GetSqlData(sql);(DataRow row in dt.Rows)

{_id = Convert.ToInt32(row["id"]);

}= "Insert into Тестирование(КодРегистрации, КодТеста, Начато, Окончено, ВерныхОтветов, ОценкаСистемы) Values("+reg_id+", "+Int32.Parse(MainForm.test_id)+", '"+start.ToString()+"', '"+dateTimePicker1.Value.ToString()+"', "+right_answers+", '"+res.ToString()+"')";.SetSqlData(sql);.Show("Правильных ответов: "+right_answers.ToString()+", вопросов в тесте: "+MainForm.quest_count+"\n\n\tВаш результат: " + res.ToString() + "%.");.Close();

}

}void TestForm_Load(object sender, EventArgs e)

{.Minimum = 0;.Maximum = Int32.Parse(MainForm.quest_count);sql = "Select Вопрос from Вопросы Where КодТеста="+Int32.Parse(MainForm.test_id)+"";dt = Connection.GetSqlData(sql);i = 0;(DataRow row in dt.Rows)

{[i] = row["Вопрос"].ToString();++;

}= "Insert into Регистрации(Студент, Группа, Дата) Values('" + OpenForm.name + "', '" + OpenForm.group + "', '" + dateTimePicker1.Value.ToString() + "')";= dateTimePicker1.Value;.SetSqlData(sql);(cursor);

}void button1_Click(object sender, EventArgs e)

{();();

}

}

}

Форма OpenForm.cs

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Тест

{partial class OpenForm : Form

{OpenForm()

{();

}static string name, group, teacher;void radioButton1_CheckedChanged(object sender, EventArgs e)

{(radioButton1.Checked == true)

{.Enabled = false;.Enabled = true;

}

{.Enabled = false;.Enabled = true;

}

}void button1_Click(object sender, EventArgs e)

{(radioButton2.Checked == true)

{sql = "Select Преподаватель from Преподаватели Where Логин='" + textBox1.Text + "' and Пароль='" + textBox1.Text + "'";dt = Connection.GetSqlData(sql);(dt.Rows.Count > 0)

{(DataRow row in dt.Rows)

{= row["Преподаватель"].ToString();

}.Show("Вы успешно вошли в систему, <" + teacher + ">");

}

}(radioButton1.Checked == true)

{= textBox4.Text;= textBox3.Text;

}.Close();

}void OpenForm_Load(object sender, EventArgs e)

{.Text = "Система тестирования знаний";

}void OpenForm_FormClosing(object sender, FormClosingEventArgs e)

{(radioButton1.Checked == true)

{= textBox4.Text;= textBox3.Text;

}

}

}

}

Форма NewTestForm.cs

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Тест

{partial class NewTest : Form

{static bool Edit = false;NewTest()

{();

}void NewTest_Load(object sender, EventArgs e)

{sql = "Select Преподаватель from Преподаватели";

DataTable dt = Connection.GetSqlData(sql);.DataSource = dt;.DisplayMember = "Преподаватель";(Edit == true)

{.Text = "Изменить";.Text = MainForm.tematics;.Text = MainForm.quest_count;

this.Text = "Изменение теста";

}

{.Text = "Добавить";

this.Text = "Добавление теста";

}

}void button1_Click(object sender, EventArgs e)

{teacher_id = 0;sql = "Select КодПреподавателя from Преподаватели Where Преподаватель='"+comboBox1.Text+"'";dt = Connection.GetSqlData(sql);(DataRow row in dt.Rows)

{_id = Convert.ToInt32(row["КодПреподавателя"]);

}(Edit == true)

{= "Update Тесты set Тематика='"+textBox1.Text+"', КодПреподавателя="+teacher_id+", Вопросов="+Int32.Parse(textBox2.Text)+" Where КодТеста="+Int32.Parse(MainForm.test_id)+"";.SetSqlData(sql);.Show("Данные теста №" + MainForm.test_id + " успешно изменены");

}

{= "Insert into Тесты(КодПреподавателя, Тематика, Вопросов) Values("+teacher_id+", '"+textBox1.Text+"', "+Int32.Parse(textBox2.Text)+")";.SetSqlData(sql);

}

}void NewTest_FormClosing(object sender, FormClosingEventArgs e)

{= false;

}

}

}

Форма EditQuestions.cs

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Тест

{partial class EditQuestions : Form

{EditQuestions()

{();

}static bool Edit = false;static int answer_id;void Load_Tables(string query)

{.Items.Clear();dt = Connection.GetSqlData(query);(DataRow row in dt.Rows)

{item = new ListViewItem(row[0].ToString());(int i = 1; i < dt.Columns.Count; i++)

{.SubItems.Add(row[i].ToString());

}.Items.Add(item);

}

}void EditQuestions_Load(object sender, EventArgs e)

{.Text = "Изменение вопросов теста №"+MainForm.test_id+"";sql = "Select КодТеста, КодВопроса, Вопрос from Вопросы Where КодТеста="+Int32.Parse(MainForm.test_id)+"";

Load_Tables(sql);

}void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)

{(e.IsSelected)

{i = 0;.Text = listView1.Items[e.ItemIndex].SubItems[2].Text;quest_id = Convert.ToInt32(listView1.Items[e.ItemIndex].SubItems[1].Text);sql = "Select Ответ from Ответы Where КодВопроса="+quest_id+"";[] quest = new string[4];dt = Connection.GetSqlData(sql);(DataRow row in dt.Rows)

{[i] = row["Ответ"].ToString();++;

}.Text = quest[0];.Text = quest[1];.Text = quest[2];.Text = quest[3];= true;

}

}void button1_Click(object sender, EventArgs e)

{(Edit == true)

{quest_id = 0;sql = "Update Вопросы set Вопрос='"+textBox1.Text+"' Where КодТеста="+Int32.Parse(MainForm.test_id)+"";.SetSqlData(sql);= "Select КодВопроса from Вопросы Where Вопрос='"+textBox1.Text+"'";dt = Connection.GetSqlData(sql);(DataRow row in dt.Rows)

{_id = Convert.ToInt32(row["КодВопроса"]);

}[] answers = new string[4];[0] = textBox2.Text;[1] = textBox3.Text;[2] = textBox4.Text;[3] = textBox5.Text;(int i = 0; i < 4; i++)

{((i + 1) == answer_id)

{= "Update Ответы Set Ответ='" + answers[i] + "', Правильный='Да' Where КодВопроса="+quest_id+"";.SetSqlData(sql);

}

{= "Update Ответы Set Ответ='" + answers[i] + "', Правильный='Нет' Where КодВопроса=" + quest_id + "";.SetSqlData(sql);

}

}

}

{quest_id = 0;sql = "Insert into Вопросы(КодТеста, Вопрос) Values("+Int32.Parse(MainForm.test_id)+", '"+textBox1.Text+"')";.SetSqlData(sql);= "Select КодВопроса from Вопросы Where Вопрос='"+textBox1.Text+"'";dt = Connection.GetSqlData(sql);(DataRow row in dt.Rows)

{_id = Convert.ToInt32(row["КодВопроса"]);

}[] answers = new string[4];[0] = textBox2.Text;[1] = textBox3.Text;[2] = textBox4.Text;[3] = textBox5.Text;(int i = 0; i < 4;i++ )

{((i + 1) == answer_id)

{= "Insert into Ответы(КодВопроса, Ответ, Правильный) Values("+quest_id+", '"+answers[i]+"', 'Да')";.SetSqlData(sql);

}

{= "Insert into Ответы(КодВопроса, Ответ, Правильный) Values(" + quest_id + ", '" + answers[i] + "', 'Нет')";.SetSqlData(sql);

}

}

}

}void checkBox2_CheckedChanged(object sender, EventArgs e)

{(checkBox2.Checked == true)

{_id = 1;

}

}void checkBox3_CheckedChanged(object sender, EventArgs e)

{(checkBox2.Checked == true)

{_id = 3;

}

}void checkBox1_CheckedChanged(object sender, EventArgs e)

{(checkBox2.Checked == true)

{_id = 2;

}

}void checkBox4_CheckedChanged(object sender, EventArgs e)

{(checkBox2.Checked == true)

{_id = 4;

}

}

}

Похожие работы на - Разработка автоматизированной системы тестирования знаний по дисциплине 'Русский язык'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!