|
Программирование >> Структурное программирование
Большинство фирм использует множество разнообразных файлов для хранения данных. Например, компании могут иметь файлы по заработной плате, файлы счетов по кредитной задолженности (со списками сумм по задолженности клиентов), итоговые файлы (со списком фактов по всем статьям) и многие другие типы файлов. Группу связных файлов, порой, называют базой данных. Совокупность программ, предназначенных для создания баз данных и управления ими, называется системой управления базой данных - СУБД. 14.3. Файлы и потоки в С-Ы- каждый файл рассматривается как последовательный поток байтов (рис. 14.2). Каждый файл завершается или маркером конца файла (EOF - end-of-file marker) или указанным числом байтов, записанным в служебную структуру данных поддерживаюш;ей системой. Когда файл открывается, то создается объект и с этим объектом связывается поток. В главе 11 показано, что автоматически создаются четыре объекта - cin, cout, сегг и clog. Потоки, связанные с этими объектами, обеспечивают каналы связи между программой и отдельными файлами или устройствами. Например, объект cin (объект стандартного потока ввода) дает возможность программе вводить данные с клавиатуры, объект cout (объект стандартного потока вывода) позволяет программе выводить данные на экран, объекты сегг и clog (объекты стандартного потока ошибок) позволяют программе выводить на экран сообщения об ошибках. маркар конца файла Рис. 14.2. Язык С++ рассматривает файл как набор из п байтов Для обработки файлов в С++ должны быть включены заголовочные файлы <iostream.h> и <fstream.h>. Файл <fstream.h> включает определения классов потоков ifstream (для ввода из файла), ofstream (для вывода в файл) и fstream (для ввода-вывода файлов). Файлы открываются путем создания объектов этих классов потоков. Эти классы потоков являются производными (т.е. наследуют функциональные возможности) соответственно от классов istream, ostream и iostream. Таким образом, функции-элементы, операции и манипуляторы, описанные в главе 11, Потоки ввода-вывода в С++ , могут быть также применены и к потокам файлов. Иерархия классов ввода-вывода, рассмотренная до этого момента, показана на рис. 14.3. istream ostxaa ifstream iostream ofstrc fstrs Рис. 14.3. Чааь иерархии классов потоков ввода-вывода figl4 4.cpp Создание последовательного файла iinclude <iostream.h> iinclude <fstream.h> iinclude <stdlib.h> main ( { ofstream outClientFile( clients.dat , ios::out); if {! outClientFile) { cerr Файл не может быть открыт endl; exit(l); прототип в stdlib.h cout Введите счет, имя и баланс. endl Введите EOF для окончания ввода. endl << ? int account; char name[10]; float balance; while (cin account name balance) { outClientFile account name balance endl; cout ? ; return 0; Введите счет, имя и бгшанс. Введите EOF для окончания ввода. ? 100 Jones 24.98 ? 200 Doe 345.67 ? 300 White 0.00 ? 400 Stone -42.16 ? 500 Rich 224.62 Рис. 14.4. Создание последовательного файла 14.1. Создание файла последовательного доступа С++ не предписывает никакой структуры файлу. Таким образом, понятия, вроде запись , не существуют в файлах языка С++. Следовательно, программист должен задавать структуру файлов в соответствии с требованиями прикладных программ. В следующем примере показано, каким образом программист может задавать простую структуру записей в файле. Сначала представим программу, а затем детально из5им ее. Программа на рис. 14.4 создает простой файл последовательного доступа, который можно использовать в системе платежных счетов по кредиторской задолженности для помощи в управлении деньгами по этим счетам.
Рис. 14.5. Режимы открытия файла Для каждого клиента программа получает номер счета, имя клиента, баланс клиента (сумма, которую клиент должен компании за товары и услуги, полученные в прошлом). Данные, полученные для каждого клиента, образуют запись. Номер счета в этом приложении используется в качестве ключа записи, то есть файл будет создаваться и обрабатываться в соответствии с порядком номеров счетов. Эта программа предполагает, что пользователь вводит записи в последовательности номеров счетов. В более полную систему платежных счетов может быть включена возможность сортировки, позволяющая пользователю вводить записи в произвольной последовательности - записи будут потом рассортированы и записаны в файл. Теперь давайте рассмотрим эту программу. Как утверждалось выше, файлы открываются путем создания объектов классов потоков ifstream, ofstream или fstream. На рис. 14.4 файл должен быть открыт для вывода, так что создается объект ofstream. Конструктору объекта передаются два аргумента - имя файла и режим открытия файла. Для объекта ofstream режим открытия файла может быть или ios::out для вывода данных в файл, или ios::app - для добавления данных в конец файла (без модификации каких-либо данных, уже имеющихся в файле). Существующие файлы, открываемые режимом ios::out, усекаются - все данные в файле отбрасываются. Если какой-то файл еще не существует, тогда создается файл с тем же именем. Объявление ofstream outClientFile( clients.dat , ios::out); создает объект outClientFile класса ofstream, связанный с файлом clients.dat, который открывается для вывода. Аргументы clients.dat и ios::out передаются конструктору класса ofstream, который открывает файл. Это устанавливает линию связи с файлом. По умолчанию объекты класса ofstream открыты для вывода, поэтому для открытия файла clients.dat для вывода может быть использован оператор ofstream outClientFile( clients.dat ); На рис. 14.5 приведен список режимов открытия файлов. Типичная ошибка программирования 14.1 Открытие существующего файла для вывода (ios::out) в то время, как пользователь на самом деле желает сохранить этот файл; содержимое файла отбрасывается без предупреждения.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |