Система тестирования пользователей

 

Содержание


1. Задание на курсовой проект

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

.1 Введение

.2 Основания для разработки

.3 Назначение разработки

.4 Требования к программе или программному изделию

.4.1 Требования к функциональным характеристикам

.4.2 Требования к надежности

.4.3 Условия эксплуатации

.4.4 Требования к составу и параметрам технических средств

.4.5 Требования к информационной и программной совместимости

.4.6 Требования к маркировке и упаковке

.4.7 Требования к транспортированию и хранению

.4.8 Специальные требования

.5 Требования к программной документации

.6 Стадии и этапы разработки

.7 Порядок контроля и приемки

. Формализация предметной области

.1 SADT диаграмма системы тестирования пользователей до автоматизации

.1.1 Декомпозиция первого уровня

.2 SADT диаграмма системы тестирования пользователей после автоматизации

.2.1 Декомпозиция первого уровня

. Концепция построения базы данных

.1 Таблица "Пользователи" и её основные атрибуты

.2 Таблица "Тема" и её основные атрибуты

.3 Таблица "Вопрос" и её основные атрибуты

.4 Таблица "Ответ" и её основные атрибуты

.5 Таблица "Отчёт" и её основные атрибуты

. Автоматизированные рабочие места

.1 Автоматизированное рабочее место пользователя

.2 Автоматизированное рабочее место системного администратора

. Описание программы

.1 Аннотация

.2 Настройка SQL-сервера

.3 Установка программы

.4 Описание работы с программой

Приложение


1. Задание на курсовой проект


Система тестирования пользователей

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

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

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

Дополнительные требования:

1Предварительно должен быть составлен план разработки и представить его преподавателю.

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

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

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

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

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

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


2. Техническое задание на разработку модели системы тестирования пользователей с применением технологии "клиент-сервер"


.1 Введение


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


2.2 Основания для разработки


Заказ на разработку системы тестирования пользователей.


2.3 Назначение разработки


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


2.4 Требования к программе или программному изделию


.4.1 Требования к функциональным характеристикам

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

Работать под управлением ОС Windows 95/98/2000,ХР или Windows/2000/Server 2003.

Использовать для соединения и обмена данными протокол TCP/IP.

Иметь доступный и простой интерфейс пользователя.

Серверная часть должна хранить:

·базу данных пользователей:

Øфамилия;

Øимя;

Øотчество.

·результаты тестирования:

Øтекст результата тестирования (пройден/не пройден);

Øколичество набранных баллов;

Øдата и время тестирования.

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

Øтема тестирования;

Øварианты ответов.

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


2.4.2 Требования к надежности

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


2.4.3 Условия эксплуатации

Стандартные условия эксплуатации программных продуктов.

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


2.4.4 Требования к составу и параметрам технических средств

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

Компьютер с процессором Intel Pentium-400 или 100%- совместимым.

Оперативная память не менее 128 Мb.

Жесткий диск объемом не менее 5 Gb.

Наличие адаптера подключения к сети (сетевой карты, модема и т.п.).

Установленная ОС Windows 95/98/NT/2000/Server 2003/ХР.

Настроенный протокол TCP/IP.


2.4.5 Требования к информационной и программной совместимости

Модель системы должна работать под управлением ОС Windows 95/98/NT/2000/Server 2003/ХР, поэтому требуется совместимость исполняемого модуля и библиотек динамического подключения стандартам, используемым этими ОС на платформе IBM PC.

Для хранения информации требуется использование баз данных формата Microsoft SQL Server.

В качестве средства разработки требуется использовать интегрированную среду разработки Borland С++ Builder, включающую редактор исходных текстов, компилятор, компоновщик и отладчик.

В качестве средства проектирования структуры базы данных и создания файлов базы данных требуется использовать Microsoft SQL Server 2000.


2.4.6 Требования к маркировке и упаковке

Не предъявляются.


2.4.7 Требования к транспортированию и хранению

Не предъявляются.


.4.8 Специальные требования

Не предъявляются.

2.5 Требования к программной документации


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


2.6 Стадии и этапы разработки


№Содержание работыСрокИсполнитель этапа разработки1.Описание предметной области в виде диаграмм бизнес-процесса (как есть и как должно быть).1 неделяПронин К.В., Блинов А.В.2.Выявление состава автоматизированных рабочих мест и их функциональность.1 неделяПронин К.В., Блинов А.В.3.Проектирование модульного состава и архитектуры системы.4.Реализация и отладка ПО3 неделиПронин К.В., Блинов А.В.5.Составление описания ПО и руководства пользователя.1 неделяПронин К.В., Блинов А.В.6.Демонстрация ПО.7.Доработка программной части и подготовка к защите.1 неделяПронин К.В., Блинов А.В.8.Защита.3 неделиПронин К.В., Блинов А.В.

.7 Порядок контроля и приемки


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

·Запуск серверной и клиентской частей.

·Соединение клиента (-ов) с сервером, проверка правильности обработки сервером соединения.

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

·Просмотр курса тестирования с клиентского рабочего места.

·Завершение сеанса связи.

3. Формализация предметной области


3.1 SADT диаграмма системы тестирования пользователей до автоматизации


.1.1 Декомпозиция первого уровня



3.2 SADT диаграмма системы тестирования пользователей после автоматизации


.2.1 Декомпозиция первого уровня


4. Концепция построения базы данных


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

·"Пользователи";

·"Тема";

·"Вопрос";

·"Ответ";

·"Отчёт".


Рисунок 1 - Структура базы данных


4.1 Таблица "Пользователи" и её основные атрибуты


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

Таблица "Пользователи" связана с другой таблицей "Отчёт" по одноимённому полю "User_ID". При этом одной записи в таблице "Пользователи" может соответствовать ноль и более записей в таблице "Отчёт" (см. рисунок 1).

Таблица 1 - Описание сущностей таблицы "Пользователь"

ПользовательОписаниеuser_idПервичный ключ. Целочисленный тип данных INTEGER.user_surnameФамилия пользователя. Строковый тип данных VARCHAR(50)user_nameИмя пользователя. Строковый тип данных VARCHAR(50)user_last_nameОтчество пользователя. Строковый тип данных VARCHAR(50)

4.2 Таблица "Тема" и её основные атрибуты

пользователь сервер программный автоматизация

Таблица "Тема" (см. таблицу 2) содержит информацию о темах вопросов для тестирования.

Таблица "Тема" связана с таблицей "Отчёт" по одноимённому "Tema_ID". При этом одной записи в таблице "Тема" может соответствовать ноль и более записей в таблице "Отчёт" (см. рисунок 1).

Таблица "Тема" связана с таблицей "Вопрос" по полям "Tema_ID" и "Tema_Parent" соответственно. При этом одной записи в таблице "Тема" может соответствовать ноль и более записей в таблице "Вопрос".


Таблица 2 - Описание сущностей таблицы "Тема"

ТемаОписаниеTema_IDПервичный ключ. Целочисленный тип данных INTEGER.Tema_textНазвание темы. Строковый тип данных VARCHAR(50)

4.3 Таблица "Вопрос" и её основные атрибуты


Таблица "Вопрос" (см. таблицу 3) содержит информацию о вопросах для тестирования. Таблица "Вопрос" связана с таблицей "Ответ" по полям "Vopr_ID" и "Parent_ID" соответственно. При этом одной записи в таблице "Вопрос" может соответствовать ноль и более записей в таблице "Ответ" (см. рисунок 1).


Таблица 3 - Описание сущностей таблицы "Вопрос"

ВопросОписаниеVopr_idПервичный ключ. Целочисленный тип данных INTEGER.TextТекст вопроса. Строковый тип данных VARCHAR(70)SlognostСложность вопроса. Целочисленный тип данных INTEGER.Tema_ParentСоответствует одному из значений поля "Tema_ID" из таблицы "Тема", таким образом, однозначно характеризует темe. Целочисленный тип данных INTEGER.

4.4 Таблица "Ответ" и её основные атрибуты


Таблица "Ответ" (см. таблицу 4) содержит ответы на вопросы.


Таблица 4 - Описание сущностей таблицы "Ответ"

ОтветОписаниеParent_idСоответствует одному из значений поля "Vopr_ID" из таблицы "Вопросы", таким образом, однозначно характеризует текст вопроса. Целочисленный тип данных INTEGER.OtvetТекст ответа. Строковый тип данных VARCHAR(50)Prav_otvetПризнак правильного ответа. Целочисленный тип данных INTEGER.Otvet_IDПервичный ключ. Целочисленный тип данных INTEGER.

4.5 Таблица "Отчёт" и её основные атрибуты


Таблица "Отчёт" (см. таблицу 5) содержит ответы на вопросы.


Таблица 5 - Описание сущностей таблицы "Отчёт"

ОтчетОписаниеUser_idСоответствует одному из значений поля "User_ID" из таблицы "Пользователи", таким образом, однозначно характеризует пользователя. Целочисленный тип данных INTEGER.Res_textТекст результата тестирования. Строковый тип данных VARCHAR(50)BallКоличество набранных баллов. Число с плавающей запятой FLOAT(8).Tema_IDСоответствует одному из значений поля "Tema_ID" из таблицы "Тема", таким образом, однозначно характеризует темe. Целочисленный тип данных INTEGER.DateДата проведения теста. Строковый тип данных VARCHAR(50)TimeВремя проведения теста. Строковый тип данных VARCHAR(50)Result_IDПервичный ключ. Целочисленный тип данных INTEGER.

5. Автоматизированные рабочие места


5.1 Автоматизированное рабочее место пользователя


1ввод данных о пользователе в базу данных;

2выбор темы тестирования;

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


5.2 Автоматизированное рабочее место системного администратора


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

2ввод и редактирование вопросов для тестирования.


6. Описание программы


.1 Аннотация


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

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

·Фамилия, имя отчество пользователя;

·Тема тестирования;

·Ответы на вопросы.

Программа выдает пользователю следующую информацию:

·Фамилия, имя отчество пользователя;

·Тема тестирования;

·Количество набранных баллов;

·Результат тестирования;

·Результаты предыдущих тестов.

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

Для разработки использовалось следующее программное обеспечение - язык ООП Borland C++ Builder 6 c использованием технологии доступа к данным ADO (ActiveX Data Objects) и СУБД MS SQL Server 2000, работающие в среде ОС Windows. Листинг программы представлен в Приложении А.

6.2 Настройка SQL-сервера


1Вызовите компонент Microsoft SQL Server, предназначенный для создания псевдонимов серверов - "Client Network Utility". На рисунке 2 приведен пример вызова этого компонента в среде Windows 2003 Server. В других версиях ОС Windows расположение компонента может отличаться;


Рисунок 2 - Вызов программы "Client Network Utility"


2На вкладке "Общие" в списке "Отключённые протоколы" выберите запись "TCP/IP" и нажмите кнопку "Включить" (см. рисунок 3);


Рисунок 3 - Выбор протокола подключения


Выберите вкладку "Псевдоним" и нажмите кнопку "Добавить" (рисунок 4);


Рисунок 4 - Создание нового псевдонима сервера


3В появившемся окне в разделе "Сетевые библиотеки" выберите пункт "ТСР/IP", в поле "Псевдоним для сервера" введите "Prioris_w2000" (без кавычек), в поле "Имя сервера" - 127.0.0.1, а в поле "Имя канала" - 1433 (см. рисунок 5). Нажмите кнопку "ОК".


Рисунок 5 - Заполнение параметров нового псевдонима сервера


4Запустите программу управления MS SQL Server - "Enterprise Manager". Обычно это делается последовательностью действий "Пуск -> Программы -> Microsoft SQL Server -> Enterprise Manager";


Нажмите правой кнопкой мыши на узле дерева "SQL Server Group" для вызова контекстного меню;

5Выберете пункт "New SQL Server Registration";

6В появившемся окне нажмите кнопку "Далее", затем выберите из левого списка созданный сервер (Prioris_w2000) и нажмите кнопку "Add". Нажмите кнопку "Далее";

Выберите пункт "The SQL Server login information…" (см. рисунок 6), в следующем окне "Login automatically…", и в поле "Login name" введите "sa", а поле "Password" оставьте пустым (см. рисунок 7). Нажмите кнопку "Далее";


Рисунок 6 - Регистрация нового сервера


Рисунок 7 - Заполнение имени пользователя


После этого появится окно, в котором необходимо выбрать пункт "Add the SQL Server(s) to an existing SQL Server group" (см. рисунок 8);


Рисунок 8 - Выбор группы для добавления нового сервера

8После всех выше описанных операций появится окно с подтверждением успешного добавления нового сервера (см. рисунок 9);


Рисунок 9 - Подтверждение успешного добавления нового сервера


9Скопируйте два файла базы данных в каталог, где установлен SQL Server (в данном случае: "C:\Program Files\Microsoft SQL Server\MSSQL\Data");

10Запустите программу управления MS SQL Server - "Enterprise Manager". Обычно это делается последовательностью действий "Пуск -> Программы -> Microsoft SQL Server -> Query Analyzer";

Введите в появившемся окне текст: "sp_attach_db 'Kurs_Max', 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Kurs_Max_Data.MDF', 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Kurs_Max_Log.LDF'";

Нажмите клавишу F5. Произойдёт подключение файлов базы данных к серверу.


6.3 Установка программы


1Скопируйте файл "Testirovanie.exe" в выбранный вами каталог;

2Вызовите компонент Windows предназначенный для администрирования источников данных - "Источники данных (ODBC)". На рисунке 10 приведен пример вызова этого компонента в среде Windows 2003 Server. В других версиях ОС Windows расположение компонента может отличаться;

Рисунок 10 - Вызов компонента "Источники данных (ODBC)"


В открывшемся окне (см. рисунок 11) выберите одну из двух закладок - "Пользовательский DSN" или "Системный DSN";


Рисунок 11 - Главное окно компонента "Источники данных (ODBC)"


Для добавления нового источника данных на одной из этих закладок нажмите кнопку "Добавить". Вызовется мастер добавления нового источника данных (рисунок 12).

Примечание:

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

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


Рисунок 12 - Первое окно мастера создания нового источника данных


3Выберите в качестве драйвера для источника - "SQL Server" и нажмите кнопку "Готово";

4В следующем окне мастера (рисунок 13) задайте в качестве имени источника данных - "Maximoff" (прим.: обязательно латинскими буквами и именно это имя). Введите, или если это доступно, выберите из выпадающего списка название сервера, с которым будите работать (Prioris_w2000). Нажмите кнопку "Далее";


Рисунок 13 - Задание имени источника данных и выбор сервера СУБД


5В следующем окне (рисунок 14) ответьте на вопрос, как SQL-сервер должен проверять подлинность пользователя, для этого установите переключатель в положение "проверка подлинности учетной записи SQL Server". Включите переключатель "Получить параметры, используемые по умолчанию, от SQL-сервера" и введите в поле "Пользователь" - sa, а поле "Пароль" оставьте пустым. Нажмите кнопку "Далее";


Рисунок 14 - Настройка параметров проверки подлинности пользователя


6Оставив в следующих двух окнах мастера (рисунок 15 и рисунок 16) всё без изменений, завершите создание источника данных, нажав в последнем окне кнопку "Готово";


Рисунок 15 - Настройка параметров работы с БД

Рисунок 16 - Настройка параметров работы с SQL-сервером


7После окончания работы мастера появится информационное окно представленное на рисунке 17, в котором описаны произведённые настройки источника данных;


Рисунок 17 - Параметры источника данных


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


Рисунок 18 - Подтверждающее информационное сообщение о правильности настроек


.4 Описание работы с программой


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


Рисунок 19 - Заставка программы


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

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


Рисунок 20 - Окно "Результаты тестирования"


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


Рисунок 21 - Окно "Пользователи"


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


Рисунок 22 - Окно "Программа тестирования пользователей"


Если пользователь отметил правильные ответы, то цвет текста не изменится, в противном случае он поменяется на красный. В случае, когда пользователь не выбрал правильный ответ, его цвет станет зелёным (см. рисунок 23).


Рисунок 23 - Пример выбора вариантов ответа


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

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


Приложение


Листинг программы


Форма "Пользователи"

//кнопка "Начать тестирование"__fastcall TForm2::SpeedButton1Click(TObject *Sender)

{(QUsers1->IsEmpty()) //если не выбран ни один пользователь

{("Не выбран ни один пользователь!");

}//если пользователь выбран

{->Hide();->Refresh();->Show();->QVopros->SQL->Clear(); //создание запроса, который выбирает все

//вопросы для данной темы->QVopros->SQL->Add("Select * from Vopros where Tema_Parent = "+QTema->FieldByName("Tema_id")->AsString+"order by Slognost");->QVopros->Open();->QVopros->First(); //установка курсора на первую запись->Label1->Caption=Form1->QVopros->FieldByName("Text")->AsString;->QOtvet->SQL->Clear(); //создание запроса, который выбирает все

//ответы для данной вопроса->QOtvet->SQL->Add("Select * from Otvet where Parent_id = "+Form1->QVopros->FieldByName("Vopr_id")->AsString);->QOtvet->Open();->QOtvet->First(); //установка курсора на первую запись->CheckBox1->Caption=Form1->QOtvet->FieldByName("Otvet")->AsString;->QOtvet->Next();->CheckBox2->Caption=Form1->QOtvet->FieldByName("Otvet")->AsString;->QOtvet->Next();->CheckBox3->Caption=Form1->QOtvet->FieldByName("Otvet")->AsString;->QOtvet->Next();->CheckBox4->Caption=Form1->QOtvet->FieldByName("Otvet")->AsString;->GroupBox1->Caption="Вопрос "+Form1->QVopros->FieldByName("Slognost")->AsString+"-ой категории сложности";

}

}

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

//кнопка "Отчёт"__fastcall TForm2::N1Click(TObject *Sender)

