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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 12.01.2014
Размер файла 11,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

25

Отдел

Числовой

Целое

Внешний

Должность

Числовой

Целое

Внешний

Пароль

Текстовый

10

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

Рисунок 3.6 - Таблица «Отдел» в режиме конструктора

Описание структуры записей таблицы «Отдел» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.4.

Таблица 3.4 - Описание структуры записей таблицы «Отдел»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Название

Текстовый

50

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

Рисунок 3.6 - Таблица «Должность» в режиме конструктора

Описание структуры записей таблицы «Должность» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.5.

Таблица 3.5 - Описание структуры записей таблицы «Должность»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Название

Текстовый

50

Таблица «Инструктор» (см. рис. 3.7) хранит сведения об инструкторах компании, проводящих инструктажи и проверки знаний пользователей корпоративной сети.

Рисунок 3.7 - Таблица «Инструктор» в режиме конструктора

Описание структуры записей таблицы «Инструктор» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.6.

Таблица 3.6 - Описание структуры записей таблицы «Инструктор»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

ФИО

Текстовый

25

E-mail

Текстовый

25

Телефон

Текстовый

12

Пароль

Текстовый

10

Таблица «Форма» (см. рис. 3.8) хранит сведения о формах обучения инструктажей по вопросам информационной безопасности.

Рисунок 3.8 - Таблица «Форма» в режиме конструктора

Описание структуры записей таблицы «Форма» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.7.

Таблица 3.7 - Описание структуры записей таблицы «Форма»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Название

Текстовый

50

Таблица «Вид» (см. рис. 3.9) хранит сведения о видах инструктажей по вопросам информационной безопасности.

Рисунок 3.9 - Таблица «Вид» в режиме конструктора

Описание структуры записей таблицы «Вид» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.8.

Таблица 3.8 - Описание структуры записей таблицы «Вид»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Название

Текстовый

50

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

Рисунок 3.10 - Таблица «Инструктаж» в режиме конструктора

Описание структуры записей таблицы «Инструктаж» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.9.

Таблица 3.9 - Описание структуры записей таблицы «Инструктаж»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Дата

Дата

дд.мм.гггг

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

Дата

дд.мм.гггг

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

Числовой

Целое

Внешний

Заключение

Числовой

Целое

Инструктор

Числовой

Целое

Внешний

Вид

Числовой

Целое

Внешний

Форма

Числовой

Целое

Внешний

Тест

Числовой

Целое

Внешний

Таблица «Тестирование» (см. рис. 3.11) хранит сведения о вопросах тестирования и ответах на них, данных пользователем во время прохождения тестирования.

Рисунок 3.11 - Таблица «Тестирование» в режиме конструктора

Описание структуры записей таблицы «Тестирование» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.10.

Таблица 3.10 - Описание структуры записей таблицы «Тестирование»

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

Тип поля

Длина поля

Ключ

Инструктаж

Числовой

Целое

Первичный

Вопрос

Числовой

Целое

Первичный

Ответ

Числовой

Целое

Внешний

Таблица «Тест» (см. рис. 3.12) хранит сведения о темах тестирования пользователей по вопросам информационной безопасности.

Рисунок 3.12 - Таблица «Тест» в режиме конструктора

Описание структуры записей таблицы «Тест» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.11.

Таблица 3.11 - Описание структуры записей таблицы «Тест»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Название

Текстовый

50

Комментарий

Поле Memo

-

Таблица «Вопрос» (см. рис. 3.13) хранит сведения о вопросах тестов для прохождения тестирования пользователей.

Рисунок 3.13 - Таблица «Вопрос» в режиме конструктора

Описание структуры записей таблицы «Вопрос» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.12.

Таблица 3.12 - Описание структуры записей таблицы «Вопрос»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Текст

Текстовый

150

Тест

Числовой

Целое

Внешний

Таблица «Альтернатива» (см. рис. 3.14) хранит сведения об альтернативах ответов на вопросы тестов для прохождения тестирования пользователей.

Рисунок 3.14 - Таблица «Альтернатива» в режиме конструктора

Описание структуры записей таблицы «Альтернатива» на языке представления данных используемой СУБД (MS Access), представлено в таблице 3.13.

Таблица 3.13 - Описание структуры записей таблицы «Альтернатива»

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

Тип поля

Длина поля

Ключ

ID

Счетчик

Целое

Первичный

Текст

Текстовый

100

Вопрос

Числовой

Целое

Внешний

Статус

Логический

Да/Нет

2.2 Программное обеспечение задачи

2.2.1 Разработка алгоритмов и описание программных модулей

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

Таблица 3.14 - Описание программных модулей

Модуль

Описание

Модуль главной формы (UnitMain.pas)

