Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

И снова файлы...

Возможно, Вы работали с такими файловыми менеджерами, как: Norton Commander, Far, Volcov Commander, Dos Navigator и т.д. В этих оболочках реализован просмотр файла в шестнадцатиричном виде. Ниже приводится пример, который позволяет реализовать такую возможность.

Как работать с этим примером? Откомпилируйте этот пример и запустите его с командной строки, передав в качестве параметра имя файла.

#include <fstream.h>

#include <iomanip.h>

const numcols = 18;//количество столбцов на экране

void main(int argc, char *argv[])

{

int counter = 0, i = 0, j = 0;

unsigned char text[numcols];

if (argc != 2)

{

cout << "Usage for DOSHEX: doshex <filename>" << endl;

return;

}

//открытие файла в двоичном режиме

ifstream input(argv[1], ios::in | ios::binary);

if (!input)

{

cout << "Cannot open file for display!" << endl;

return;

}

cout.setf(ios::uppercase);//режим отображения в верхнем регистре

//пока не конец файла, читаем из него данные

//и производим форматированный вывод на экран

while (!input.eof())

{

for (i = 0; (i < numcols && !input.eof()); i++)

input.get(text[i]);

if (i < numcols)

i--;

for (j = 0; j < i; j++)

if((unsigned)text[j] < 16)

cout << setw(2) << 0 << hex << (unsigned) text[j];

else

cout << setw(3) << hex << (unsigned) text[j];

for (; j < numcols; j++)

cout << " ";

cout << "\t";

for (j = 0; j < i; j++)

if(text[j] > 31 && text[j] <= 255)

cout << text[j];

else

cout << ".";

cout << endl;

//если экран уже заполнен, производим предупреждение

if (++counter == 24)

{

counter = 0;

cout << "Press Enter/Return to Continue...";

cin.get();

cout << endl;

}

}

input.close();

}

Пример "Телефонная книга"

В прошлом домашнем задании необходимо было, используя механизм работы с файлами, написать информационную систему "Телефонная книга". Давайте рассмотрим одну из таких программ.

Программа написана с использованием классов. Класс PhoneDir является промежуточным звеном между физическим предсталением данных и прикладной программой. Его использование делает программу независимой от того, где и как непосредственно хранятся данные об абонентах телефонной станции, в одном файле, нескольких файлах и т.п. Класс Abonent отвечает за хранение информации об отдельном абоненте и не привязан к физическому хранению данных. Оба класса содержат минимальный набор методов, необходимых для работы примера.

В папке урока в директории PhoneBook находятся исходные файлы проекта, здесь же приводятся только отдельные фрагменты программы.

  • В файле abonent.h описан интерфейс классов Abonent и PhoneDir.

  • Файл abonent.cpp содержит реализацию методов классов Abonent и PhoneDir.

  • Файл util.cpp содержит вспомогательные функции:

  • char* cyr(const char* str); - позволяет выводить на экран сообщения

  • для пользователя на русском языке, используя символы кирилицы.

  • char* ltrim(char* str); - удаляет пробелы в начале строки.

  • PhoneBook.cpp - файл программы.