{->Hide();->Show();->QOtchet->Close();->QOtchet->SQL->Clear();->QOtchet->SQL->Add("Select * from Otchet where User_ID= "+QUsers1->FieldByName("User_ID")->AsString+ "and Tema_ID= "+QTema->FieldByName("Tema_ID")->AsString);->QOtchet->Open();(!Form3->QOtchet->IsEmpty())

{(Form3->QOtchet->FieldByName("Res_text")->AsString=="Тест не пройден")

{->Label3->Font->Color= clRed;->Label4->Font->Color= clRed;->Label7->Font->Color= clRed;

}

{->Label3->Font->Color= clGreen;->Label4->Font->Color= clGreen;->Label7->Font->Color= clGreen;

}->Label7->Caption=Form3->QOtchet->FieldByName("Date")->AsString;->Label3->Caption=Form3->QOtchet->FieldByName("Res_text")->AsString+"!";->Label4->Caption="Набрано "+FloatToStr(Form3->QOtchet->FieldByName("Ball")->AsFloat)+" баллов";

}

{->Label3->Font->Color= clWindowText;->Label4->Font->Color= clWindowText;->Label3->Caption="Тестирование не производилось!";->Label4->Caption="Тестирование не производилось!";->Label7->Caption="";

}

//------------------------заполняем таблицу с темами, датой и временем на форме "Результат"->QOtchet->Close();->QOtchet->SQL->Clear();->QOtchet->SQL->Add("Select * from Otchet where User_ID= "+Form2->QUsers1->FieldByName("User_ID")->AsString+ "and Tema_ID= "+Form2->QTema->FieldByName("Tema_ID")->AsString+ "order by Date, Time");->QOtchet->Open();(!Form3->QOtchet->IsEmpty())

{(Form3->QOtchet->FieldByName("Res_text")->AsString=="Тест не пройден")

{->Label3->Font->Color= clRed;->Label4->Font->Color= clRed;->Label7->Font->Color= clRed;

}

{->Label3->Font->Color= clGreen;->Label4->Font->Color= clGreen;->Label7->Font->Color= clGreen;

}->Label7->Caption=Form3->QOtchet->FieldByName("Date")->AsString;->Label3->Caption=Form3->QOtchet->FieldByName("Res_text")->AsString+"!";->Label4->Caption="Набрано "+FloatToStr(Form3->QOtchet->FieldByName("Ball")->AsFloat)+" баллов";

}

{->Label3->Font->Color= clWindowText;->Label4->Font->Color= clWindowText;->Label3->Caption="Тестирование не производилось!";->Label4->Caption="Тестирование не производилось!";->Label7->Caption="";

}->SG1->RowCount=2;->SG1->FixedRows=1;->SG1->Cells[0][0]="Тема";->SG1->Cells[1][0]="Дата";->SG1->Cells[2][0]="Время";->SG1->Cells[0][1]="";->SG1->Cells[1][1]="";->SG1->Cells[2][1]="";->QOtchet->Close();->QOtchet->SQL->Clear();->QOtchet->SQL->Add("Select * from Otchet where User_ID= "+Form2->QUsers1->FieldByName("User_ID")->AsString+ "order by Date, Time");->QOtchet->Open();->QOtchet->First();(!Form3->QOtchet->IsEmpty())

{i=1;(!Form3->QOtchet->Eof)

{*QSelect=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Tema where Tema_ID= "+Form3->QOtchet->FieldByName("Tema_ID")->AsString);>Open();(!QSelect->IsEmpty())

{->SG1->Cells[0][i]=QSelect->FieldByName("Tema_text")->AsString;->SG1->Cells[1][i]=Form3->QOtchet->FieldByName("Date")->AsString;->SG1->Cells[2][i]=Form3->QOtchet->FieldByName("Time")->AsString;->SG1->RowCount=i+1;++;->QOtchet->Next();

}

{->SG1->Cells[0][1]="";->SG1->Cells[1][1]="";->SG1->Cells[2][1]="";

}QSelect;

}

}

}

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

//кнопка "О программе"__fastcall TForm2::N2Click(TObject *Sender)

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

}

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

{

//удаление всех записей, принадлежащих удалённому пользователю*QSel=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Otchet");>Open();>First();(!QSel->Eof)

{*QDel=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Users where User_ID= "+QSel->FieldByName("User_ID")->AsString);>Open();(QDel->IsEmpty())>Delete();>Next();QDel;

}QSel;

}

Форма "Тестирование"ball=0;prav=0; //количество правильных ответов (в БД)prav_user=0; //количество правильных ответов, данных пользователемneprav_user=0; //количество неправильных ответов, данных пользователем

//кнопка "ОК"__fastcall TForm1::SpeedButton1Click(TObject *Sender)

{

//проверка выбран ли вообще какой-нибудь ответ

if(CheckBox1->Checked==false & CheckBox2->Checked==false & CheckBox3->Checked==false & CheckBox4->Checked==false)

{("Не выбран ни один ответ!");;

}

//подсчёт кол-ва правильных ответов, выбранных пользователем>First();

//если пользователь ответил правильно

if(CheckBox1->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==1)

{_user=prav_user++;

}

//если пользователь поставил "галочку" на неправильном ответе

if(CheckBox1->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==0)

{_user=neprav_user++;->Font->Color = clRed;

}

//если пользователь не поставил "галочку" на правильном ответе

if (QOtvet->FieldByName("Prav_otvet")->AsInteger==1 & CheckBox1->Checked==false)

{->Font->Color = clGreen;

}>Next();

//если пользователь ответил правильно(CheckBox2->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==1)

{_user=prav_user++;

}

//если пользователь поставил "галочку" на неправильном ответе

if(CheckBox2->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==0)

{_user=neprav_user++;->Font->Color = clRed;

}

//если пользователь не поставил "галочку" на правильном ответе

if (QOtvet->FieldByName("Prav_otvet")->AsInteger==1 & CheckBox2->Checked==false)

{->Font->Color = clGreen;

}>Next();

//если пользователь ответил правильно(CheckBox3->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==1)

{_user=prav_user++;

}

//если пользователь поставил "галочку" на неправильном ответе

if(CheckBox3->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==0)

{_user=neprav_user++;->Font->Color = clRed;

}

//если пользователь не поставил "галочку" на правильном ответе

if (QOtvet->FieldByName("Prav_otvet")->AsInteger==1 & CheckBox3->Checked==false)

{->Font->Color = clGreen;

}>Next();

//если пользователь ответил правильно(CheckBox4->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==1)

{_user=prav_user++;

}

//если пользователь поставил "галочку" на неправильном ответе

if(CheckBox4->Checked==true & QOtvet->FieldByName("Prav_otvet")->AsInteger==0)

{_user=neprav_user++;->Font->Color = clRed;

}

//если пользователь не поставил "галочку" на правильном ответе

if (QOtvet->FieldByName("Prav_otvet")->AsInteger==1 & CheckBox4->Checked==false)

{->Font->Color = clGreen;

}

//проверка правильности ответов:

QOtvet->First();(!QOtvet->Eof)

{=prav+QOtvet->FieldByName("Prav_otvet")->AsInteger;

QOtvet->Next();

}

//подсчёт баллов за ответ

if (prav_user!=0)=ball+((prav_user-neprav_user/4)/prav)*(QVopros->FieldByName("Slognost")->AsInteger);->Visible=true;->Angles->StartAngle=1;

Pie1->Angles->EndAngle=1;

//если все ответы правильные - время задержки меньше

if (neprav_user==0)

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

}//иначе - задержка 2 сек.

{->Visible=true;->Interval=1800;->Enabled=true;

Timer2->Enabled=true;

}

//обнуляем все значения для следующего вопроса

prav=0;_user=0;_user=0;

}__fastcall TForm1::CheckBox1MouseMove(TObject *Sender,Shift, int X, int Y)

{(CheckBox1->Checked==false)->Font->Color = clWindowText;

}

//---------------------------------------------------------------------------__fastcall TForm1::CheckBox3MouseMove(TObject *Sender,Shift, int X, int Y)

{(CheckBox3->Checked==false)->Font->Color = clWindowText;

}

//---------------------------------------------------------------------------__fastcall TForm1::CheckBox4MouseMove(TObject *Sender,Shift, int X, int Y)

{(CheckBox4->Checked==false)->Font->Color = clWindowText;

}

//---------------------------------------------------------------------------__fastcall TForm1::CheckBox2MouseMove(TObject *Sender,Shift, int X, int Y)

{(CheckBox2->Checked==false)->Font->Color = clWindowText;

}

//---------------------------------------------------------------------------__fastcall TForm1::CheckBox3Click(TObject *Sender)

{->Font->Color = clGreen;

}

//---------------------------------------------------------------------------__fastcall TForm1::CheckBox4Click(TObject *Sender)

{->Font->Color = clGreen;

}

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

//закрытие формы

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

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{*QSel=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Otchet");>Open();>First();(!QSel->Eof)

{*QDel=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Users where User_ID= "+QSel->FieldByName("User_ID")->AsString);>Open();(QDel->IsEmpty())>Delete();>Next();QDel;

}QSel;->Close();

}

//---------------------------------------------------------------------------__fastcall TForm1::N2Click(TObject *Sender)

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

}

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

//первый таймер__fastcall TForm1::Timer1Timer(TObject *Sender)