Служит для отображения и работы с данными о проведенных инструктажах пользователей корпоративной сети по вопросам информационной безопасности. Визуализация данных из таблиц Access «Инструктаж» и «Тестирование» осуществлена с помощью компонента DBGrid вкладки Data Controls. Навигация по таблицам (добавление, удаление, обновление и сохранение данных) осуществляется с помощью компонента DBNavigator вкладки Data Controls.

Модуль данных (UnitADO.pas)

Служит для связи с базой данных, хранящейся в таблицах Access. Связь реализована с помощью технологии ADO. Связь с базой данных осуществлена с помощью компонента ADOConnection вкладки ADO. Запросы реализованы с помощью компонентов ADOTable и ADOQuery вкладки ADO. Визуализация данных осуществлена с помощью связующего компонента DataSource вкладки Data Access.

Модуль формы справочников (UnitHdbk.pas)

Служит для регистрации справочной информации системы. Визуализация данных из таблиц Access «Отдел», «Должность», «Вид», «Форма», «Пользователь» и «Инструктор» осуществлена с помощью компонента DBGrid вкладки Data Controls. Навигация по таблице (добавление, удаление, обновление и сохранение данных) осуществляется с помощью компонента DBNavigator вкладки Data Controls.

Модуль формы тестов (UnitTest.pas)

Служит для добавления и редактирования информации о темах тестов, вопросов к тестам и альтернатив ответов на вопросы тестов. Визуализация данных из таблиц Access «Тест», «Вопрос» и «Альтернатива» осуществлена с помощью компонентов DBEdit и DBGrid вкладки Data Controls. Навигация по таблицам (добавление, удаление, обновление и сохранение данных) осуществляется с помощью компонентов DBNavigator вкладки Data Controls.

Модуль формы тестирования (UnitStart.pas)

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

Модуль формы авторизации (UnitDoor.pas)

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

Модуль формы результатной отчетности (UnitReport.pas)

Служит для формирования и печати отчета о проведенных инструктажах за определенный период времени и результатах работы каждого инструктора. Визуализация данных из таблицы Access осуществлена с помощью компонента DBGrid вкладки Data Controls и DBChart вкладки TeeChart Std. Выбор периода отчетности осуществляется с помощью компонентов DateTimePicker вкладки Win32. Формирование документа отчета осуществлено с помощью приложения MS Excel.

В Приложении A представлен программный код вышеописанных программных модулей ИС.

Модуль данных, использующий для связи с БД технологию ADO, представлен на рисунке 3.15.

Рисунок 3.15 - Модуль данных

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

Рисунок 3.15 - Обобщённый алгоритм

2.2.2 Структурная схема пакета

Структурная схема программных модулей отображена в окне Project Manager среды разработки системы Delphi 10 (см. рис. 3.16).

Рисунок 3.16 - Структурная схема пакета

Дерево вызова программных модулей представлено схемой на рисунке 3.17.

Рисунок 3.17 - Дерево вызова программных модулей

2.3 Тестирование разработанного приложения

Для работы с разработанным приложением необходимо установить папку с файлами программы на локальный диск персонального компьютера, на котором предполагается использование программного средства. Запуск приложения осуществляется с помощью файла ITsupport.exe. После запуска приложения открывается форма для авторизации пользователя в системе (см. рис. 3.0)

Рисунок 3.0 - Авторизация

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

Рисунок 3.0 - Главная форма программы

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

Тестирование - служебные функции системы (регистрация тестов БД, проведение тестирования, проверка результатов тестирования);

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

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

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

Рисунок 3.0 - Справочник «Виды инструктажей»

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

Форма справочника «Формы инструктажей» служит для регистрации, поиска и просмотра, зарегистрированных в системе форм инструктажей (см. рис. 3.0).

Рисунок 3.0 - Справочник «Формы инструктажей»

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

Форма справочника «Отделы» служит для регистрации, поиска и просмотра, зарегистрированных в системе отделов компании (см. рис. 3.0).

Рисунок 3.0 - Справочник «Отделы»

Регистрация новых отделов компании осуществляется с помощью кнопки панели управления записями справочника «Insert». Сохранение - с помощью кнопки панели управления записями справочника «Save». Для удобства поиска отдела компании справочник отсортирован по алфавиту по названию отдела.

Форма справочника «Должности» служит для регистрации, поиска и просмотра, зарегистрированных в системе должностей отделов компании (см. рис. 3.0).

Рисунок 3.0 - Справочник «Должности»

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

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

Рисунок 3.0 - Справочник «Пользователи»

Регистрация новых пользователей осуществляется с помощью кнопки панели управления записями справочника «Insert». Сохранение - с помощью кнопки панели управления записями справочника «Save». Для удобства поиска пользователей справочник отсортирован по алфавиту по названию фамилии пользователя.

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

