МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В. И. Ульянова (Ленина) М. В. БЕЛЬТЮКОВ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ Учебно-методическое пособие Санкт-Петербург Издательство СПбГЭТУ «ЛЭТИ» 2019 УДК 004.65(07)+159.9(07) ББК З 973.233.02я7 Б 44 Бельтюков М. В. Б44 Информационные технологии: учеб.-метод. пособие. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2019. 82 с. ISBN 978-5-7629-2486-3 Содержит основы разработки структуры базы данных (БД) и построения системы управления базами данных (СУБД). Рассмотрены все этапы – от разработки структуры БД до получения установочного варианта созданной СУБД. СУБД рассматривается на примере построения СУБД психодиагностического назначения. Предназначено для студентов, обучающихся по направлению 12.04.04 «Биотехнические системы и технологии». Рецензент: д-р техн. наук, доц. П. Н. Афонин (СПб филиал Российской таможенной академии). Утверждено редакционно-издательским советом университета в качестве учебно-методического пособия ISBN 978-5-7629- 2486-3 © СПбГЭТУ «ЛЭТИ», 2019 ВВЕДЕНИЕ В качестве материала для изучения построения систем управления базами данных (СУБД) будем использовать Автоматизированную систему психодиагностики (АСПД). Одной из составляющих психологического эксперимента является проведение различных тестовых методик. Для повышения достоверности результатов необходимо комбинировать психодиагностические (тестовые) методики (ПДМ). При автоматизации ПДМ получим автоматизированные психодиагностические методики (АПДМ). В работе рассмотрен процесс разработки СУБД на примере создания системы, позволяющей проводить психологический эксперимент (ПЭ) с использованием двух АПДМ: «Тест Филлипса» и «Тест Пальмера». Показаны все стадии разработки – от построения структуры БД до построения установочного диска готового проекта. При этом необходимо хранить материал самих методик (вопросы, протоколы тестирования, методики обработки сырых баллов и т. п.), списки респондентов и всю информацию проведения ПЭ (данные респондента, программу ПЭ, результаты тестирования, протоколы тестирования и др.). При классическом проведении ПЭ вся рутинная работа по его подготовке и проведению ложится на плечи психолога-практика. Массовое внедрение персональных компьютеров во всевозможные сферы психологии и медицины, а также удобные средства разработки систем управления базами данных позволяют автоматизировать как подготовку к проведению ПЭ, так и сам процесс ПЭ и анализа результатов. При построении АПДМ можно классифицировать ПДМ по следующим критериям: 1. Опросники (предполагаются вывод вопроса и выбор ответа из списка или самостоятельный ввод ответа): • вопрос и ответ в текстовом виде; • вопрос и/или ответ в графическом виде; • смешанный вариант; • открытый вариант ввода ответа. 2. ПДМ другого типа (ответ предполагает особенный отклик респондента – нарисовать, обвести и т. п.). 3 В работе будут рассмотрены два варианта опросников АПДМ: 1) текстовый опросник; 2) опросник со смешанным вариантом вопроса – рисунок и текстовый вопрос. В цикле работ предлагается освоить процесс построения СУБД от постановки задачи до получения законченного программного продукта на примере построения АПДМ и общей оболочки, позволяющей проводить ПЭ и анализировать его результаты. РАБОТА 1. РАЗРАБОТКА СТРУКТУРЫ БАЗЫ ДАННЫХ Задание: В среде Microsoft Access сформировать базу данных для выполнения проекта. Первым этапом создания СУБД является этап разработки структуры БД: выбор базы данных, построение структуры данных, которые необходимо хранить в БД, связи между данными БД. Рассмотрим процесс разработки БД. 1. Необходимо выбрать систему разработки БД. Будем считать, что на компьютере установлен Windows 10 x 64. Одной из распространенных сред создания БД является пакет компании Microsoft® – MS Access (в работе использована версия 2019). В нем очень удобно разрабатывать структуру БД, но сам пакет MS Access не обладает гибкостью универсальной среды программирования. Поэтому система автоматизированного психодиагностического эксперимента построена в среде программирования Delphi (была использована версия Embarcadero® RAD Studio XE10.3.1 Rio). 2. На втором этапе необходимо построить структуру БД. Для проведения ПЭ требуется хранить следующие данные: • данные респондента; • данные АПДМ; • результаты тестирования. С учетом всего перечисленного можно сформировать следующую структуру БД (табл. 1.1). Таблица 1.1 Название таблиц Название поля Тип данных Answer Ответы на вопросы Идентификатор записи Числовой – – – – Короткий текст 255 Ответ ID_Answer Счетчик ID_Test Числовой Num_Question Числовой Num_Answer Answer Комментарии Параметры 4 Идентификатор теста Идентификатор вопроса Идентификатор ответа Продолжение табл. 1.1 Название таблиц Название поля Тип данных Answer_File Короткий текст Answer_Type Короткий текст ID_Code Password Code Счетчик Короткий текст ParamResult Параметры 255 1 – 255 ID Счетчик – ID_ParamResult Числовой – – Числовой Короткий текст Короткий текст Короткий текст Protocol 100 100 100 ID_Protocol Счетчик – ID_Testing Числовой Num_Question Числовой Num_Answer Числовой TimeAnswer Answer Дата и время Короткий текст Question Счетчик – – – – ID_Test Parametr Min_Value Max_Value ID_Question ID_Test Num_Question Question Question_Type Question_File ID_Respondent Surname NameResp Midlename Sex Born Числовой 255 – – – Числовой Короткий текст 255 Короткий текст 1 Короткий текст 255 Respondent Счетчик – Короткий текст 50 Короткий текст 50 Короткий текст 50 Короткий текст 7 Дата и время Краткий формат даты 5 Комментарии Имя файла ресурса (картинки, звука и т. п.) Тип ответа (текст, графика, музыка и т. д.) Пароль режима «психолог» Идентификатор записи Пароль доступа Параметры результата Идентификатор параметров результатов Идентификатор (для удобства) Идентификатор теста Наименование параметра Минимальное значение параметра Максимальное значение параметра Протокол испытания Идентификатор протокола тестирования Код испытания Идентификатор вопроса Идентификатор ответа Время, затраченное на ответ Ответ Вопросы теста Идентификатор вопроса Идентификатор теста Номер вопроса Текст вопроса Тип вопроса (графический, музыкальный и т. п.) Имя файла ресурса Респондент Идентификатор респондента Фамилия Имя Отчество Пол Дата рождения Окончание табл. 1.1 Название таблиц Название поля Тип данных Комментарии Параметры Результат тестирования Result ID_Result Счетчик – Идентификатор результата ID_Tefsting Числовой – Код испытания ID_ParamResult Числовой – Код параметра результата Value_Result Короткий текст 100 Значение результата Описание АПДМ Test ID_Test Счетчик – Идентификатор теста NameTest Короткий текст 255 Название теста Code Короткий текст 10 Код теста RunFile Короткий текст 255 Имя запускаемого файла Instruction Короткий текст 255 Имя файла инструкции Help Короткий текст 255 Имя файла помощи Developer Короткий текст 55 Разработчик (программист) Psycologist Короткий текст 55 Разработчик (психолог) Version Короткий текст 10 Версия программного продукта Испытание Testing ID_Testing Счетчик – Идентификатор испытания ID_Respondent Числовой – Идентификатор респондента ID_Test Числовой – Идентификатор теста Testing_Date Дата и время Краткий формат даты Дата тестирования Testing_Time Дата и время Краткий формат времени Время тестирования При создании такой БД используется следующая «связка» таблиц БД (табл. 1.2). После создания структуры БД и проработки связи между таблицами можно приступать к созданию БД: 1. Для удобства расположения файлов создать на диске следующую структуру папок (табл. 1.3). 2. Запустить пакет MS Access. Например, пакет MS Access 2016 в операционной системе Windows 10 запускается следующим образом: Пуск / Все приложения / Access 2019. 6 Таблица 1.2 Test ID_Test Respondent ID_Respondent Поля таблицы Поля таблицы Question Testing ID_Question ID_Testing ID_Test ID_Respondent Num_Question ID_Test Поля таблицы Поля таблицы Answer Protocol ID_Answer ID_Protocol ID_Test ID_Testing Num_Question Num_Question Num_Answer Num_Answer Поля таблицы Поля таблицы ParamResult Result ID ID_Result ID_ParamResult ID_Testing ID_Test ID_ParamResult Поля таблицы Поля таблицы Таблица 1.3 № 1 Название папки ПЭ 2 3 4 5 ПЭ\Base ПЭ\Fillipse ПЭ\Palmer ПЭ\Help 6 ПЭ\Materials Описание Папка содержит главную программу для запуска ПЭ Папка с БД Материалы АПДМ «Тест Филлипса» Материалы АПДМ «Тест Пальмера» Справочная информация главной программы ПЭ и АПДМ Материалы АПДМ 7 3. Выбрать мастер «Пустая БД рабочего стола». Затем выбрать папку расположения БД (например ПЭ\Base), название файла БД (например, PDT), выбрать формат БД. Удобно выбрать формат БД MS Access 2002–2003, так как этот формат наиболее универсален, и создать БД, нажав на кнопку Ok, а затем на кнопку «Создать». В указанной папке будет создан файл БД «PDT.mdb». 4. Следующим этапом является создание всех таблиц, входящих в состав БД. Для создания таблиц удобно использовать режим «Конструктор». Например, для создания таблицы «Тест» необходимо: • Выбрать режим «Конструктор». • Назвать таблицу: Test. • Набрать необходимые поля таблицы. Все записи в таблице должны быть уникальными – отличаться хотя бы одним полем. Наиболее удобным является способ создания «искусственного» поля, задача которого – создать уникальное значение. Название поля желательно составлять из латинских букв. Поле «Идентификатор записи» удобно называть, начиная с префикса ID, а далее – имя таблицы. В MS Access для создаваемой таблицы дадим имя полю «ID_test», в «Типе данных» необходимо выбрать значение «Счетчик». • Создать остальные поля таблицы. Например, поле «NameTest» вводим в поле «Имя поля», тип данных выбираем «Короткий текст», длину строки (поле «Размер поля» на вкладке «Общие» настройки значения поля оставляем по умолчанию) – 255 символов. • Аналогичным образом заполняем все оставшиеся поля таблицы «Test». • Для создания новой таблицы выбираем на ленте «Создание» элемент «Таблица». Далее действуем по аналогии с п. 4. Таким образом создаем все необходимые таблицы и поля, указанные в табл. 1.1. • Для сохранения БД выполнить команду «Сохранить» на ленте «Файл». 5. В итоге будет создана база данных «PDT.mdb». «Связки» между отдельными таблицами БД будем осуществлять программным путем. 6. Так как в БД хранится пароль, то доступ к БД необходимо зашифровать: снова открыть БД – выбрать команду «Открыть» на ленте «Файл», затем выбрать «Обзор», выбрать файл и, наконец, выбрать кнопку «Открыть», но у этой кнопки выбрать из списка «Монопольно». 8 7. Теперь БД открыта монопольно и можно ограничить к ней доступ: выбрать команду «Зашифровать базу данных» и ввести пароль. 8. БД будет зашифрована, и чтобы изменить ее, потребуется ввести пароль. РАБОТА 2. ВВОД ДАННЫХ В БАЗУ ДАННЫХ Задание: согласно индивидуальному заданию, выданному преподавателем, заполнить базу данных соответствующим материалом. Данные в базу данных можно вводить различными способами. С учетом того, что база данных создана в среде MS Access, можно заполнять базу данных в этой среде, выбрав режим «Режим таблицы». Но так как данные уже могут быть набраны в текстовом файле (файл *.txt), в документе (файл MS Word) или в таблице (файл MS Excel), то наиболее удобным будет способ программного ввода данных в базу данных из этих файлов. Рассмотрим процесс построения простого приложения для заполнения базы данных. Алгоритм построения такой программы следующий: 1. Для примера создать простую базу данных с одной таблицей (Data), в которой 2 поля (PoleText – короткий текст и PoleInt – числовой). Сохранить БД, дав имя файлу «DBase.mdb». 2. Создать для пробы текстовый файл. Записать в него строчки, заполненные данными строки записи (листинг 2.1). (Листинги программ с номерами от 2.1 до 9.6 можно получить у преподавателя!). Столбцы БД разделены символом «=» – это может быть любой символ, который отсутствует в тексте полей БД). Сохранить его, дав ему имя «text.txt». 3. Аналогично п. 2 создать документ в MS Word и также заполнить его строчками из указанного листинга. Сохранить документ, дав ему имя «Document.doc». 4. Запустить MS Excel и создать таблицу из двух столбцов. В первый столбец внести данные из строк указанного листинга до знака «=», а во второй столбец – число из строки после символа «=». 5. Запустить Delphi и создать новое приложение в Delphi (File/New/VCL Form Application – Delphi). 6. Поместить на форму элемент Panel и настроить его свойства: свойство расположения панели внизу окна: Align установить в значение alBottom. 9 7. Поместить на форму элементы для связки программы с БД: • Поместить элемент ADOQuery. Назвать элемент ADOQProba. Связать его с файлом созданной БД: настроить свойство ConnectionString, запустив мастера настройки и выбрав поставщика Microsoft.Jet.OLEDB.4.0. • Выбрать расположение файла с базой данных (запустив мастера выбора файлов). В итоге в строке ConnectionString должно получиться чтото подобное: «Provider = Microsoft.Jet.OLEDB.4.0; Data Source = D:\Base\DBase.mdb;Persist Security Info=False;». • Настроить свойство SQL для работы с созданной таблицей БД. (Для примера рассмотрена простая БД с единственной таблицей Data с двумя полями: ID тип Счетчик и поле PoleText тип Короткий текст). Для подключения таблицы созданной БД необходимо написать в свойстве SQL следующий запрос на языке SQL: SELECT * FROM Data. • Активировать подключение: установить в свойстве Active значение True. • Поместить на форму элемент DataSource для связки БД с экранными элементами: o Дать ему имя DSProba. o Связать его с элементом ADOQProba: установить свойство Data Set в значение ADOQProba. • Поместить на форму элемент для отображения содержимого таблицы БД DBGrid. Настроить этот элемент: o Дать ему имя DBGProba. o Настроить его на все доступное пространство формы (свойство Align установить в значение alClient). o Связать этот элемент с БД: свойство DataSource установить в DSProba. o Настроить отображаемые данные: дважды щелкнуть на него мышкой и в появившемся окне выбрать кнопку Add All Fields (добавить все поля). o Настроить заголовки столбцов для каждого поля: например, для поля ID необходимо написать в свойстве Title\Caption значение Идентификатор, а для поля PoleText – Текстовое поле. o Столбики элемента DBGProba получат измененные значения. 8. На панель поместить кнопки для работы с БД: 10 • Поместить 5 элементов BitBtn. Назвать их так: BBTxt (считывание материала из текстового файла), BBXls (файл MS Excel), BBDoc (файл MS Word), BBClear (кнопка для очистки (удаления) содержимого БД) и BBExit (выход из программы). У кнопки BBExit настроить свойство Kind, установить его в значение bkClose. • Заполнить заголовки кнопок (свойство Caption) в соответствии с назначением кнопок: Текстовый файл, Файл Excel, Файл Word, Стереть данные и Выход. 9. Для работы с файлами MS Word и MS Excel необходимо подключить соответствующий модуль. Для этого нажать на форме клавишу (<F12>) и после строки {$R *.dfm} ввести строку подключения модуля VCL.OLEAuto (листинг 2.2). 10. Запрограммировать нажатие на клавиши (событие onClick) для каждой кнопки. Вписать соответствующие события: для кнопки BBTxt написать текст из листинга 2.3; для кнопки BBXls – листинг 2.4; для кнопки BBDoc – листинг 2.5 и для кнопки BBClear – листинг 2.6. Кнопка BBExit автоматически закроет форму, ее программировать не надо! Таким образом можно вводить данные в базу данных из файлов. Но также можно вводить данные и непосредственно из элемента DBGrid. Для этого надо заполнить нужные поля и нажать клавишу <Enter> или <↓ (стрелка вниз)>. РАБОТА 3. РАЗРАБОТКА ИНТЕРФЕЙСА АПДМ «ТЕСТ ТРЕВОЖНОСТИ ФИЛЛИПСА» В данной работе будет создан программный продукт главного окна методики Филлипса (прил. 2) для определения уровня тревожности. Задание: создать главное окно АПДМ в соответствии с индивидуальным заданием. Для проведения ПЭ требуется полное погружение респондента в процесс тестирования, исключающий отвлечение на посторонние элементы операционной среды на экране. Для этих целей выбран стиль «захвата экрана» – приложение АПДМ занимает все доступное пространство экрана. Также необходимо учитывать, что возможно различное разрешение экрана, т. е. программа АПДМ должна автоматически подстраиваться к текущему разрешению монитора. 11 При проведении тестирования необходимо обеспечить следующие возможности: • вывод главного окна программы, содержащего название методики АПДМ, а также фамилии разработчиков ПДМ и АПДМ (рисунок); • возможность вывода инструкции к АПДМ, содержащей назначение методики и способ считывания информации; • возможность проведения ПЭ один раз с последующим выводом результата ПЭ, что дает возможность исключить бесконтрольное многократное тестирование. АПДМ «Тест тревожности Филлипса» Все файлы АПДМ «Тест Филлипса» расположить в папке ПЭ\Tests\Fillipse. Алгоритм построения программы следующий: 1. Запустить среду разработки Delphi. 2. Создать новый проект: • дать имя модулю main.pas, а проекту Fillipse.dpr; • для удобства доступа к данным в версии Delphi XE и выше скорректировать папку создаваемой программы: o выбрать пункт Project/Options; o выбрать пункт Delphi Compiler; o исправить пункт Output directory и Unit output directory на значение «.\» (без кавычек). Таким образом, файл проекта будет создаваться сразу в папке Fillipse, не создавая дополнительных вложенных папок. 12 3. Создать специальную форму DataModule для хранения элементов доступа к БД (File/New/Other/Delphi Projects/Delphi Files/Data Module). Назвать файл Data.pas. Форму назвать DM (свойство Name). 4. Поместить элемент ADOConnection для доступа к БД: • изменить имя (свойство Name) элемента на ADOConnection; • настроить свойство ConnectionString: o запустить мастер настройки; o выбрать Use connection string; o нажать кнопку Build; o выбрать пункт Microsoft Jet 4.0 OLE DB Provider; o нажать Далее>>; o запустив мастер, выбрать файл с БД PDT.mdb; o нажать кнопку Ok и еще раз Ok; o в свойстве запроса пароля LoginPromt установить значение False. 5. Поставить на форму DM 7 элементов ADOQuery (вкладка dbGo). Подключить к ним БД: • скорректировать свойства Name и SQL для этих элементов (табл. 3.1); № 1 2 3 4 5 6 Name ADOQTest ADOQTesting ADOQQuest ADOQAnsw ADOQProt ADOQRes 7 ADOQParamRes SQL SELECT * FROM Test SELECT * FROM Testing SELECT * FROM Question SELECT * FROM Answer SELECT * FROM Protocol SELECT * FROM Result SELECT * FROM ParamResult WHERE Parametr ='Общая тревожность в школе' Таблица 3.1 Описание Параметры АПДМ Параметры ПЭ Вопросы АПДМ Ответы на вопросы Протокол ПЭ Результаты ПЭ Параметры результатов • для каждого элемента выбрать из выпадающего списка в свойстве Connection значение ADOConnection; • так как подключение базы данных будет осуществлено программно, стереть строчку ConnectionString у элемента ADOConnection. 6. Поместить на форму DM элемент Timer для обеспечения задержки после выбора ответа (на экран выводится выбранный ответ) и перехода к новому вопросу. Назвать элемент TPause (свойство Name). Установить интер- 13 вал срабатывания задержки в 0,5 с – установить в свойстве Interval значение 500. 7. Вернуться на модуль main.pas. Настроить окно формы: • изменить название формы (свойство Name изменить на FMain); • отключить вывод рамки окна (свойство BorderStyle изменить на fsNone); • включить режим отображения подсказок (свойство ShowHint установить в True); • «распахнуть окно» на весь экран (свойство WindowsState установить в wsMaximized); совместно со свойством BorderStyle эта настройка позволит выводить окно программы на весь экран. 8. Расположить на форме 4 кнопки (элемент BitBtn, вкладка Additional): • назвать кнопки (свойство Name: BBIns, BBTest, BBRes, BBExit); • изменить заголовки (свойство Caption: &1 Инструкция, &2 Тест, &2 Результат, &0 Выход). Значок «&» означает, что следующий за ним символ будет «горячей» клавишей – цифры находить на клавиатуре проще, поэтому выбраны клавиши с цифрами; • назначить подсказки для кнопок: Отобразить инструкцию, Пройти тестирование, Отобразить результаты, Завершить тестирование. 9. Назначить кнопкам картинки (свойство Glyph). Картинки кнопок можно выбрать из стандартных (путь к ним: C:\Program Files (x86)\Embarcadero\Studio\19.0\Images\Buttons). Можно выбрать следующие картинки: инструкция – BOOKOPEN.BMP, тест – WRITE.BMP, результаты – REPORT.BMP, выход – DOOROPEN.BMP; 10. Поместить на форму 4 метки для вывода имен психолога и программиста: • элемент Label, вкладка Standard; • назвать метки (свойство Name: LProgr, LPsyholog, LNameProgr, LNamePsyholog); • установить заголовки меток (свойство Caption: Психолог, Программист, Имя, Имя). 11. Для вывода названия теста поместить на форму метку: • назвать метку (свойство Name: LName); • изменить заголовок (свойство Caption: Название); 14 • изменить цвет и размер шрифта (свойство Font: размер (Size=24), цвет (Color=clNavy)); • выравнивать текст по центру (свойство Alignment: taCentr); • установить свойство переноса текста по словам: в WordWrap установить значение True. 12. Поместить картинки справа и слева от названия теста: • элемент Image (вкладка Additional): o назвать элементы IPsi (левое) и ICub (правое) (свойство Name); o сделать так, чтобы картинка была «вписана» в указанное поле: свойство Strench установить в True; o чтобы картинка отображалась пропорционально, установить в свойстве Proportional значение True; o загрузить в картинки рисунки (свойство Picture). Картинки можно нарисовать самостоятельно или взять готовые. 13. Поместить рамку на название и общую рамку на картинки: • элемент Bevel (вкладка Additional): o дать имена для элементов (BHi (внутренний элемент) и BLo (внешний)); o настроить объем (свойство Style: для элемента BHi установить значение bsRaised (выпуклый), для элемента BLo – bsLowered (вогнутый)). • настроить окно FTest из модуля Main.pas. Щелкнуть дважды на кнопку Выход. Будет реализована заготовка для реализации команды, выполняемой при нажатии на кнопку Выход: ввести текст программы из листинга 3.1. 14. Аналогично заполнить реализацию нажатия на кнопки Инструкция, Тест и Результат, введя текст программы из листингов 3.2–3.4: • реализовать начальную настройку окна программы, выбрав событие onCreate в окне Object Inspector: ввести код из листинга 3.5; • реализовать настройку при активации окна программы, выбрав событие onActive в окне Object Inspector: ввести код из листинга 3.6. РАБОТА 4. СОЗДАНИЕ ОКНА ИНСТРУКЦИИ АПДМ «ТЕСТ ТРЕВОЖНОСТИ ФИЛЛИПСА» В работе будет рассмотрен процесс построения окна вывода текста инструкции. Задание: в соответствии с заданием сформировать вывод окна инструкции АПДМ. При построении окна инструкции стоит задача выполнить вывод текста инструкции в ключе оформления всей программы АПДМ: вывод информа15 ции на весь экран в соответствии с текущим разрешением экрана, при этом текст должен «вписаться» в окно программы (рисунок). Алгоритм построения программы следующий: 1. Создать и настроить окно программы аналогично тому, как описано в работе 3, п. 7. Окно инструкции «Тест тревожности Филлипса» 2. Настроить видимые элементы формы: • Поместить на форму 2 элемента: панель для помещения кнопки Выход и отображение строки с названием теста. Элемент Panel на вкладке Standard. Один элемент назвать (свойство Name) PBottom, настроить его вывод внизу окна (свойство Align установить в значение alBottom), другой – PTop и alTop соответственно. Удалить заголовки (очистить свойство Caption). Настроить шрифт у панели PTop: установить в цвет Font.Color значение clNavy, а размер Font.Size – 12. • Поместить на форму элемент RichEdit (вкладка Win32). Настроить этот элемент. Дать ему имя REIns. Распахнуть элемент на всю форму (установить свойство Align в alClient). Установить вывод текста в русской кодовой странице (Font.Charset – RUSSIAN_CHARSET). Запретить изменение текста (Enable – False и ReadOnly – True). 16 • Поместить элемент кнопки для закрытия окна инструкции: o элемент BitBtn (вкладка Additional); o изменить имя кнопки на BBExit; o изменить тип кнопки (свойство Kind) на bkClose. • Изменить заголовок кнопки (свойство Caption) на &0 Выход. 3. Нажать на клавиатуре кнопку <F12> для перехода в текст программы и ввести код из листинга 4.1 после текста implementation. 4. Вернуться на форму (нажать снова клавишу <F12>) и выбрать событие onActivate. Щелкнуть на нем дважды мышью и попасть в текст программы. Ввести текст начальной настройки программы (листинг 4.2). В листинге программы размер шрифта окна вывода инструкции подстраивается под текущий экранный размер формы. 5. Снова вернуться на форму и у элемента REIns настроить событие onKeyPress для настройки возможности закрытия окна инструкции при нажатии на клавишу клавиатуры <Esc>. Ввести код программы из листинга 4.3. 6. Текст инструкции считывается из файла (листинг 4.4). РАБОТА 5. СОЗДАНИЕ ОКНА РЕЗУЛЬТАТА АПДМ «ТЕСТ ТРЕВОЖНОСТИ ФИЛЛИПСА» Работа посвящена созданию окна для вывода результатов тестирования (рисунок). Задание: в соответствии с индивидуальным заданием сформировать окно вывода результатов тестирования. Начальная настройка окна осуществляется аналогично работе 3 (файл сохранить с именем Result.pas): 1. Настроить окно формы как в работе 3, п. 7. Назвать форму FResult (свойство Name). 2. Поместить 2 панели. Настраиваются аналогично: верхняя (PTop) и нижняя (PBottom) панели, а также кнопка выхода (BBExit). 3. Поместить 9 меток для вывода названия параметров результата: • Назвать метки (свойство Name) L1, …, L9; • Изменить цвет текста на темно-синий (в свойстве Font.Color установить clNavy у элементов L1..L8 и clPurple у элемента L9). 4. Поместить 9 меток для вывода значений полученных результатов: • элементы назвать: LObshTrev, LperSpcStr, LFrustrac, LStrahSV, LStrahSPZ, LStrahNOO, LNizFizSoprS, LProblTeach, LAll; 17 • установить жирный стиль шрифта (в свойстве Font.Size установить fsBold). Имя шрифта – «книжный» (в Font.Name установить Times New Roman). Цвет шрифта у всех элементов, кроме элемента LAll, настроить на clBlue, у элемента LAll выбрать цвет clMaroon; • поместить на форму рамку вокруг текста результатов: элемент Bevel (вкладка Additional). Назвать элемент B. Окно результатов «Тест тревожности Филлипса» 5. Ввести дополнительные параметры в форму аналогично п. 3 в работе 3 (листинг 5.1). 6. Запрограммировать событие onActivate формы (листинг 5.2). 7. Запрограммировать событие onCreate формы (листинг 5.3). 8. Аналогично работе 3 запрограммировать для формы событие onKeyPeypress для формы FResult (листинг 5.4). РАБОТА 6. СОЗДАНИЕ ОКНА ТЕСТИРОВАНИЯ АПДМ «ТЕСТ ТРЕВОЖНОСТИ ФИЛЛИПСА» Работа посвящена созданию главного окна для проведения тестирования (рисунок). Задание: в соответствии с индивидуальным заданием создать окно для проведения тестирования. При проведении тестирования необходимо обеспечить следующие возможности: 18 1. При проведении ПЭ необходимо указывать оставшееся количество вопросов (заданий), чтобы респондент имел представление о количестве оставшегося для тестирования материала. Делать это удобно мягко и неназойливо: указывать блеклыми символами (звездочками) оставшееся количество вопросов. 2. При проведении ПЭ в электронном варианте есть возможность (если методика позволяет) перемешать вопросы теста. Тем самым создается эффект случайности, позволяющий проходить тест повторно, а также проводить ПЭ в потоке сразу для нескольких респондентов. 3. В электронном варианте есть также возможность фиксировать время ответа на каждый вопрос, что может дать дополнительную информацию при анализе результатов ПЭ. 4. Необходимо обеспечить возможность выбора варианта ответа как с помощью мыши, так и с помощью «горячих» клавиш, в качестве которых необходимо выбрать цифровые, так как их проще найти на клавиатуре. 5. Также при проведении тестирования необходимо учесть, что респондент может устать проходить ПЭ, следовательно, чтобы не получать заведомо неправильные результаты, необходимо предусмотреть «аварийный» выход из программы тестирования с отметкой об «аварийном» завершении ПЭ. Окно тестирования «Тест тревожности Филлипса» С учетом вышесказанного процесс построения окна программы выполняется по следующему алгоритму: 1. Создать модуль для описания переменных: команды File\New\Unit. Сохранить модуль с именем Variable.pas. Вписать необходимые переменные (листинг 6.1). 19 2. Настроить форму, как остальные окна проекта (вывод окна на весь экран: алгоритм описан в работе 3, п. 7). Назвать форму FFillipse. Запрограммировать событие создания формы onActivate (листинг 6.2). Для обеспечения «аварийного» завершения тестирования запрограммировать событие onKeyPress (листинг 6.3). Подключить к модулю модули Variable и Main. Для этого нажать на клавиатуре <Alt> + <F11> и выбрать имена модулей из списка. Добавить в текст программы после строки {$R *.dfm} (подключение к проекту файла, содержащего форму) текст описания глобальных переменных (листинг 6.4). 3. Расположить на форме 4 панели (элемент Panel, вкладка Standard). Назвать элементы (свойство Name) следующим образом: PTop (верхняя панель), PBottom (нижняя панель), PQuestion (панель под панелью PTop) и PAnswer. Настроить расположение панелей (свойство Align): для PTop выбрать значение alTop, для PBottom – alBottom, PAnswer – alBottom и PQuestion – alClient. Для панели PTop выбрать цвет шрифта clWhite и изменить заголовок (свойство Caption) на «Ответьте на вопрос:». 4. На панель PQuestion поместить 3 метки (элемент Label, вкладка Standard). Назвать метки (свойство Name) следующим образом: LNo – метка номер вопроса, LQuest – текст вопроса и LAnsw – выбранный ответ. Настроить шрифт элементов: в размере (Size) выставить значение 20, в стиле (Style) – fsBold, в цвете для меток LNo и LQuest – значение clNavy, а у метки LAnsw – clMaroon. Если вопрос будет длиннее ширины экрана, разрешить отображать текст вопроса в несколько строк (установить в свойстве WordWrap у элемента LQuery значение True). 5. На панель PAnswer поместить элемент со списком ответов. В тесте на все вопросы можно выбрать только ответы Да и Нет, поэтому подходит элемент RadioGroup (вкладка Standard). Настроить элемент. Дать ему имя (свойство Name) RGYesNo. Заголовок (Caption) – Ваш ответ:, список ответов (Items): на одной строке &1 Да; на другой – &2 Нет. «По умолчанию» никакой ответ не выбран – настроить в свойстве ItemIndex значение «–1» (строки нумеруются, начиная со значения 0). Сделать вывод ответов в 2 колонки (в свойстве Columns поставить значение 2). Настроить подсказку (свойство Hint), назначить значение: Выберите необходимый ответ. Запрограммировать событие onClick (листинг 6.5). 6. На панель PBottom поместить кнопку – элемент BitBtn (вкладка Additional). Назвать кнопку (свойство Name) BBExit. Изменить ее свойство Cap20 tion и написать там &0 Выход. Запрограммировать событие onClick: (листинг 6.6). Чтобы обеспечить «аварийный» выход при нажатии на клавишу Esc, выбрать для события onKeyPress то же событие, что и для формы (FormKeyPress). Написать подсказку (Hint): Аварийный выход. 7. На панель PBottom поместить метку (Label), содержащую подсказку команд управления. Заменить свойство Caption на «Выберите ответ – “мышь”, клавиши <1> или <2>, аварийный выход – <Esc>». Изменить шрифт: размер (Size) – 12, стиль (Style) – fsBold, цвет (Color) – clGray. 8. Для задержки при выводе выбранного ответа и последующего его скрывания поместить в модуль Data.pas на форму DM элемент Time (вкладка System). Изменить его свойства: имя (Name) – TPause, включение (Enabled) – False, интервал срабатывания (Interval) – 500 (для отображения выбранного ответа достаточно 0,5 с). Запрограммировать событие onTimer на форме DM (листинг 6.7). РАБОТА 7. ОКОНЧАТЕЛЬНАЯ КОМПОНОВКА ГОТОВОЙ АПДМ «ТЕСТ ТРЕВОЖНОСТИ ФИЛЛИПСА» Работа посвящена соединению всех модулей АПДМ (созданных в работах 2–5) в единую программу. Задание: скомпоновать созданную методику АПДМ, убедиться в ее работоспособности и правильности выдачи результатов тестирования. Запустить проект из работы 3 и выполнить следующие действия: 1. Выбрать форму и дважды щелкнуть на кнопку 1 Инструкция (выполнится команда onClick). Во второй работе уже был написан код программы для вызова инструкции (вызова окна инструкции, созданной в работе 3). Записать в теле процедуры код из листинга 3.2. 2. Аналогично были запрограммированы команды щелчков на кнопки 2 Тест, 2 Результат и 0 Выход (листинги 3.1, 3.3, 3.4). АПДМ «Тест тревожности Филлипса» готова! РАБОТА 8. СОЗДАНИЕ ОКНА ТЕСТИРОВАНИЯ АПДМ «ТЕСТ К. ПАЛЬМЕРА “УМЕЕТЕ ЛИ ВЫ ЛАДИТЬ С ОКРУЖАЮЩИМИ”» Задание: разработать и реализовать интерфейс графической АПДМ в соответствии с индивидуальным заданием. При построении АПДМ «Тест Пальмера» (прил. 3) можно воспользоваться теми же методами построения окна данных, главного окна АПДМ, ок21 на вывода инструкции, которые применялись при построении АПДМ «Тест Филлипса». Рассмотрим процесс построения собственно окна тестирования. Алгоритм построения окна тестирования (рисунок) следующий: 1. Аналогично процедуре, описанной в работе 3, создать специальную форму DataModule для хранения элементов доступа к БД (File/New/Other/Delphi Files/Data Module). Назвать файл Data.pas. Форму назвать DM (свойство Name). Какое определение, по-вашему, больше подходит к этой фигуре? Окно тестирования «Тест К. Пальмера «Умеете ли вы ладить с окружающими»» 2. Поместить элемент ADOConnection. Настроить его свойства: • настроить имя; • настроить свойство ConnectionString: o запустить мастер настройки; o выбрать Use connection string; o нажать кнопку Build; o выбрать пункт Microsoft Jet 4.0 OLE DB Provider; o нажать Далее>>; o запустив мастер, выбрать файл с БД PDT.mdb; o для проверки правильности подключения нажать на кнопку Проверить соединение; o нажать Ok и еще раз Ok. 22 3. Поместить элементы для доступа к БД: поставить на форму DM 7 элементов ADOQuery (вкладка dbGo). Подключить к ним БД: • скорректировать свойства Name и SQL для этих элементов (табл. 8.1); • для каждого элемента выбрать из выпадающего списка в свойстве Connection значение ADOConnection. № 1 2 3 4 5 6 7 Name ADOQTest ADOQTesting ADOQQuest ADOQAnsw ADOQProt ADOQRes ADOQParamRes SQL SELECT * FROM Test SELECT * FROM Testing SELECT * FROM Question SELECT * FROM Answer SELECT * FROM Protocol SELECT * FROM Result SELECT * FROM ParamResult Таблица 8.1 Описание Параметры АПДМ Параметры ПЭ Вопросы АПДМ Ответы на вопросы Протокол ПЭ Результаты ПЭ Параметры результатов 4. Поместить на форму DM элемент Timer для обеспечения задержки после выбора ответа (на экран выводится выбранный ответ) и перехода к новому вопросу. Назвать элемент TPause (свойство Name). Установить интервал срабатывания задержки в 0,5 с – установить в свойстве Interval значение 500. 5. Подготовить форму аналогично алгоритму настройки окон из работ 3–6. Назвать окно (свойство Name) FPalmer. Запрограммировать события onActivate и onKeyPress (листинги 8.1 и 8.2). 6. Поместить на форму 2 элемента Panel (вкладка Standard). Назвать одну панель (свойство Name) PTop, другую – PBottom. Изменить свойство Align у элемента PTop на alTop, у элемента PBottom на alBottom. У элемента PTop изменить свойство Font (установить шрифт Times New Roman, размер 14, стиль fsBold, цвет clWhite) и свойство Caption (Ответьте на вопрос:). 7. Поместить на форму элемент Panel. Назвать элемент PAnswer. Изменить свойство Align на alBottom. 8. Поместить на панель PAnswer элемент RadioGroup. Изменить его имя (Name) на RGAnswer. Изменить заголовок (Caption) на «Ваш ответ:». Запрограммировать событие onClick (листинг 8.3). 9. Поместить на форму элемент Panel. Назвать его (Name) PPicQuest. Изменить его расположение (Align) на alClient. 23 10. Поместить на панель 2 элемента Panel. Назвать (Name) один PPic, второй PQuest. Настроить свойство Align элемента PPic – alLeft, элемента PQuest – alClient. 11. На панель PPic поместить элемент Image. Назвать этот элемент (Name) IPic. Изменить свойство Align на alClient. Значение свойства, отвечающего за расположение картинки на всем доступном пространстве (Stretch), установить как True. Цвет картинки сделать прозрачным: в свойстве Transparent установить True. Обеспечить центрирование картинки: в Center установить True. Вывод картинки осуществить пропорционально размерам: в Proportional установить True. 12. На панель PQuest поместить 3 метки (элемент Label, вкладка Standard). Назвать метки (свойство Name) следующим образом: LNo – метка номер вопроса, LQuest – текст вопроса и LAnsw – выбранный ответ. Настроить шрифт элементов: в размере (Size) выставить значение 20, в стиле (Style) – fsBold, цвет для меток LNo и LQuest – clNavy, а для метки LAnsw – clMaroon. У элемента LQuest настроить свойство переноса текста (в свойстве WordWrap установить значение True). Элемент LAnsw сделать невидимым (в свойстве Visible установить False). 13. На панель PBottom поместить кнопку – элемент BitBtn (вкладка Additional). Назвать кнопку (свойство Name) BBExit. Изменить ее свойство Caption и написать там &0 Выход. Запрограммировать событие onClick: (листинг 8.4). Чтобы обеспечить «аварийный» выход при нажатии на клавишу Esc, выбрать для события onKeyPress то же событие, что и для формы (Form.KeyPress). Написать подсказку (Hint): Аварийный выход. 14. На панель PBottom поместить 2 метки (Label): первая будет содержать подсказку команд управления, а вторая – отображать количество оставшихся вопросов. Назвать (свойство Name) метки LHint и LOk. Заменить свойство Caption у элемента LHint на Выберите ответ – “мышь”, клавиши <1>, <2> или <3>, аварийный выход – <Esc>, а у элемента LOk – на «*». У обоих элементов изменить шрифт: размер (Size) – 12, стиль (Style) – fsBold, цвет (Color) – clGray. 15. Запрограммировать событие onTimer из модуля Data.pas (листинг 8.5). Форма для отображения окна тестирования АПДМ «Тест Пальмера» готова! 24 Окно инструкции для теста Пальмера создается аналогично созданию окна инструкции для теста Филлипса. Текст инструкции помещен в листинге 8.6. РАБОТА 9. СОЗДАНИЕ ОКНА ВЫВОДА РЕЗУЛЬТАТОВ АПДМ «ТЕСТ К. ПАЛЬМЕРА “УМЕЕТЕ ЛИ ВЫ ЛАДИТЬ С ОКРУЖАЮЩИМИ”» Задание: сформировать окно вывода результатов тестирования по второй методике в соответствии с индивидуальным заданием. Рассмотрим построение окна вывода результатов тестирования (рису- Окно результатов «Теста К. Пальмера “Умеете ли вы ладить с окружающими”» нок). При выводе результатов выводится текст из файла, соответствующий полученным баллам. Для этого необходимо: 1. Создать форму. Назвать FResult. Настроить форму аналогично форме FPalmer. Запрограммировать события onCreate, onActivate и onKeyPress (листинги 9.1–9.3). 2. Поместить на форму 2 панели Panel, назвать их PTop и PBottom. Расположить их вверху и внизу формы (настроить свойство Align). 25 3. На форму положить элемент RichEdit (вкладка Additional). Расположить элемент на все доступное просранство (Align установить в alClient). Запретить изменение текста (Enable – False и ReadOnly – True). 4. На панель PBottom поместить кнопку Выход. Настроить ее аналогично кнопке Выход формы FPalmer. 5. Текст результатов хранится в файлах: • max.rtf – максимальное значение балла результатов (листинг 9.4); • mdl.rtf – среднее значение балла результатов (листинг 9.5); • min.rtf – минимальное значение балла результатов (листинг 9.6). Форма вывода текста результатов тестирования готова! Построение проекта готовой АПДМ «Тест Пальмера» осуществляется аналогично АПДМ «Тест Филлипса». РАБОТА 10. СОЗДАНИЕ ОБОЛОЧКИ ДЛЯ ПРОВЕДЕНИЯ ПЭ Задание: скомпоновать главный модуль программы. Убедиться в работоспособности созданного модуля: ввести данные нового респондента, провести тестирование, просмотреть полученные результаты, записанные в БД. При проведении ПЭ необходимо хранить информацию об АПДМ, респондентах, плане ПЭ, результатах тестирования, иметь возможность просмотреть протоколы тестирования. Также при проведении ПЭ нужно учитывать, что ПДМ и построенные на их основе АПДМ могут давать неполные или даже ошибочные результаты вследствие особенностей самой методики, а также из-за неправильных ответов респондента. Для того чтобы повысить достоверность полученных результатов, можно при проведении ПЭ включить в план тестирования несколько методик, изучающих одну сферу психологических параметров человека. Например, можно включить 2 методики, которые предоставляют материал в разном виде – вербальном и невербальном. Различные варианты предоставления материала позволят подойти к изучению психологических параметров с разных сторон и тем самым обеспечить более высокую валидность результатов. В работе (рисунок) предлагается построить систему, включающую две АПДМ, но с разным материалом: вербальным и невербальным. При этом система должна обеспечить проведение ПЭ на всех этапах – от ввода информации о респонденте до анализа полученных результатов. С этой целью необ- 26 ходимо построить систему с двумя вариантами работы: Выберите Ваш статус 1 Респондент 2 Психолог Режим «Респондент» Выберите фамилию респондента для тестирования Выберите методику для тестирования Диагностика уровня школьной тревожности Филлипса Тест К.Пальмера «Умеете ли Вы ладить с окружающими» Тест Равена «Шкала прогрессивных матриц» Иванов Иван Иванович Петров Петр Петрович Сидорова Ольга Сергеевна Поиск по фамилии Режим «Психолог» Выберите Ваш статус 1 Респондент 2 Психолог Фамилия Иванов Имя Иван Пол Мужской V Дата рождения 25/12/1999 V Отчество Иванович Фамилия Имя Отчество Иванов Иван Иванович Поиск респондента Название теста Дата Тест Равена «Шкала прог… 25/06/19 № вопроса Вопрос 1 Картинка 1 Общий вид оболочки для проведения ПЭ 1. Режим «Респондент» – позволяет провести ПЭ для выбранного респондента по двум методикам. Разрешается многократное проведение ПЭ, но с записью данных каждого ПЭ в БД. 2. Режим «Психолог» – позволяет подготовить список респондентов, просмотреть результаты и протокол ПЭ. Переход в режим «Психолог» осуществляется при введении пароля, что обеспечивает конфиденциальность результатов ПЭ. Алгоритм построения программы следующий: 27 1. Создать новый проект: File/New/VSL Forms Application Delphi. Назвать проект Tests.dpr, модуль main.pas. Форму назвать (свойство Name) назвать FMain: • Для удобства доступа к данным для версии Delphi XE и выше скорректировать папку создаваемой программы: o выбрать пункт Project/Options; o выбрать пункт Delphi Compiler. • Исправить пункты Output directory и Unit output directory на значение «.\» (без кавычек). Таким образом, файл проекта будет создаваться сразу в папке Fillipse без создания дополнительных вложенных папок. • Аналогично процедуре, используемой в АПДМ «Тест Филлипса» и «Тест Пальмера», для удобства работы с БД создать специальную форму DataModule: o создать специальную форму DataModule (File/New/Other/Delphi Files/DataModule). Назвать файл Data.pas; o на форму поместить элемент доступа к данным ADOConnection (вкладка dbGo). Настроить у этого элемента свойство ConnectionString аналогично тому, как это было сделано при создании подобного модуля в АПДМ «Тест Филлипса»; o на эту форму поместить 11 элементов доступа к БД (элемент ADOQuery, вкладка dbGo); o подключить к ним файл БД. • Настроить свойство Connection, установив там значение ADOConnection. Тем самым все элементы будут подключены к БД, останется подключить их к соответствующей таблице. Заполнить их свойства в соответствии с табл. 10.1. Таблица 10.1 № 1 2 Name ADOQRespondent ADOQTesting 3 ADOQTesting2 4 5 6 7 8 9 10 11 ADOQTest ADOQResult ADOQParamResult ADOQQuestion ADOQAnswer ADOQProtocol ADOQPassword ADOQTemp Описание Респонденты ПЭ ПЭ (вспомогательная для фильтрации) Список АПДМ Результаты Параметры результатов Вопросы Ответы Протокол ПЭ Пароль Вспомогательная 28 SQL SELECT * FROM Respondent SELECT * FROM testing SELECT * FROM testing SELECT * FROM Test SELECT * FROM Result SELECT * FROM ParamResult SELECT * FROM Question SELECT * FROM Answer SELECT * FROM Protocol SELECT * FROM Code – • У элемента ADOQProtocol создать дополнительные (программные) поля Question и Answer, так как в БД хранятся только индексы вопросов и ответов, но не сами вопросы и ответы, а при выводе протокола тестирования желательно выводить текст вопроса и текст ответа. Необходимо щелкнуть дважды на элементе ADOQProtocol, добавить все поля (контекстное меню, пункт Add all fields). Затем выбрать команду New field и заполнить соответствующие поля (Name – соответственно Question и Answer; тип данных поля (Type) – String; размер поля (Size) для Question – 150, для Answer – 50; тип создаваемого поля (Field type) выбрать Calculated). После создания новых полей у элемента ADOQProtocol запрограммировать событие onCalcFields (листинг 10.11). Для элемента ADOQRespondent запрограммировать смену списка ПЭ в соответствии с выбранным респондентом – событие AfterScroll (листинг 10.2). Аналогично запрограммировать выбор АПДМ из списка ADOQTesting (при смене АПДМ сменить список результатов и протокола) – событие AfterScroll (листинг 10.3). • Поместить элементы для связки элементов ADOQuery с «визуальными» компонентами. Поместить на форму 4 элемента DataSource (вкладка DataAccess). Заполнить их свойства в Object Inspector (табл. 10.2): Таблица 10.2 № Name 1 DSRespondent 2 DSTesting 3 DSResult 4 DSProtocol Описание Связка с БД «Респонденты» (ADOQRespondent) Связка с БД «ПЭ» (ADOQTesting) Связка с БД «Результаты» (ADOQResult) Связка с БД «Протокол тестирования» (ADOQProtocol) Свойство DataSet ADOQRespondent ADOQTesting ADOQResult ADOQProtocol Итак, форма с базами данных готова! 2. Вернуться на главную форму FMain. 3. На форму поместить 2 панели (Panel, вкладка Standard). Одну из них назвать (свойство Name) PTop, другую – PBottom. Настроить свойство Align (расположение) для этих панелей: для PTop – alTop (панель расположена вверху окна), для PBottom – alBottom (панель расположена внизу). Для панели PBottom настроить свойство высоты панели (Height) – присвоить ему значение 16: панель служит для отделения списка респондентов и тестовых ме1 Листинги основной программы представлены в прил. 4. 29 тодик от края окна. На панель PTop поместить кнопку Выход (элемент BitBtn). Настроить кнопку аналогично кнопке Выход в окне тестирования (работа 2). Поместить еще один элемент BitBtn для запуска тестирования. Назвать (свойство Name) его BBTest. Заголовок кнопки (Caption) изменить на «Тестирование». Выбрать картинку для кнопки (файл Edit). Сделать кнопку неактивной (в свойстве Enabled установить False). Поместить на панель элемент RadioGroup (панель Additional). Назвать его RGStatus. Изменить его заголовок (Caption) на Выберите свой статус. Добавить пункты (свойство Items) Респондент и Психолог. По умолчанию сделать активным пункт Респондент – установить в свойстве ItemIndex значение «0». 4. На форму поместить панель. Назвать панель PMainTest. На панель PMainTest поместить еще 2 панели. Одну назвать PResp, другую – PTest. У панели PResp настроить свойство Align в alLeft, у панели PTest – alClient. На панель PResp поместить панель. Назвать ее PFIOResp, свойство Align установить в alTop. Изменить свойство Caption на Выберите фамилию респондента для тестирования. Поместить на панель PResp еще одну панель для данных поиска по фамилии. Назвать ее PFind. Свойство Align установить в alBottom. На эту панель (PFind) поместить элемент Метка (Label). Назвать его LFind; изменить заголовок (Caption) на Поиск фамилии. Поместить элемент Edit. Назвать его EFind. Поместить элемент Кнопка (BitBtn); назвать его (Name) BBFind; изменить картинку (Glyph) на Find. Поместить на панель PResp элемент ListBox (вкладка Standard). Дать ему имя LBRespondent; изменить свойство Align на alClient. 5. На панель PTest поместить панель. Назвать ее PNameTest; свойство Align настроить на alTop; Caption – на Выберите методику для тестирования. Поместить на панель PTest элемент ListBox; назвать LBTest; расположить на всем доступном пространстве панели PTest (установить свойство Align в alClient). 6. Панель респондента для выполнения тестирования готова! Уменьшить ее размер по вертикали так, чтобы она не мешала поместить новую панель для реализации режима Психолог. 7. Поставить на форму панель для режима Психолог. Назвать ее PMainPsy. 8. На панель PMainPsy поместить панель для ввода данных респондента: назвать панель PAddResp; свойство Align настроить на alTop. Поместить 30 на панель PAddResp 3 элемента Edit для ввода фамилии, имени, отчества. Назвать элементы: EFamily, EName и ESurname. Поместить на панель PAddResp элемент Выпадающий список (ComboBox) для выбора пола респондента из списка; назвать элемент CBSex; добавить в список (Items) название пола: мужской, женский; сделать активным «невыбранный» элемент списка (в свойстве ItemIndex установить –1). Поместить элемент DateTimePicker (вкладка Win32) для выбора даты рождения респондента; назвать элемент DTPBorn. Поместить 5 меток (Label) для подписи всех элементов; назвать (Name) их: LFamilyResp, LNameResp, LSurnameResp, LSex и LBorn; ввести соответствующие подписи (Caption): Фамилия, Имя, Отчество, Пол и Дата рождения. Поместить на панель PAddResp 4 кнопки BitBtn; назвать их (Name): BBSave, BBAdd, BBEdit и BBDelete; ввести заголовки (Caption): Сохранить, Добавить, Редактировать и Удалить; вставить рисунки для кнопок: Сохранить – Checked, Добавить и Удалить – Insert и Delete; для кнопки Редактировать можно вставить самостоятельно модифицированную картинку (Insert). Кнопку Сохранить сделать неактивной (в свойстве Enabled установить значение False). 9. На панель PMainPsy поместить панель; назвать ее (Name): PExpirement; свойство Align установить в alBottom. Для отделения элементов панели от списка верхней панели вставить в эту панель еще одну панель, назвать ее (Name) PTopExp; расположить ее вверху (Align установить в alTop); заголовок (Caption) стереть; в значении высоты (Height) установить 16. Поместить на панель PExperiment элемент для вывода списка ПЭ, которые были проведены для выбранного респондента: элемент DBGrid (вкладка DataControls). Изменить свойства элемента: • назвать элемент (Name) DBTesting; • настроить свойство DataSource, выбрав из списка DM.Testing – элемент связки с базой данных ПЭ; • свойство Align установить в alLeft; • настроить свойство Options: не разрешить редактирование выбранного элемента (в свойстве dgEditing установить значение False), установить выбор всей строки (в свойстве dgRowSelect установить значение True); • настроить заголовки столбцов таблицы: щелкнуть дважды на элемент DBGTesting на форме; в окне щелкнуть на кнопку «Add All Fields»; уда- 31 лить элементы «ID_Testing», «ID_Respondent» и «ID_Test»; элемент NameTest сделать первым в списке; выбирая элементы таблицы БД из списка в свойстве Title.Caption вписать имена столбцов: Название теста, Дата тестирования и Время тестирования. 10. На панель PExperiment поместить панель: назвать ее (Name) PButExp (кнопки эксперимента); удалить заголовок (Caption); разместить ее в правой части (в свойстве Align установить значение alRight). Поместить на эту панель (PButExp) 4 кнопки BitBtn: назвать их (Name) BBResult, BBProtocol, BBResultOtchet и BBProtocolOtchet; изменить заголовки на Результат, Протокол и для отчетных кнопок – Отчет; вставить картинки (Glyph): Npad для кнопок Результат и его отчета и Npadwrite – для Протокол и его отчета. 11. На панель PExperiment поместить панель и назвать ее (Name) PResultProtocol: • настроить ее на все доступное пространство панели PExperiment: свойство Align установить в alClient. 12. На панель PResultProtocol поместить 2 элемента DBGrid: • назвать (Name) их DBGResult и DBGProtocol; • подключить их к базе DM.DSResult и DM.DSProtocol; данных (DataSource) установить в • добавить заголовки и настроить их аналогично настройке элемента DBGTesting. 13. Чтобы можно было искать фамилию респондента в списке, на панель PMainPsy поместить панель, назвать (Name) PFindResp. Свойство Align настроить на значение alBottom. Свойство панели Caption удалить. На панель PFindResp поместить элемент Edit, назвать EFindResp. Очистить поле Text. На панель PFindResp поместить элемент Метка (Label). Назвать его LFindResp; изменить заголовок (Caption) на Поиск фамилии. 14. На панель PMainPsy поместить элемент DBGrid (вкладка DataControl). Настроить этот элемент: дать ему имя (свойство Name) DBGRespondent. Свойство DataSource установить в значение DM.Respondent. Дважды щелкнуть на этом элементе и добавить все поля БД (кнопка Add All Fields). Удалить поле ID_Respondent. Для остальных полей скорректировать заголовки (выбрать нужное поле и исправить свойство Title\Caption на следующие (табл. 10.3). 32 Таблица 10.3 Поле Family Name SurName Sex Born Заголовок Фамилия Имя Отчество Пол Дата рождения 15. Расположить элемент DBGRespondent на все доступное пространство панели PMainPsy (установить свойство Align в значение alClient). 16. Приступить к вводу кода: • нажать на клавишу <F12> и попасть в текст программы. После строки {$R * .dfm} ввести код из листинга 10.4; • вернуться на форму (нажать <F12>) и запрограммировать событие onActivate окна FMain (листинг 10.5). 17. На панели PTop запрограммировать кнопку Тестирование – дважды щелкнуть на нее. Написать процедуру выполнения тестирования (листинг 10.6). Форма готова! Далее: • На панели PFind запрограммировать кнопку BBFind (листинг 10.7). • На панели PMainTest запрограммировать список выбора респондента LBRespondent (листинг 10.8) и список выбора теста LBTest (листинг 10.9). Панель для проведения тестирования готова! • Запрограммировать выбор записи с помощью клавиш клавиатуры в списке DBGRespondent (событие onKeyUp) для отображения в полях редактирования данных выбранной записи (листинг 10.10) и мыши (событие onCellClick – листинг 10.11). • Запрограммировать на панели PAddResp кнопки Добавить, Редактировать и Удалить и Сохранить (листинги 10.12–10.15). • Запрограммировать на панели PButExp кнопки Результат и Протокол (листинги 10.16 и 10.17). • Запрограммировать на панели PFindResp ввод текста в поле ввода EFindResp (событие onChange), что позволит при вводе текста сразу находить строку с фамилией искомого респондента (листинг 10.18). • Запрограммировать смену статуса пользователя Респондент или Психолог (листинг 10.19). Обратить внимание, что вызывается окно для ввода пароля при выборе режима Психолог (реализован простой алгоритм хра33 нения пароля в БД, для более «строгого» режима необходимо применить другую процедуру хранения пароля (например, кодировка пароля при сохранении в БД)). Для вывода окна ввода пароля необходимо выполнить следующий алгоритм: • создать новую форму (File/New/VCL Form Delphi); • сохранить форму, назвав файл Password.pas; • назвать форму (Name) FPassword. Установить позицию вывода окна (Position) в центре экрана (значение poScreenCenter); • изменить заголовок (Caption) на Код доступа; • поместить на форму 3 элемента MaskEdit (вкладка Additional) для ввода пароля, а также для возможности смены пароля (вводится новый пароль дважды, для того чтобы избежать ввода «неправильного» пароля). При вводе пароля есть возможность не показывать его, а показывать, например, символ «*». Назвать элементы (Name) MEPassword, MEPassword1 и MEPassword2. Свойство «скрывающего» символа (PasswordChar) установить в «*». Элементы MEPassword1 и MEPassword2 сделать невидимыми (свойство Visible установить в False); • поместить 3 метки подписи (Label). Назвать их (Name): LPassword, LNew1 и LNew2. Написать заголовки (Caption): Введите код доступа, Введите новый пароль и Повторите новый пароль. Метки LNew1 и LNew2 сделать невидимыми (свойство Visible установить в False); • поместить 4 кнопки (BitBtn). Назвать их (Name): BBPassword, BBNewPassword, BBCancelPassword и BBChargePassword. Изменить свойство Kind у кнопки BBPassword на bkOK, для кнопки BBCancelPassword – bkCancel. Сменить картинку на кнопке BBChargePassword на картинку Pagenum. Кнопки BBPassword и BBNewPassword расположить друг на друге. BBNewPassword сделать невидимой (свойство Visible установить в False); • запрограммировать событие onActivate формы (листинг 10.20); • запрограммировать события по вводу пароля для кнопки BBPassword (листинг 10.21), для смены пароля BBChargePassword (листинг 10.22), для сохранения нового пароля BBNewPassword (листинг 10.23). Программа готова! РАБОТА 11. СОЗДАНИЕ ОТЧЕТОВ Задание: создать макеты отчетов. Просмотреть корректность отображения отчетов по результатам тестирования из БД. 34 Для создания отчета (рисунок) необходимо выполнить следующие шаги: 1. Убедиться, что установлен компонент для построения отчетов FastReport. В случае его отсутствия скачать установщик с сайта https://www.fastreport.ru/ru/download/public_files/267/. Респондент: Петрова Ольга Сергеевна АПДМ: Диагностика уровня школьной тревожности Филлипса Дата тестирования: Ср 12.06.19 Время тестирования: 20;03;00 Параметры результата Мин знач. Значение Макс. знач. Общая тревожность в школе 0 12 22 Переживания соц. стресса 0 7 11 Флустрация потребности в достижении 0 4 13 Общая тревожность 0 3 6 Отчет «Результаты тестирования» 2. Поместить на форму DM элементы для создания отчета: • элемент frxReport со вкладки FastReport 6.0 – элемент для формирования отчета; • 2 элемента frxDBDataset со вкладки FastReport 6.0 – элементы для связки окна рапорта с базой данных. Настроить эти элементы для подключения баз данных. Один элемент назвать frxDBDataSetR – элемент для отображения отчета по результатам тестирования; другой frxDBDataSetP – элемент для отображения отчета протокола тестирования. Подключить к ним БД (свойство DataSet установить соответственно в ADOQResult и ADOQProtocol). Для удобства пользования этими элементами в мастере построения отчетов можно назвать эти элементы: настроить имена для отчета UserName на frxDataSetR и frxDataSetP соответственно для элементов frxDBDataSetR и frxDBDataSetP. Готовые отчеты можно просматривать на экране, а можно экспортировать в различные форматы. Например, можно предложить экспорт в текстовый документ rtf и pdf, а также просто в картинку bmp. Для этого на форму DM поместить элементы frxPDFExport, frxRTFExport и frxBMPExport со вкладки FastReport 6.0 Export. Настройка формы готова. 3. Теперь можно приступить к построению отчета: 35 • Запустить оболочку построения отчета, дважды щелкнув на элементе frxReport. • Построить отчет, в котором будут присутствовать заголовок отчета, заголовок страницы, таблица с результатами или протоколом из БД и нижний колонтитул с номерами страниц. • Подключить к отчету БД: выбрать пункт меню Report/Data и подключить элемент для доступа к данным результатов тестирования frxDBDataSetR. • Слева среди элементов выбрать раздел Insert Band и выбрать элемент Report Title – заголовок отчета. Поместить на заголовок элемент Edit Text Tool и вписать туда Результаты тестирования. Сделать шрифт жирным (нажать на панели форматирования на кнопку B) и увеличить шрифт. • Аналогично поместить в отчет заголовок страницы PageHeader – элементы, помещенные в этот раздел, будут отображаться вверху на каждой странице. Поместить этот элемент на полотно отчета. Поместить на этот элемент (PageHeader) элемент Edit Text Tool. Выбрать из контекстного меню элемента пункт Edit и записать туда текст Респондент:. Аналогично поместить элементы для отображения текста АПДМ:, Дата тестирования: и Время тестирования:. Сделать текст на этих элементах жирным курсивом (выбрав кнопки B и I на панели форматирования). Рядом с каждым элементом поместить еще по такому же элементу для отображения соответствующих значений (имени респондента, названия АПДМ, даты и времени тестирования). Назвать эти элементы в ObjectInspector (свойство Name): MemoResp, MemoAPDM, MemoDate и MemoTime. Сделать шрифт этих элементов жирным (кнопка B на панели форматирования). Заголовок готов! • Поместить элемент Header – заголовок таблицы. На него поместить 4 элемента Edit Text Tool. В них сформировать заголовки таблицы, написав текст: Параметр результата, Значение, Мин. значение и Макс. значение. Сделать на этих элементах рамочку, щелкнув на кнопку «All Frame Lines». Заголовок таблицы готов. • Поместить элемент для отображения данных из БД: элемент Band/MasterData. Убедиться, что этот элемент подключен к БД – в поле DataSet стоит значение frxDBDataSetR. Поместить на этот элемент 4 элемента Edit Text Tool для отображения данных из БД и выбрать из выпадающего списка необходимые поля: Parametr, Value_Result, MinValue и MaxValue. 36 Каждый элемент заключить в рамку, щелкнув на кнопку All Frame Lines. Основная таблица готова! • Поместить на полотно нижний колонтитул страницы – элемент Band\PageFooter. Поместить на этот элемент слева элемент Edit Text Tool и написать в нем Результат тестирования. Справа поместить еще один элемент Edit Text Tool и внутри него написать макрос (макросы пишутся в квадратных скобках): [Page#]. В конце страницы будут отображаться подпись слева и номер страницы справа. Нижний колонтитул готов! • Сохранить отчет, выбрав пункт File/Save или щелкнув по соответствующей кнопке на стандартной панели. Дать имя отчету Result.fr3. • Аналогично создать отчет для отображения протокола тестирования. • Виды готовых шаблонов отчетов представлены в прил. 4: вид отчета 11.1 – для отображения результатов и 11.2 – для протокола тестирования. • Закрыть мастер отчета, выбрав команду File/Exit. 4. Теперь можно запрограммировать кнопку для отображения отчетов Отчет: • Сформируем процедуру для отображения отчетов (отчеты похожи, поэтому можно создать одну процедуру). В модуле main.pas в теле объекта TFMain написать процедуру Procedure Otchet (Dannye : Boolean): при значении True переменной Dannye будет выводиться отчет результатов, а при значении False – протокол. Создать тело процедуры, нажав комбинацию клавиш <Ctrl>+<Shift>+<C>. Вписать текст программы из листинга 11.3. Обратите внимание: чтобы не нарушить структуру списка ПЭ, все манипуляции с БД осуществляются с помощью вспомогательного элемента ADOQTemp. • Щелкнуть на кнопку Отчет у кнопки Результат и вписать текст из листинга 11.4. • Щелкнуть на кнопку Отчет у кнопки Протокол и вписать текст из листинга 11.5. Выдача отчетов по результатам тестирования и протоколам тестирования, выбранного из списка ПЭ, готова! РАБОТА 12. СОЗДАНИЕ СПРАВОЧНОЙ ИНФОРМАЦИИ Задание: создать справочную систему для всех модулей системы и убедиться в работоспособности вывода контекстной справки. 37 Справочная информация В современных программах принято иметь возможность отображать справочную информацию (рисунок). Самый простой способ отображения справочной информации в Delphi – это вывод коротких подсказок при наведении курсора мыши на видимые элементы. Для использования такой возможности нужно включить в свойстве ShowHint у формы значение True. В этом случае, если у видимых элементов ввести строку-подсказку в поле Hint, справка-подсказка будет появляться на 0,5 с во всплывающем окошке. Но такой короткой информации часто бывает мало! Требуется более подробная информация, и тогда можно воспользоваться возможностью подключения к программе стандартного окна справки. В последнее время в Windows используется справка в формате интернет-страниц – справка в формате chm. В работе будет показан процесс построения такой справочной информации. Для этого нет стандартных программ. Можно использовать, например, условно-бесплатную программу HelpNDoc. На данный момент доступна версия 4.8.0 (показана на рисунке). Для компиляции интернет-страниц в справочный файл chm потребуется программа Microsoft's HTML Help Workshop. Алгоритм построения справочной информации следующий: 1. Установить необходимые программы: HelpNDoc и Microsoft's HTML Help Workshop. 38 2. Подключить в программе HelpNDoc инсталлятор chm файлов (Microsoft's HTML Help Workshop). Для этого выполнить пункт File/Options и в пункте «Microsoft HTML help Workshop path (hhc.exe):» выбрать путь к указанному файлу (например, такой: «C:\Program Files (x86)\HTML Help Workshop\hhc.exe». 3. Нажать кнопку Ok. Программа настроена и готова к использованию! Для примера создадим справочный файл для АПДМ «Тест Филлипса»: 1. Продумать, какую информацию следует поместить в справочный файл. 2. Запустить программу HelpNDoc. 3. Создать новый проект: File/New project. 4. В поле Project Title вписать название заголовка справки: АПДМ `Тест Филлипса`. Обратите внимание, что в качестве кавычек в названии теста выбран символ «`»! Символ «’» будет связан с именем файла и поэтому не может быть использован! В поле Project Language выбрать русский язык: «Русский (Россия)». 5. Нажать на кнопку Create Empty Project – будет создан пустой проект. 6. Если будут автоматически созданы какие-нибудь пункты, удалить их (выбрать из контекстного меню команду Delete). Настроить информацию справки: • В поле Автор (Author) ввести фамилию автора программы; в поле Версия программы (Version) ввести номер версии программы, например, 1.0; в поле Авторские права (Copyright) ввести свои авторские права Copyright © <Dates> by <Authors>. All Rights Reserved – в поле <Dates> вписать текущий год, в поле <Authors> вписать свою фамилию. В поле Язык справки (Project charset) выбрать Cyrillic – поддержка русской кодовой страницы. • В поле Заголовок окна помощи (Table of Contents) из контекстного меню выбрать пункт Add topic/Add topic. Ввести, например, такую структуру файла справки: Главное окно, Инструкция, Тестирование, Результаты. • В пункт Главное окно ввести текст (окно справа от списка созданных пунктов) из листинга 12.1. Оформить заголовок текста жирным шрифтом (лента – Write, раздел Font – жирный шрифт). Сделать фон заголовка, например, голубым (раздел Paragraph, пункт Paragraph Background Color) – для этого выделить строку заголовка и применить указанную команду. • Заполнить текстом остальные пункты справки (листинги 12.2–12.4). 39 • Для большей информативности можно вставить в текст виды соответствующих экранов АПДМ. В программе АПДМ скопировать экраны (PrnScr), вставить их в программу Paint и сохранить. В создаваемом проекте: o выбрать на ленте Home пункт Add item/Add picture; o нажать на пункт No File Include и выбрать Include File; o в поле Library Item Name назвать картинку, например, «Glavnoe_okno». Обратите внимание: имя пишется ТОЛЬКО латинскими буквами. Нажать на кнопку Ok; o повторить эти пункты для всех картинок проекта. • В текст справки добавить нужные картинки, щелкнув на ленте Insert на кнопку Insert Picture и выбрав из списка сохраненные картинки. • Повторить для других пунктов вставку нужных картинок. • В тексте Главное окно добавить гиперссылки на другие пункты: o выделить нужный текст; o выбрать на ленте Insert пункт Hyperlink…; o выбрать из списка необходимую страницу; o повторить для всех оставшихся пунктов, для которых нужно построить гиперссылки. 7. Для получения ссылок на необходимое окно справки настроить индексы справочной информации: выбрать нужный пункт справки (окно Table of Contents) и в контекстном меню в окне Help Context проставить нужные цифры (запомнить, у какого пункта какая цифра). 8. Скомпилировать файл справки: • выбрать на ленте Home команду Generate help. Оставить галочку только в пункте Build chm documentation; • нажать на кнопку Generate; • при правильном построении справки (без ошибок) будет создан файл chm, расположенный в месте, указанном в пункте Summary. Файл справки готов! Запустить в Delphi проект АПДМ «Тест Филлипса». В каждом окне программы выбрать в окне Object Inspector в пункте ShowHint значение True. Для всех видимых элементов заполнить поле справки-подсказки Hint. Подключить файл справки; в каждом окне формы за файл справки отвечает поле HelpFile (путь доступа к файлу корректируется при запуске программы АПДМ – переменная SH). Для каждого элемента, для которого предусмотре- 40 на справка, указать ссылку на текст справки (поле HelpContext) – указать цифру текста справки, которая была установлена в п. 7. Для обеспечения возможности вызова справки в формате chm необходимо подключить к файлу программы модуль HTMLHelpViewer. Необходимо вписать это имя в список модулей (раздел Uses). Справка-подсказка и файл справки подключены! РАБОТА 13. СОЗДАНИЕ УСТАНОВОЧНОГО ДИСКА Задание: создать установочный диск для созданного комплекса программ. Сымитировать установку программы на диск. Проверить работоспособность созданного установочного файла программы. Инсталлятор СУБД АПДМ При написании программного продукта финальной стадией является создание установочного носителя – файлов, с помощью которых можно установить программный продукт на компьютер пользователя (рисунок). При этом такой установочный комплект программ должен установить программу в указанную папку (часто программы ставятся в папку Program Files), создать ярлыки для запуска программы в меню Пуск и/или на рабочем столе; создать специальные настройки в реестре, установленных файлах конфигурации и т. п.; подготовить программу для возможной деинсталляции (удаления) ее с компьютера. 41 Существует множество программных продуктов для создания установочных дисков. Рассмотрим один из них – программа Inno Setup Compiler, версия 6.0.2. Рассмотрим процесс построения установочного диска для созданной системы АПДМ. Алгоритм построения следующий: 1. Подготовить папку со всеми файлами, необходимыми для установки. Для установки программы, написанной в Delphi RAD Studio 10.3.1 Rio, необходимо добавить к запускаемым файлам (файлам *.exe) 2 файла rtl260.bpl и vcl260.bpl из папки с установленной Delphi (папка с именем Bin). 2. Запустить программу создания установочного диска Inno Setup 6. 3. Создать новый проект: File/New. 4. Воспользоваться мастером создания установочного диска: • В окне Application Information ввести в поле Application Name имя создаваемого приложения (САПДМ); версию созданного приложения Application version (1.0); имя создателя программы Application Publisher (Student Co); если есть интернет-сайт разработчика, можно указать его в поле Application Website. • Нажать кнопку Next и перейти к окну Application Folder. Поле для указания папки установки (Application Destination Base Folder) оставить по умолчанию: Program Files Folder. В поле создания папки назначения для программы (Application Folder Name) написать имя папки для приложения в папке Program Files, например, «САПДМ». Можно разрешить пользователю изменить имя папки приложения (Allow user to change the application folder) либо вообще не создавать папку (The application doesn’t need folder). • В следующем окне Application Files нужно выбрать файлы, которые необходимо установить (Other application files), можно подключить сразу всю папку со всеми файлами (Add folder…). • Выбрать папку с подготовленными для установки файлами. После установки программы можно сразу потребовать запуск устанавливаемого приложения (пункт Allow user to start the application after Setup has finished и Application main executable file (имя запускаемой программы)) либо ничего не запускать (The application doesn’t have a main executable file). • В окне Application start menu folder name заполнить необходимые поля для управления ярлычками: разрешить пользователю изменять имя меню папки запуска (Allow user to change the start menu folder name): 42 o разрешить пользователю отключить создание пункта меню в меню «Пуск» (Allow user to disable start menu folder creation); o создать ярлык для перехода на сайт автора в меню «Пуск» (Create an Internet shortcut in the Start Menu folder); o создать значок Uninstall (удаления программы) в меню «Пуск» (Create an Uninstall icon in the Start Menu folder); o разрешить пользователю создавать иконку программы на рабочем столе (Allow user to create a desktop icon) и разрешить пользователю создавать иконку быстрого запуска (Allow user to create a Quick Launch icon). • В полях следующего окна можно ввести имена файлов, необходимых для ознакомления пользователя до и после установки программы: лицензия (License File); информационный файл перед установкой (Information file shown before installation) и информационный файл после установки (Information file shown before installation). • В следующем окне можно настроить режимы окна установки: запускать с административными правами для всех пользователей (Administrative install mode (install for all users)), без административных прав для одного пользователя (Non administrative install mode (install for current user only)); разрешить пользователю отменять режим установки с помощью командной строки (Allow user to override the install mode via the command line); запросить у пользователя режим установки при запуске (Ask the user to choose the install mode at startup). • В следующем окне выбора языка установки Setup Language можно выбрать нужный язык для программы установки: Language. • В окне установки компилятора (Compiler Settings) можно выбрать папку (Custom compiler output folder) и имя файла установщика (Compiler output base file name), иконку для программы установщика (Custom Setup Icon File) и, если нужно, пароль (Setup Password). • В следующем окне предлагается настроить или выбрать директивы компилятора (Yes use #define compiler directives). Можно поставить галочку и оставить «директивы по умолчанию». • В последнем окне выбрать окончание создания установщика, и после сохранения проекта установщик будет скомпилирован. Установщик создан! Теперь его можно скопировать на любой носитель и устанавливать программу с этого носителя с помощью созданного установщика. 43 ЗАДАНИЯ ДЛЯ РАБОТЫ Для лучшего усвоения материала предложены варианты самостоятельного выполнения индивидуальных заданий по вариантам. Каждый вариант содержит две ПДМ для автоматизации. Первая методика – бланковый тест-опросник закрытого типа наподобие рассмотренной АПДМ «Тест Филлипса». Вторая методика имеет графический тестовый материал и может быть автоматизирована по аналогии с рассмотренной АПДМ «Тест Пальмера». Задания по вариантам представлены в прил. 1. СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ Осипов Д. Базы данных и Delphi. Теория и практика (Профессиональное программирование). СПб.: БХВ-Петербург, 2011. Тутубалина Н. Твоя будущая профессия: сб. тестов по профессиональной ориентации. Ростов н/Д: Феникс, 2005. Хладни И. Внутренний мир Borland Delphi. М.: Вильямс, 2006. 44 ПРИЛОЖЕНИЯ 1. Индивидуальные задания а б а б а б а б а б а б а б а б а б а б а б а б а б 1 вариант Опросник Кэттела Закономерность числового ряда 2 вариант Мини-мульт Опросник Айзенка 3 вариант Уровень субъективного контроля Тест Манекен 4 вариант Тест Мюнстерберга Тест Кагана 5 вариант Определение психологического климата Кольца Ландольта 6 вариант Метод Лири Тест Торстона 7 вариант Методика поведения Томаса Узнавание фигур 8 вариант Опросник структуры темперамента Русалова Тест интеллекта Кэттела 9 вариант Четвертый лишний Социальный интеллект 10 вариант Тест Амтхауэра. Дополнение предложений Тест Готтшальдта 11 вариант Тест Амтхауэра. Аналогии Тест Векслера. Последовательные картинки 12 вариант Тест Амтхауэра. Арифметические задачи Тест Векслера. Недостающие детали 13 вариант Тест юмористических фраз Тест «Расстановка чисел» а б а б а б а б а б а б а б а б а б а б а б а б а б 45 14 вариант Индекс кратковременной памяти Тест Векслера. Кубики Коса 15 вариант Тест «Объем внимания» Тест «Кодирование» 16 вариант Личностная шкала проявления тревоги Тест Люшера 17 вариант Незаконченное предложение Память на образы 18 вариант Опросник PEN Красно-черная таблица 19 вариант Уровень субъективного контроля Расстановка чисел 20 вариант Опросник Леонгарда Тест «Компасы» 21 вариант Методика диагностики темперамента Стреляу Интеллектуальная лабильность 22 вариант Тест «Сложные аналогии» Тест Равена 23 вариант Методика определения стиля руководства трудовым коллективом Тест технической понятливости 24 вариант Тест «Корректурная проба» Рисуночный тест «Деловые ситуации» 25 вариант Методика PARI Методика Рене Жиля 26 вариант Тревожность и депрессия Тест «Память на числа» а б а б 27 вариант Тест «Направленность личности» Тест «Перепутанные линии» 28 вариант Шкала депрессии Тест «Конструктивный рисунок человека из геометрических фигур» Окончание прил. 1 29 вариант А Опросник САН Б Тест «Память на образы» 30 вариант А Тест Торндайка Б Тест «Количественные отношения» 2. Тест школьной тревожности Филлипса Тест является вербальным, профессиональным. Тест школьной тревожности Филлипса (Альманах психологических тестов. М.: КСП, 1995) позволяет подробно изучать уровень и характер тревожности, связанной со школой, у детей младшего и среднего школьного возраста, оценить эмоциональные особенности отношений ребенка со сверстниками и учителями. Показатели этого теста дают представление как об общей тревожности – эмоциональном состоянии ребенка, связанном с различными формами его включения в жизнь школы, так и о частных видах проявления школьной тревожности. Тест состоит из 58 вопросов, которые школьникам можно зачитывать, а можно предлагать в письменном виде. На каждый вопрос требуется ответить однозначно: «да» или «нет». Инструкция «Ребята, сейчас вам будет предложен опросник, который состоит из вопросов о том, как вы себя чувствуете в школе. Старайтесь отвечать искренне и правдиво, не может быть верных или неверных, хороших или плохих ответов. Над вопросами долго не задумывайтесь. На листе для ответов вверху запишите свое имя, фамилию и класс. Отвечая на вопрос, записывайте его номер и ответ: "+", если Вы согласны с ним, или "–", если не согласны». Обработка и интерпретация результатов При обработке результатов выделяют вопросы, ответы на которые не совпадают с ключом теста. Например, на 58-й вопрос ребенок ответил «да», в то время как в ключе этому вопросу соответствует «–», т. е. ответ «нет». Ответы, не совпадающие с ключом, – это проявления тревожности. При обработке подсчитываются: 1. Общее число несовпадений по всему тесту. Если оно больше 50 % от общего числа вопросов, можно говорить о повышенной тревожности ребенка, если больше 75 % – о высокой тревожности. 2. Число совпадений по каждому из восьми видов тревожности. Уровень тревожности определяется так же, как в первом случае. Анализируется общее внутреннее эмоциональное состояние школьника, во многом определяющееся наличием тех или иных тревожных синдромов (факторов) и их количеством. 46 Факторы 1. Общая тревожность в школе № вопросов 2,4,7,12,16,21,23,26,28,46,47,48,49,50,51,52,53, 54,55,56,57,58 ∑=22 2. Переживание социального стресса 5,10,15,20,24,30,33,36,39,42,44 ∑=11 3. Фрустрация потребности 1,3,6,11,17,19,25,29,32,35,38,41,43 в достижении успеха ∑=13 4. Страх самовыражения 27,31,34,37,40,45 ∑=6 5. Страх ситуации проверки знаний 2,7,12,16,21,26 ∑=6 6. Страх не соответствовать ожиданиям 3,8,13,17,22 окружающих ∑=5 7. Низкая физиологическая 9,14,18,23,28 сопротивляемость стрессу ∑=5 8. Проблемы и страхи в отношениях 2,6,11,32,35,41,44,47 с учителями ∑=8 Содержательная характеристика видов (факторов) тревожности 1. Общая тревожность в школе – общее эмоциональное состояние ребенка, связанное с различными формами его включения в жизнь школы. 2. Переживание социального стресса – эмоциональное состояние ребенка, на фоне которого развиваются его социальные контакты (прежде всего со сверстниками). 3. Фрустрация потребности в достижении успеха – неблагоприятный психический фон, не позволяющий ребенку развивать свои потребности в успехе, достижении высокого результата и т. д. 4. Страх самовыражения – негативные эмоциональные переживания ситуаций, сопряженных с необходимостью самораскрытия, предъявления себя другим, демонстрации своих возможностей. 5. Страх ситуации проверки знаний – негативное отношение и переживание тревоги в ситуациях проверки (особенно – публичной) знаний, достижений, возможностей. 6. Страх не соответствовать ожиданиям окружающих – ориентация на значимость других в оценке своих результатов, поступков и мыслей, тревога по поводу оценок, даваемых окружающими, ожидание негативных оценок. 7. Низкая физиологическая сопротивляемость стрессу – особенности психофизиологической организации, снижающие приспособляемость ребенка к ситуациям стрессогенного характера, повышающие вероятность неадекватного, деструктивного реагирования на тревожный фактор среды. 8. Проблемы и страхи в отношениях с учителями – общий негативный эмоциональный фон отношений со взрослыми в школе, снижающий успешность обучения ребенка. 47 Представление результатов 1. Подсчитывается число несовпадений знаков («+» – да, «–» – нет) по каждому фактору (абсолютное число несовпадений в процентах: <50; >50; >75) для каждого респондента. Эти данные представляются в виде индивидуальных диаграмм. 2. Подсчитывается число несовпадений по каждому измерению для всего класса (абсолютное значение в процентах: <50; >50; >75). Данные представляются в виде диаграммы. 3. Подсчитывается количество учащихся, имеющих несовпадения по определенному фактору >50 % и >75 % (для всех факторов). 4. При повторных замерах представляются сравнительные результаты. 5. Собирается полная информация о каждом учащемся (по результатам теста). Полученные результаты можно представить в сводной таблице, включив в нее результаты, превышающие норму. Такой способ представления облегчит общий анализ результатов по классу в целом, а также сравнительный анализ данных по разным классам. Текст опросника Филлипса 1. Трудно ли тебе держаться на одном уровне знаний со всем классом? 2. Волнуешься ли ты, когда учитель говорит, что собирается проверить, насколько ты знаешь материал? 3. Трудно ли тебе работать в классе так, как этого хочет учитель? 4. Снится ли тебе временами, что учитель в ярости от того, что ты не знаешь урок? 5. Случалось ли, что кто-нибудь из твоего класса бил или ударял тебя? 6. Часто ли тебе хочется, чтобы учитель не торопился при объяснении нового материала, пока ты не поймешь, что он говорит? 7. Сильно ли ты волнуешься при ответе или выполнении задания? 8. Случается ли с тобой, что ты опасаешься высказываться на уроке, потому что боишься сделать глупую ошибку? 9. Дрожат ли у тебя колени, когда тебя вызывают отвечать? 10. Часто ли твои одноклассники смеются над тобой, когда вы играете в разные игры? 11. Случается ли, что тебе ставят более низкую оценку, чем ты ожидал? 12. Волнует ли тебя вопрос о том, не оставят ли тебя на второй год? 13. Стараешься ли ты избегать игр, в которых делается выбор, потому что тебя, как правило, не выбирают? 14. Бывает ли временами, что ты весь дрожишь, когда тебя вызывают отвечать? 15. Часто ли у тебя возникает ощущение, что никто из твоих одноклассников не хочет делать то, что хочешь ты? 16. Сильно ли ты волнуешься перед тем как начать выполнять задание? 17. Трудно ли тебе получать такие отметки, каких ждут от тебя родители? 18. Боишься ли ты временами, что тебе станет дурно в классе? 19. Будут ли твои одноклассники смеяться над тобой, если ты сделаешь ошибку при ответе? 20. Похож ли ты на своих одноклассников? 21. Выполнив задание, беспокоишься ли ты о том, хорошо ли с ним справился? 22. Когда ты работаешь в классе, уверен ли ты в том, что все хорошо запомнишь? 48 23. Снится ли тебе иногда, что ты в школе и не можешь ответить на вопрос учителя? 24. Верно ли, что большинство ребят относится к тебе по-дружески? 25. Работаешь ли ты более усердно, если знаешь, что результаты твоей работы будут сравниваться в классе с результатами твоих одноклассников? 26. Часто ли мечтаешь о том, чтобы поменьше волноваться, когда тебя спрашивают? 27. Боишься ли ты временами вступать в спор? 28. Чувствуешь ли ты, что твое сердце начинает сильно биться, когда учитель говорит, что собирается проверить твою готовность к уроку? 29. Когда ты получаешь хорошие отметки, думает ли кто-нибудь из твоих друзей, что ты хочешь выслужиться? 30. Хорошо ли ты себя чувствуешь с теми из твоих одноклассников, к которым ребята относятся с особым вниманием? 31. Бывает ли, что некоторые ребята в классе говорят что-то, что тебя задевает? 32. Как ты думаешь, теряют ли расположение остальных те ученики, которые не справляются с учебой? 33. Похоже ли на то, что большинство твоих одноклассников не обращают на тебя внимания? 34. Часто ли ты боишься выглядеть нелепо? 35. Доволен ли ты тем, как к тебе относятся учителя? 36. Помогает ли твоя мама в организации вечеров, как другие мамы твоих одноклассников? 37. Волновало ли тебя когда-нибудь, что думают о тебе окружающие? 38. Надеешься ли ты в будущем учиться лучше, чем раньше? 39. Считаешь ли ты, что одеваешься в школу так же хорошо, как и твои одноклассники? 40. Часто ли, отвечая на уроке, ты задумываешься о том, что думают о тебе в это время другие? 41. Обладают ли способные ученики какими-то особыми правами, которых нет у других ребят в классе? 42. Злятся ли некоторые из твоих одноклассников, когда тебе удается быть лучше их? 43. Доволен ли ты тем, как к тебе относятся одноклассники? 44. Хорошо ли ты себя чувствуешь, когда остаешься один на один с учителем? 45. Высмеивают ли временами одноклассники твою внешность и поведение? 46. Думаешь ли ты, что беспокоишься о своих школьных делах больше, чем другие ребята? 47. Если ты не можешь ответить, когда тебя спрашивают, чувствуешь ли ты, что вот-вот расплачешься? 48. Когда вечером ты лежишь в постели, думаешь ли ты временами с беспокойством о том, что будет завтра в школе? 49. Работая над трудным заданием, чувствуешь ли ты порой, что совершенно забыл вещи, которые хорошо знал раньше? 50. Дрожит ли слегка твоя рука, когда ты работаешь над заданием? 49 51. Чувствуешь ли ты, что начинаешь нервничать, когда учитель говорит, что собирается дать классу задание? 52. Пугает ли тебя проверка твоих знаний в школе? 53. Когда учитель говорит, что собирается дать классу задание, чувствуешь ли ты страх, что не справишься с ним? 54. Снилось ли тебе временами, что твои одноклассники могут сделать то, что не можешь ты? 55. Когда учитель объясняет материал, кажется ли тебе, что твои одноклассники понимают его лучше, чем ты? 56. Беспокоишься ли ты по дороге в школу, что учитель может дать классу проверочную работу? 57. Когда ты выполняешь задание, чувствуешь ли ты обычно, что делаешь это плохо? 58. Дрожит ли слегка твоя рука, когда учитель просит сделать задание на доске перед всем классом? 3. УМЕЕТЕ ЛИ ВЫ ЛАДИТЬ С ЛЮДЬМИ (ТЕСТ ПАЛЬМЕРА) Тест относится к «популярным» (Жариков Е., Крушельницкий Е. Для тебя и о тебе. М.: Просвещение, 1991). Материал теста: вопросы вербально-невербальные, ответы вербальные. Западногерманский доктор психологии К. Пальмер предлагает следующий тест, позволяющий определить, умеете ли вы ладить с людьми. Надо ответить на два вопроса про каждый из рисунков. К рис. А: 1. Какое определение, по-вашему, больше подходит к этому геометрическому телу: 1) оно остроконечное; 2) оно устойчиво; 3) оно находится в состоянии равновесия? 2. На что оно больше всего похоже: 1) на айсберг; 2) на осколок стекла; 3) на туристскую палатку? К рис. Б: 3. В каком направлении может покатиться этот шар: 1) вперед; 50 2) назад; 3) в любую из двух сторон? 4. Из чего сделан этот шар: 1) из прозрачной пластмассы; 2) из стекла; 3) изо льда? К рис. В: 5. Как точнее описать эту фигуру: 1) граненая; 2) неопределенная; 3) сверкающая множеством граней? 6. Какое чувство она у вас вызывает: 1) приятное; 2) неприятное; 3) никакого? Подсчитайте набранные баллы: Рисунок А Б В Вопрос 1 2 3 4 5 6 Ответы 2) 4 3 0 4 0 0 1) 0 0 7 7 4 7 3) 7 7 4 0 7 3 0–16 баллов. Вам приходится трудно в общении с окружающими, потому что в каждом вы видите возможного конкурента или даже врага и сразу занимаете воинственную позицию. Вы сами замечаете, что это не вызывает к вам симпатий, и переживаете по этому поводу. Но если уж кто-то симпатичен вам, то вы становитесь коммуникабельным и сердечным, что вызывает ответную реакцию. Старайтесь обезоружить своей приветливостью даже не очень симпатичного вам человека, и наверняка если не он, так другие станут относиться к вам с симпатией. 17–27 баллов. Вы счастливый человек: в общении с окружающими – никаких проблем. Даже в критических ситуациях вы умеете найти правильный тон, чтобы разрядить обстановку. Но и ваша мягкость имеет границы. Если вы считаете, что с вами поступают несправедливо, то прямо заявляете об этом, не задумываясь о последствиях. Кое-кого это может отпугнуть, но та решительность, с которой вы отстаиваете свою позицию, показывает, что ваша обычная обходительность не маска, а природная черта. Умные люди вас весьма ценят. 28–42 балла. Вы удивительно гибки в общении. Никому не удается вывести вас из равновесия, вы не тратите нервы попусту. Но вашу гибкость многие воспринимают как беспринципность, а отсюда и результат: умные люди не относятся к вам всерьез. Поэтому 51 не старайтесь во что бы то ни стало избегать острых углов: иногда полезно и показать шипы, отстаивая свою точку зрения. 4. ЛИСТИНГИ ПРОГРАММ Листинги программы из разделов 2–9 доступны в электронном варианте пособия. Листинг 10.1 (вычисляемые поля таблицы базы данных) procedure TDM.ADOQProtocolCalcFields(DataSet: TDataSet); // рассчитать значения расчетных полей базы данных протокола: текст вопроса и // текст ответа по соответствующим номерам var ID_Test, ID_Testing, Num_Answer, Num_Question : String; SQ, SA : String; begin with DM do begin // получить номер эксперимента ID_Testing := ADOQProtocol.FieldByName('ID_Testing').AsString; // подготовить запрос with ADOQTesting2 do begin // если запрос был активный, сделать его неактивным active := false; // скорректировать запрос эксперимента with SQL do begin // очистить старый запрос Clear; // выбрать номер теста из записи эксперимента Add('SELECT * FROM Testing WHERE ID_Testing = '+ID_Testing); end; // сделать запрос активным Active := True; // считать номер теста ID_Test := FieldByName('ID_Test').AsString; end; // считать номер вопроса протокола Num_Question := ADOQProtocol.FieldByName('Num_Question').AsString; with ADOQQuestion do begin // сменить запрос вопроса для выбранного теста и номера вопроса with SQL do begin 52 // очистить запрос Clear; // считать текст вопроса по номерам теста и вопроса Add('SELECT * FROM Question WHERE (ID_Test = '+ID_Test+ ')AND(Num_Question = '+Num_Question+')'); end; // активировать запрос Active := True; // считать текст вопроса SQ := FieldByName('Question').AsString; end; // методика с номером один имеет только один вариант ответов if ID_Test = '1' then Num_Question := '1'; // считать номер ответа протокола Num_Answer := ADOQProtocol.FieldByName('Num_Answer').AsString; // скорректировать запрос для выбранного теста, вопроса и ответа with ADOQAnswer do begin // изменить запрос with SQL do begin // очистить старый запрос Clear; // считать текст ответа по номерам теста, вопроса и ответа Add('SELECT * FROM Answer WHERE (ID_Test = '+ID_Test+ ')AND(Num_Question = '+Num_Question+ ')AND(Num_Answer = '+Num_Answer+')'); end; // активировать запрос Active := True; // считать текст ответа SA := FieldByName('Answer').AsString; end; // присвоить полям таблицы считанные тексты вопроса и ответа ADOQProtocol.FieldByName('Question').AsString := SQ; ADOQProtocol.FieldByName('Answer').AsString := SA; end; end; Листинг 10.2 (процесс, происходящий при выборе элемента в списке респондентов) procedure TDM.ADOQRespondentAfterScroll(DataSet: TDataSet); begin // скорректировать список экспериментов в соответствии с выбранным респондентом 53 if ADOQRespondent.RecordCount>0 then begin ADOQTesting.Filtered:=False; ADOQTesting.Filter:='ID_Respondent='+ ADOQRespondent.FieldByName('ID_Respondent').AsString; ADOQTesting.Filtered:=True; end; end; Листинг 10.3 (процесс, происходящий при выборе элемента в списке экспериментов) procedure TDM.ADOQRespondentAfterScroll(DataSet: TDataSet); begin // скорректировать список экспериментов в соответствии с выбранным респондентом if ADOQRespondent.RecordCount>0 then begin ADOQTesting.Filtered:=False; ADOQTesting.Filter:='ID_Respondent='+ ADOQRespondent.FieldByName('ID_Respondent').AsString; ADOQTesting.Filtered:=True; end; end; Листинг 10.4 (подключаемые модули) {$R *.dfm} Uses Variable, ShellApi, Password, Data, frxClass; // модуль с глобальными переменными // модуль для обеспечения запуска программ // модуль для подключения отчета Листинг 10.5 (события при активации формы) procedure TFmain.FormActivate(Sender: TObject); var i : Integer; SH : String; begin // подключение базы данных для отображения списка респондентов и тестов S := ExtractFilePath(Application.ExeName); // установить путь к файлу справки SH := 'Система АПДМ.chm'; SH := S + 'Help\'+SH; // подключить файл помощи FMain.HelpFile := SH; // сформировать строку подключения базы данных SDB := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + S + 54 'Base\PDT.mdb;Persist Security Info=False'; with DM do begin // если активация включена, то выключить ее ADOConnection.Connected := False; // присвоить сформированную строку подключения ADOConnection.ConnectionString := SDB; // сделать активацию активной ADOConnection.Connected := True; // считать информацию тестов из базы данных with ADOQTest do begin // очистить поле запроса SQL.Clear; // сформировать запрос для выбора всех данных SQL.Add('SELECT * FROM Test'); // активировать запрос Active := TRUE; for i := 0 to RecordCount-1 do begin // считать название теста и занести его в список LBTest.Items.Add(FieldByName('NameTest').AsString); Next; end; end; // считать информацию респондентов из базы данных with ADOQRespondent do begin // очистить поле запроса SQL.Clear; // сформировать запрос для выбора всех данных SQL.Add('SELECT * FROM Respondent'); // активировать запрос Active := TRUE; for i := 0 to RecordCount-1 do begin // считать название теста и присвоить его метке на форме LBRespondent.Items.Add(FieldByName('Surname').AsString+' '+ FieldByName('Name').AsString+' '+ FieldByName('Midlename').AsString); Next; end; 55 end; // настройка элементов окна для масштабирования SetBounds( Left - ClientOrigin.X, Top - ClientOrigin.Y, GetDeviceCaps(Canvas.handle, HORZRES ) + (Width - ClientWidth), GetDeviceCaps( Canvas.handle,VERTRES ) + (Height - ClientHeight )); // панель тестирования скрыть PMainTest.Visible := False; // ширина панели тестирования – весь экран PMainTest.Width := ClientWidth; // высота панели тестирования – весь экран PMainTest.Height := ClientHeight; // ширина панели респондентов – половина панели тестирования PResp.Width := ClientWidth div 2; // высота панели списка респондентов – весь экран PResp.Height := ClientHeight; // высота панели списка тестов – весь экран PTest.Height := ClientHeight; // панель тестирования отобразить PMainTest.Visible := True; // ширина панели психолога – весь экран PMainPsy.Width := ClientWidth; // ширина панели эксперимента – весь экран PExperiment.Width := ClientWidth; // ширина списка экспериментов респондента – треть экрана DBGTesting.Width := PExperiment.Width div 3; // ширина кнопок эксперимента – треть экрана PButExp.Width := PExperiment.Width div 3; // ширина панели для вывода результатов протокола – треть экрана PResultProtocol.Width := PExperiment.Width div 3; // выровнять кнопку "результаты" BBResult.Left := (PButExp.Width div 2) - (BBResult.Width div 2); BBResult.Top := (PButExp.Height div 5) - (BBResult.Height div 2); // выровнять кнопку "протокол" BBProtocol.Left := (PButExp.Width div 2) - (BBProtocol.Width div 2); BBProtocol.Top := (PButExp.Height div 5)*3 - (BBProtocol.Height div 2); // выровнять кнопку "результаты - отчет" BBResultOtchet.Left := (PButExp.Width div 2) - (BBResult.Width div 2); BBResultOtchet.Top := (PButExp.Height div 5)*2 - (BBResult.Height div 2); // выровнять кнопку "протокол - отчет" BBProtocolOtchet.Left := (PButExp.Width div 2) - (BBProtocol.Width div 2); 56 BBProtocolOtchet.Top := (PButExp.Height div 5)*4 - (BBProtocol.Height div 2); // настроить панель добавления PAddResp.Width := ClientWidth; ESurname.Left := (PAddResp.Width div 5) - (ESurname.Width div 2); EName.Left := (PAddResp.Width div 5) - (EName.Width div 2); EMidlename.Left := (PAddResp.Width div 5) - (EMidlename.Width div 2); LSurnameResp.Left := ESurname.Left; LNameResp.Left := ESurname.Left; LMidlenameResp.Left := ESurname.Left; CBSex.Left := (PAddResp.Width div 5) * 2 - (CBSex.Width div 2); LSexResp.Left := CBSex.Left; DTPBorn.Left := (PAddResp.Width div 5) * 3 - (CBSex.Width div 2); LBornResp.Left := DTPBorn.Left; BBAdd.Left := (PAddResp.Width div 5) * 4 - (BBAdd.Width div 2); BBEdit.Left := (PAddResp.Width div 5) * 4 - (BBEdit.Width div 2); BBDelete.Left := (PAddResp.Width div 5) * 4 - (BBDelete.Width div 2); end; // по умолчанию активно окно тестирования PMainPsy.Visible := False; PMainPsy.Align := alNone; PMainTest.Visible := True; PMainTest.Align := alClient; // заполнить поля редактирования данными текущей записи with DM do begin with ADOQRespondent do begin // поле ввода фамилии заполнить данными фамилии из текущей записи ESurname.Text := FieldByName('Surname').AsString; EName.Text := FieldByName('Name').AsString; EMidleName.Text := FieldByName('MidleName').AsString; CBSex.Text := FieldByName('Sex').AsString; DTPBorn.Date := FieldByName('Born').AsDateTime; end; end; Листинг 10.6 (событие при запуске тестирования) procedure TFmain.BBTestClick(Sender: TObject); var ST, SR : String; // хранение названия теста и имени респондента FT : String; // имя запускаемого файла S2 : String; // путь к запускаемой программе ID : String; // идентификационный номер респондента 57 i : Integer; // счетчик begin // по умолчанию открыто окно для проведения тестирования if not PMainTest.Visible then begin // сделать панель управления данными психологом (ввод данных, просмотр // результатов) видимой PMainPsy.Visible := False; // сделать панель тестирования видимой PMainTest.Visible := True; end; // сменить курсор на курсор ожидания Screen.Cursor := crHourGlass; // запомнить имя выбранного теста ST := LBTest.Items[LBTest.ItemIndex]; // запомнить имя выбранного респондента SR := LBRespondent.Items[LBRespondent.ItemIndex]; // подготовить тест к запуску with DM do begin with ADOQTest do begin // очистить поле запроса SQL.Clear; // сформировать запрос для выбора всех данных SQL.Add('SELECT * FROM Test WHERE NameTest='''+ST+''''); // активировать запрос Active := TRUE; // считать имя запукаемого файла FT := FieldByName('RunFile').AsString; end; // выбрать респондента для тестирования with ADOQRespondent do begin // очистить поле запроса SQL.Clear; // сформировать запрос для выбора всех данных SQL.Add('SELECT * FROM Respondent'); // активировать запрос Active := TRUE; for i := 0 to RecordCount-1 do begin 58 // найти запись респондента в базе данных if (FieldByName('Surname').AsString+' '+FieldByName('Name').AsString+' '+ FieldByName('Midlename').AsString) = SR then begin // считать его идентификатор из базы данных и сохранить его в переменной ID ID := FieldByName('ID_Respondent').AsString; // если запись найдена, закончить перебор и выйти из цикла Break; end; // перейти к следующей записи Next; end; end; end; // считать путь к запускаемому файлу FT := S + FT; // скорректировать имя для выбора папки запуска FT := ExtractFileNameEx(FT,S2,True); // сменить текущую папку на папку запуска теста ChDir(S2); // восстановить курсор на стандартный Screen.Cursor := crDefault; // запустить файл теста ExecuteFile(FT,ID,'',SW_SHOW); end; Листинг 10.7 (поиск респондента по введенному тексту) procedure TFmain.EFindRespChange(Sender: TObject); begin // изменить запрос with DM do begin with ADOQRespondent do begin with SQL do begin // очистить старый запрос Clear; // вывести записи, где фамилия "похожа" на введенный текст Add('SELECT * FROM Respondent WHERE Surname LIKE''%'+ EFindResp.Text+'%'''); end; // активировать запрос 59 Active := True; end; end; end; Листинг 10.8 (процедура выбора в списке респондента для тестирования) procedure TFmain.LBRespondentClick(Sender: TObject); begin // если выбран респондент и тест, кнопка "Тестирование" активна if (LBRespondent.ItemIndex <> - 1)and(LBTest.ItemIndex <> - 1) then BBTest.Enabled := true else // кнопка "Тестирование" неактивна BBTest.Enabled := false; end; Листинг 10.9 (процедура выбора в списке теста для тестирования) procedure TFmain.LBTestClick(Sender: TObject); begin // если выбран респондент и тест, кнопка "Тестирование" активна if (LBRespondent.ItemIndex <> - 1)and(LBTest.ItemIndex <> - 1) then BBTest.Enabled := true else // кнопка "Тестирование" не активна BBTest.Enabled := false; end; Листинг 10.10 (процедура при «отпускании» нажатой клавиши в списке респондентов) procedure TFmain.DBGRespondentKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin with DM do begin with ADOQRespondent do begin ESurname.Text := FieldByName('Surname').AsString; EName.Text := FieldByName('Name').AsString; EMidlename.Text := FieldByName('Midlename').AsString; CBSex.Text := FieldByName('Sex').AsString; DTPBorn.Date := FieldByName('Born').AsDateTime; end; end; end; 60 Листинг 10.11 (процедура анализа, выбранного «мышью» в списке респондента) procedure TFmain.DBGRespondentCellClick(Column: TColumn); begin with DM do begin with ADOQRespondent do begin ESurname.Text := FieldByName('Surname').AsString; EName.Text := FieldByName('Name').AsString; EMidleName.Text := FieldByName('MidleName').AsString; CBSex.Text := FieldByName('Sex').AsString; DTPBorn.Date := FieldByName('Born').AsDateTime; end; end; end; Листинг 10.12 (событие для добавления данных нового респондента) procedure TFmain.BBAddClick(Sender: TObject); // ввод данных респондента var B : Boolean; // проверка записи i : integer; // счетчик цикла begin // запись разрешена B := TRUE; with DM do begin // записать все данные из полей ввода в базу данных with ADOQRespondent do begin // если одно из полей не введено, то не записывать данные в БД if ESurname.Text = '' then B := FALSE; if EName.Text = '' then B := FALSE; if EMidlen.Text = '' then B := FALSE; if CBSex.Text = '' then B := FALSE; if DateToStr(DTPBorn.Date) = '' then B := FALSE; // запись разрешена (введены все поля) 61 if B then with SQL do begin // вводим данные в базу данных // очистить старый запрос Clear; // добавляем новую запись с данными респондента: фамилия, имя, пол, // день рождения Add('INSERT INTO Respondent(Surname, Name, MidleName, Sex, Born)'+ 'VALUES('+QuotedStr(ESurname.Text)+', '+QuotedStr(EName.Text)+', '+ QuotedStr(EMidlename.Text)+', '+QuotedStr(CBSex.Text)+', '+ QuotedStr(DateToStr(DTPBorn.Date))+')'); // выполнить запрос ExecSQL; // активировать базу данных для отображения в таблице // очистить старый запрос Clear; // вывести список респондентов Add('SELECT * FROM Respondent'); // активировать запрос Active := True; end; end; // перечитать информацию респондентов из базы данных with ADOQRespondent do begin // очистить поле запроса SQL.Clear; // сформировать запрос для выбора всех данных SQL.Add('SELECT * FROM Respondent'); // активировать запрос Active := TRUE; // очистить список респондентов LBRespondent.Items.Clear; for i := 0 to RecordCount-1 do begin // считать название теста и присвоить его метке на форме LBRespondent.Items.Add(FieldByName('Surname').AsString+' '+ FieldByName('Name').AsString+' '+ FieldByName('Midlename').AsString); // перейти к следующей записи Next; 62 end; end; end; end; Листинг 10.13 (события для редактирования данных респондента) procedure TFmain.BBEditClick(Sender: TObject); var No : Integer; // номер записи S : String; begin // выдать запрос на запись отредактированных данных в базу данных If MessageDlg('Отредактировать текущую запись введенными' + ' данными?',mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes then // изменить запрос with DM do begin with ADOQRespondent do begin // узнать номер редактируемой записи No := FieldByName('ID_Respondent').AsInteger; with SQL do begin // очистить старый запрос Clear; // отредактировать текущую запись S := 'UPDATE Respondent SET Surname ='+QuotedStr(ESurname.Text)+ ', Name ='+QuotedStr(EName.Text)+ ', Midlename ='+QuotedStr(EMidlename.Text)+ ', Sex ='+QuotedStr(CBSex.Text)+ ', Born ='+QuotedStr(DateToStr(DTPBorn.Date))+ ' WHERE ID_Respondent = '+IntToStr(No); Add(S); // выполнить запрос ExecSQL; // активировать базу данных для отображения в таблице // очистить старый запрос Clear; // вывести список респондентов Add('SELECT * FROM Respondent'); // активировать запрос Active := True; end; 63 end; end; end; Листинг 10.14 (события для удаления данных респондента) procedure TFmain.BBDeleteClick(Sender: TObject); var No : Integer; S : String; begin // считать фамилию, имя, отчество в текущей записи with DM.ADOQRespondent do S := '('+FieldByName('Surname').AsString+' '+ FieldByName('Name').AsString+' '+ FieldByName('MidleName').AsString + ')'; // выдать запрос на удаление If MessageDlg('Удалить текущую запись '+S+'?',mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes then // изменить запрос with DM do begin with ADOQRespondent do begin // узнать номер редактируемой записи No := FieldByName('ID_Respondent').AsInteger; with SQL do begin // очистить старый запрос Clear; // отредактировать текущую запись S := 'DELETE FROM Respondent WHERE ID_Respondent = '+IntToStr(No); Add(S); // выполнить запрос ExecSQL; end; // перечитать данные для отображения на экране with SQL do begin // очистить старый запрос Clear; // отредактировать текущую запись S := 'SELECT * FROM Respondent'; Add(S); 64 // выполнить запрос Active := True; end; end; end; end; Листинг 10.15 (сохранение новых или отредактированных данных респондента) procedure TFmain.BBSaveClick(Sender: TObject); // ввод данных респондента var B : Boolean; // проверка записи i : integer; // счётчик цикла No : Integer; // номер записи S : String; // строка запроса RM : TBookMark; // метка на редактируемую запись begin if BAdd then // режим добавления новой записи begin if MessageDlg('Ввести новую запись с введенными данными?',mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes then begin // запись разрешена B := TRUE; with DM do begin // записать все данные из полей ввода в базу данных with ADOQRespondent do begin // если одно из полей не введено, то не записывать данные в БД if EFamily.Text = '' then B := FALSE; if EName.Text = '' then B := FALSE; if ESurName.Text = '' then B := FALSE; if CBSex.Text = '' then B := FALSE; if DateToStr(DTPBorn.Date) = '' then B := FALSE; // запись разрешена (введены все поля) if B then with SQL do 65 begin // вводим данные в базу данных // очистить старый запрос Clear; S := 'INSERT INTO Respondent(Family, NameR, SurName, Sex, Born)'+ 'VALUES('+QuotedStr(EFamily.Text)+', '+QuotedStr(EName.Text)+', '+ QuotedStr(ESurName.Text)+', '+QuotedStr(CBSex.Text)+', '+ QuotedStr(FormatDateTime('yyyy/mm/dd', DTPBorn.Date))+')'; // добавляем новую запись с данными респондента: фамилия, имя, пол, // день рождения Add(S); // выполнить запрос ExecSQL; // активировать базу данных для отображения в таблице // очистить старый запрос Clear; // вывести список респондентов Add('SELECT * FROM Respondent'); // активировать запрос Active := True; end; end; // перечитать информацию респондентов из базы данных with ADOQRespondent do begin // очистить поле запроса SQL.Clear; // сформировать запрос для выбора всех данных SQL.Add('SELECT * FROM Respondent'); // активировать запрос Active := TRUE; // очистить список респондентов LBRespondent.Items.Clear; for i := 0 to RecordCount-1 do begin // считать название теста и присвоить его метке на форме LBRespondent.Items.Add(FieldByName('Family').AsString+' '+ FieldByName('NameR').AsString+' '+ FieldByName('SurName').AsString); // перейти к следующей записи Next; end; 66 end; end; end; end else // режим редактирования текущей записи begin // выдать запрос на запись отредактированных данных в базу данных if MessageDlg('Сохранить отредактированные данные '+ +'респондента?',mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes then // изменить запрос with DM do begin with ADOQRespondent do begin // поставить метку на запись RM := GetBookMark; // узнать номер редактируемой записи No := FieldByName('ID_Respondent').AsInteger; with SQL do begin // очистить старый запрос Clear; // отредактировать текущую запись S := 'UPDATE Respondent SET Family ='+QuotedStr(EFamily.Text)+ ', NameR ='+QuotedStr(EName.Text)+ ', Surname ='+QuotedStr(ESurName.Text)+ ', Sex ='+QuotedStr(CBSex.Text)+ ', Born ='+QuotedStr(FormatDateTime('yyyy/mm/dd', DTPBorn.Date))+ ' WHERE ID_Respondent = '+IntToStr(No); Add(S); // выполнить запрос ExecSQL; // активировать базу данных для отображения в таблице // очистить старый запрос Clear; // вывести список респондентов Add('SELECT * FROM Respondent'); // активировать запрос Active := True; // перейти по сохраненной метке на редактируемую запись GoToBookMark(RM); 67 // очистить память от занимаемой метки FreeBookMark(RM); // установить фокус на элемент списка DBGRespondent.SetFocus; end; end; end; end; // кнопка сохранения неактивна BBSave.Enabled := False; end; Листинг 10.16 (просмотр результатов тестирования) procedure TFmain.BBResultClick(Sender: TObject); var ID_Testing : String; begin // скрыть окно протокола with DBGProtocol do begin Align := alNone; Visible := False; end; // отобразить окно результатов with DBGResult do begin Align := alClient; Visible := True; end; with DM do begin // считать номер выбранного эксперимента ID_Testing := ADOQTesting.FieldByName('ID_Testing').AsString; // респондент прошел хотя бы один эксперимент if ID_Testing <> '' then begin // отобразить результаты выбранного эксперимента with ADOQResult do begin // сменить запрос результата выбранного эксперимента with SQL do begin // очистить старый запрос 68 Clear; // выбрать результаты в соответствии с выбранным экспериментом Add('SELECT * FROM Result WHERE ID_Testing = '+ID_Testing); end; // активировать запрос Active := True; end; end; end; end; Листинг 10.17 (просмотр протокола тестирования) procedure TFmain.BBProtocolClick(Sender: TObject); var ID_Testing : String; begin with DM do begin // скрыть окно результатов with DBGResult do begin Align := alNone; Visible := False; end; // отобразить окно протокола with DBGProtocol do begin Align := alClient; Visible := True; end; // считать номер выбранного эксперимента ID_Testing := ADOQTesting.FieldByName('ID_Testing').AsString; // респондент прошел хотя бы один эксперимент if ID_Testing <> '' then begin // отобразить протокол выбранного эксперимента with ADOQProtocol do begin // сменить запрос протокола, выбрав только записи выбранного эксперимента with SQL do begin // очистить старый запрос Clear; 69 // вывести протокол тестирования в соответствии с выбранным // экспериментом Add('SELECT * FROM Protocol WHERE ID_Testing = '+ID_Testing); end; // активировать запрос Active := True; end; end; end; end; Листинг 10.18 (поиск респондента по данным, введенным в строке поиска) procedure TFmain.EFindRespChange(Sender: TObject); begin // изменить запрос with DM do begin with ADOQRespondent do begin with SQL do begin // очистить старый запрос Clear; // вывести записи, где фамилия "похожа" на введенный текст Add('SELECT * FROM Respondent WHERE Family LIKE ''%'+ EFindResp.Text+'%'''); end; // активировать запрос Active := True; end; end; end; Листинг 10.19 (выбор статуса пользователя («Респондент» или «Психолог»)) procedure TFmain.RGStatusClick(Sender: TObject); begin // сменить окна программы в соответствии с выбранным статусом case RGStatus.ItemIndex of // подготовить режим «Респондент» 0 : begin // запретить кнопку тестирования (сброс «активного» состояния) BBTest.Enabled := False; // панель психолога скрыть PMainPsy.Visible := False; 70 // панель психолога "не распахивается" PMainPsy.Align := alNone; // панель тестирования показать PMainTest.Visible := True; // панель тестирования «распахнуть» на все доступное пространство PMainTest.Align := alClient; // респондент в списке респондентов не выбран LBRespondent.ItemIndex := -1; // тест в списке тестов не выбран LBTest.ItemIndex := -1; end; // подготовить режим «Психолог» 1 : begin with FPassword do begin // пароль неактивен Pass := False; // отобразить окно запроса пароля ShowModal; // если пароль задан правильно if Pass then begin // запретить кнопку тестирования (работает режим «Психолог») BBTest.Enabled := False; // панель тестирования скрыть PMainTest.Visible := False; // панель тестирования «не распахивается» PMainTest.Align := alNone; // панель психолога показать PMainPsy.Visible := True; // панель психолога «распахнуть» на все доступное пространство PMainPsy.Align := alClient; end else // пароль задан неправильно – активация режима «Респондент» begin // запретить кнопку тестирования (сброс «активного» состояния) BBTest.Enabled := False; // панель психолога скрыть PMainPsy.Visible := False; // панель психолога «не распахивается» PMainPsy.Align := alNone; 71 // панель тестирования показать PMainTest.Visible := True; // панель тестирования «распахнуть» на все доступное пространство PMainPsy.Align := alClient; // выбор статуса «Респондент» RGStatus.ItemIndex := 0; // респондент в списке респондентов не выбран LBRespondent.ItemIndex := -1; // тест в списке тестов не выбран LBTest.ItemIndex := -1; end; end; end; end; // case end; Листинг 10.20 (событие при активации окна пароля) procedure TFPassword.FormActivate(Sender: TObject); begin // «сбросить» отображение пароля MEPassword.Text := ''; // передать управление строке ввода пароля MEPassword.SetFocus; end; Листинг 10.21 (событие при выборе пароля) procedure TFPassword.BBPasswordClick(Sender: TObject); var PasswordDB, PasswordV, S : String; I : Integer; begin PasswordV := MEPassword.Text; with FMain do begin with DM do begin with ADOQPassword do begin Active := False; with SQL do begin Clear; Add('SELECT * FROM Code'); 72 end; Active := True; PasswordDB := FieldByName('Password').AsString; for i:=1 to length(PasswordDB) do PasswordDB[i]:=chr(ord(PasswordDB[i])); S := PasswordDB; if PasswordV <> PasswordDB then begin ShowMessage('Неправильно введен пароль!'); Exit; end else Pass := True; end; end; end; end; Листинг 10.22 (событие для смены пароля) procedure TFPassword.BBChargePasswordClick(Sender: TObject); begin FPassword.Height := 200; BBPassword.Visible := False; BBNewPassword.Visible := True; LPassword.Caption := 'Введите старый пароль'; LNew1.Visible := True; LNew2.Visible := True; MEPassword1.Visible := True; MEPassword2.Visible := True; end; Листинг 10.23 (событие ввода и сохранения нового пароля) procedure TFPassword.BBNewPasswordClick(Sender: TObject); var // переменная для хранения пароля Password : String; S : String; begin with FMain do begin with DM do begin with ADOQPassword do begin 73 Active := False; with SQL do begin Clear; Add('SELECT * FROM Code'); end; Active := True; Password := FieldByName('Password').AsString; if MEPassword.Text = Password then begin if MEPassword1.Text = MEPassword2.Text then begin Active := False; with SQL do begin Clear; S := 'UPDATE Code SET Password = '''+MEPassword1.Text+''''; Add(S); end; ExecSQL; ShowMessage('Пароль успешно изменен!'); MEPassword.Text := ''; end else ShowMessage('Новый пароль в двух полях не совпадает!'); end else ShowMessage('Неправильно введен старый пароль!'); end; end; end; FPassword.Height := 120; BBPassword.Visible := True; BBNewPassword.Visible := False; LPassword.Caption := 'Введите код доступа'; LNew1.Visible := False; LNew2.Visible := False; MEPassword1.Visible := False; MEPassword2.Visible := False; end; 74 Вид отчета 11.1 (вид шаблона отчета «Результаты тестирования») Вид отчета 11.2 (вид шаблона отчета «Протокол тестирования») 75 Листинг 11.3 (процедура формирования и вывода отчета) procedure TFmain.Otchet(Dannye: Boolean); var t: TfrxMemoView; ID_Respondent, ID_Test : Integer; Respondent, APDM : String; TestDate, TestTime : TDateTime; begin with DM do begin // считать номер выбранного эксперимента with ADOQTesting do begin ID_Testing := FieldByName('ID_Testing').AsInteger; // считать номер респондента ID_Respondent := FieldByName('ID_Respondent').AsInteger; // считать номер АПДМ ID_Test := FieldByName('ID_Test').AsInteger; // считать дату тестирования TestDate := FieldByName('Testing_Date').AsDateTime; // считать время тестирования TestTime := FieldByName('Testing_Time').AsDateTime; end; // работать с таблицей «Респондент» with ADOQTemp do begin // скорректировать запрос with SQL do begin // очистить старый запрос Clear; // считать данные респондента по номеру ПЭ Add('SELECT * FROM Respondent WHERE ID_Respondent = '+ IntToStr(ID_Respondent)); end; // активировать запрос Active := true; // считать данные респондента Respondent := FieldByName('Surname').AsString; 76 Respondent := Respondent + ' ' + FieldByName('Name').AsString; Respondent := Respondent + ' ' + FieldByName('Midlename').AsString; end; // работать с таблицей «Тест» with ADOQTemp do begin // скорректировать запрос with SQL do begin // очистить старый запрос Clear; // считать данные респондента по номеру ПЭ Add('SELECT * FROM Test WHERE ID_Test = '+IntToStr(ID_Test)); end; // активировать запрос Active := true; // считать данные респондента APDM := FieldByName('NameTest').AsString; end; if Dannye then begin // отобразить результаты выбранного эксперимента with ADOQResult do begin // сменить запрос результата выбранного эксперимента with SQL do begin // очистить старый запрос Clear; // выбрать результаты в соответствии с выбранным экспериментом Add('SELECT * FROM Result WHERE ID_Testing = '+IntToStr(ID_Testing)); end; // активировать запрос Active := True; end; end else begin // отобразить результаты выбранного эксперимента with ADOQProtocol do begin // сменить запрос результата выбранного эксперимента 77 with SQL do begin // очистить старый запрос Clear; // выбрать результаты в соответствии с выбранным экспериментом Add('SELECT * FROM Protocol WHERE ID_Testing = '+IntToStr(ID_Testing)); end; // активировать запрос Active := True; end; end; // прочитать путь к программе S := ExtractFilePath(Application.ExeName); // загрузить отчет if Dannye then FrxReport.LoadFromFile(S+'Base\Result.fr3') else FrxReport.LoadFromFile(S+'Base\Protocol.fr3'); // связать переменную с нужным полем по имени (поле именовано MemoResp) t := TfrxMemoView(frxReport.FindObject('MemoResp')); // если переменная Respondent не пустая if Respondent <> '' then // если поле MemoResp в отчете существует if t <> nil then // поместить в это поле значение переменной Respondent t.Memo.Text := Respondent; // аналогично // программно поместить в отчет название АПДМ t := TfrxMemoView(frxReport.FindObject('MemoAPDM')); if APDM <> '' then if t <> nil then t.Memo.Text := APDM; // программно поместить в отчет дату тестирования t := TfrxMemoView(frxReport.FindObject('MemoDate')); if DateToStr(TestDate) <> '' then if t <> nil then t.Memo.Text := DateToStr(TestDate); // программно поместить в отчет время тестирования t := TfrxMemoView(frxReport.FindObject('MemoTime')); if TimeToStr(TestTime) <> '' then if t <> nil then t.Memo.Text := TimeToStr(TestTime); 78 // отобразить отчет if FrxReport.PrepareReport then FrxReport.ShowPreparedReport; end; end; Листинг 11.4 (вывод отчета результатов тестирования) procedure TFmain.BBResultOtchetClick(Sender: TObject); begin Otchet(True); end; Листинг 11.5 (вывод отчета протокола тестирования) procedure TFmain.BBResultOtchetClick(Sender: TObject); begin Otchet(False); end; Листинг 12.1 (текст справки для главного окна) Опросник "Диагностика школьной тревожности" Чарльза Филлипса При запуске программы Вы попадаете на главное меню, которое позволяет выполнить все необходимые процедуры для тестирования: 1. Инструкция 2. Тестирование 3. Результаты 4. Выход Диагностика уровня школьной тревожности Филлипса Программист: Бельтюков М.В. Психолог: Филлипс Чарльз 79 Листинг 12.2 (текст справки инструкции) Инструкция к тесту При просмотре инструкции Вы можете ознакомиться с назначением методики, а также узнать об управляющих элементах программы для прохождения тестирования. Для завершения просмотра инструкции нажмите кнопку «Выход» Результаты тестирования «Тест школьной тревожности Филлипса» Сейчас Вам будет предложен опросник, который состоит из вопросов о том, как Вы себя чувствуете в школе. Старайтесь отвечать искренне и правдиво, здесь нет верных или неверных, хороших или плохих ответов. Над вопросами долго не задумывайтесь. На вопрос отвечайте только "Да" (если Вы согласны с ним) или "Нет" (если не согласны). Для выбора варианта ответа используйте клавиши управления курсором и, выбрав вариант ответа, нажмите <ENTER> для подтверждения. Для аварийного выхода в меню нажмите <ESC>. Листинг 12.3 (текст справки тестирования) Тестирование При проведении тестирования необходимо прочитать внимательно вопрос и выбрать из предлагаемых ответов один, наиболее Вам подходящий. Ответьте на вопрос 01. Дрожит ли слегка твоя рука, когда ты работаешь над заданием? 1 Да 2 Нет ******************************************************* Выберите ответ «мышь», цифры <1> или <2>, аварийный выход <Esc> Листинг 12.4 (текст справки результатов тестирования) Результат тестирования При просмотре результата тестирования выдается краткое описание полученных результатов тестирования. Помните: окончательную трактовку результатов тестирования может дать только психодиагност! Результаты тестирования «Тест школьной тревожности Филлипса» Общая тревожность в школе: 11 (0…22) Переживание социального стресса: 6 (0…11) Фрустрация потребности в достижении успеха: 9 (0…13) Страх самовыражения: 2 (0…6) Страх ситуации проверки знаний: 3 (0…6) Страх несоответствия ожиданиям окружающих: 4 (0…5) Низкая физиологическая сопротивляемость стрессу: 3 (0…5) Проблемы и страхи в отношении с учителями: 3 (0…8) Общая тревожности: 44,8% 80 СОДЕРЖАНИЕ Введение .........................................................................................................................................3 Работа 1. Разработка структуры базы данных ............................................................................4 Работа 2. Ввод данных в базу данных .........................................................................................9 Работа 3. Разработка интерфейса АПДМ «Тест тревожности Филлипса» ...........................11 Работа 4. Создание окна инструкции АПДМ «Тест тревожности Филлипса».....................15 Работа 5. Создание окна результата АПДМ «Тест тревожнсти Филлипса».........................17 Работа 6. Создание окна тестирования АПДМ «Тест тревожности Филлипса» ..................18 Работа 7. Окончательная компоновка готовой АПДМ «Тест тревожности Филлипса» ......21 Работа 8. Создание окна тестирования АПДМ «Тест К. Пальмера “Умеете ли Вы ладить с окружающими”» ..........................................................................................................................21 Работа 9. Создание окна вывода результатов АПДМ «Тест К. Пальмера “Умеете ли Вы ладить с окружающими”» ...........................................................................................................25 Работа 10. Создание оболочки для проведения ПЭ .................................................................26 Работа 11. Создание отчетов ......................................................................................................34 Работа 12. Создание справочной информации .........................................................................37 Работа 13. Создание установочного диска ................................................................................41 Задания для работы .....................................................................................................................44 Список рекомендуемой литературы ..........................................................................................44 Приложения..................................................................................................................................45 1. Индивидуальные задания ..............................................................................................45 2. Тест школьной тревожности Филлипса .......................................................................46 3. Умеете ли Вы ладить с людьми (тест Пальмера) ........................................................50 4. Листинги программ ........................................................................................................52 81 Бельтюков Михаил Витальевич Информационные технологии Учебно-методическое пособие Редактор Н. В. Кузнецова Подписано в печать 10.07.19. Формат 60×84 1/16. Бумага офсетная. Печать цифровая. Печ. л. 5,25. Гарнитура «Times New Roman». Тираж 63 экз. Заказ Издательство СПбГЭТУ «ЛЭТИ» 197376, С.-Петербург, ул. Проф. Попова, 5 82 82