Программирование >>  Структурное программирование 

1 ... 252 253 254 [ 255 ] 256 257 258 ... 342


updateFile.seekg((account - 1) * sizeof(client)); clientData client;

updateFile.read((char *)sclient, sizeof(client));

if (client.acctNum != 0) { outputLine(cout, client);

cout << endl << Введите расход (+) или доплату (-)

float transaction;

cin >> transaction;

client.balance += transaction;

outputLine(cout, client);

updateFile.seekp((account - 1) * sizeof (client)); updateFile.write((char *)Sclient, sizeof(client));

else

cerr << Счет № << account не заполнен. endl;

Создание и вставка новой записи void newRecord(fstream SinsertlnFile) {

cout << Введите новый номер счета (1 - 100): ;

int account; cin >> account;

insertlnFile.seekg((account - 1) + sizeof(client)); clientData client;

insertlnFile.read((char *)Sclient, sizeof (client));

if (client.acctNum == 0) {

cout << Введите фамилию, имя, баланс <<endl << ? ;

cin >> client.lastName >> client.firstName >> client.balanc;

client.acctNum = account;

insertlnFile.seekp((account - 1) * sizeof(clientData)); insertlnFile.write((char *)sclient, sizeof(clientData));

else

cerr Счет № account

<< уже содержит информацию. << endl;

Удаление существующей записи

void deleteRecord(fstream SdeleteFromFile)

cout << Введите номер счета для удаления (1 - 100): ;

int account; cin >> account;

deleteFromFile.seekg((account - 1) * sizeof(client)); ClientData client;

deleteFromFile.read((char *)sclient, sizeof(client)); Рис. 14.15. Программа банковских счетов (чааь 4 из 5)



if (client.acctNum != 0) {

ClientData blankClient = (О, , , 0);

deleteFromFile.seekp((account - 1) * sizeof(client)); deleteFromFile-write((char *)SblankClient, sizeof(client)); cout << Счет № account << удален. endl;

else

cout Счет № account пустой. << endl;

Вывод строки с информацией о клиенте void outputLine(ostream soutput, clientData с) (

output setiosflags(ios::left) setw(6) c.acctNum

setw(16) c.lastName setw(ll) c.firstName << setiosflags(ios::showpoint I ios::right) setw(10) setprecision(2) c.balance endl;

Рис. 14.15. Программа банковских счетов (часть 5 из 5)

14.12. Обработка потоков строк

в дополнение к стандартному потоку ввода-вывода и файловому потоку ввода-вывода в С++ имеется возможность для ввода из символьных массивов в память и вывода в символьный массив из памяти. Эта возможностям часто называется форматированным вводом-выводом в память или обработкой потоков строк.

Ввод символьного массива поддерживается при помощи класса istrstream. Вывод в символьный массив поддерживается с помощью класса ostrstream. Класс istrstream наследует функциональные возможности класса istream. Класс ostrstream наследует функциональные возможности класса ostream. Программы, которые используют форматированный ввод-вывод в память, должны включать заголовочные файлы <strstream.h> и <iostream.h>.

Одним из применений этих методов является проверка достоверности данных. Программа может читать строку целиком из входного потока в массив символов. Затем может подключаться процедура, проверяющая достоверность данных, корректирующая (или восстанавливающая) их, если это необходимо. А затем программа может обрабатывать вводимые из символьного массива данные, зная, что все они соответствующим образом отформатированы.

Вывод в символьный массив является прекрасным способом использования мощных возможностей форматирования потоков в С++. Данные могут быть подготовлены в символьном массиве, имитирующем формат экранного редактора. Такой массив может быть записан в файл на диск для сохранения изображения экрана.

Объект ostrstream может использоваться двумя способами. Первый способ использует динамически размещаемый символьный массив вывода, который пересылается в объект ostrstream. Как только вывод завершен, объект может быть заморожен функцией-элементом str, чтобы в дальнейшем для вывода не надо было делать пересылок в этот объект. Функция-элемент str возвращает указатель типа char * на начало объекта массива в памяти. Этому указателю можно присвоить значение переменной типа char * и ссылаться на него как на любой символьный массив в С++.



Рис. 14.16 демонстрирует динамически размещаемый объект ostrstream. Программа создает объект outputString класса ostream и использует операцию поместить в поток для вывода набора строк и численных значений в объект. Манипулятор потока ends помещает нулевой символ (\0) в конце вывода данных в outputString. Затем программа замораживает содержимое потока outputString функцией-элементом str и присваивает переменной указателю result указатель на начало массива в памяти. Далее массив выводится в виде строки. Программа проверяет состояние потока outputString перед тем, как поместить в него информациюю После того, как функция-элемент str вызвана, предпринимается следующая попытка поместить в поток.

Второй способ использования объекта класса ostrstream - передача ему трех аргументов для конструктора класса ostrstream: символьного массива, его длины и режима открытия потока (ios::out или ios::app). Если задан режим ios::app, то символьный массив воспринимается как строка, заканчивающаяся нулевым символом, и информация помещается, начиная с позиции этого нулевого символа.

figl4 16.cpp

Использование динамически размещаемого объекта класса ostrstream. iinclude <iostream.h> iinclude <strstream.h> main() {

ostrstream outputString;

char *sl = Вывод нескольких типов данных , *s2 = в объект класса ostrstream: , *s3 = \n double: ,

*s4 = \n int: , *s5 = Хпадрес int: , ♦result;

double d = 123.4567; int i = 22;

cout Состояние потока outputString

<< перед помещением в него данных: outputString.rdstate() << endl;

outputString << si s2 s3 d

s4 i s5 &i ends; result = outputString.str0;

outputString ПРОВЕРКА ПОМЕЩЕНИЯ В ПОТОК ПОСЛЕ ВЫЗОВА str ;

cout << endl Состояние outputString после вызова str

endl << и следующей попытки помещения данных в поток: outputString.rdstate() endl endl Динамически созданная строка содержит: << endl endl result endl;

return 0; }

Рис. 14.16. Использование динамически размещаемого объекта класса ostrstream

(часть 1 из 2)



1 ... 252 253 254 [ 255 ] 256 257 258 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика