close

Вход

Забыли?

вход по аккаунту

?

ПЗ ПРАКТИКА

код для вставкиСкачать

Содержание
Введение3
1 Аналитическая часть4
1.1 Роль ИВЦ в работе ГЖД.4
1.2 Информационные системы ГЖД. ЕК АСУТР.5
1.3 Постановка задачи7
1.4 Выводы к первой части7
2 Практическая часть8
2.1 Описание предметной области8
2.2 Инфологическое проектирование8
2.3 Даталогическое проектирование12
2.3.1 Переход к даталогической модели12
2.3.2 Описание даталогической модели13
2.3.3 Нормализация отношений16
2.4 Физическое проектирование17
2.4.1 Создание базы данных17
2.4.2 Создание обучающей программы19
2.4.3 Создание программы по поддержке базы данных21
Заключение24
Приложение А(обязательное).Листинг скрипта созданной базы данных .25
Приложение Б(обязательное).Листинг программного модуля обучающей программы30
Приложение В(обязательное).Листинг программного модуля по поддержке базы данных44
Приложение Г (рекомендуемое). Список используемых сокращений72
Приложение Д (справочное). Библиографический список73
Введение
Внедрение новых технологий в наше время неизбежно. Они позволяют упростить различные процессы нашей жизнедеятельности. Однако, как и всему новому и непривычному для нас, данным технологиям необходимо обучиться, а, как известно, процесс обучения довольно сложен. Данное утверждение применимо и к программным продуктам. На данный момент на многих предприятиях интенсивно обновляется программная база, поэтому остро встал вопрос об обучении сотрудников корректному использованию новых более сложных программ. В данной работе будет рассмотрен процесс автоматизации процесса обучения одному из модулей автоматизированной системы предприятия ОАО "Российские Железные Дороги", на котором проходила практика.
Работа состоит из двух частей: аналитической и практической. В первой части приведена краткая информация по предприятию, на котором проводилась практика, описана система ЕК АСУТР и приведена постановка задачи. Во второй части приведена разработка базы данных и приложений, работающих с созданной базой.
1 Аналитическая часть
1.1 Роль ИВЦ в работе ГЖД. ОАО "РЖД" представляет собой развитое предприятие с множеством отделов, каждый из которых выполняет свои определённые задачи для успешной работы всего предприятия.
Основные задачи обеспечения эффективной эксплуатационной работы структурных подразделений и аппарата управления Дороги, филиалов и дочерних компаний с использованием информационных технологий в условиях функционирования единой вертикально-интегрированной структуры информационного обеспечения производственной деятельности ОАО "РЖД" определяют главные направления деятельности информационно-вычислительного центра на полигоне Горьковской железной дороги. Задачи, исполняемые на ОАО "РЖД" ИВЦ: * Обеспечение эксплуатации, техническое и технологическое обслуживание, администрирование и сопровождение программно-технического комплекса, оборудования средств вычислительной техники и сети передачи данных, а также автоматизированных систем управления, участвующих в производственном процессе. * Предоставление информации структурным подразделениям и аппарату управления железной дороги в объемах и формах, предусмотренных технологией решения задач. * Осуществление разработок, внедрение и сопровождение информационных систем по заданию. * Предоставление структурным подразделениям и аппарату управления услуги по передаче данных и телематические услуги связи.
1.2 Информационные системы ГЖД. ЕК АСУТР.
Как и на любом другом развитом предприятии, на ОАО "РЖД" применяется множество информационных систем, которые обеспечивают должную работу всего предприятия и обслуживаются ИВЦ.
Информационные системы ГЖД оказывают помощь в:
- управлении перевозочным процессом
(Планирование. Техническое нормирование. Диспетчерское управление. Эксплуатационная работа. Оперативный контроль и анализ. Управление грузовой и коммерческой работой. Управление контейнерными перевозками. Управление вагонным и локомотивным парком. Безопасность движения. Управление статистикой и отчетностью.);
- управлении маркетингом, экономикой и финансами
(Финансовая деятельность. Бухучет. Диверсификация. Банковские операции. Нормативно-правовое обслуживание. Эксплуатационные расходы. Баланс. Управление МТР и имуществом. Труд, заработная плата, пенсионный фонд. Кассово-финансовые операции.);
- управлении инфраструктурой железнодорожного транспорта
(Пассажирское хозяйство. Хозяйство пути и сооружений. Другие. Хозяйство СЦБ и связи. Хозяйство энергоснабжения. Локомотивное хозяйство. Вагонное хозяйство. Хозяйство гражданских сооружений. Хозяйство информатизации.);
- управлении персоналом и социальной сферы
(Управление кадрами. Управление охраной труда. АСКИД. Здравоохранение. НТИ. Обучение. Управление стандартизацией. Ведомственная охрана железнодорожного транспорта.).
Одной из имеющихся систем является ЕК АСУТР.
ЕК АСУТР - единая корпоративная автоматизированная система управления трудовыми ресурсами.
Данная система предназначена для автоматизации учёта кадров, решения вопросов ведения нормативной базы по каждому сотруднику предприятия, обеспечения более оперативного взаимодействия между всеми подразделениями хозяйства кадров, обеспечения первичной информацией по кадрам.
Включает в себя разделы по ведению штатного расписания, кадрового учета и делопроизводства, управлению временными данными, нормированию труда, расчёту заработной платы и др.
Этапы ввода данных в систему ЕК АСУТР:
1)Экономист (формирование штатного расписания, присвоение заказов/затрат, ввод надбавок на штатную должность/орг ед)
2)Кадровщик (мероприятия, отпуска, больничный лист, ввод ИТ релевантных для расчёта заработной платы)
3)Табельщик (формирование графика, ввод отсутствий и присутствий, оценка времени формирования табеля)
4)Расчётчик (ввод НСИ, ввод начислений/удержаний, расчёт заработной платы, формирование отчётности)
5)Финансист (формирование файла проводок, передача данных в систему ЕК АСУФР).
ЕК АСУТР, в свою очередь состоит из множества подпрограмм, одной из которых является подпрограмма расчёта заработной платы сотрудников предприятия. При работе с данной программой можно выделить две группы сотрудников:
* Пользователи ЕК АСУТР (далее пользователи): бухгалтера, расчётчики и финансисты предприятия;
* Технологи ЕК АСУТР - специалисты поддержки пользователей (далее специалисты).
Таким образом, ознакомившись с общей информацией, можно перейти к постановке задачи.
1.3 Постановка задачи
Требуется разработать базу данных, содержащую необходимую для обучения сотрудников информацию по работе с одним из модулей системы ЕК АСУТР. Требуется разработать программу, реализующую обучение сотрудника основным моментам работы с программой расчёта заработной платы в соответствии с данными лекциями и инструкциями по подпрограмме, с использованием спроектированной ранее базы данных.
Кроме того должна быть представлена программа по поддержке базы данных, реализующая добавление в данную базу и удаление из данной базы информации.
1.4 Выводы к первой части
В ходе написания данной части была рассмотрена роль ИВЦ в работе ГЖД, было дано описание системы ЕК АСУТР и сформулирована задача на проектирование.
2 Практическая часть
2.1 Описание предметной области
В базе данных содержится информация об основных этапах работы с модулем ЕК АСУТР по расчёту заработной платы. На каждом этапе осуществляются определённые последовательности действий - Подэтапы, на которых могут выполняться различные задачи, возникают системные сообщения, указываются обязательные для заполнения поля. Кроме того в базе содержатся справочники возможных вводимых значений в необходимые для заполнения поля и тестовые вопросы для проверки полученных знаний.
В обучающей программе, в связи с предоставленными данными, возможно узнать информацию о различных этапах работы с программой, о действиях, которые необходимо выполнять на данных этапах; можно быстро найти необходимую более подробную инструкцию по интересующим задачам, которые выполняются на Подэтапах (подэтапах). Возможна проверка полученных в ходе обучения знаний в виде тестовых вопросов с вариантами ответов.
Программа по поддержке базы данных содержит функции добавления и удаления информации, хранящейся в базе данных.
2.2 Инфологическое проектирование
Инфологическое проектирование означает представление будущей базы данных в виде инфологической модели. Инфологическая модель - формализованное описание информации предметной области, независимо от последующей реализации её хранения. Сущности описывают объекты (или части объектов) предметной области. Таким образом, исходя из представленных в описании предметной области данных, согласно теории построения ER-моделей, выделим следующие сущности и их свойства: 1) Этап (описание этапов расчёта заработной платы)
- номер (очередность выполнения действий по расчёту заработной платы)
- название (название этапа)
2) Подэтап (Подпункты основных этапов расчёта заработной платы). Является дочерней сущностью для сущности Этап.
- название (название подпункта)
- описание (краткое описание подпункта)
- путь (путь по меню программы расчёта заработной платы, необходимый для выхода на нужную вкладку для выполнения действий, которые необходимо совершить в данном подпункте)
3) Задача (действия, которые можно выполнить в Подэтапах). Является дочерней сущностью для сущности Подэтап.
- название (название задачи)
- описание (краткое описание задачи)
- инструкция (название инструкции, необходимое для поиска инструкции и её запуска из программы)
4) Поле (краткое описание полей необходимых для заполнения). Является дочерней сущностью для сущности Подэтап.
- название (название поля)
- значение (описание поля, сведения о поле, тип значения, который присущ полю)
- комментарий (комментарий к полю)
5) Системное сообщение (сообщения, которые могут возникать по мере выполнения задач). Является дочерней сущностью для сущности Задача.
- название (название системного сообщения)
- описание (краткое описание системного сообщения)
- инструкция (название инструкции, необходимое для вызова инструкции по системному сообщению)
6) Справочник (все возможные значения некоторых полей). Является дочерней сущностью для сущности Поле.
- обозначение (значение, которое необходимо ввести в поле)
- пояснение (сжатое текстовое описание обозначения поля)
7) Вопрос (тестовые вопросы, на которые необходимо ответить после изучения этапа)
- вопрос (текстовое содержание вопроса)
8) Ответ (тестовые ответы на поставленные вопросы). Является дочерней сущностью для сущности Вопрос.
- номер ответа
- ответ (текстовый ответ на вопрос)
- правильность (свойство указывает на то является ли ответ правильным или нет)
Для имеющихся сущностей идентификаторами (по которым, можно различать экземпляры сущностей друг от друга) являются подчёркнутые свойства сущностей.
На рисунке 1 представлена развёрнутая ER-диаграмма.
Рисунок 1 - ER-диаграмма
Описание связей между сущностями.
Связь между сущностью Этап и Вопрос осуществляется по принципу 1:М (один ко многим), так как одному этапу соответствует множество вопросов.
Связь между сущностью Вопрос и Ответ осуществляется по принципу 1:М (один ко многим), так как у одного вопроса может быть несколько ответов.
Сущность Подэтап является дочерней сущности Этап. Так как для одного этапа может быть множество Подэтапов, то со стороны сущности Подэтап стоит множественная связь.
Сущность Задача является дочерней сущности Подэтап. Так как для одного Подэтапа может выполняться множество задач, то со стороны сущности задача стоит множественная связь.
Сущность Системное сообщение является дочерней сущности Задача. Так как для одной задачи может существовать множество системных сообщений, возникающих в ходе работы, то со стороны сущности системное сообщение стоит множественная связь.
Сущность Поле является дочерней сущности Подэтап. Так как для одного Подэтапа характерно множество необходимых для заполнения полей, то со стороны сущности поле стоит множественная связь.
Сущность Справочник является дочерней сущности Поле. Так как у одного поля может быть множество различных значений, которые можно записать в поле, то со стороны сущности справочник стоит множественная связь.
Ограничение целостности.
При удалении экземпляра сущности Этап удаляется и экземпляры сущности Подэтап, относящиеся к данному этапу, а также удаляются вопросы теста, которые предназначены для проверки полученных знаний при обучении действиям, которые необходимо провести на данном этапе.
При удалении экземпляра сущности Подэтап удаляются задачи, которые выполняются в данном Подэтапе, также удаляются поля, которые должны быть заполнены при выборе данного Подэтапа.
При удалении экземпляра сущности Задача, сущности Поле, сущности Вопрос удаляются соответственно системные сообщения, характерные для данной задачи, справочные данные по полям (все возможные значения данного поля), все ответы, которые соответствуют данному вопросу.
2.3 Даталогическое проектирование
2.3.1 Переход к даталогической модели
При даталогическом проектировании необходимо преобразовать сложные объекты в простые, сложные свойства в простые, упростить все связи М:М. В нашем случае необходимо провести переход от сложных объектов к простым. Выносим Подэтапы из состава сложного объекта "Этап". Связь между сущностями устанавливается так, чтобы максимально соответствовать исходной модели. Связь сущностей представлена на рисунке 2.
Рисунок 2 - Взаимодействие сущностей "Этап" и "Подэтап"
Аналогично осуществляется вынесение из сложных объектов сущностей "Задача", "Поле", "Системное сообщение", "Справочник", "Вопрос", "Ответ".
На основе модифицированной инфологической модели можно составить даталогическую модель. При этом сущности преобразуются в отношения, свойства сущностей - в атрибуты отношений, глобальные идентификаторы - в первичные ключи, локальные идентификаторы - в части первичных ключей.
Для уменьшения и упрощения первичных ключей введём искусственные идентификаторы. Вводимые искусственные идентификаторы рассматриваем как атрибуты целого типа, значения которых уникальны и не изменяются после введения. Это позволяет использовать их в качестве первичных ключей. Таким образом, в отношения "Подэтап", "Задача", "Поле", "Системное сообщение", Справочник, "Вопрос" добавим идентификатор "ID". Полученная даталогическая модель представлена на рисунке 3.
Рисунок 3 - Даталогическая модель
2.3.2 Описание даталогической модели
Содержание отношений и атрибутов отношений
Отношение "Этап" содержит информацию о конкретном этапе. Атрибуты: уникальный "Номер", "Название" (назначение данного отношения и его атрибутов аналогично назначению сущности "Этап" и её свойств при инфологическом проектировании). Первичным ключом отношения является "Номер". Отношение "Подэтап" содержит данные о каком-либо Подэтапе определённого этапа. Атрибуты: "Название", "Описание", "Путь". Внесен как первичный ключ идентификатор ID.
Отношение "Задача" содержит данные о какой-либо задаче, которая выполняется на Подэтапе. Атрибуты: "Название", "Описание", "Инструкция". Внесен как первичный ключ идентификатор ID.
Отношение "Поле" предназначено для хранения информации о необходимых для заполнения полях. Атрибуты: "Название", "Значение", "Комментарий". Внесен как первичный ключ идентификатор ID.
Отношение "Системное сообщение" содержит информацию о возможных сообщениях, возникающих в ходе работы. Атрибуты: "Название", "Описание", "Инструкция". Внесен как первичный ключ идентификатор ID.
Отношение "Справочник" содержит информацию о возможных значениях некоторых полей, которые необходимо заполнить. Атрибуты: "Обозначение", "Пояснение". Внесен как первичный ключ идентификатор ID.
Отношение "Вопрос" содержит информацию о том или ином вопросе теста. Атрибуты: "Вопрос". Внесен как первичный ключ идентификатор ID. Отношение "Ответ" содержит информацию об ответах на вопросы теста. Атрибуты: "Номер" (локальный идентификатор), "Ответ", "Правильность". Далее будет внесён внешний ключ, для связи отношением "Вопрос", он и локальный идентификатор "Номер" будут составлять первичный ключ.
Характеристики атрибутов.
Характеристики атрибутов представлены в таблице 1.
Таблица 1 - Характеристики атрибутов
ОтношениеАтрибутТипУникальностьОбязательность для заполненияЭтапНомерЧисловойУникальныйОбязательно НазваниеТекстовый Обязательно ПодэтапНазваниеТекстовыйУникально для одного этапаОбязательно ОписаниеТекстовый Не обязательно ПутьТекстовый Обязательно Задача
НазваниеТекстовыйУникально для одного подэтапаОбязательно ОписаниеТекстовый Обязательно ИнструкцияТекстовый ОбязательноПолеНазваниеТекстовыйУникально для одного подэтапаОбязательно ЗначениеТекстовый Обязательно КомментарийТекстовый Не обязательно Системное сообщениеНазваниеТекстовыйУникально для одной задачиОбязательно Описание Текстовый Не обязательно ИнструкцияТекстовый ОбязательноСправочникОбозначениеТекстовыйУникально для одного поляОбязательно ПояснениеТекстовый ОбязательноВопросВопросТекстовыйУникально для одного этапаОбязательноОтветНомер ответаЧисловойУникально для одного вопросаОбязательно ОтветТекстовыйУникально для одного вопросаОбязательно ПравильностьЧисловой Обязательно Внешние ключи.
Введем новые атрибуты для соединения таблиц:
"Номер этапа" в отношение "Подэтап" для связи с отношением "Этап";
"ID Подэтапа" в "Задача" для связи с "Подэтап";
"ID Подэтапа" в "Поле" для связи с "Подэтап";
"ID задачи" в "Системное сообщение" для связи с "Задача";
"ID поля" в "Справочника" для связи с "Поле";
"Номер этапа" в "Вопрос" для связи с "Этап";
"ID вопроса" в "Ответ" для связи с "Вопрос".
Правила поддержки ссылочной целостности для связей.
При удалении кортежа в отношении "Этап" удаляются связанные с ним кортежи отношений "Подэтап", "Вопрос". Запрещено добавление в отношения "Подэтап", "Вопрос" кортежа со значением номера этапа, отсутствующего в отношении "Этап".
При удалении кортежа в отношении "Подэтап" удаляются связанные с ним кортежи отношений "Задача", "Поле". Запрещено добавление в отношения "Задача", "Поле" кортежа со значением ID Подэтапа, отсутствующего в отношении "Подэтап".
При удалении кортежа в отношении "Задача" удаляются связанные с ним кортежи отношения "Системное сообщение". Запрещено добавление в отношение "Системное сообщение" кортежа со значением ID задачи, отсутствующего в отношении "Задача".
При удалении кортежа в отношении "Поле" удаляются связанные с ним кортежи отношения "Справочник". Запрещено добавление в отношение "Справочник" кортежа со значением ID поля, отсутствующего в отношении "Поле".
При удалении кортежа в отношении "Вопрос" удаляются связанные с ним кортежи отношения "Ответ". Запрещено добавление в отношение "Ответ" кортежа со значением ID вопроса, отсутствующего в отношении "Вопрос".
2.3.3 Нормализация отношений
Проверим, удовлетворяет ли полученная нами даталогическая модель требованиям 1, 2 и 3 нормальным формам.
1. Таблица находится в первой нормальной форме (1НФ) тогда и только тогда, когда ни одна из ее строк не содержит в любом своем поле более одного значения и ни одно из ее ключевых полей не пусто.
Все таблицы разработанной БД соответствуют этому определению.
2. Таблица находится во второй нормальной форме (2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом. Так как во всех таблицах первичным ключом является "безликий" ID, то все таблицы разработанной БД соответствуют этому определению.
3. Таблица находится в третьей нормальной форме (3НФ), если она удовлетворяет определению 2НФ и не одно из ее неключевых полей не зависит функционально от любого другого неключевого поля.
Все таблицы разработанной БД соответствуют этому определению.
2.4 Физическое проектирование
2.4.1 Создание базы данных
На основе даталогической модели проектируем базу данных на сервере FireBird 2.0.
Создадим следующие таблицы: Step(Этапы), sub_step(Подэтапы), task(Задача), system_msg(Системное сообщение), field(Поле), manual_f(Справочник), question(Вопрос), answer(Ответ). Полученный скрипт можно просмотреть в Приложении А.
Описание полей таблиц:
Описания полей таблиц приведены в таблице 2.
Таблица 2 - Описание полей таблиц
Таблица Name TypeWidth step number Integer4 name Char50 sub_step id Integer4 number_st Integer4 name Char70 path Char100 description Char1000 task
id Integer4 id_sub Integer4 name Char50 description Char1000 instruction Char100 field id Integer4 id_sub Integer4 name Char30 val Char40 comment Character60 system_msg id Integer4 id_task Integer4 name Char100 description Char1000 instruction Char100 Продолжение таблицы 2
manual_f id Integer4 id_fld Integer4 symbol Char10 explanation Char50 question id Integer4 number_st Integer4 question Char100 answer id_q Integer4 number Integer4 answer Char100 truth Integer4 Описание индексов таблиц:
Описания полей таблиц приведены в таблице 3.
Таблица 3 - Описание индексов таблиц
Таблица Описание индексов TypeExpressionНазначение индексаstepPrimarynumberДля поддержки уникальности UniquenameДля поддержки уникальности названия этапаsup_stepPrimaryidДля поддержки уникальности Foreignnumber_stДля связи с таблицей "Этап" Uniquenumber_st+nameДля поддержки уникальности названия подэтапа для одного этапаtaskPrimaryidДля поддержки уникальности Foreignid_subДля связи с таблицей "Подэтап" Uniqueid_sub+nameДля поддержки уникальности названия задачи для одного подэтапаfieldPrimaryidДля поддержки уникальности Foreignid_subДля связи с таблицей "Подэтап" Uniqueid_sub+nameДля поддержки уникальности названия поля для одного подэтапаsystem_msgPrimaryidДля поддержки уникальности Foreignid_taskДля связи с таблицей "Задача" Uniqueid_ task +nameДля поддержки уникальности названия сообщения для одной задачи Продолжение таблицы 3
manual_fPrimaryidДля поддержки уникальности Foreignid_fldДля связи с таблицей "Поле" Uniqueid_fld+symbolДля поддержки уникальности обозначения поля для одного поляquestionPrimaryidДля поддержки уникальности Foreignnumber_stДля связи с таблицей "Этап" Uniquenumber_st+questionДля поддержки уникальности вопроса для одного этапаanswerPrimaryid_q+numberДля поддержки уникальности Foreignid_qДля связи с таблицей "Вопрос" Uniqueid_q+answerДля поддержки уникальности ответа для одного вопроса 2.4.2 Создание обучающей программы
Данная программа предназначена для обучения специалистов в сфере расчёта заработной платы.
На вкладке "Общая информация" (внешний вид вкладки представлен на рисунке 4) содержится краткая информация о программе обучения, целях и слушателях данного курса; информация об используемых кратких обозначениях; приведен план расчёта заработной платы, которому необходимо следовать. Рисунок 4 - Вкладка "Общая информация"
На вкладке "Лекция" (внешний вид вкладки представлен на рисунке 5) можно просмотреть информацию по интересующему этапу расчёта заработной платы. Для этого необходимо выбрать название этапа из выпадающего списка. Этапы в списке упорядочены в соответствии с планом расчёта заработной платы, которому необходимо следовать. При выборе Этапа появляется список его подэтапов. При нажатии на любом из подэтапов, которые содержатся в данном списке, появляется информация о данном подэтапе. Если у данного подэтапа есть задачи, то они отображаются в новом списке. При нажатии на задачу из списка появляется её описание и возможность загрузить более подробную инструкцию для данной задачи. Если у задачи есть системные сообщения, возникающие в ходе работы, то при выборе задачи они появляются вместе с информацией о задаче. Кнопка "Загрузить инструкцию" служит для вызова более подробной инструкции по выбранной задаче или системному сообщению.
Если у данного подэтапа есть поля необходимые для заполнения, то появляется таблица, в которой содержится название поля, значение поля и комментарий к полю. Для просмотра справочника(содержит возможные значения данного поля) необходимо щёлкнуть на название поля в ранее выведенной таблице.
Чтобы посмотреть задачи или поля для выбранного ранее подэтапа, необходимо щелкнуть на соответствующей записи в "Выберите то, что хотите просмотреть".
Рисунок 5 - Вкладка "Лекция"
На вкладке "Проверка знаний" (внешний вид вкладки представлен на рисунке 6) можно пройти тест по изученному этапу. Нужно выбрать этап в выпадающем списке, по которому хотите пройти тест. На форму сразу же загружается первый вопрос. Для загрузки следующего вопроса нажимайте "Следующий вопрос". Чтобы отметить правильный ответ, нужно поставить рядом с ним галочку. Можно видеть сколько всего вопросов в тесте, на сколько вопросов ответили и на сколько вопросов ответили правильно. Рисунок 6 - Вкладка "Проверка знаний"
С вкладки на вкладку можно переходить как непосредственно нажав на нужную вам вкладку, так и с помощью пункта меню "Перейти на вкладку".
Листинг программы представлен в Приложении Б.
2.4.3 Создание программы по поддержке базы данных
Данная программа предназначена для добавления и удаления информации в базу данных.
Для начала работы нужно выбрать определённый пункт меню.
Пункт меню "Общее" содержит подпункты:
"Справка" - для вызова данной инструкции;
"Лекции" - для вызова Полных лекций по курсу;
"Выход" - для выхода из программы.
Выбрав пункт меню "Добавление" можно выбрать к какой таблице добавить значение. Возможные варианты: Добавить этап, Добавить подэтап, Добавить задачу, Добавить системное сообщение, Добавить поле для заполнения, Добавить значение поля, Добавить ответ, Добавить вопрос. При этом на форме будут показаны таблицы и объекты, необходимые для добавления в каждом определённом случае (на рисунке 7 представлена форма при добавлении системного сообщения).
Рисунок 7 - Добавление системного сообщения
Выбрав пункт меню "Удаление" можно удалить выбранное значение из любой таблицы. Возможные варианты: Удалить этап, Удалить подэтап, Удалить задачу, Удалить системное сообщение, Удалить поле для заполнения, Удалить значение поля, Удалить ответ, Удалить вопрос. При этом на форме будут показаны кнопки, предназначенные для удаления, и необходимые для выбора удаляемого значения таблицы (на рисунке 8 представлена форма при удалении системного сообщения).
Рисунок 8 - Удаление системного сообщения
Листинг программы представлен в Приложении В.
Заключение
В ходе работы были закреплены знания по созданию баз данных, написанию SQL запросов и созданию приложений, работающих с базами данных.
В результате проведённой работы была спроектирована и создана база данных для сервера Firebird 2.0, а также были разработаны два приложения, созданные в среде программирования С++Builder 6 , позволяющие работать с созданной базой данных. А именно, были созданы обучающая и осуществляющая поддержку базы данных программы.
Таким образом, поставленная задача является выполненной.
Приложение А
(обязательное)
Листинг скрипта созданной базы данных
/******************************************************************************/
/*** Generated by IBExpert 2006.04.11 26.10.2009 19:19:08 ***/
/******************************************************************************/
SET NAMES NONE;
CREATE DATABASE 'D:\learning.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET NONE;
/******************************************************************************/
/*** Generators ***/
/******************************************************************************/
CREATE GENERATOR G1;
SET GENERATOR G1 TO 0;
CREATE GENERATOR G2;
SET GENERATOR G2 TO 0;
CREATE GENERATOR G3;
SET GENERATOR G3 TO 0;
CREATE GENERATOR G4;
SET GENERATOR G4 TO 0;
CREATE GENERATOR G5;
SET GENERATOR G5 TO 0;
CREATE GENERATOR G6;
SET GENERATOR G6 TO 0;
/******************************************************************************/
/*** Tables ***/
/******************************************************************************/
CREATE TABLE STEP (
number INTEGER NOT NULL PRIMARY KEY,
name char(50) NOT NULL UNIQUE
);
CREATE TABLE SUB_STEP (
id INTEGER NOT NULL PRIMARY KEY,
number_st INTEGER NOT NULL,
name char(70) NOT NULL,
path char(100) NOT NULL,
description char(1000) NOT NULL,
FOREIGN KEY (number_st) references STEP(number),
UNIQUE(number_st,name)
);
CREATE TABLE TASK (
id INTEGER NOT NULL PRIMARY KEY,
id_sub INTEGER NOT NULL,
name char(50) NOT NULL,
description char(1000) NOT NULL,
instruction char(100) NOT NULL,
FOREIGN KEY (id_sub) references SUB_STEP(id),
UNIQUE(id_sub,name)
);
CREATE TABLE FIELD (
id INTEGER NOT NULL PRIMARY KEY,
id_sub INTEGER NOT NULL,
name char(30) NOT NULL,
val char(40) NOT NULL,
comment char(60) NOT NULL,
FOREIGN KEY (id_sub) references SUB_STEP(id),
UNIQUE(id_sub,name)
);
CREATE TABLE SYSTEM_MSG (
id INTEGER NOT NULL PRIMARY KEY,
id_task INTEGER NOT NULL,
name char(100) NOT NULL,
description char(1000) NOT NULL,
instruction char(100) NOT NULL,
FOREIGN KEY (id_task) references TASK(id),
UNIQUE(id_task,name)
);
CREATE TABLE MANUAL_F (
id INTEGER NOT NULL PRIMARY KEY,
id_fld INTEGER NOT NULL,
symbol char(10) NOT NULL,
explanation char(50) NOT NULL,
FOREIGN KEY (id_fld) references FIELD(id),
UNIQUE(id_fld,symbol)
);
CREATE TABLE QUESTION (
id INTEGER NOT NULL PRIMARY KEY,
number_st INTEGER NOT NULL,
question char(100) NOT NULL,
FOREIGN KEY (number_st) references STEP(number),
UNIQUE(number_st,question)
);
CREATE TABLE ANSWER (
number INTEGER NOT NULL,
id_q INTEGER NOT NULL,
answer char(100) NOT NULL,
truth INTEGER NOT NULL,
PRIMARY KEY(number,id_q),
FOREIGN KEY (id_q) references QUESTION(id),
UNIQUE(id_q,answer)
);
/* trig GEN*/
CREATE TRIGGER GEN for SUB_STEP
before insert
as begin
new.id = GEN_ID(g1,1);
end;
CREATE TRIGGER GEN1 for TASK
before insert
as begin
new.id = GEN_ID(g2,1);
end;
CREATE TRIGGER GEN2 for FIELD
before insert
as begin
new.id = GEN_ID(g3,1);
end;
CREATE TRIGGER GEN3 for SYSTEM_MSG
before insert
as begin
new.id = GEN_ID(g4,1);
end;
CREATE TRIGGER GEN4 for MANUAL_F
before insert
as begin
new.id = GEN_ID(g5,1);
end;
CREATE TRIGGER GEN5 for QUESTION
before insert
as begin
new.id = GEN_ID(g6,1);
end;
/* trig DEL*/
CREATE TRIGGER DEL_SUB FOR STEP
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
DELETE FROM SUB_STEP
WHERE number_st=OLD.number ;
END;
CREATE TRIGGER DEL_Q FOR STEP
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
DELETE FROM QUESTION
WHERE number_st=OLD.number ;
END;
CREATE TRIGGER DEL_A FOR QUESTION
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
DELETE FROM ANSWER
WHERE id_q=OLD.id ;
END;
CREATE TRIGGER DEL_TASK FOR SUB_STEP
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
DELETE FROM TASK
WHERE id_sub=OLD.id ;
END;
CREATE TRIGGER DEL_FIELD FOR SUB_STEP
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
DELETE FROM FIELD
WHERE id_sub=OLD.id ;
END;
CREATE TRIGGER DEL_SYSMSG FOR TASK
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
DELETE FROM SYSTEM_MSG
WHERE id_task=OLD.id ;
END;
CREATE TRIGGER DEL_MANUAL FOR FIELD
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
DELETE FROM MANUAL_F
WHERE id_fld=OLD.id ;
END;
Приложение Б
(обязательное)
Листинг программного модуля обучающей программы
#include <vcl.h>
#pragma hdrstop
#include <string.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ //инициализация формы
TabbedNotebook1->ActivePage="Общая информация"; //нет теста
CheckBox1->Visible=false;
CheckBox2->Visible=false;
CheckBox3->Visible=false;
Label12->Visible=false;
Label13->Visible=false;
Label14->Visible=false;
Label15->Visible=false;
Label16->Visible=false;
Label17->Visible=false;
GroupBox2->Visible=false;
Button3->Visible=false;
Edit4->Visible=false;
Edit5->Visible=false;
Edit6->Visible=false;
ComboBox1->Items->Clear();
ComboBox2->Items->Clear();
//обновление ComboBox
AnsiString name;
Show_step->Open();
do
{
name=Show_step->FieldByName("NAME")->AsString;
ComboBox1->Items->Add(name);
ComboBox2->Items->Add(name);
Show_step->Next();
} while (! Show_step->Eof);
ComboBox1->Text="---выбрать---";
ComboBox2->Text="---выбрать---";
//нет подэтапов
Label2->Visible=false;
ListBox1->Visible=false;
Label3->Visible=false;
Label4->Visible=false;
Edit1->Visible=false;
RichEdit1->Visible=false;
GroupBox1->Visible=false;
//нет задач
Label5->Visible=false;
ListBox2->Visible=false;
Label6->Visible=false;
Edit2->Visible=false;
RichEdit2->Visible=false;
Button1->Visible=false;
//нет сообщений
Label7->Visible=false;
ListBox3->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
RichEdit3->Visible=false;
Button2->Visible=false;
//нет полей
Label9->Visible=false;
DBGrid1->Visible=false;
Label10->Visible=false;
DBGrid2->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{ //выбор этапа при просмотре инф-ции
Label2->Visible=true;
ListBox1->Visible=true;
//no inf about sub
Label3->Visible=false;
Label4->Visible=false;
Edit1->Visible=false;
RichEdit1->Visible=false;
Show_sub->Active=false;
Find_step->Active=false;
String a = ComboBox1->Items->Strings[ComboBox1->ItemIndex];
Find_step->ParamByName("a")->AsString = a;
Find_step->Active=true;
int number=Find_step->FieldByName("NUMBER")->AsInteger;
Show_sub->ParamByName("number")->AsInteger = number;
ListBox1->Items->Clear();
AnsiString name;
Show_sub->Open();
do
{
name=Show_sub->FieldByName("NAME")->AsString;
ListBox1->Items->Add(name);
Show_sub->Next();
} while (! Show_sub->Eof);
if(name.Length()==0)
{
Label2->Visible=false;
ListBox1->Visible=false;
//no inf about sub
Label3->Visible=false;
Label4->Visible=false;
Edit1->Visible=false;
RichEdit1->Visible=false;
}
Show_for_sub->ParamByName("number")->AsInteger = number;
GroupBox1->Visible=false;
//нет задач
Label5->Visible=false;
ListBox2->Visible=false;
Label6->Visible=false;
Edit2->Visible=false;
RichEdit2->Visible=false;
Button1->Visible=false;
//нет сообщений
Label7->Visible=false;
ListBox3->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
RichEdit3->Visible=false;
Button2->Visible=false;
//нет полей
Label9->Visible=false;
DBGrid1->Visible=false;
Label10->Visible=false;
DBGrid2->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{ //выбор подэтапа
GroupBox1->Visible=true;
Label3->Visible=true;
Label4->Visible=true;
Edit1->Visible=true;
RichEdit1->Visible=true;
Show_for_sub->Active=false;
String a = ListBox1->Items->Strings[ListBox1->ItemIndex];
Show_for_sub->ParamByName("a")->AsString = a;
Show_for_sub->Active=true;
RichEdit1->Text=Show_for_sub->FieldByName("DESCRIPTION")->AsString;
AnsiString fl= Show_for_sub->FieldByName("DESCRIPTION")->AsString;
Edit1->Text=Show_for_sub->FieldByName("PATH")->AsString;
char c = fl[1];
if(c=='0')
{
RichEdit1->Visible=false;
Label3->Visible=false;
}
//задачи
Show_task->Active=false;
int id = Show_for_sub->FieldByName("ID")->AsInteger;
Show_task->ParamByName("id")->AsInteger = id;
Show_for_task->ParamByName("id")->AsInteger = id;
ListBox2->Items->Clear();
AnsiString name;
Show_task->Open();
do
{
name=Show_task->FieldByName("NAME")->AsString;
ListBox2->Items->Add(name);
Show_task->Next();
} while (! Show_task->Eof); if(name.Length()==0)
{
//нет задач
Label5->Visible=false;
ListBox2->Visible=false;
Label6->Visible=false;
Edit2->Visible=false;
RichEdit2->Visible=false;
Button1->Visible=false;
//нет сообщений
Label7->Visible=false;
ListBox3->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
RichEdit3->Visible=false;
Button2->Visible=false;
RadioButton1->Checked=false;
//нет полей
Label9->Visible=false;
DBGrid1->Visible=false;
Label10->Visible=false;
DBGrid2->Visible=false;
RadioButton2->Checked=false;
}
//поля
Show_f->Active=false;
Show_f->ParamByName("id")->AsInteger = id;
Show_f->Active=true;
Find_f->ParamByName("id")->AsInteger = id;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox2Click(TObject *Sender)
{ //выбор задачи
Label6->Visible=true;
RichEdit2->Visible=true;
Button1->Visible=true;
Show_for_task->Active=false;
String a = ListBox2->Items->Strings[ListBox2->ItemIndex];
Show_for_task->ParamByName("a")->AsString = a;
Show_for_task->Active=true;
RichEdit2->Text=Show_for_task->FieldByName("DESCRIPTION")->AsString;
Edit2->Text=Show_for_task->FieldByName("INSTRUCTION")->AsString;
//сообщения
Show_sys->Active=false;
int id = Show_for_task->FieldByName("ID")->AsInteger;
Show_sys->ParamByName("id")->AsInteger = id;
Show_for_sys->ParamByName("id")->AsInteger = id;
ListBox3->Items->Clear();
String name;
int proverka=0;
Show_sys->Open();
do
{
name=Show_sys->FieldByName("NAME")->AsString;
if(name.Length()==0) proverka=0;
else proverka=1;
ListBox3->Items->Add(name);
Show_sys->Next();
} while (! Show_sys->Eof);
if (proverka==1)
{
Label7->Visible=true;
ListBox3->Visible=true;
}
else
{
Label7->Visible=false;
ListBox3->Visible=false;
Label8->Visible=false;
RichEdit3->Visible=false;
Button2->Visible=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{ //выбор просмотра задач
//нет полей
Label9->Visible=false;
DBGrid1->Visible=false;
Label10->Visible=false;
DBGrid2->Visible=false;
AnsiString name;
Show_task->Open();
do
{
name=Show_task->FieldByName("NAME")->AsString;
Show_task->Next();
} while (! Show_task->Eof); if(name.Length()==0)
{ ShowMessage("Задач у данного подпункта нет");
//нет задач
Label5->Visible=false;
ListBox2->Visible=false;
Label6->Visible=false;
Edit2->Visible=false;
RichEdit2->Visible=false;
Button1->Visible=false;
//нет сообщений
Label7->Visible=false;
ListBox3->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
RichEdit3->Visible=false;
Button2->Visible=false;
//нет полей
Label9->Visible=false;
DBGrid1->Visible=false;
Label10->Visible=false;
DBGrid2->Visible=false;
RadioButton1->Checked=false; }
else
{
Label5->Visible=true;
ListBox2->Visible=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ //загрузка инструкции для задачи
AnsiString instr;
instr = GetCurrentDir();
instr+= "\\instructions\\";
instr+=Edit2->Text;
if((UINT)ShellExecute(0,"open",instr.c_str(),NULL,NULL,SW_RESTORE)<=32)
MessageBox(NULL,"Инструкция не найдена", "Ошибка", MB_OK|MB_ICONERROR);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox3Click(TObject *Sender)
{ //выбор системного сообщения для просмотра инф-ции
Label8->Visible=true;
RichEdit3->Visible=true;
Button2->Visible=true;
Show_for_sys->Active=false;
String a = ListBox3->Items->Strings[ListBox3->ItemIndex];
Show_for_sys->ParamByName("a")->AsString = a;
Show_for_sys->Active=true;
RichEdit3->Text=Show_for_sys->FieldByName("DESCRIPTION")->AsString;
AnsiString fl=Show_for_sys->FieldByName("DESCRIPTION")->AsString;
Edit3->Text=Show_for_sys->FieldByName("INSTRUCTION")->AsString;
char c = fl[1];
if(c=='0')
{
RichEdit3->Visible=false;
Label8->Visible=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ //загрузка инструкции для сообщения
AnsiString instr;
instr = GetCurrentDir();
instr+= "\\instructions\\";
instr+=Edit3->Text;
if((UINT)ShellExecute(0,"open",instr.c_str(),NULL,NULL,SW_RESTORE)<=32)
MessageBox(NULL,"Инструкция не найдена", "Ошибка", MB_OK|MB_ICONERROR);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{ //радиокнопка на выбор просмотря поля
//нет задач
Label5->Visible=false;
ListBox2->Visible=false;
Label6->Visible=false;
Edit2->Visible=false;
RichEdit2->Visible=false;
Button1->Visible=false;
//нет сообщений
Label7->Visible=false;
ListBox3->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
RichEdit3->Visible=false;
Button2->Visible=false;
AnsiString name;
Show_f->Open();
do
{ name=Show_f->FieldByName("NAME")->AsString; Show_f->Next(); } while (! Show_f->Eof); if(name.Length()==0)
{ ShowMessage("Необходимых для заполнения полей у данного подпункта нет");
//нет задач
Label5->Visible=false;
ListBox2->Visible=false;
Label6->Visible=false;
Edit2->Visible=false;
RichEdit2->Visible=false;
Button1->Visible=false;
//нет сообщений
Label7->Visible=false;
ListBox3->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
RichEdit3->Visible=false;
Button2->Visible=false;
//нет полей
Label9->Visible=false;
DBGrid1->Visible=false;
Label10->Visible=false;
DBGrid2->Visible=false;
RadioButton2->Checked=false; }
else
{
Label9->Visible=true;
DBGrid1->Visible=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{ //нажатие на таблицу полей
Show_m->Active=false;
Find_f->Active=false;
String a="";
int id;
try {
a = DBGrid1->SelectedField->AsString;
}
catch(...) {ShowMessage("Выберите название поля!");}
try {
Find_f->ParamByName("a")->AsString = a;
Find_f->Active=true;
id=Find_f->FieldByName("ID")->AsInteger;
Show_m->ParamByName("id")->AsInteger = id;
Show_m->Active=true;
int proverka=0;
AnsiString symb;
Show_m->Open();
do
{symb=Show_m->FieldByName("SYMBOL")->AsString;
if(symb.Length()==0) proverka=0;
else proverka=1;
Show_m->Next();
}
while (! Show_m->Eof);
if (proverka==1)
{
Label10->Visible=true;
DBGrid2->Visible=true;
}
else
{
Label10->Visible=false;
DBGrid2->Visible=false;
}
}
catch(...) {
ShowMessage("Для просмотра справочника нажимайте на НАЗВАНИЕ поля!");
Label10->Visible=false;
DBGrid2->Visible=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{ //изменение этапа при проверке знаний
CheckBox1->Visible=false;
CheckBox2->Visible=false;
CheckBox3->Visible=false;
Label12->Visible=true;
Label13->Visible=true;
Label14->Visible=true;
Label15->Visible=true;
Label16->Visible=true;
Label17->Visible=true;
GroupBox2->Visible=true;
Button3->Visible=true;
Edit4->Visible=true;
Edit5->Visible=true;
Edit6->Visible=true;
Edit5->Text=IntToStr(0);
Edit6->Text=IntToStr(0);
Show_q->Active=false;
Find_step->Active=false;
String a = ComboBox2->Items->Strings[ComboBox2->ItemIndex];
Find_step->ParamByName("a")->AsString = a;
Find_step->Active=true;
int number=Find_step->FieldByName("NUMBER")->AsInteger;
Show_q->ParamByName("number")->AsInteger = number;
AnsiString name;
//количество вопросов
int kol=0;
Show_q->Open();
do
{
name=Show_q->FieldByName("QUESTION")->AsString;
if(name.Length()!=0)kol++;
Show_q->Next();
} while (! Show_q->Eof);
Edit4->Text=IntToStr(kol);
if(kol==0)
{
Button3->Visible=false;
ShowMessage("Для данного этапа вопросов нет");
}
//вывод 1 вопроса
int id;
Show_q->Open();
Show_q->First();
name=Show_q->FieldByName("QUESTION")->AsString;
Label12->Caption= name ;
id=Show_q->FieldByName("ID")->AsInteger;
Show_a->ParamByName("id")->AsInteger = id;
//количество ответов
int kol_a=0;
Show_a->Open();
do
{
name=Show_a->FieldByName("ANSWER")->AsString;
if(name.Length()!=0)kol_a++;
Show_a->Next();
} while (! Show_a->Eof);
if(kol_a>0)
{ //вывод в комбобоксы
int i=0;
Show_a->Open();
Show_a->First();
do
{
name=Show_a->FieldByName("ANSWER")->AsString;
((TCheckBox*)GroupBox2->Controls[i])->Caption=name;
i++;
Show_a->Next();
} while (! Show_a->Eof);
for(int j=0;j<kol_a;j++)
((TCheckBox*)GroupBox2->Controls[j])->Visible=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{ проверка ответов и загрузка следующего вопроса
AnsiString name;
int i=0;
int tr=0;
int answ=0,res=0,kol_a=0;
Show_a->First();
do
{name=Show_a->FieldByName("ANSWER")->AsString;
if(name.Length()!=0)kol_a++;
tr=Show_a->FieldByName("TRUTH")->AsInteger;
if(((TCheckBox*)GroupBox2->Controls[i])->Checked==true) answ=1;
else answ=0;
if(answ==tr)res++;
i++;
Show_a->Next();
} while (! Show_a->Eof);
if (res==kol_a)
{
int num=StrToInt(Edit6->Text);
num++;
Edit6->Text=IntToStr(num);
}
//на ск ответили
int num=StrToInt(Edit5->Text);
num++;
Edit5->Text=IntToStr(num);
CheckBox1->Visible=false;
CheckBox2->Visible=false;
CheckBox3->Visible=false;
CheckBox1->Checked=false;
CheckBox2->Checked=false;
CheckBox3->Checked=false;
//переход на следующий
Show_q->Next();
name=Show_q->FieldByName("QUESTION")->AsString;
Label12->Caption= name ;
int id=Show_q->FieldByName("ID")->AsInteger;
Show_a->ParamByName("id")->AsInteger = id;
//количество ответов
kol_a=0;
Show_a->Open();
do
{
name=Show_a->FieldByName("ANSWER")->AsString;
if(name.Length()!=0)kol_a++;
Show_a->Next();
} while (! Show_a->Eof);
if(kol_a>0)
{ //вывод в комбобоксы
int i=0;
Show_a->Open();
Show_a->First();
do
{
name=Show_a->FieldByName("ANSWER")->AsString;
((TCheckBox*)GroupBox2->Controls[i])->Caption=name;
i++;
Show_a->Next();
} while (! Show_a->Eof);
for(int j=0;j<kol_a+1;j++)
((TCheckBox*)GroupBox2->Controls[j])->Visible=true;
}
if(StrToInt(Edit4->Text)==StrToInt(Edit5->Text))
{
ShowMessage("Вы завершили тест!");
Button3->Visible=false;
CheckBox1->Visible=false;
CheckBox2->Visible=false;
CheckBox3->Visible=false;
CheckBox1->Checked=false;
CheckBox2->Checked=false;
CheckBox3->Checked=false;
Label12->Caption="Выберите следующий этап";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{ //выход
Close(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
TabbedNotebook1->ActivePage="Общая информация"; }
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
TabbedNotebook1->ActivePage="Просмотр"; }
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{
TabbedNotebook1->ActivePage="проверка знаний"; }
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{ //загрузка инструкции
AnsiString spr_vis;
spr_vis = GetCurrentDir();
spr_vis+= "\\instructions\\Spravka.doc";
if((UINT)ShellExecute(0,"open",spr_vis.c_str(),NULL,NULL,SW_RESTORE)<=32)
MessageBox(NULL,"Инструкция не найдена", "Ошибка", MB_OK|MB_ICONERROR);
}
Приложение В
(обязательное)
Листинг программного модуля по поддержке базы данных //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ ShowMessage("Для работы выберите соответствующий пункт меню");
//не видно что связано с этапами
Label1->Visible=false;
DBGrid1->Visible=false;
GroupBox1->Visible=false;
//не видно то что связано с подэтапами
Label4->Visible=false;
GroupBox2->Visible=false;
DBGrid2->Visible=false;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ //Добавление этапа Show_step->Active=false;
int number = StrToInt(Edit2->Text);
AnsiString name = Edit1->Text;
Add_step->Active=false;
if(name.Length()!=0 && name.Length()<50)
{ Add_step->ParamByName("number")->AsInteger = number;
Add_step->ParamByName("name")->AsString = name;
try {
Add_step->Active=true;
}
catch(...) {MessageBox(NULL,"Номера и названия этапов не должны повторяться!", "Ошибка",MB_OK|MB_ICONERROR);}
}
else ShowMessage("Название не должно превышать допустимой длины");
Show_step->Active=true;
Edit1->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{ //пункт меню "добавить этап"
Show_step->Active=true;
//узнаём сколько этапов
int i=0;
AnsiString a;
Show_step->Open();
do
{a=Show_step->FieldByName("NAME")->AsString;
if(a.Length()!=0)i++;
Show_step->Next();
}
while (! Show_step->Eof);
UpDown1->Position=i+1;
Label1->Visible=true;
DBGrid1->Visible=true;
GroupBox1->Visible=true;
//не видно то что связано с подэтапами
Label4->Visible=false;
GroupBox2->Visible=false;
DBGrid2->Visible=false;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false; }
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{ //пункт меню "добавить подэтап"
Show_step->Active=true;
Label4->Visible=true;
GroupBox2->Visible=true;
DBGrid2->Visible=true;
GroupBox1->Visible=false;
//видны этапы
Label1->Visible=true;
DBGrid1->Visible=true;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//нажатие на этапе
Show_sub->Active=false;
Show_q->Active=false;
Find_step->Active=false;
AnsiString a="";
try {
a = DBGrid1->SelectedField->AsString;
}
catch(...){MessageBox(NULL,"Щёлкните по названию этапа!", "Ошибка",MB_OK|MB_ICONERROR);}
//находим id этапа
Find_step->ParamByName("a")->AsString = a;
Find_step->Active=true;
//для подпунктов
int number=Find_step->FieldByName("NUMBER")->AsInteger;
Show_sub->ParamByName("number")->AsInteger = number;
Show_sub->Active=true;
//для вопросов
Show_q->ParamByName("number")->AsInteger = number;
Show_q->Active=true;
//для удаления
Del_sub->ParamByName("number")->AsInteger = number;
Del_q->ParamByName("number")->AsInteger = number;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid2MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//нажатие на подэтапе
Show_task->Active=false;
Show_field->Active=false;
Find_sub->Active=false;
String a = DBGrid2->SelectedField->AsString;
Find_sub->ParamByName("a")->AsString = a;
Find_sub->Active=true;
int id=Find_sub->FieldByName("ID")->AsInteger;
Show_task->ParamByName("id")->AsInteger = id;
Show_task->Active=true;
Show_field->ParamByName("id")->AsInteger = id;
Show_field->Active=true;
Del_task->ParamByName("id")->AsInteger = id;
Del_field->ParamByName("id")->AsInteger = id;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{ //загрузка инструкции для задачи TCHAR buffer[MAX_PATH];
AnsiString filelNam;
GetCurrentDirectory(sizeof(buffer),buffer);
StrCat(StrCat(buffer,"\\"),"instructions");
OpenDialog1->InitialDir=buffer;
if(OpenDialog1->Execute())
filelNam = OpenDialog1->FileName;
filelNam=ExtractFileName(filelNam);
Edit6->Text= filelNam;
ShowMessage("Не забудьте добавить инструкцию на компьютер пользователя!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{ //пункт меню "добавить задачу"
//видны этапы и подэтапы
Label1->Visible=true;
DBGrid1->Visible=true;
Label4->Visible=true;
DBGrid2->Visible=true;
//видны задачи
Label8->Visible=true;
DBGrid3->Visible=true;
GroupBox3->Visible=true;
GroupBox1->Visible=false;
GroupBox2->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid3MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{ //нажатие на задаче
Show_sys->Active=false;
Find_task->Active=false;
String a = DBGrid3->SelectedField->AsString;
Find_task->ParamByName("a")->AsString = a;
Find_task->Active=true;
// вывод системных сообщений int id=Find_task->FieldByName("ID")->AsInteger;
Show_sys->ParamByName("id")->AsInteger = id;
Show_sys->Active=true;
Del_sys->ParamByName("id")->AsInteger = id;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N8Click(TObject *Sender)
{ //пункт меню "добавить системное сообщение"
//видны этапы и подэтапы
Label1->Visible=true;
DBGrid1->Visible=true;
Label4->Visible=true;
DBGrid2->Visible=true;
//видны задачи
Label8->Visible=true;
DBGrid3->Visible=true;
//видны сообщения
Label15->Visible=true;
DBGrid4->Visible=true;
GroupBox4->Visible=true;
GroupBox1->Visible=false;
GroupBox2->Visible=false;
GroupBox3->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{ // добавление системного сообщения
Show_sys->Active=false;
Find_task->Active=false;
String a=DBGrid3->SelectedField->AsString;
Find_task->ParamByName("a")->AsString = a;
Find_task->Active=true;
int id=Find_task->FieldByName("ID")->AsInteger;
AnsiString name = Edit7->Text;
AnsiString description = RichEdit3->Text;
AnsiString instruction = Edit8->Text;
Add_sys->Active=false;
if((name.Length()!=0 && name.Length()<100)&&(description.Length()<1000)&&(instruction.Length()!=0 && instruction.Length()<100))
{ Add_sys->ParamByName("id")->AsInteger = id;
Add_sys->ParamByName("name")->AsString = name;
if(description=="")
Add_sys->ParamByName("description")->AsString = NULL;
else Add_sys->ParamByName("description")->AsString = description;
Add_sys->ParamByName("instruction")->AsString = instruction;
try {
Add_sys->Active=true;
}
catch(...){MessageBox(NULL, "Выберите задачу, к которой будет относиться данное сообшение! У задачи не должно быть несколько системных сообщений с одинаковым именем!", "Ошибка",MB_OK|MB_ICONERROR);}
}
else ShowMessage("Поля не должны превышать допустимой длины");
Show_sys->Active=true;
Edit7->Text="";
RichEdit3->Text="";
Edit8->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{ //добавление задач
Show_task->Active=false;
Find_sub->Active=false;
String a=DBGrid2->SelectedField->AsString;
Find_sub->ParamByName("a")->AsString = a;
Find_sub->Active=true;
int id=Find_sub->FieldByName("ID")->AsInteger;
AnsiString name = Edit5->Text;
AnsiString description = RichEdit2->Text;
AnsiString instruction = Edit6->Text;
Add_task->Active=false;
if((name.Length()!=0 && name.Length()<50)&&(description.Length()!=0 && description.Length()<1000)&&(instruction.Length()!=0 && instruction.Length()<100))
{ Add_task->ParamByName("id")->AsInteger = id;
Add_task->ParamByName("name")->AsString = name;
Add_task->ParamByName("description")->AsString = description;
Add_task->ParamByName("instruction")->AsString = instruction;
try {
Add_task->Active=true;
}
catch(...){ MessageBox(NULL, "Выберите подпункт, к которому вы хотите добавить задачу!Названия задач у одного подпункта не должны совпадать!", "Ошибка",MB_OK|MB_ICONERROR);}
}
else ShowMessage("Поля не должны превышать допустимой длины");
Show_task->Active=true;
Edit5->Text="";
RichEdit2->Text="";
Edit6->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{ //загрузка инструкции для сообщений
TCHAR buffer[MAX_PATH];
AnsiString filelNam;
GetCurrentDirectory(sizeof(buffer),buffer);
StrCat(StrCat(buffer,"\\"),"instructions");
OpenDialog1->InitialDir=buffer;
if(OpenDialog1->Execute())
filelNam = OpenDialog1->FileName;
filelNam=ExtractFileName(filelNam);
Edit8->Text= filelNam;
ShowMessage("Не забудьте добавить инструкцию на компьютер пользователя!"); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ //добавление подэтапа Show_sub->Active=false;
Find_step->Active=false;
AnsiString a=DBGrid1->SelectedField->AsString;
Find_step->ParamByName("a")->AsString = a;
Find_step->Active=true;
int number=Find_step->FieldByName("NUMBER")->AsInteger;
AnsiString name = Edit3->Text;
AnsiString description = RichEdit1->Text;
AnsiString path = Edit4->Text;
Add_sub->Active=false;
if((name.Length()!=0 && name.Length()<70)&&(description.Length()<1000)&&(path.Length()!=0 && path.Length()<100))
{ Add_sub->ParamByName("number")->AsInteger = number;
Add_sub->ParamByName("name")->AsString = name;
if(description=="")
Add_sub->ParamByName("description")->AsString = NULL;
else Add_sub->ParamByName("description")->AsString = description; Add_sub->ParamByName("path")->AsString = path;
try {
Add_sub->Active=true;
}
catch(...) {MessageBox(NULL, "Выберите этап, к которому добавляется подэтап!Проверьте, не повторяются ли названия подэтапов одного этапа!", "Ошибка",MB_OK|MB_ICONERROR); }
}
else ShowMessage("Поля не должны превышать допустимой длины");
Show_sub->Active=true;
Edit3->Text="";
RichEdit1->Text="";
Edit4->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{ //добавление полей
Show_field->Active=false;
Find_sub->Active=false;
String a=DBGrid2->SelectedField->AsString;
Find_sub->ParamByName("a")->AsString = a;
Find_sub->Active=true;
int id=Find_sub->FieldByName("ID")->AsInteger;
AnsiString name = Edit9->Text;
AnsiString val = Edit10->Text;
AnsiString comment = Edit11->Text;
Add_field->Active=false;
if((name.Length()!=0 && name.Length()<30)&&(val.Length()!=0 && val.Length()<40)&&(comment.Length()<60))
{ Add_field->ParamByName("id")->AsInteger = id;
Add_field->ParamByName("name")->AsString = name;
Add_field->ParamByName("val")->AsString = val;
Add_field->ParamByName("comment")->AsString = comment;
try {
Add_field->Active=true;
}
catch(...) {MessageBox(NULL, "Проверьте, выбран ли подэтап!Названия полей у одного подэтапа не должны совпадать!", "Ошибка",MB_OK|MB_ICONERROR); }
}
else ShowMessage("Поля не должны превышать допустимой длины");
Show_field->Active=true;
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N9Click(TObject *Sender)
{ //пункт "добавить поле"
Label16->Visible=true;
DBGrid5->Visible=true;
GroupBox5->Visible=true;
//видны этапы и подэтапы
Label1->Visible=true;
DBGrid1->Visible=true;
Label14->Visible=true;
DBGrid2->Visible=true;
GroupBox1->Visible=false;
GroupBox2->Visible=false;
GroupBox3->Visible=false;
GroupBox4->Visible=false;
GroupBox6->Visible=false;
//не видны задачи и сообщения
Label8->Visible=false;
Label15->Visible=false;
DBGrid3->Visible=false;
DBGrid4->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//не видны поля
Label17->Visible=false;
DBGrid6->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid5MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{ //нажатие на поле
Show_man->Active=false;
Find_field->Active=false;
String a = DBGrid5->SelectedField->AsString;
Find_field->ParamByName("a")->AsString = a;
Find_field->Active=true;
//показать справочник
int id=Find_field->FieldByName("ID")->AsInteger;
Show_man->ParamByName("id")->AsInteger = id;
Show_man->Active=true;
Del_man->ParamByName("id")->AsInteger = id;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{ //добавление в справочник Show_man->Active=false;
Find_field->Active=false;
String a=DBGrid5->SelectedField->AsString;
Find_field->ParamByName("a")->AsString = a;
Find_field->Active=true;
int id=Find_field->FieldByName("ID")->AsInteger;
AnsiString symbol = Edit12->Text;
AnsiString expl = Edit13->Text;
Add_man->Active=false;
if((symbol.Length()!=0 && symbol.Length()<10)&&(expl.Length()!=0 && expl.Length()<50))
{ Add_man->ParamByName("id")->AsInteger = id;
Add_man->ParamByName("symbol")->AsString = symbol;
Add_man->ParamByName("expl")->AsString = expl;
try {
Add_man->Active=true;
}
catch(...) {MessageBox(NULL,"Выберите поле, к которому добавляете значение! У одного поля не должно быть несколько одинаковых обозначений!", "Ошибка",MB_OK|MB_ICONERROR);}
}
else ShowMessage("Поля не должны превышать допустимой длины");
Show_man->Active=true;
Edit12->Text="";
Edit13->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N10Click(TObject *Sender)
{ //пункт меню "добавление значений полей"
Label17->Visible=true;
DBGrid6->Visible=true;
GroupBox6->Visible=true;
//видны этапы и подэтапы и поля
Label1->Visible=true;
DBGrid1->Visible=true;
Label4->Visible=true;
DBGrid2->Visible=true;
Label16->Visible=true;
DBGrid5->Visible=true;
GroupBox1->Visible=false;
GroupBox2->Visible=false;
GroupBox3->Visible=false;
GroupBox4->Visible=false;
GroupBox5->Visible=false;
//не видны задачи и сообщения
Label8->Visible=false;
Label15->Visible=false;
DBGrid3->Visible=false;
DBGrid4->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button9Click(TObject *Sender)
{ //добавление вопроса Show_q->Active=false;
Find_step->Active=false;
AnsiString a=DBGrid1->SelectedField->AsString;
Find_step->ParamByName("a")->AsString = a;
Find_step->Active=true;
int number=Find_step->FieldByName("NUMBER")->AsInteger;
AnsiString q = RichEdit4->Text;
Add_q->Active=false;
if(q.Length()!=0 && q.Length()<100)
{ Add_q->ParamByName("number")->AsInteger = number;
Add_q->ParamByName("q")->AsString = q;
try {
Add_q->Active=true;
}
catch(...){ MessageBox(NULL,"Выберите этап! Проверьте, повторяются ли вопросы ,принадлежащие одному этапу!", "Ошибка",MB_OK|MB_ICONERROR);}
}
else ShowMessage("Поля не должны превышать допустимой длины");
Show_q->Active=true;
RichEdit4->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N11Click(TObject *Sender)
{ //пункт по добавлению вопроса
Show_step->Active=true;
Label23->Visible=true;
DBGrid7->Visible=true;
GroupBox7->Visible=true;
//видны этапы
Label1->Visible=true;
DBGrid1->Visible=true;
//не видно остальное
GroupBox1->Visible=false;
GroupBox6->Visible=false;
GroupBox8->Visible=false;
//не видно то что связано с подэтапами
Label4->Visible=false;
GroupBox2->Visible=false;
DBGrid2->Visible=false;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button10Click(TObject *Sender)
{ //добавление ответа
Show_answ->Active=false;
Find_q->Active=false;
AnsiString a=DBGrid7->SelectedField->AsString;
Find_q->ParamByName("a")->AsString = a;
Find_q->Active=true;
int id=Find_q->FieldByName("ID")->AsInteger;
int num = StrToInt(Edit15->Text);
AnsiString answ = Edit14->Text;
int tr=0;
if(CheckBox1->Checked==true)
tr=1;
else tr=0;
Add_answ->Active=false;
if((answ.Length()!=0 && answ.Length()<100)&&(num>=1)&&(num<=3))
{ Add_answ->ParamByName("id")->AsInteger = id;
Add_answ->ParamByName("num")->AsInteger = num;
Add_answ->ParamByName("answ")->AsString = answ;
Add_answ->ParamByName("tr")->AsInteger = tr;
try {
Add_answ->Active=true;
}
catch(...) {MessageBox(NULL, "Выберите вопрос, к которому добавляете ответ! Проверьте, не повторяются ли ответы у одного вопроса! Проверьте, есть ли ответ с таким номером у выбранного вопроса!", "Ошибка",MB_OK|MB_ICONERROR); }
}
else ShowMessage("Поля не должны превышать допустимой длины");
Show_answ->Active=true;
Edit14->Text="";
CheckBox1->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid7MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{ //нажатие на вопросе
Show_answ->Active=false;
Find_q->Active=false;
String a = DBGrid7->SelectedField->AsString;
Find_q->ParamByName("a")->AsString = a;
Find_q->Active=true;
int id=Find_q->FieldByName("ID")->AsInteger;
Show_answ->ParamByName("id")->AsInteger = id;
Show_answ->Active=true;
Del_answ->ParamByName("id")->AsInteger = id;
//сколько ответов
int i=0;
AnsiString an;
Show_answ->Open();
do
{an=Show_answ->FieldByName("ANSWER")->AsString;
if(an.Length()!=0)i++;
Show_answ->Next();
}
while (! Show_answ->Eof);
UpDown2->Position=i+1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N12Click(TObject *Sender)
{ //пункт добавления ответов
Label25->Visible=true;
DBGrid8->Visible=true;
GroupBox8->Visible=true;
//видны вопросы
Label23->Visible=true;
DBGrid7->Visible=true;
//видны этапы
Label1->Visible=true;
DBGrid1->Visible=true;
//не видно остальное
GroupBox1->Visible=false;
GroupBox7->Visible=false;
//не видно то что связано с подэтапами
Label4->Visible=false;
GroupBox2->Visible=false;
DBGrid2->Visible=false;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button11Click(TObject *Sender)
{ // удаление этапа Del_step->Active=false;
AnsiString a = DBGrid1->SelectedField->AsString;
Show_step->Active=false;
Del_step->ParamByName("a")->AsString = a;
try {
Del_step->Active=true;
}
catch(...){ MessageBox(NULL, "Выберите этап на удаление!", "Ошибка",MB_OK|MB_ICONERROR); }
Show_step->Active=true;
//узнаём сколько этапов
int i=1;
Show_step->Open();
do
{i++;
Show_step->Next();
}
while (! Show_step->Eof);
UpDown1->Position=i;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{ //пункт удаления этапа
Label1->Visible=true;
DBGrid1->Visible=true;
Button11->Visible=true;
GroupBox1->Visible=false;
//не видно то что связано с подэтапами
GroupBox2->Visible=false;
//не видно задач
GroupBox3->Visible=false;
//не видны сист сообщ
GroupBox4->Visible=false;
//не видны поля
GroupBox5->Visible=false;
//не видны значения полей
GroupBox6->Visible=false;
//не видны вопросы
GroupBox7->Visible=false;
//не видно что связано с ответами
GroupBox8->Visible=false;
//удаление
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button12Click(TObject *Sender)
{ //удаление подэтапа
AnsiString a ;
try {a= DBGrid2->SelectedField->AsString;}
catch(...){MessageBox(NULL,"Выберите подэтап на удаление! ", "Ошибка",MB_OK|MB_ICONERROR);}
Show_sub->Active=false;
Del_sub->ParamByName("a")->AsString = a;
try {
Del_sub->Active=true;
}
catch(...) {MessageBox(NULL, "Выберите этап, к которому относится удаляемый подэтап!Выберите подэтап на удаление! ", "Ошибка",MB_OK|MB_ICONERROR);}
Show_sub->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N15Click(TObject *Sender)
{ //пункт удаления подэтапа
Label1->Visible=true;
DBGrid1->Visible=true;
Button12->Visible=true;
GroupBox1->Visible=false;
//подэтапы
Label4->Visible=true;
GroupBox2->Visible=false;
DBGrid2->Visible=true;
//не видно задач
GroupBox3->Visible=false;
//не видны сист сообщ
GroupBox4->Visible=false;
//не видны поля
GroupBox5->Visible=false;
//не видны значения полей
GroupBox6->Visible=false;
//не видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button13Click(TObject *Sender)
{ //удаление вопроса
AnsiString a;
try{ a = DBGrid7->SelectedField->AsString;}
catch(...){MessageBox(NULL, "Выберите вопрос на удаление!", "Ошибка",MB_OK|MB_ICONERROR); }
Show_q->Active=false;
Del_q->ParamByName("a")->AsString = a;
try {
Del_q->Active=true;
}
catch(...){ MessageBox(NULL, "Выберите этап, к которому принадлежит удаляемый вопрос! Выберите вопрос на удаление!", "Ошибка",MB_OK|MB_ICONERROR); }
Show_q->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N20Click(TObject *Sender)
{ //пункт удаления вопроса
Label1->Visible=true;
DBGrid1->Visible=true;
GroupBox1->Visible=false;
Button13->Visible=true;
//подэтапы Label4->Visible=false;
GroupBox2->Visible=false;
DBGrid2->Visible=false;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//видны вопросы
Label23->Visible=true;
DBGrid7->Visible=true;
GroupBox7->Visible=false;
//не видно что связано с ответами
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button14Click(TObject *Sender)
{ //удаление ответа AnsiString a;
try {a= DBGrid8->SelectedField->AsString;}
catch(...){MessageBox(NULL, "Выберите ответ для удаления! ", "Ошибка",MB_OK|MB_ICONERROR);}
Show_answ->Active=false;
Del_answ->ParamByName("a")->AsString = a;
try {
Del_answ->Active=true;
}
catch(...) {MessageBox(NULL, "Выберите вопрос, к которому относится удаляемый ответ! ", "Ошибка",MB_OK|MB_ICONERROR); }
Show_answ->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N21Click(TObject *Sender)
{ //пункт удаления ответа
Button14->Visible=true;
Label1->Visible=true;
DBGrid1->Visible=true;
GroupBox1->Visible=false;
//связано с подэтапами
Label4->Visible=false;
GroupBox2->Visible=false;
DBGrid2->Visible=false;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//видны вопросы
Label23->Visible=true;
DBGrid7->Visible=true;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=true;
DBGrid8->Visible=true;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button15->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button15Click(TObject *Sender)
{ //удаление задачи AnsiString a ;
try {a= DBGrid3->SelectedField->AsString;}
catch(...){MessageBox(NULL, "Выберите задачу для удаления! ", "Ошибка",MB_OK|MB_ICONERROR); }
Show_task->Active=false;
Del_task->ParamByName("a")->AsString = a;
try {
Del_task->Active=true;
}
catch(...){ MessageBox(NULL, "Выберите подэтап, к которому принадлежит удаляемая задача!", "Ошибка",MB_OK|MB_ICONERROR);}
Show_task->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N16Click(TObject *Sender)
{ //пункт удаления задачи
Button15->Visible=true;
Label1->Visible=true;
DBGrid1->Visible=true;
GroupBox1->Visible=false;
//подэтапы Label4->Visible=true;
GroupBox2->Visible=false;
DBGrid2->Visible=true;
//видно задачи Label8->Visible=true;
DBGrid3->Visible=true;
GroupBox3->Visible=false;
//не видны сист сообщ
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button16->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button16Click(TObject *Sender)
{ //удаление полей AnsiString a;
try {a = DBGrid5->SelectedField->AsString;}
catch(...){MessageBox(NULL, "Выберите поля для удаления! ", "Ошибка",MB_OK|MB_ICONERROR);}
Show_field->Active=false;
Del_field->ParamByName("a")->AsString = a;
try {
Del_field->Active=true;
}
catch(...) {MessageBox(NULL, "Выберите подэтап, к которому принадлежит удаляемое поле! ", "Ошибка",MB_OK|MB_ICONERROR);}
Show_field->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N18Click(TObject *Sender)
{ //пункт удаления поля
Button16->Visible=true;
Label1->Visible=true;
DBGrid1->Visible=true;
GroupBox1->Visible=false;
//связано с подэтапами
Label4->Visible=true;
GroupBox2->Visible=false;
DBGrid2->Visible=true;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//видны поля
Label16->Visible=true;
DBGrid5->Visible=true;
GroupBox5->Visible=false;
//не видны значения полей
GroupBox6->Visible=false;
//видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button17->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button17Click(TObject *Sender)
{ //удаление сообщения
AnsiString a;
try {a = DBGrid4->SelectedField->AsString;}
catch(...){MessageBox(NULL, "Выберите сообщение для удаления! ", "Ошибка",MB_OK|MB_ICONERROR);}
Show_sys->Active=false;
Del_sys->ParamByName("a")->AsString = a;
try {
Del_sys->Active=true;
}
catch(...) {MessageBox(NULL, "Выберите задачу, к которой принадлежит удаляемое сообщение!", "Ошибка",MB_OK|MB_ICONERROR);}
Show_sys->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N17Click(TObject *Sender)
{ //пункт удаления сообщения
Button17->Visible=true;
Label1->Visible=true;
DBGrid1->Visible=true;
GroupBox1->Visible=false;
//связано с подэтапами
Label4->Visible=true;
GroupBox2->Visible=false;
DBGrid2->Visible=true;
//видно задач
Label8->Visible=true;
DBGrid3->Visible=true;
GroupBox3->Visible=false;
//видны сист сообщ
Label15->Visible=true;
DBGrid4->Visible=true;
GroupBox4->Visible=false;
//не видны поля
Label16->Visible=false;
DBGrid5->Visible=false;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=false;
DBGrid6->Visible=false;
GroupBox6->Visible=false;
//видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button16->Visible=false;
Button15->Visible=false;
Button18->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button18Click(TObject *Sender)
{ //удалить справочник AnsiString a;
try {a = DBGrid6->SelectedField->AsString;}
catch(...){MessageBox(NULL, "Выберите значение для удаления! ", "Ошибка",MB_OK|MB_ICONERROR);}
Show_man->Active=false;
Del_man->ParamByName("a")->AsString = a;
try {
Del_man->Active=true;
}
catch(...) {MessageBox(NULL, "Выберите поле, к которому принадлежит удаляемое значение!", "Ошибка",MB_OK|MB_ICONERROR);}
Show_man->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N19Click(TObject *Sender)
{ //пункт удаления справочника
Button18->Visible=true;
Label1->Visible=true;
DBGrid1->Visible=true;
GroupBox1->Visible=false;
//связано с подэтапами
Label4->Visible=true;
GroupBox2->Visible=false;
DBGrid2->Visible=true;
//не видно задач
Label8->Visible=false;
DBGrid3->Visible=false;
GroupBox3->Visible=false;
//не видны сист сообщ
Label15->Visible=false;
DBGrid4->Visible=false;
GroupBox4->Visible=false;
//видны поля
Label16->Visible=true;
DBGrid5->Visible=true;
GroupBox5->Visible=false;
//не видны значения полей
Label17->Visible=true;
DBGrid6->Visible=true;
GroupBox6->Visible=false;
//видны вопросы
Label23->Visible=false;
DBGrid7->Visible=false;
GroupBox7->Visible=false;
//не видно что связано с ответами
Label25->Visible=false;
DBGrid8->Visible=false;
GroupBox8->Visible=false;
//удаление
Button11->Visible=false;
Button12->Visible=false;
Button13->Visible=false;
Button14->Visible=false;
Button15->Visible=false;
Button17->Visible=false;
Button16->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N14Click(TObject *Sender)
{ //закрытие
Close(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::N23Click(TObject *Sender)
{ //открытие полных лекций
AnsiString lect;
lect = GetCurrentDir();
lect+= "\\instructions\\Лекции.doc";
if((UINT)ShellExecute(0,"open",lect.c_str(),NULL,NULL,SW_RESTORE)<=32)
MessageBox(NULL,"Лекции не найдены", "Ошибка", MB_OK|MB_ICONERROR);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N13Click(TObject *Sender)
{ //открытие справки AnsiString spr_add;
spr_add = GetCurrentDir();
spr_add+= "\\instructions\\Sprav.doc";
if((UINT)ShellExecute(0,"open",spr_add.c_str(),NULL,NULL,SW_RESTORE)<=32)
MessageBox(NULL,"Справка не найдена", "Ошибка", MB_OK|MB_ICONERROR);
}
Приложение Г
(рекомендуемое)
Список используемых сокращений ИВЦ - информационно-вычислительный центр.
ГЖД - Горьковская железная дорога.
ОАО "РЖД" - ОАО "Российские железные дороги".
ЕК АСУТР - единая корпоративная автоматизированная система
управления трудовыми ресурсами.
БД - база данных.
Приложение Д
(справочное)
Библиографический список
1) http://rzd.ru/ - Информация по Нижегородскому вычислительному центру и Кировскому филиалу. 2) Архангельский А.Я. Программирование в C++Builder 6. - М.: "Издательство Бином", 2003 - 1152с.
3) Кислицын А.Б. Лекции по дисциплине " Управление данными" , 2011
Документ
Категория
Рефераты
Просмотров
87
Размер файла
1 236 Кб
Теги
практике
1/--страниц
Пожаловаться на содержимое документа