Рисунок 3.0 - Справочник «Инструкторы»

Регистрация новых инструкторов осуществляется с помощью кнопки панели управления записями справочника «Insert». Сохранение - с помощью кнопки панели управления записями справочника «Save». Для удобства поиска инструкторов справочник отсортирован по алфавиту по названию фамилии инструктора.

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

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

Рисунок 3.0 - Тесты

Регистрация новых тестов в системе осуществляется с помощью кнопки панели управления темами тестов «Insert». Сохранение - с помощью кнопки панели управления темами тестов «Save». После регистрации теста необходимо добавить вопросы теста.

Регистрация вопросов теста осуществляется с помощью кнопки панели управления вопросами тестов «Insert». Сохранение - с помощью кнопки панели управления вопросами тестов «Save». После регистрации вопросов теста необходимо добавить альтернативы ответов на вопрос, при этом, с помощью двойного щелчка, отметить правильный ответ.

Регистрация альтернатив ответов на вопрос теста осуществляется с помощью кнопки панели управления альтернативами «Insert». Сохранение - с помощью кнопки панели управления альтернативами «Save». Для удобства правильный ответ выделяется зеленым знаком вопроса.

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

? тема инструктажа;

? вид инструктажа;

? форма инструктажа;

? ФИО пользователя, прошедшего инструктаж;

? ФИО инструктора, проведшего инструктаж.

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

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

Рисунок 3.0 - Тестирование

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

Рисунок 3.0 - Результатное сообщение

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

Рисунок 3.0 - Проверка результатов тестирования

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

Рисунок 3.0 - Направление на повторное обучение

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

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

Рисунок 3.0 - Форма результатной отчетности

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

? количество проведенных инструктажей;

? количество пройденных тестирований;

? количество проверенных тестирований;

? количество тестирований пройденных успешно;

? количество тестирований с направлением на повторное обучение.

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

Рисунок 3.0 - Результатная отчетность

Копия отчета сохраняется в подкаталоге «Отчет» корневой папки приложения. Резервное копирование БД должно выполняться не реже одно раза в неделю администратором средствами MS Access. Для завершения работы с приложением необходимо закрыть главную форму программы.

ЗАКЛЮЧЕНИЕ

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

? многократное дублирование одной и той же информации в различных документах;

? высокая трудоемкость обработки информации;

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

? большие затраты времени на составление результатных отчетов.

Для устранения этих недостатков была поставлена задача о необходимости разработки автоматизированной ИС учета проведения инструктажей по вопросам информационной безопасности в ООО «ТБинформ».

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

Клиентское приложение реализовано с помощью визуальной среды программирования Delphi 2010 на объектно-ориентированном языке программирования Pascal. Разработанная информационная система автоматизирует весь спектр задач инструкторов компании ТБинформ, связанных с проведением инструктажей пользователей корпоративной сети, проведением тестирования пользователей и анализом результатов тестирования. К тому же, система автоматизирует формированием сопроводительной документации и результатной отчетности. К основным функциям системы относится решение следующих задач:

? Регистрация и учет заявок на обучение по вопросам информационной безопасности;

? Регистрация и учет инструктажей по информационной безопасности;

? Ведение электронного архива инструктажей по информационной безопасности;

? Регистрация и учет проверок знаний по вопросам информационной безопасности;

? Электронное тестирование пользователей по вопросам информационной безопасности;

? Формирование направления на повторный инструктаж;

? Ведение электронного журнала учета проведения обучения и проверки знаний;

? Контроль проведения обучения и проверок знаний пользователей по вопросам информационной безопасности;

? Формирование статистической отчетности по инструктажам и проверкам знаний по вопросам информационной безопасности (MS Excel).

В заключении, автором было проведено тестирование ИС. На данный момент система полностью отлажена и отвечает всем предъявленным к ней требованиям.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

2.4 Теория систем и системный анализ: Учеб. пособие / Кориков А.М., Павлов С.Н. -- Томск: Томск. гос. ун-т систем управления и радиоэлектроники, 2007. -- 344 с.

2.5 Автоматизация документооборота [Электронный ресурс]. - Электронные текстовые данные. - Режим доступа: http://документооборот.net/novosti_i_press-relizi/stati_o_dokumentooborote/dokumentooborot_v_pensionnih_fondah.html

2.6 Система «AVELife TestGold Studio 2008» [Электронный ресурс]. - Электронные текстовые данные. - Режим доступа: http://avelife.ru/products/testgold/features.htm

2.7 Кузнецов А., Microsoft Access 2003. Русская версия. Учебный курс, изд. Питер, 2006.

2.8 Кен Гетц и др. Access 2000. Руководство разработчика. Том 1. Настольные приложения: Пер. с англ. - К.: Издательская группа BHV, 2000.

