Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 982 / 58 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00

Самостоятельная работа 15: Создание СУБД средствами BDE (на примере протокола экзамена кандидатов в водители)

Аннотация: Проектирование базы данных. Создание псевдонима базы данных в BDE Administrator. Создание структуры таблиц базы данных средствами Database Desktop. Обзор компонентов C++Builder 6, используемых для связи с локальными базами данных. Создание структуры таблиц базы данных программным путем. Создание заготовки приложения с помощью мастера Form Wizard. Создание заготовки приложения. Настройка управляющих элементов пользовательского интерфейса. Настройка функциональности редактирования данных вкладки PageList. Программирование кнопок панели управления. Программирование главного меню. Программирование контекстного меню. Программирование строки состояния. Программирование выхода. Создание СУБД средствами BDE (на примере протокола экзамена кандидатов в водители).
Ключевые слова: система управления базой данных, БД, приложение, управление данными, BDE, borland database engine, процессор, компьютер, динамически присоединяемая библиотека, ПО, clipper, СУБД, DOS, слово, база данных, базы данных, таблица, CFG, информация, псевдоним, меню, дерево, место, утилита, диалоговое окно, опция, создание таблицы, файл, время выполнения, палитра компонентов, data set, компонент, источник данных, обмен информацией, dbgrid, dbedit, data control, сервер, AutoCalcFields, BOF, Prior, FieldCount, FieldDefs, FilterOptions, IndexDefs, IndexFieldNames, recno, recordcount, физическое имя файла, AppendRecord, ApplyUpdates, ClearFields, FieldByName, FindFirst, FindNext, GotoBookmark, FreeBookmark, InsertRecord, последовательный перебор, LockTable, UnlockTable, OnCalcFields, onfilterrecord, OnNewRecord, BPR, BevelOuter, редактор полей, подсвойство, панель инструментов, интерфейс, TreeView, glyph, hint, оболочка, выделенный компонент, пункт, поле, пользователь, курсор, значение, перехват события, ссылка

СУБД - система управления базой данных (БД). Создадим приложение, обеспечивающее управление данными кандидатов в водители при сдаче экзаменов в ГИБДД, используя механизм BDE (Borland Database Engine) - процессор баз данных.

BDE должен быть поставлен на компьютер пользователя вместе с приложением, работающем на его основе. Иначе приложение не сможет связаться с базой данных и не будет работать. BDE реализован в виде динамически присоединяемых библиотек, которые представлены файлами idapi32.dll и другими, находящимися в каталоге C:\Program Files\Common Files\Borland Shared\BDE. Но просто перенести эти файлы в системный каталог System32 компьютера мало, нужно либо установить на клиентской машине BDE - пакет, поскольку он еще создаст необходимые ключи в системном реестре, либо установить IDE C++Builder, который заодно установит и BDE.

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

  1. Первичное заполнение БД сведениями о лицах, сдающих экзамен
  2. Оперативное занесение текущих оценок за экзамен по теории и вождению
  3. Генерация и печать экзаменационных листов и общего отчета по результатам за текущий день с возможность предварительного просмотра печати.
  4. Ведение архива, которая включает в себя
    • пересылку таблицы с результатами экзамена в архив в режиме добавления данных
    • просмотр данных архива с возможностью выборки по дате сдачи экзамена

Наша задача, как разработчиков, проанализировать задачу с привлечением представителей заказчика, а затем реализовать ее по следующему плану:

  1. Спроектировать базу данных, включающую в себя набор взаимосвязанных таблиц заданной структуры (имена полей, типы полей, размер полей)
  2. Создать базу данных как совокупность пустых таблиц по разработанной структуре
  3. Спроектировать приложение для управления данными (редактирование, сохранение, выборка данных, хранящихся в таблицах)

Поскольку речь идет о таблицах, то примем за основу реляционную модель БД как наиболее простую и удобную для наших целей. Выберем структуру таблиц формата dbf, которая использовалась еще в dBaseII, dBaseIII, dBaseIV, FoxPro, Clipper - СУБД времен DOS. Дело в том, что эта база уже существует и используется другими программами. Мы же хотим заменить только одну из программ на более современную - работающую под Windows. Так что выбора по структуре и формату таблиц данных у нас фактически нет.

Здесь я немножко схитрю и буду употреблять слово "будущее приложение", в то время как это приложение я уже разработал и оно реальное (хоть и не очень сложное). Но мой долг доцента обязывает описать процесс создания, надеясь, что Вы - мои любимые студенты, не менее страстно вынуждены будете это прочитать (для своей же пользы!) и, самое главное, повторить. Вот с такими оговорками и приступим к делу.

Проектирование базы данных

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

  • DBF\Base0.dbf
  • DBF\Base1.dbf
  • DBF\Archive0.dbf
  • DBF\Archive1.dbf
  • tmp_base.dbf

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

Примем, что каталог Dbf должен являться ближайшим подкаталогом места размещения нашего будущего приложения. Для механизма BDE это делать совершенно необязательно, поскольку можно использовать так называемые псевдонимы ( alias ) баз данных. Псевдонимы представляют собой метки, хранящиеся в общедостопном для BDE месте ( C:\Program Files\Common Files\Borland Shared\BDE\IDAPI32.CFG ), в которых содержится вся необходимая информация о таблицах БД, включая каталог их размещения, формат, используемые драйверы и т.д. Если база данных располагается в подчиненном по отношению к приложению каталоге, то в приложении достаточно указать имя этого каталога. Если же приложение должно располагаться в произвольном месте дерева каталогов (равно, как и БД), тогда нужно использовать псевдоним, который предварительно настраивается для каждого отдельного компьютера.

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

Структура таблицы DBF\Base0.dbf
Field Name Type Size Dec Пояснения
Number Numeric 5 0 Идентификатор экзаменуемого (первичный ключ)
NAME Character 30 ФИО экзаменуемого
Birth Numeric 2 0 Год рождения
Kategor Character 5 Сдаваемые категории транспортных средств
School Character 12 Учебная организация экзаменуемого
First_PDD Character 1 Какой раз сдает теорию
Passed_PDD Character 1 Результат сдачи теории (С - сдал, П - плохо)
First_DRV Character 1 Флаг первой сдачи вождения
Passed_DRV Character 1 Результат сдачи вождения
F1_DRV Character 1 Флаг повторной сдачи вождения
P1_DRV Character 1 Результат сдачи вождения
Decision Character 5 Решение
NNN Numeric 6 Идентификатор результатов (вторичный ключ)
Exam_Date Date 6 Дата экзамена
Supper Character 1 Рудимент
Структура таблицы DBF\Base1.dbf
Field Name Type Size Dec Пояснения
Question Character 8 Билет/Вопрос
Answer Numeric 1 0 № ответа
Correct Numeric 1 0 № правильного ответа
Result Character 1 0 Да/Нет (Верно/Неверно)
Time Numeric 2 0 Время в секундах, затраченное на ответ (не используется)
NNN Numeric 6 0 Идентификатор результатов (первичный ключ)
Структура таблицы DBF\Archive0.dbf
Field Name Type Size Dec Пояснения
Number Numeric 5 0 Идентификатор экзаменуемого (первичный ключ)
NAME Character 30 ФИО экзаменуемого
Birth Numeric 2 0 Год рождения
Kategor Character 5 Сдаваемые категории транспортных средств
School Character 12 Учебная организация экзаменуемого
First_PDD Character 1 Какой раз сдает теорию
Passed_PDD Character 1 Результат сдачи теории (С - сдал, П - плохо)
First_DRV Character 1 Флаг первой сдачи вождения
Passed_DRV Character 1 Результат сдачи вождения
F1_DRV Character 1 Флаг повторной сдачи вождения
P1_DRV Character 1 Результат сдачи вождения
Decision Character 5 Решение
NNN Numeric 6 Идентификатор результатов (вторичный ключ)
Exam_Date Date 8 Дата экзамена
Supper Character 1 Рудимент
Структура таблицы DBF\Archive1.dbf
Field Name Type Size Dec Пояснения
Question Character 8 Билет/Вопрос
Answer Numeric 1 0 № ответа
Correct Numeric 1 0 № правильного ответа
Result Character 3 Да/Нет (Верно/Неверно)
Time Numeric 2 0 Время в секундах, затраченное на ответ (не используется )
NNN Numeric 6 0 Идентификатор результатов (первичный ключ)
Структура таблицы tmp_base.dbf
Field Name Type Size Dec Пояснения
Name Numeric 3 0 Текущий регистрационный номер экзаменуемого
Question Numeric 3 0 Номер записи в таблице вопросов Exam_w.dbf
Answer Numeric 1 0 № ответа экзаменуемого
Result Logical 1 Да/Нет (Верно/Неверно)
Time Numeric 2 0 Содержит номер правильного ответа

Структура таблиц Archive0.dbf и Archive1.dbf полностью повторяет структуру таблиц Base0.dbf и Base1.dbf соответственно.

Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .