Структурное описание программы.
Структура программы.
В данной работе разработан класс для работы с двоичным файлом. Разработанный класс существенно облегчает работу с двоичными файлами в дальнейшем (если конечно они совпадают по формату). В дальнейшем программисту нет необходимости постоянно переписывать один и тот же код по нескольку раз. Достаточно будет просто создать объект класса BinaryFile и при помощи методов работать с файлами. Данный подход к программированию существенно облегчает понимание программы и ее дальнейшее модифицирование, потому как объектно-ориентированная концепция программирования лучше отражает картину реального мира, то есть объект представлен в виде какого-то реального предмета наделенного характерными для него особенностями (свойствами), а так же набором действий, которые над ним можно производить. Класс представлен в виде множества объектов одного типа. Я разрабатывал класс двоичный файл. Он отражает все свойства и методы двоичных файлов в общем (точнее все свойства и методы, необходимые в рамках курсовой работы), имя файла с которым мы работаем, количество строк хранимых в файле и массив адресов на данные в файле.
Головная функция (main) программы представляет из себя последовательное тестирование всех методов класса. Добавления, сортировки, сохранения в текстовый файл и т.д.
Создавая объект, вместе с ним создается файл, который «привязывается» к нему, результаты всей работы с объектом будут содержаться именно в нем. Так же, помимо него, программой будет создан откаточный файл, необходимый для перезаписывания файла. Мы копируем данные из файла привязанного к объекту в откаточный (BuckCopy.tmp) файл и потом из откаточного обратно. Это необходимо чтобы не нарушалась топология файла, измененная в результате сортировок, вставок и удаления. Когда пользователь производит выше упомянутые операции, он никак не изменяет файл, исключением может быть метод вставки, потому как он записывает вставляемую строку в конец файла. Но при этом возникает несоответствие номера положения строки в файле и массиве указателей. Для этого и вызывается перезапись.
Перезаписывание необходимо и оно вызывается после вставки, удаления и сортировки.
Для удобства программирования строки файла также представлены в виде класса.
Структура двоичного файла.
Двоичный файл представляет собой последовательности шестнадцатеричных символов. В соответствие с типом хранимой переменной можно сказать сколько символов надо считать, чтобы правильно определить хранимое число. Для char – 2 тетрады, для int - 4, поскольку другие с типы данных не используются в моей работе я про них ни чего не упоминаю.
В начале файла хранится количество строк записанных в него. Это необходимо для того, чтобы определить когда достигается конец файла. Записывается эта информация в самое начало, чтобы ее было просто найти.
Потом следует некоторое количество строк, формат хранения которых вполне стандартный: сначала записывается количество символов, потом сама строка.
Структура текстового файла.
Самый обычный текстовый файл, строки в котором хранятся поочередно. Каждая строка заканчивается символом переноса строки. А конец файла отмечен символом ~end~.
Задание.
Двоичный файл содержит записи переменной длины – строки. Формат записи предполагает ее переменную размерность. Реализовать набор операций над записями без загрузки одновременно всех строк в память (поэлементная загрузка СД) : добавление строки, извлечение, удаление, вставка по логическому номеру и редактирование (обновление), вставка с сохранением порядка, сортировка (возможно, через внешний текстовый файл), экспорт строк из текстового файла, постраничный просмотр. При открытии файла производится его последовательный просмотр и составляется структура данных, содержащая адреса (указатели) записей в файле. При изменении размерности записи, она переписывается в конец файла. При завершении работы программы, записи переписываются в выходной двоичный файл в логическом порядке следования в структуре данных.
Варианты структуры даннных :
Динамический массив указателей на записи.
Теоретический материал.
Массив указателей.
В языке СИ элементы массивов могут иметь любой тип, и, в частности, могут быть указателями на любой тип. Рассмотрим несколько примеров с использованием указателей.
Следующие объявления переменных
int a[]={10,11,12,13,14,};
int *p[]={a, a+1, a+2, a+2, a+3, a+4};
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.