{->Enabled=false;->Angles->EndAngle=360;(!QVopros->Eof)

{>Next();->Caption=QVopros->FieldByName("Text")->AsString;(QVopros->FieldByName("Slognost")->AsInteger==3)->Caption="Вопрос "+QVopros->FieldByName("Slognost")->AsString+"-ей категории сложности";->Caption="Вопрос "+QVopros->FieldByName("Slognost")->AsString+"-ой категории сложности";>SQL->Clear();>SQL->Add("Select * from Otvet where Parent_id = "+QVopros->FieldByName("Vopr_id")->AsString);>Open();->Caption=QOtvet->FieldByName("Otvet")->AsString;>Next();->Caption=QOtvet->FieldByName("Otvet")->AsString;>Next();->Caption=QOtvet->FieldByName("Otvet")->AsString;>Next();->Caption=QOtvet->FieldByName("Otvet")->AsString;>Next();(!QVopros->Eof)

{>Prior();

}

}

{("Тест окончен!");

//Вывод формы с результатами->Hide();

Form3->Show();->QOtchet->Open();

if(ball<10) //если тест не пройден

{->Label3->Font->Color= clRed;->Label4->Font->Color= clRed;->Label7->Font->Color= clRed;->QOtchet->Insert();->QOtchet->FieldByName("Date")->AsString=DateToStr(Date());->QOtchet->FieldByName("Time")->AsString=TimeToStr(Time());->QOtchet->FieldByName("Res_text")->AsString="Тест не пройден";->QOtchet->FieldByName("User_ID")->AsInteger=Form2->QUsers1->FieldByName("User_ID")->AsInteger;(ball==0)->QOtchet->FieldByName("Ball")->AsFloat=0;->QOtchet->FieldByName("Ball")->AsFloat=StrToFloat(FormatFloat("#.#",ball));->QOtchet->FieldByName("Tema_ID")->AsInteger=Form2->QTema->FieldByName("Tema_ID")->AsInteger;->QOtchet->Post();->Label3->Caption="Тест не пройден!";->Label4->Caption="Набрано "+FormatFloat("#.#",ball)+" баллов";->Label7->Caption=DateToStr(Date());

}//пройден

{->Label3->Font->Color= clGreen;->Label4->Font->Color= clGreen;->Label7->Font->Color= clGreen;->QOtchet->Insert();->QOtchet->FieldByName("Date")->AsString=DateToStr(Date());->QOtchet->FieldByName("Time")->AsString=TimeToStr(Time());->QOtchet->FieldByName("Res_text")->AsString="Тест пройден";->QOtchet->FieldByName("User_ID")->AsInteger=Form2->QUsers1->FieldByName("User_ID")->AsInteger;->QOtchet->FieldByName("Ball")->AsFloat=StrToFloat(FormatFloat("#.#",ball));->QOtchet->FieldByName("Tema_ID")->AsInteger=Form2->QTema->FieldByName("Tema_ID")->AsInteger;->QOtchet->Post();->Label3->Caption="Тест пройден!";->Label4->Caption="Набрано "+FormatFloat("#.#",ball)+" баллов";->Label7->Caption=DateToStr(Date());

}

//------------------------заполняем таблицу с темами, датой и временем на форме "Результат"

Form3->QOtchet->Close();->QOtchet->SQL->Clear();->QOtchet->SQL->Add("Select * from Otchet where User_ID= "+Form2->QUsers1->FieldByName("User_ID")->AsString+ "and Tema_ID= "+Form2->QTema->FieldByName("Tema_ID")->AsString+ "order by Date, Time");->QOtchet->Open();->SG1->RowCount=2;->SG1->FixedRows=1;->SG1->Cells[0][0]="Тема";->SG1->Cells[1][0]="Дата";->SG1->Cells[2][0]="Время";->SG1->Cells[0][1]="";->SG1->Cells[1][1]="";->SG1->Cells[2][1]="";->QOtchet->Close();->QOtchet->SQL->Clear();->QOtchet->SQL->Add("Select * from Otchet where User_ID= "+Form2->QUsers1->FieldByName("User_ID")->AsString+ "order by Date, Time");->QOtchet->Open();->QOtchet->First();(!Form3->QOtchet->IsEmpty())

{i=1;(!Form3->QOtchet->Eof)

{*QSelect=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Tema where Tema_ID= "+Form3->QOtchet->FieldByName("Tema_ID")->AsString);>Open();(!QSelect->IsEmpty())

{->SG1->Cells[0][i]=QSelect->FieldByName("Tema_text")->AsString;->SG1->Cells[1][i]=Form3->QOtchet->FieldByName("Date")->AsString;->SG1->Cells[2][i]=Form3->QOtchet->FieldByName("Time")->AsString;->SG1->RowCount=i+1;++;->QOtchet->Next();

}

{->SG1->Cells[0][1]="";->SG1->Cells[1][1]="";->SG1->Cells[2][1]="";

}QSelect;

}

}=0;=0;_user=0;

}->Checked=false;->Checked=false;->Checked=false;->Checked=false;

//делаем черный цвет шрифта у всех ответов

CheckBox1->Font->Color = clWindowText;->Font->Color = clWindowText;->Font->Color = clWindowText;->Font->Color = clWindowText;->Visible=false;->Enabled=false;

}

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

//второй таймер__fastcall TForm1::Timer2Timer(TObject *Sender)

{->Angles->EndAngle=Pie1->Angles->EndAngle+2;

}

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

{->Visible=false;

}

Форма "Результаты тестирования"

//щелчок мыши на таблице "Пользователь"

void __fastcall TForm3::DBGrid1CellClick(TColumn *Column)

{>Close();>SQL->Clear();>SQL->Add("Select * from Otchet where User_ID= "+Form2->QUsers1->FieldByName("User_ID")->AsString+ "and Tema_ID= "+Form2->QTema->FieldByName("Tema_ID")->AsString+ "Order by Date, Time");>Open();(!QOtchet->IsEmpty())

{(QOtchet->FieldByName("Res_text")->AsString=="Тест не пройден")

{->Font->Color= clRed;->Font->Color= clRed;->Font->Color= clRed;

}

{->Font->Color= clGreen;->Font->Color= clGreen;->Font->Color= clGreen;

}->Caption=Form3->QOtchet->FieldByName("Date")->AsString;->Caption=QOtchet->FieldByName("Res_text")->AsString+"!";->Caption="Набрано "+FloatToStr(QOtchet->FieldByName("Ball")->AsFloat)+" баллов";

}

{->Font->Color= clWindowText;->Font->Color= clWindowText;->Caption="Тестирование не производилось!";

Label4->Caption="Тестирование не производилось!";

Label7->Caption="";

}->RowCount=2;->FixedRows=1;->Cells[0][0]="Тема";->Cells[1][0]="Дата";->Cells[2][0]="Время";->Cells[0][1]="";->Cells[1][1]="";->Cells[2][1]="";>Close();>SQL->Clear();>SQL->Add("Select * from Otchet where User_ID= "+Form2->QUsers1->FieldByName("User_ID")->AsString+ "Order by Date, Time");>Open();>First();(!QOtchet->IsEmpty())

{i=1;(!QOtchet->Eof)

{*QSelect=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Tema where Tema_ID= "+QOtchet->FieldByName("Tema_ID")->AsString);>Open();(!QSelect->IsEmpty())

{->Cells[0][i]=QSelect->FieldByName("Tema_text")->AsString;->Cells[1][i]=QOtchet->FieldByName("Date")->AsString;->Cells[2][i]=QOtchet->FieldByName("Time")->AsString;->RowCount=i+1;++;>Next();

}

{->Cells[0][1]="";->Cells[1][1]="";

}QSelect;

}

}

}

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

//закрытие формы__fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action)

{

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

TADOQuery *QSel=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Otchet");>Open();>First();(!QSel->Eof)

{*QDel=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Add("Select * from Users where User_ID= "+QSel->FieldByName("User_ID")->AsString);>Open();(QDel->IsEmpty())>Delete();>Next();QDel;

}QSel;>Terminate();

}

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

//кнопка "Новое тестирование"__fastcall TForm3::SpeedButton1Click(TObject *Sender)

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

}

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

//щелчок мыши на таблице "Прошлые тесты"__fastcall TForm3::SG1SelectCell(TObject *Sender, int ACol, int ARow,

bool &CanSelect)

{

//если произошёл щелчок мыши на поле "Дата", то передвигаем его

//на поле "Тема"(ACol==1)=ACol-1;

//если произошёл щелчок мыши на поле "Время", то передвигаем его

//на поле "Тема"(ACol==2)

ACol=ACol-2;*QSelect=new TADOQuery(NULL);>ConnectionString=Form2->ADOConnection1->ConnectionString;>SQL->Clear();>SQL->Add("Select * from Tema where Tema_text= '" +SG1->Cells[ACol][ARow]+"'");>Open();>Close();>SQL->Clear();>SQL->Add("Select * from Otchet where User_ID= "+Form2->QUsers1->FieldByName("User_ID")->AsString+ "and Tema_ID= "+QSelect->FieldByName("Tema_ID")->AsInteger+ "and Date= '"+SG1->Cells[ACol+1][ARow]+"'"+ "and Time= '"+SG1->Cells[ACol+2][ARow]+"'"+ "order by Date, Time");>Open();(!QOtchet->IsEmpty())

{(QOtchet->FieldByName("Res_text")->AsString=="Тест не пройден")

{->Font->Color= clRed;->Font->Color= clRed;->Font->Color= clRed;

}

{->Font->Color= clGreen;->Font->Color= clGreen;->Font->Color= clGreen;

}->Caption=Form3->QOtchet->FieldByName("Date")->AsString;->Caption=QOtchet->FieldByName("Res_text")->AsString+"!";->Caption="Набрано "+FloatToStr(QOtchet->FieldByName("Ball")->AsFloat)+" баллов";

}

{->Font->Color= clWindowText;->Font->Color= clWindowText;->Caption="Тестирование не производилось!";

Label4->Caption="Тестирование не производилось!";

Label7->Caption="";

}QSelect;

}


Содержание 1. Задание на курсовой проект . Техническое задание на разработку модели системы тестирования пользователей с применением технологии "

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

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

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

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

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