2.9 Литвин П., Гетц К., Гунделой М. Разработка корпоративных приложений в Access 2002. Для профессионалов. - СПб.: Питер; Киев: BHV, 2003

2.10 Маклаков С.В. BPwin и ERwin. CASE-средства разработки информационных систем. -- М.: Диалог-МИФИ, 2000. -- 256 с.

2.11 RSDN. Российский журнал для программистов. Тестирование программных средств. [Электронный ресурс]. ? Электрон. текстовые данные. ? Режим доступа: http://www.rsdn.ru/article/testing/SoftwareTesting.xml.

2.12 Дарахвелидзе, Е. Марков. Программирование в Delphi 7 ? С.-Пб.: «BHV», 2003.

2.13 Проектирование экономических информационных систем: Учебник/Смирнова Г.Н., Сорокин А.А., Тельнов Ю.Ф.; Под ред. Тельнова Ю.Ф. ? М.: Финансы и статистика, 2003. ? 512 с.

2.14 Галисеев Г.В. Программирование в среде Delphi 7: самоучитель ? М.: «Диалектика», 2003.

2.15 В. Понамарев. Базы данных в Delphi 7: Самоучитель ? С.-Пб.: «Питер», 2003.

2.16 Федор А., Елманова Н.: ADO в Delphi: перевод с англ. - СПб.: БХВ-Петербург, 2002. -816 с.: ил.

2.17 Кэнту М. Delphi 6 для профессионалов . - СПб.: Питер, 2002. - 1088 с.: ил.

2.18 Таунсенд К., Фохт Д. Проектирование и программная реализация экспертных систем на персональных ЭВМ. - М.: Финансы и статистика, 1990. - С. 52 - 73.

2.19 Шелястина Е.В. Методология описания бизнес-процессов и структур предприятия при построении АСУ // Промышленные АСУ и контроллеры. - 2000. - № 6. - С. 25 - 30.

2.20 Калянов Г.Н.: CASE-технологии. Консалтинг при автоматизации бизнес-процессов. 2-е изд., перераб. и доп. - М.: Горячая линия - Телеком, 2000. - 320 с., ил.

2.21 Карпова Т.С.: Базы данных: модели, разработка, реализация. - СПб.: Питер, 2001. - 304 с.: ил.

ПРИЛОЖЕНИЕ А

(Листинг программного кода)

Модуль UnitMain.pas

unit UnitMain;

uses UnitADO, UnitHdbk, UnitTest, UnitStart, UnitReport, UnitDoor;

{$R *.dfm}

//Статус тестирования

procedure TMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

var

R: TBitmap;

begin

R := TBitmap.Create;

if Column.Title.Caption =' ' then

begin

with DBGrid1.Canvas do

begin

FillRect(Rect);

if ADO.TabInstruct.FieldByName('Тестирование').AsString <> '' then

begin

if ADO.TabInstructЗаключение.Value = 0 then

ImageList1.GetBitmap(0, R);

if ADO.TabInstructЗаключение.Value = 1 then

ImageList1.GetBitmap(1, R);

if ADO.TabInstructЗаключение.Value = 2 then

ImageList1.GetBitmap(2, R);

end;

Draw(round((Rect.Left + Rect.Right - R.Width)/2), Rect.Top, R);

end;

end;

end;

//Авторизация

procedure TMain.FormActivate(Sender: TObject);

begin

Door.ShowModal;

end;

//Форма справочников

procedure TMain.HdbkOpen(S: string; bk: TDataSource);

begin

Hdbk.GroupBox1.Caption := S;

Hdbk.DBGrid1.DataSource := bk;

Hdbk.DBNavigator1.DataSource := bk;

Hdbk.ShowModal;

end;

//Тесты

procedure TMain.N10Click(Sender: TObject);

begin

Test.ShowModal;

end;

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

procedure TMain.N12Click(Sender: TObject);

begin

if ADO.TabInstruct.FieldByName('Тестирование').AsString <> '' then

begin

ShowMessage('Тест уже пройден! На прохождение теста дается одна попытка!');

Exit;

end;

ADO.TabTest.Close;

ADO.TabTest.Filter := 'ID =' + IntToStr(ADO.TabInstructТест.Value);

ADO.TabTest.Filtered := True;

ADO.TabTest.Open;

if ADO.TabQuest.RecordCount = 0 then

begin

ShowMessage('Для данной темы не загружены вопросы теста!');

Exit;

end;

Start.Caption := ADO.TabInstructТест2.Value + ' (' +

ADO.TabInstructПользователь2.Value + ')';

Start.ShowModal;

end;

procedure TMain.N13Click(Sender: TObject);

var

Q, A, V, N, m: integer;

Excel: Variant;

Name: OleVariant;

S: string;

begin

if ADO.TabInstruct.FieldByName('Тестирование').AsString = '' then

begin

ShowMessage('Тест еще пройден! На прохождение теста дается одна попытка!');

Exit;

end;

if ADO.TabInstructЗаключение.Value = 1 then

begin

ShowMessage('Тест уже проверен! Сдан успешно!');

Exit;

end;

if ADO.TabInstructЗаключение.Value = 2 then

begin

ShowMessage('Тест уже проверен! Пользователь направлен на повторное обучение!');

Exit;

end;

ADO.TabTest.Close;

ADO.TabTest.Filter := 'ID = ' + IntToStr(ADO.TabInstructТест.Value);

ADO.TabTest.Filtered := True;

ADO.TabTest.Open;

Q := ADO.TabQuest.RecordCount;

ADO.TabTesting.Close;

ADO.TabTesting.Filter := 'Инструктаж = ' + IntToStr(ADO.TabInstructID.Value);

ADO.TabTesting.Filtered := True;

ADO.TabTesting.Open;

A := 0; V := 0; N := 0;

With ADO.TabTesting do

begin

First;

while not EOF do

begin

ADO.TabAltern.Close;

ADO.TabAltern.Filter := 'Вопрос = ' + IntToStr(ADO.TabTestingВопрос.Value) +

' AND Статус = 1';

ADO.TabAltern.Filtered := True;

ADO.TabAltern.Open;

if ADO.TabTesting.FieldByName('Ответ').AsString <> '' then

begin

if ADO.TabTestingОтвет.Value = ADO.TabAlternID.Value then

inc(V)

else

inc(N);

end

else

inc(A);

Next;

end;

end;

ADO.TabInstruct.Edit;

IF MessageBox(Handle, PChar('Тест проверен!' + #13 + #13 +

'Пользователь: ' + ADO.TabInstructПользователь2.Value + #13 +

'Тема инструктажа: ' + ADO.TabInstructТест2.Value + #13 +

'Дата: ' + DateToStr(ADO.TabInstructТестирование.Value) + #13 + #13 +

'Кол-во вопросов теста: ' + IntToStr(Q) + #13 + 'Кол-во правильных ответов: ' + IntToStr(V) + #13 + 'Кол-во неправильных ответов: ' + IntToStr(N) + #13 + 'Кол-во вопросов без ответа: ' + IntToStr(A) + #13 + #13 + 'Тест пройден успешно?'), 'РЕЗУЛЬТАТЫ ПРОВЕРКИ',

MB_YesNo+MB_ICONWARNING+MB_TaskModal) = mrYes Then

ADO.TabInstructЗаключение.Value := 1

else

begin

ADO.TabInstructЗаключение.Value := 2;

Excel := CreateOleObject('Excel.Application');

S := ExtractFilePath(Application.ExeName);

Name := S + '\Шаблон\Направление.xls';

Try

Excel.Workbooks.Open[Name];

Excel.Visible := True;

Name := S + 'Направление\Направление № ' + IntToStr(ADO.TabInstructID.Value) + '.xls';

Excel.Range['f5'] := IntToStr(ADO.TabInstructID.Value);

Excel.Range['c8'] := ADO.TabInstructПользователь2.Value;

Excel.Range['c9'] := ADO.TabInstructТест2.Value;

Excel.Range['c10'] := DateToStr(ADO.TabInstructТестирование.Value);

Excel.Range['c12'] := IntToStr(Q);

Excel.Range['c13'] := IntToStr(V);

Excel.Range['c14'] := IntToStr(N);

Excel.Range['c15'] := IntToStr(A);

Excel.Range['c19'] := ADO.TabInstructИнструктор2.Value;

Excel.ActiveWorkbook.SaveAs[Name];

Except

begin

ShowMessage('Бланк документа "Направление" не найден!');

Excel.ActiveWorkbook.Close;

Excel.Application.Quit;

Application.Restore;

exit;

end;

end;

end;

ADO.TabInstruct.Post;

end;

//Результатная отчетность

procedure TMain.N14Click(Sender: TObject);

begin

Report.ShowModal;

end;

//Виды инструктажей

procedure TMain.N3Click(Sender: TObject);

begin

HdbkOpen(N3.Caption, ADO.DataKind);

end;

//Формы инструктажей

procedure TMain.N4Click(Sender: TObject);

begin

HdbkOpen(N4.Caption, ADO.DataForm);

end;

//Отделы

procedure TMain.N6Click(Sender: TObject);

begin

HdbkOpen(N6.Caption, ADO.DataDept);

end;

//Должности

procedure TMain.N7Click(Sender: TObject);

begin

HdbkOpen(N7.Caption, ADO.DataPost);

end;

//Пользователи

procedure TMain.N8Click(Sender: TObject);

begin

HdbkOpen(N8.Caption, ADO.DataUser);

end;

//Инструкторы

procedure TMain.N9Click(Sender: TObject);

begin

HdbkOpen(N9.Caption, ADO.DataTrainer);

end;

end.

Модуль UnitADO.pas

unit UnitADO;

uses UnitReport;

{$R *.dfm}

procedure TADO.DataQuestDataChange(Sender: TObject; Field: TField);

begin

TabAltern.Close;

TabAltern.Filter := 'Вопрос = ' + IntToStr(TabQuestID.Value);

TabAltern.Filtered := True;

TabAltern.Open;

end;

procedure TADO.DataTestDataChange(Sender: TObject; Field: TField);

begin

TabQuest.Close;

TabQuest.Filter := 'Тест = ' + IntToStr(TabTestID.Value);

TabQuest.Filtered := True;

TabQuest.Open;

end;

procedure TADO.QueryInstructBeforeRefresh(DataSet: TDataSet);

begin

QueryInstruct.Close;

QueryInstruct.Parameters.ParamValues['D1'] := DateToStr(Report.DateTimePicker1.Date);

QueryInstruct.Parameters.ParamValues['D2'] := DateToStr(Report.DateTimePicker2.Date);

QueryInstruct.Open;

QueryTrainer.Close;

QueryTrainer.Parameters.ParamValues['D1'] := DateToStr(Report.DateTimePicker1.Date);

QueryTrainer.Parameters.ParamValues['D2'] := DateToStr(Report.DateTimePicker2.Date);

QueryTrainer.Open;

QueryTest.Close;

QueryTest.Parameters.ParamValues['D1'] := DateToStr(Report.DateTimePicker1.Date);

QueryTest.Parameters.ParamValues['D2'] := DateToStr(Report.DateTimePicker2.Date);

QueryTest.Open;

QueryCheck.Close;

QueryCheck.Parameters.ParamValues['D1'] := DateToStr(Report.DateTimePicker1.Date);

QueryCheck.Parameters.ParamValues['D2'] := DateToStr(Report.DateTimePicker2.Date);

QueryCheck.Open;

QueryOK.Close;

QueryOK.Parameters.ParamValues['D1'] := DateToStr(Report.DateTimePicker1.Date);

QueryOK.Parameters.ParamValues['D2'] := DateToStr(Report.DateTimePicker2.Date);

QueryOK.Open;

QueryNO.Close;

QueryNO.Parameters.ParamValues['D1'] := DateToStr(Report.DateTimePicker1.Date);

QueryNO.Parameters.ParamValues['D2'] := DateToStr(Report.DateTimePicker2.Date);

QueryNO.Open;

TabTrainerRep.Close;

TabTrainerRep.Open;

Abort;

end;

procedure TADO.TabAlternAfterInsert(DataSet: TDataSet);

begin

TabAlternВопрос.Value := TabQuestID.Value;

end;

procedure TADO.TabAlternAfterPost(DataSet: TDataSet);

begin

TabAltern.Refresh;

end;

procedure TADO.TabInstructAfterInsert(DataSet: TDataSet);

begin

TabInstructДата.Value := Date();

TabInstructЗаключение.Value := 0;

end;

procedure TADO.TabQuestAfterInsert(DataSet: TDataSet);

begin

TabQuestТест.Value := TabTestID.Value;

end;

procedure TADO.TabTrainerRepCalcFields(DataSet: TDataSet);

begin

QueryTrainer.Close;

QueryTrainer.Filter := 'ID = ' + IntToStr(TabTrainerRepID.Value);

QueryTrainer.Filtered := True;

QueryTrainer.Open;

TabTrainerRepИнструктаж.Value := QueryTrainerCountID.Value;

QueryTest.Close;

QueryTest.Filter := 'ID = ' + IntToStr(TabTrainerRepID.Value);

QueryTest.Filtered := True;

QueryTest.Open;

TabTrainerRepТестирование.Value := QueryTestCountID.Value;

QueryCheck.Close;

QueryCheck.Filter := 'ID = ' + IntToStr(TabTrainerRepID.Value);

QueryCheck.Filtered := True;

QueryCheck.Open;

TabTrainerRepПроверено.Value := QueryCheckCountID.Value;

QueryOK.Close;

QueryOK.Filter := 'ID = ' + IntToStr(TabTrainerRepID.Value);

QueryOK.Filtered := True;

QueryOK.Open;

TabTrainerRepУспешно.Value := QueryOKCountID.Value;

QueryNO.Close;

QueryNO.Filter := 'ID = ' + IntToStr(TabTrainerRepID.Value);

QueryNO.Filtered := True;

QueryNO.Open;

TabTrainerRepНаправление.Value := QueryNOCountID.Value;

end;

end.

Модуль UnitStart.pas

unit UnitStart;

uses UnitADO;

{$R *.dfm}

procedure ShowTree;

var

i,j,n: integer;

begin

i := 0;

n := 0;

With ADO.TabQuest do

begin

First;

while not EOF do

begin

Start.Tree.Items.Add(nil, ADO.TabQuest.FieldByName('Текст').Value);

j:=0;

With ADO.TabAltern do

begin

First;

while not EOF do

begin

Start.Tree.Items.AddChild(Start.Tree.Items[i + n], ADO.TabAltern.FieldByName('Текст').Value);

Start.Tree.Items.Item[i + n].Item[j].ImageIndex := 1; Start.Tree.Items.Item[i + n].Item[j].SelectedIndex := 1;

inc(j);

Next;

end;

end;

Start.Tree.Items[i + n].Expanded := True;

n := n + j;

inc(i);

Next;

end;

end;

Start.Tree.Items[0].Selected := True;

end;

procedure TStart.FormActivate(Sender: TObject);

begin

ShowTree;

end;

procedure TStart.FormClose(Sender: TObject; var Action: TCloseAction);

begin

ADO.TabTest.Filtered := False;

Start.Tree.Items.Clear;

end;

procedure TStart.N1Click(Sender: TObject);

var

i, Q, A: Integer;

begin

Q := 0;

A := 0;

for i := 0 to Tree.Items.Count - 1 do

begin

if Tree.Items[i].ImageIndex = 0 then

begin

ADO.TabQuest.Close;

ADO.TabQuest.Filter := 'Тест = ' + IntToStr(ADO.TabInstructТест.Value) +

' AND Текст = ' + Chr(39) + Tree.Items[i].Text + Chr(39);

ADO.TabQuest.Filtered := True;

ADO.TabQuest.Open;

ADO.TabTesting.Insert;

ADO.TabTestingИнструктаж.Value := ADO.TabInstructID.Value;

ADO.TabTestingВопрос.Value := ADO.TabQuestID.Value;

ADO.TabTesting.Post;

inc(Q);

end;

if Tree.Items[i].ImageIndex = 2 then

begin

ADO.TabAltern.Close;

ADO.TabAltern.Filter := 'Вопрос = ' + IntToStr(ADO.TabQuestID.Value) +

' AND Текст = ' + Chr(39) + Tree.Items[i].Text + Chr(39);

ADO.TabAltern.Filtered := True;

ADO.TabAltern.Open;

ADO.TabTesting.Edit;

ADO.TabTestingОтвет.Value := ADO.TabAlternID.Value;

ADO.TabTesting.Post;

inc(A);

end;

end;

ADO.TabInstruct.Edit;

ADO.TabInstructТестирование.Value := Date();

ADO.TabInstruct.Post;

ShowMessage('Тест завершен!' + #13 + #13 +

'Пользователь: ' + ADO.TabInstructПользователь2.Value + #13 +

'Тема инструктажа: ' + ADO.TabInstructТест2.Value + #13 +

'Дата: ' + DateToStr(ADO.TabInstructДата.Value) + #13 + #13 +

'Кол-во вопросов теста: ' + IntToStr(Q) + #13 + 'Кол-во данных ответов: ' + IntToStr(A) + #13 + #13 + 'Данные сохранены. Ожидайте проверку!');

Start.Close;

end;

procedure TStart.TreeDblClick(Sender: TObject);

begin

if Tree.Selected.ImageIndex <> 0 then

begin

if Tree.Selected.ImageIndex = 1 then

begin

Tree.Selected.ImageIndex := 2;

Tree.Selected.SelectedIndex := 2;

end

else

begin

Tree.Selected.ImageIndex := 1;

Tree.Selected.SelectedIndex := 1;

end;

end;

end;

end.

Модуль UnitTest.pas

unit UnitTest;

uses UnitADO;

{$R *.dfm}

procedure TTest.DBGrid3DblClick(Sender: TObject);

begin

if DBGrid3.SelectedIndex = 1 then

begin

ADO.TabAltern.Edit;

if ADO.TabAlternСтатус.Value = True then

ADO.TabAlternСтатус.Value := False

else

ADO.TabAlternСтатус.Value := True;

ADO.TabAltern.Post;

end;

end;

procedure TTest.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

var

R: TBitmap;

begin

R := TBitmap.Create;

if Column.Title.Caption =' ' then

begin

with DBGrid3.Canvas do

begin

FillRect(Rect);

if ADO.TabAlternСтатус.Value = True then

ImageList1.GetBitmap(1, R)

else

ImageList1.GetBitmap(0, R);

Draw(round((Rect.Left + Rect.Right - R.Width)/2), Rect.Top, R);

end;

end;

end;

end.

Модуль UnitReport.pas

unit UnitReport;

uses UnitADO;

{$R *.dfm}

procedure TReport.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

var

R: TBitmap;

begin

R := TBitmap.Create;

if Column.Title.Caption =' ' then

begin

with DBGrid1.Canvas do

begin

FillRect(Rect);

if ADO.QueryInstruct.FieldByName('Тестирование').AsString <> '' then

begin

if ADO.QueryInstructЗаключение.Value = 0 then

ImageList1.GetBitmap(0, R);

if ADO.QueryInstructЗаключение.Value = 1 then

ImageList1.GetBitmap(1, R);

if ADO.QueryInstructЗаключение.Value = 2 then

ImageList1.GetBitmap(2, R);

end;

Draw(round((Rect.Left + Rect.Right - R.Width)/2), Rect.Top, R);

end;

end;

end;

procedure TReport.N1Click(Sender: TObject);

var

Excel: Variant;

Name: OleVariant;

S: string;

n: integer;

begin

Excel := CreateOleObject('Excel.Application');

S := ExtractFilePath(Application.ExeName);

Name := S + '\Шаблон\Отчет.xls';

Try

Excel.Workbooks.Open[Name];

Excel.Visible := True;

Name := S + 'Отчет\Отчет.xls';

Excel.Range['c6'] := DateToStr(DateTimePicker1.Date);

Excel.Range['c7'] := DateToStr(DateTimePicker2.Date);

n := 10;

With ADO.QueryInstruct do

begin

First;

while not EOF do

begin

S := 'a' + IntToStr(n);

Excel.Range[S] := IntToStr(ADO.QueryInstructID.Value);

Excel.Range[S].Select;

Excel.Selection.Borders.LineStyle:=1;

S := 'b' + IntToStr(n);

Excel.Range[S] := DateToStr(ADO.QueryInstructДата.Value);

Excel.Range[S].Select;

Excel.Selection.Borders.LineStyle:=1;

S := 'c' + IntToStr(n);

Excel.Range[S] := ADO.QueryInstructТЕСТНазвание.Value;

Excel.Range[S].Select;

Excel.Selection.Borders.LineStyle:=1;

S := 'd' + IntToStr(n);

Excel.Range[S] := ADO.QueryInstructВИДНазвание.Value;

Excel.Range[S].Select;

Excel.Selection.Borders.LineStyle:=1;

S := 'e' + IntToStr(n);

Excel.Range[S] := ADO.QueryInstructФОРМАНазвание.Value;

Excel.Range[S].Select;

Excel.Selection.Borders.LineStyle:=1;

S := 'f' + IntToStr(n);

Excel.Range[S] := ADO.QueryInstructПОЛЬЗОВАТЕЛЬФИО.Value;

Excel.Range[S].Select;

Excel.Selection.Borders.LineStyle:=1;

S := 'g' + IntToStr(n);

Excel.Range[S] := ADO.QueryInstructИНСТРУКТОРФИО.Value;

Excel.Range[S].Select;

Excel.Selection.Borders.LineStyle:=1;

inc(n);

Next;

end;

end;

Excel.ActiveWorkbook.SaveAs[Name];

Except

begin

ShowMessage('Бланк документа "Отчет" не найден!');

Excel.ActiveWorkbook.Close;

Excel.Application.Quit;

Application.Restore;

exit;

end;

end;

end;

end.

Модуль UnitDoor.pas

unit UnitDoor;

uses UnitADO, UnitMain;

{$R *.dfm}

procedure TDoor.Button1Click(Sender: TObject);

begin

if RadioGroup1.ItemIndex = 0 then

begin

if Edit1.Text = ADO.ListTrainerПароль.Value then

begin

Door.Caption := 'Авторизация (ТБинформ)*';

Door.Close;

end;

end;

if RadioGroup1.ItemIndex = 1 then

begin

if Edit1.Text = ADO.ListUserПароль.Value then

begin

Door.Caption := 'Авторизация (ТБинформ)*';

Door.Close;

end;

end;

procedure TDoor.FormActivate(Sender: TObject);

begin

Edit1.SetFocus;

end;

procedure TDoor.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if Door.Caption = 'Авторизация (ТБинформ)' then

Main.Close

else

Main.AlphaBlend := False;

end;

procedure TDoor.RadioGroup1Click(Sender: TObject);

begin

if RadioGroup1.ItemIndex = 0 then

begin

DBLookupListBox1.ListSource := ADO.DataListTrainer;

GroupBox1.Caption := 'Инструкторы';

end;

if RadioGroup1.ItemIndex = 1 then

begin

DBLookupListBox1.ListSource := ADO.DataListUser;

GroupBox1.Caption := 'Пользователи';

end;

end;

end.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.