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

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


3 figl4 15. срр

Эта программа последовательно читает файл произвольного доступа,обновляет данные, уже записанные в файл, создает новые данные, которые размещаются в файле, и удаляет уже имеющиеся в файле старые данные #include <iostream..h> #include <fstream.h> iinclude <iomanip.h> iinclude <stdlib.h>

Опция 2 вызывает функцию updateRecord для обновления счета. Функция будет обновлять только существующую запись, поэтому функция сначала определяет, не является ли указанная запись незанятой. Запись считывается в структуру client с помощью функции-элемента read класса istream, затем client.acctNum сравнивается с нулем, чтобы определить, содержит ли запись какую-либо информацию. Если client.acctNum - нуль, то печатается сообщение, констатирующее, что запись является пустой, и на экран выводятся элементы меню. Если запись содержит какие-либо сведения, то функция updateRecord выводит запись на экране, используя функцию outputLine, затем вводит данные, вычисляет новый баланс и перезаписывает данных в файле. Типичный вывод для этой опции приведен ниже:

Введите счет , который следует обновить (1 - 100): 37 37 Barker Doug 0.00

Введите расход (+) или доплату (-): +81.99

37 Barker Doug 87.99

Опция 3 вызывает функцию newRecord для добавления нового счета в файл. Если пользователь вводит номер существующего счета, то newRecord выводит сообщение о том, что счет уже имеется, и выводит на экран элементы меню. Эта функция добавляет новый счет таким же образом, как программа на рис. 14.12. Типичный вывод для опции 3 следующий:

Введите новый номер счета (1 - 100): 22 Введите фамилию, имя, баланс ? Johnston Sarah 247.45

Опция 4 вызывает функцию deleteRecord для удаления записи из файла. Пользователю печатается приглашение ввести номер счета. Только существующая запись может быть удалена. Поэтому, если указанный счет является пустым, выводится сообщение об ошибке. Если счет существует, то он заново инициализируется путем копирования в файл незаполненной записи (blank-Client). На экран выводится сообщение о том, что запись удалена. Типичный вывод для опции 4 следующий:

Введите номер счета для удаления (1 - 100): 29 Счет № 29 удален

Опция 5 завершает выполнение программы. Программа показана на рис. 14.15. Файл credit.dat открывается путем создания объекта fstream для чтения и записи попеременным использованием режимов ios::in и ios::out.



Глава 14

struct clientData{ int acctNum; char lastName[15]; char firstName[10] ; float balance;

int enterChoice(void);

void textFile(fstreams);

void updateRecord(fstreams);

void newRecord(fstreams);

void deleteRecord(fstreams);

void outputLine (ostreams, clientData);

main () {

fstream inOutCredit( credit.dat , ios::in ios::out);

if (linOutCredit) {

cerr Файл не может быть открыт.

endl; exit (1);

int choice;

while ( ( choice = enterChoice ( ) )

5 ) (

switch (choice) { case 1:

textFile(inOutCredit);

break; case 2:

updateRecord(inOutCredit);

break; case 3:

newRecord(inOutCredit);

break; case 4:

deleteRecord(inOutCredit);

break; default:

cerr << Incorrect choice endl; break;

>

inOutCredit. clear ( );

сброс индикатора конца файла

return 0;

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



Приглашение выбрать раздел меню int enterChoice(void)

cout endl Выберите: endl

<< 1 - создание текстового форматированного файла счетов

endl

с именем \ print.txt\ * для печати endl

2 - изменение счета endl

3 - добавление нового счета endl

<< 4 - удаление счета endl

5 - конец работы endl ? ;

int menuChoice; cin menuChoice; return menuChoice;

Создание форматированного текстового файла для печати

void textFile(fstream sreadFromFile)

ofstream outPrintFile( print.txt , ios::out);

if (!outPrintFile) {

cerr Файл не может быть открыт. endl; exit (1);

outPrintFile setiosflags (ios :: left) setw(6) Счет setw(16) Фамилия setw{ll) Имя setiosflags(ios::right) setw(10) Баланс endl;

readFromFile.seekg(0);

clientData client;

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

while (readFromFile.eof0) { if (client.acctNum != 0)

outputLine(outPrintFile, client);

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

Изменение баланса счета

void updateRecord(fstream fiupdateFile)

int account; do {

cout Введите счет, который следует обновить (1-100) : ; cin account; } while (account < 1 account > 100);

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



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

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