Разработка тестирующей программы
В моей работе были применены вложенные рекурсивные иерархические данные для отображения предметов, тем и вопросов хранящихся в базе данных. Это означает, что базовые и подчинённые данные хранятся в одной таблице «Data». С помощью компонента TTreeView удобно организовано представление в виде иерархического дерева, что соответствует логике решаемой задачи. Таблица реляционного типа отображает наши данные в виде иерархии. В таблице первое поле ключевое, в нём название тем-родителей: «Механика», «Кинематика», «Кинематика материальной точки», «Физика», «Зачет по механике». Второе поле является подчиненным для первого: раздел «Кинематика материальной точки» содержит Вопрос 1-4.
Key_Id | Key_Parent | Поле строкового типа | |||
0 | 15
| Механика | |||
2 | 0 | Кинематика | |||
3 | 0 | Динамика | |||
23 | 2 | Кинематика материальной точки | |||
24 | 23 | Вопрос 1 | |||
26 | 23 | Вопрос 2 | |||
27 | 23 | Вопрос 3 | |||
28 | 23 | Вопрос 4 | |||
30 | 30 | Физика | |||
31 | 30 | Зачёт по механике | |||
32 | 31 | Вопрос 1 | |||
33 | 31 | Вопрос 2 | |||
34 | 31 | Вопрос 3 | |||
35 | 31 | Вопрос 4 | |||
36 | 31 | Вопрос 5 | |||
37 | 31 | Вопрос 6 |
На основе таблицы строится иерархия такого типа.
Также база данных содержит следующие таблицы:
Таблица «Факультет» содержит поле название факультета.
Название | |
ФИЯ | |
ФМИ |
Таблица «Группа» содержит поле номер группы.
Номер | |
455 | |
465 | |
475 | |
485 |
Таблица «Статистика» содержит данные о прохождении теста.
№ п/п | Название темы | Дата | Оценка | ||||
1 | Кинематика материальной точки | 27.03.99 | 4 | ||||
2 | Электродинамика | 12.05.99 | 3 | ||||
3 | Механика | 13.05.99 | 2 |
Таблица «Данные студента» - при регистрации данные заносятся в эту таблицу.
№ п/п | Фамилия | Группа | Факультет | ||||
1 | Иванов | 455 | ФМИ | ||||
2 | Петров | 485 | ФИЯ | ||||
3 | Ельцин | 465 | ФМИ |
Таким образом база данных состоит из пяти таблиц.
При решении задачи возникли следующие проблемы:
1. Эффективное хранение информации в базе данных.
Особенность базы в том, что она состоит из полей типа binary, содержащие графические изображения, поэтому при небольшом объёме хранимой информации размер базы становится слишком большим. Хранение информации в стандартном формате bmp оказывается крайне неэффективным. Исследовав большинство распространённых графических форматов jpc, gif, tiff, я пришла к выводу, что наиболее оптимальным с точки зрения сохранения количества сжатия является формат gif. В этом формате и решено было сохранять изображения в базе данных.
Стандартные компоненты Delphi не позволяют хранить графическую информацию в базе данных в формате gif, в связи с этим были использованы продукты компании SkyLine. В своей работе я использовала библиотеку компонентов Image Lib 30 в составе которой есть компоненты, позволяющие хранить информацию в базе данных самых различных форматов.
2. Модификация стандартного компонента Delphi OleContainer.
Так как реализация этого компонента не позволяла сохранять изображения, полученные от программы сервера, был реализован собственный OleContainer расширением стандартного компонента. Свойство Bitmap:TBitmap, которое при перерисовке компонента, копирует на свою канву, канву стандартного компонента OleContainer. Таким образом, с помощью свойства Bitmap, в программе можно использовать изображение OLE-контейнера, который затем и помещается в базу в формате gif.