Локальная СУБД своими руками. Учимся на примерах+CD
Информация о книге | |
Автор | А. В. Енин, Н. В. Енин |
Формат | 70x100/16 |
Описание
Издательство: СОЛОН-ПРЕСС
— У вас есть множество идей и вы чувствуете в себе силы разработать оригинальную программную систему, но не знаете, с чего начать?
— Вы хотели бы создать свой язык программирования, но полагаете, что это слишком сложно?
— Вас всегда интересовало, как работают различные «волшебники», или «Wi- zard'ы», автоматически создающие заготовки приложений и частей приложения, но думаете, что создать свой вам не по силам?
— Вы устали от чтения книг со множеством небольших учебных примеров использования классов MFC и хотели бы видеть на практике, как все возможности MFC объединить в настоящий проект?
— Вы прочли ряд книг по проектированию баз данных, но всегда хотели знать, каково их внутреннее устройство?
Эта книга — для вас.
Авторы попытались осветить все вышеназванные вопросы на примере создания локальной системы управления базами данных.
С помощью множества поясняющих схем и ряда работающих проектов, расположенных на прилагаемом к книге CD, шаг за шагом вы, вместе с авторами, создатите ядро СУБД, позволяющее создавать таблицы базы данных и поля в них, добавлять, изменять и удалять записи в этих таблицах, выбирать в таблицах необходимые наборы записей и осуществлять навигацию по этим наборам. В процессе создания ядра вам придётся создать небольшой язык SQL-запросов к базе данных.
Затем, на основе созданного вами кода, будет создана библиотека классов, позволяющая использовать СУБД в объектно-ориентированном виде. И, наконец, будет создана небольшая визуальная среда по работе с СУБД и автоматический генератор С++ классов (Wizard).
Каждому этапу разработки соответствуют один или несколько проектов, т. е. происходит имитация постепенной разработки проекта самим читателем.
Содержание
Введение 3
Требования к знаниям 5
1. Пример программы-пятиминутки 6
1.1. Введение 6
1.2. Создаем базу данных 6
1.3. Создание проекта 8
1.4. Первичный анализ и добавление классов 11
1.5. Функция OnRecordFirst() 15
1.6. Функция OnRecordLast() 17
1.7. Функция OnRecordNext() 19
1.8. Функция OnRecordPrev() 21
1.9. Заключение 23
2. Первая попытка создать базу данных 24
2.1. Общие задачи 24
2.2. Управляющие структуры данных 24
2.3. Как правильно разработать структуры данных 25
2.4. Первые этапы проекта 25
2.5. Поля, таблицы и база данных 26
2.6. Наша тестовая программа 28
2.6.1. Заголовочный файл 28
2.6.2. Создаем базу данных 29
2.6.3. Инициализируем переменную типа «база данных» 30
2.6.4. Создаем таблицу 32
2.6.5. Открываем базу данных 33
2.6.6. Закрываем базу данных 33
2.6.7. Создаем поле 34
2.7. Подведем итоги 35
3. Создание базы данных, таблицы и поля 36
3.1. Общие задачи 36
3.2. Структуры, файлы и определения 38
3.2.1. Некоторые определения, которые мы будем
применять в нашем проекте 38
3.2.2. Файл данных 41
3.2.3. Описание управляющей структуры дискового блока 42
3.2.4. Некоторые функции стандартной библиотеки C/C++ 43
3.2.5. Создание и форматирование файла данных 44
3.3. Управляющие структуры базы данных 46
3.3.1. Главная управляющая структура базы данных,
или Блок управления базой (БУБ) 46
3.3.2. Блок управления полем (БУП) 46
3.3.3. Блок управления таблицей (БУТ) 47
3.3.4. Главная управляющая структура базы данных,
или Блок управления базой (БУБ) подробнее 48
3.3.5. Связь между управляющими структурами 49
3.4. Создание файлов базы данных, таблиц и полей 50
3.4.1. Общие задачи 50
3.4.2. Создание главного (заголовочного) файла БД 50
3.4.3. Строение заголовочного файла 52
3.4.4. Открываем заголовочный файл 52
3.4.5. Закрываем заголовочный файл 55
3.4.6. Сохраняем заголовочный файл 56
3.4.7. Создаем таблицу 57
3.4.8. Удаляем таблицу 60
3.4.9. Добавляем (создаем) поле 61
3.4.10. Вставляем поле 66
3.4.11. Удаляем поле 70
3.4.12. Редактируем (изменяем) поле 73
3.4.13. Вспомогательные функции 76
4. Создание тестирующей программы 78
4.1. Введение 78
4.2. Создаем проект 78
4.2.1. Стандартные действия по созданию проекта 78
4.2.2. Первые изменения проекта 82
4.3. Краткое описание структуры проекта 84
4.3.1. Общие положения 84
4.3.2. Файл описания ресурсов программы 90
4.3.3. Создаем диалоговые окна в ресурсах 93
4.4. Краткое описание механизма работы диалогового окна 99
4.4.1. Класс главного диалогового окна 99
4.4.2. Главный класс приложения 104
4.4.3. Немного информации о классе CwinApp 106
4.5. Создаем заготовки классов новых диалогов 109
4.6. Изменения в классах приложения и главного диалогового окна 112
4.7. Краткое описание некоторых элементов управления 127
4.7.1. Комбинированный список 127
4.7.2. Список 128
4.8. Класс CConstructor 130
4.9. Класс CViewRecord 141
4.10. Набор стандартных действий для запуска программы 146
4.11. Подведем итоги 150
5. Основы построения языков программирования 152
5.1. Простой анализатор арифметических выражений 152
5.1.1. Введение 152
5.1.2. Лексический анализ 153
5.1.3. Приоритет выражений 154
5.1.4. Анализ выражений: проблема 154
5.1.5. Разбиение выражения на лексемы 155
5.1.6. Функция, разбивающая выражение на лексемы 157
5.1.7. Простой анализатор выражений 159
5.1.8. Код анализатора 159
5.1.9. Прогон программы 163
5.1.10. Схема работы 164
5.1.11. Заключение 166
5.2. Анализатор, воспринимающий переменные 166
5.2.1. Введение 166
5.2.2. Код анализатора 167
5.2.3. Тестирование анализатора 173
5.2.4. Схема работы 173
5.2.5. Заключение 177
6. Создаем анализатор SQL-запросов 178
6.1. Что должен поддерживать анализатор SQL-выражений 178
6.1.1. Введение 178
6.1.2. Команды, поддерживаемые анализатором 179
6.1.3. Операции, поддерживаемые анализатором 179
6.1.4. Типы лексем 180
6.1.5. Заключение 180
6.2. Анализатор для SQL-запросов 180
6.2.1. Введение 180
6.2.2. Управляющие структуры и функции анализатора 180
6.2.3. Работа со стеком 184
6.2.4. Работа с символами, лексемами и выражениями 189
6.3. Разбиваем SQL-запрос и работаем с его частями 196
6.3.1. Разбиваем SQL-запрос 196
6.3.2. Анализируем конструкцию FROM 199
6.3.3. Анализируем конструкцию SELECT 200
6.3.4. Анализируем конструкцию ORDER BY 202
6.3.5. Функции запуска анализатора 203
6.3.6. Внутренний механизм анализатора 205
6.4. Рекурсивный цикл функций 214
6.4.1. Проблемы, возникающие при поддержке
нескольких типов данных 214
6.4.2. Рекурсивный спуск функций 215
6.4.3. Шестой уровень рекурсивного спуска 215
6.4.4. Пятый уровень рекурсивного спуска 217
6.4.5. Четвертый уровень рекурсивного спуска 218
6.4.6. Третий уровень рекурсивного спуска 221
6.4.7. Второй уровень рекурсивного спуска 224
6.4.8. Первый уровень рекурсивного спуска 230
6.5. Подведем итоги 232
7. Работа с записями и навигация по таблице 234
7.1. Подробнее о некоторых проблемах 234
7.2. Запись, ее префикс, расширенный размер 238
7.3. Читаем и записываем на диск блок данных 239
7.4. Выделяем таблице новый блок данных и размечаем его 240
7.5. Находим первый свободный блок в файле данных 243
7.6. Занимаем свободный блок в файле данных 245
7.7. Освобождаем занятый блок в файле данных 246
7.8. Присвоить значение полю записи 246
7.9. Извлечь значение из поля записи 248
7.10. Присвоить записи номер 249
7.11. Получить номер записи 249
7.12. Структуры управления записями 250
7.13. Чтение и запись всех блоков 251
7.14. Создание блоков данных в памяти 254
7.15. Удаление блоков данных из памяти 255
7.16. Создание SQL-запроса 256
7.17. Функции положения индикатора активной записи 257
7.17.1. Функция проверки на выход за конец виртуальной таблицы 257
7.17.2. Функция проверки на выход за начало виртуальной таблицы .... 258
7.17.3. Функция добавления значений полей в массив хранения
текущей записи 258
7.17.4. Функции перемещения индикатора активной записи
в начало, в конец, на следующую и предыдущую позиции 260
7.18. Создание, удаление и изменение записи 261
7.18.1. Добавление новой записи 261
7.18.2. Удаление записи 264
7.18.3. Изменение значения полей записи 266
7.19. Поиск номера свободной записи в блоках таблицы 267
7.20. Занимаем свободную запись 268
7.21. Освобождение занятой записи 268
7.22. Извлечение идентификатора записи 269
7.23. Открытие таблицы заново 271
7.24. Заключение 272
8. Тест для работы с записями 273
8.1. Введение 273
8.2. Изменяем ресурсы 273
8.3. Изменяем заголовочный файл класса 274
8.4. Изменяем файл реализации класса 276
8.4.1. Общие изменения 276
8.4.2. Функции обмена информацией между БД и приложением 278
8.4.3. Обновляем содержимое списка 280
8.4.4. Функции по работе с записями в базе данных 282
8.4.5. Функции навигации по набору записей 285
8.5. Подведем итоги 287
9. Разработка визуальной среды по работе с базой данных 289
9.1. Введение 289
9.2. Общие задачи 289
9.3. Создаем проект 292
9.4. Описание новых классов 294
9.4.1. Класс CMyEdit 294
9.4.2. Класс CMyListCtrl 295
9.5. Работаем с проектом 299
9.5.1. Заголовочный файл класса «Вид» нашего проекта 299
9.5.2. Файл реализации класса «Вид» нашего проекта 301
9.5.3. Класс диалогового окна нашего проекта 307
9.5.4. Класс диалогового окна с закладками CTabCtrl 308
9.6. Заключение 313
10. Создание библиотеки классов 314
10.1. Общие задачи 314
10.2. Направление работы 315
10.3. Проект со статической переменной 316
10.4. Программный интерфейс обмена данными, использующийся
в Access 320
10.5. Создание проекта для библиотеки классов 322
10.6. Что такое виртуальная функция 324
10.7. Общий вид иерархии классов 325
10.8. Классы, составляющие иерархию классов 326
10.9. Класс CBeehiveDataBase 330
10.10. Класс CBeehiveBasis 331
10.11. Класс CBeehiveAnalizer 332
10.12. Классы CBeehiveManager и CBeehiveSQL 333
10.13. Класс CBeehiveTable 334
10.14. Класс CBeehiveRecordset 339
10.15. Заключение 346
11. Тест для библиотеки классов 347
11.1. Описание проблемы 347
11.2. Изменяем проект с тестирующей программой 347
11.3. Создание класса, производного от CBeehiveRecordset 356
11.4. Работаем с записями таблицы
Характеристики
Информация о книге | |
Автор | А. В. Енин, Н. В. Енин |
Формат | 70x100/16 |
Объем, стр | 464 стр. |
Издательство: СОЛОН-ПРЕСС
— У вас есть множество идей и вы чувствуете в себе силы разработать оригинальную программную систему, но не знаете, с чего начать?
— Вы хотели бы создать свой язык программирования, но полагаете, что это слишком сложно?
— Вас всегда интересовало, как работают различные «волшебники», или «Wi- zard'ы», автоматически создающие заготовки приложений и частей приложения, но думаете, что создать свой вам не по силам?
— Вы устали от чтения книг со множеством небольших учебных примеров использования классов MFC и хотели бы видеть на практике, как все возможности MFC объединить в настоящий проект?
— Вы прочли ряд книг по проектированию баз данных, но всегда хотели знать, каково их внутреннее устройство?
Эта книга — для вас.
Авторы попытались осветить все вышеназванные вопросы на примере создания локальной системы управления базами данных.
С помощью множества поясняющих схем и ряда работающих проектов, расположенных на прилагаемом к книге CD, шаг за шагом вы, вместе с авторами, создатите ядро СУБД, позволяющее создавать таблицы базы данных и поля в них, добавлять, изменять и удалять записи в этих таблицах, выбирать в таблицах необходимые наборы записей и осуществлять навигацию по этим наборам. В процессе создания ядра вам придётся создать небольшой язык SQL-запросов к базе данных.
Затем, на основе созданного вами кода, будет создана библиотека классов, позволяющая использовать СУБД в объектно-ориентированном виде. И, наконец, будет создана небольшая визуальная среда по работе с СУБД и автоматический генератор С++ классов (Wizard).
Каждому этапу разработки соответствуют один или несколько проектов, т. е. происходит имитация постепенной разработки проекта самим читателем.
Содержание
Введение 3
Требования к знаниям 5
1. Пример программы-пятиминутки 6
1.1. Введение 6
1.2. Создаем базу данных 6
1.3. Создание проекта 8
1.4. Первичный анализ и добавление классов 11
1.5. Функция OnRecordFirst() 15
1.6. Функция OnRecordLast() 17
1.7. Функция OnRecordNext() 19
1.8. Функция OnRecordPrev() 21
1.9. Заключение 23
2. Первая попытка создать базу данных 24
2.1. Общие задачи 24
2.2. Управляющие структуры данных 24
2.3. Как правильно разработать структуры данных 25
2.4. Первые этапы проекта 25
2.5. Поля, таблицы и база данных 26
2.6. Наша тестовая программа 28
2.6.1. Заголовочный файл 28
2.6.2. Создаем базу данных 29
2.6.3. Инициализируем переменную типа «база данных» 30
2.6.4. Создаем таблицу 32
2.6.5. Открываем базу данных 33
2.6.6. Закрываем базу данных 33
2.6.7. Создаем поле 34
2.7. Подведем итоги 35
3. Создание базы данных, таблицы и поля 36
3.1. Общие задачи 36
3.2. Структуры, файлы и определения 38
3.2.1. Некоторые определения, которые мы будем
применять в нашем проекте 38
3.2.2. Файл данных 41
3.2.3. Описание управляющей структуры дискового блока 42
3.2.4. Некоторые функции стандартной библиотеки C/C++ 43
3.2.5. Создание и форматирование файла данных 44
3.3. Управляющие структуры базы данных 46
3.3.1. Главная управляющая структура базы данных,
или Блок управления базой (БУБ) 46
3.3.2. Блок управления полем (БУП) 46
3.3.3. Блок управления таблицей (БУТ) 47
3.3.4. Главная управляющая структура базы данных,
или Блок управления базой (БУБ) подробнее 48
3.3.5. Связь между управляющими структурами 49
3.4. Создание файлов базы данных, таблиц и полей 50
3.4.1. Общие задачи 50
3.4.2. Создание главного (заголовочного) файла БД 50
3.4.3. Строение заголовочного файла 52
3.4.4. Открываем заголовочный файл 52
3.4.5. Закрываем заголовочный файл 55
3.4.6. Сохраняем заголовочный файл 56
3.4.7. Создаем таблицу 57
3.4.8. Удаляем таблицу 60
3.4.9. Добавляем (создаем) поле 61
3.4.10. Вставляем поле 66
3.4.11. Удаляем поле 70
3.4.12. Редактируем (изменяем) поле 73
3.4.13. Вспомогательные функции 76
4. Создание тестирующей программы 78
4.1. Введение 78
4.2. Создаем проект 78
4.2.1. Стандартные действия по созданию проекта 78
4.2.2. Первые изменения проекта 82
4.3. Краткое описание структуры проекта 84
4.3.1. Общие положения 84
4.3.2. Файл описания ресурсов программы 90
4.3.3. Создаем диалоговые окна в ресурсах 93
4.4. Краткое описание механизма работы диалогового окна 99
4.4.1. Класс главного диалогового окна 99
4.4.2. Главный класс приложения 104
4.4.3. Немного информации о классе CwinApp 106
4.5. Создаем заготовки классов новых диалогов 109
4.6. Изменения в классах приложения и главного диалогового окна 112
4.7. Краткое описание некоторых элементов управления 127
4.7.1. Комбинированный список 127
4.7.2. Список 128
4.8. Класс CConstructor 130
4.9. Класс CViewRecord 141
4.10. Набор стандартных действий для запуска программы 146
4.11. Подведем итоги 150
5. Основы построения языков программирования 152
5.1. Простой анализатор арифметических выражений 152
5.1.1. Введение 152
5.1.2. Лексический анализ 153
5.1.3. Приоритет выражений 154
5.1.4. Анализ выражений: проблема 154
5.1.5. Разбиение выражения на лексемы 155
5.1.6. Функция, разбивающая выражение на лексемы 157
5.1.7. Простой анализатор выражений 159
5.1.8. Код анализатора 159
5.1.9. Прогон программы 163
5.1.10. Схема работы 164
5.1.11. Заключение 166
5.2. Анализатор, воспринимающий переменные 166
5.2.1. Введение 166
5.2.2. Код анализатора 167
5.2.3. Тестирование анализатора 173
5.2.4. Схема работы 173
5.2.5. Заключение 177
6. Создаем анализатор SQL-запросов 178
6.1. Что должен поддерживать анализатор SQL-выражений 178
6.1.1. Введение 178
6.1.2. Команды, поддерживаемые анализатором 179
6.1.3. Операции, поддерживаемые анализатором 179
6.1.4. Типы лексем 180
6.1.5. Заключение 180
6.2. Анализатор для SQL-запросов 180
6.2.1. Введение 180
6.2.2. Управляющие структуры и функции анализатора 180
6.2.3. Работа со стеком 184
6.2.4. Работа с символами, лексемами и выражениями 189
6.3. Разбиваем SQL-запрос и работаем с его частями 196
6.3.1. Разбиваем SQL-запрос 196
6.3.2. Анализируем конструкцию FROM 199
6.3.3. Анализируем конструкцию SELECT 200
6.3.4. Анализируем конструкцию ORDER BY 202
6.3.5. Функции запуска анализатора 203
6.3.6. Внутренний механизм анализатора 205
6.4. Рекурсивный цикл функций 214
6.4.1. Проблемы, возникающие при поддержке
нескольких типов данных 214
6.4.2. Рекурсивный спуск функций 215
6.4.3. Шестой уровень рекурсивного спуска 215
6.4.4. Пятый уровень рекурсивного спуска 217
6.4.5. Четвертый уровень рекурсивного спуска 218
6.4.6. Третий уровень рекурсивного спуска 221
6.4.7. Второй уровень рекурсивного спуска 224
6.4.8. Первый уровень рекурсивного спуска 230
6.5. Подведем итоги 232
7. Работа с записями и навигация по таблице 234
7.1. Подробнее о некоторых проблемах 234
7.2. Запись, ее префикс, расширенный размер 238
7.3. Читаем и записываем на диск блок данных 239
7.4. Выделяем таблице новый блок данных и размечаем его 240
7.5. Находим первый свободный блок в файле данных 243
7.6. Занимаем свободный блок в файле данных 245
7.7. Освобождаем занятый блок в файле данных 246
7.8. Присвоить значение полю записи 246
7.9. Извлечь значение из поля записи 248
7.10. Присвоить записи номер 249
7.11. Получить номер записи 249
7.12. Структуры управления записями 250
7.13. Чтение и запись всех блоков 251
7.14. Создание блоков данных в памяти 254
7.15. Удаление блоков данных из памяти 255
7.16. Создание SQL-запроса 256
7.17. Функции положения индикатора активной записи 257
7.17.1. Функция проверки на выход за конец виртуальной таблицы 257
7.17.2. Функция проверки на выход за начало виртуальной таблицы .... 258
7.17.3. Функция добавления значений полей в массив хранения
текущей записи 258
7.17.4. Функции перемещения индикатора активной записи
в начало, в конец, на следующую и предыдущую позиции 260
7.18. Создание, удаление и изменение записи 261
7.18.1. Добавление новой записи 261
7.18.2. Удаление записи 264
7.18.3. Изменение значения полей записи 266
7.19. Поиск номера свободной записи в блоках таблицы 267
7.20. Занимаем свободную запись 268
7.21. Освобождение занятой записи 268
7.22. Извлечение идентификатора записи 269
7.23. Открытие таблицы заново 271
7.24. Заключение 272
8. Тест для работы с записями 273
8.1. Введение 273
8.2. Изменяем ресурсы 273
8.3. Изменяем заголовочный файл класса 274
8.4. Изменяем файл реализации класса 276
8.4.1. Общие изменения 276
8.4.2. Функции обмена информацией между БД и приложением 278
8.4.3. Обновляем содержимое списка 280
8.4.4. Функции по работе с записями в базе данных 282
8.4.5. Функции навигации по набору записей 285
8.5. Подведем итоги 287
9. Разработка визуальной среды по работе с базой данных 289
9.1. Введение 289
9.2. Общие задачи 289
9.3. Создаем проект 292
9.4. Описание новых классов 294
9.4.1. Класс CMyEdit 294
9.4.2. Класс CMyListCtrl 295
9.5. Работаем с проектом 299
9.5.1. Заголовочный файл класса «Вид» нашего проекта 299
9.5.2. Файл реализации класса «Вид» нашего проекта 301
9.5.3. Класс диалогового окна нашего проекта 307
9.5.4. Класс диалогового окна с закладками CTabCtrl 308
9.6. Заключение 313
10. Создание библиотеки классов 314
10.1. Общие задачи 314
10.2. Направление работы 315
10.3. Проект со статической переменной 316
10.4. Программный интерфейс обмена данными, использующийся
в Access 320
10.5. Создание проекта для библиотеки классов 322
10.6. Что такое виртуальная функция 324
10.7. Общий вид иерархии классов 325
10.8. Классы, составляющие иерархию классов 326
10.9. Класс CBeehiveDataBase 330
10.10. Класс CBeehiveBasis 331
10.11. Класс CBeehiveAnalizer 332
10.12. Классы CBeehiveManager и CBeehiveSQL 333
10.13. Класс CBeehiveTable 334
10.14. Класс CBeehiveRecordset 339
10.15. Заключение 346
11. Тест для библиотеки классов 347
11.1. Описание проблемы 347
11.2. Изменяем проект с тестирующей программой 347
11.3. Создание класса, производного от CBeehiveRecordset 356
11.4. Работаем с записями таблицы
Информация о книге | |
Автор | А. В. Енин, Н. В. Енин |
Формат | 70x100/16 |
Объем, стр | 464 стр. |