Вот как выглядит исходный текст данной программы.
/* BUDGET1.CPP — "Функциональная" программа бюджета */
#include
#include
#include
using namespace std ;
/* Максимальное количество счетов */
const int maxAccounts = 10 ;
/* Данные, описывающие счёт */
unsigned accountNumber[ maxAccounts ] ;
double balance[ maxAccounts ] ;
/* Прототипы функций */
void process( unsigned & accountNumber ,
double & balance ) ;
void init( unsigned* pAccountNumber ,
double* pBalance ) ;
/* main — собирает начальные входные данные и выводит конечные суммы */
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
cout << "Нажмите С для продолжения, X для выхода:\n" ;
// Цикл ввода
int noAccounts = 0 ; /* Количество счетов */
/* Нельзя создать счетов больше, чем выделено места */
cout << "Программа создаёт банковские счета\n" << endl ;
while ( noAccounts < maxAccounts )
{
char transactionType ;
cout << "С для создания счёта, X для выхода: " ;
cin >> transactionType ;
/* Выход, если пользователь ввёл X */
if ( transactionType == 'x' ||
transactionType == 'X' )
{
break ;
}
/* Если введено С */
if ( transactionType == 'c' ||
transactionType == 'C' )
{
/* Инициализация нового счёта */
init( & accountNumber[ noAccounts ] ,
& balance[ noAccounts ] ) ;
/* Ввод информации о транзакции */
process( accountNumber[ noAccounts ] ,
balance[ noAccounts ] ) ;
/* Увеличение индекса */
_________________
344 стр. Часть 6. Великолепная десятка
noAccounts++ ;
}
}
double total = 0 ;
cout << "Информация о счёте\n" ;
for ( int i = 0 ; i < noAccounts ; i++ )
{
cout << "Баланс счёта "
<< accountNumber[ i ]
<< " = "
<< balance[ i ]
<< "\n" ;
/* Накопление общей информации */
total += balance[ i ] ;
}
// Вывод
cout << "Баланс по всем счетам = "
<< total
<< "\n" ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ;
return 0 ;
}
/* init — Инициализация счёта путём чтения номера и обнуления баланса */
void init( unsigned* pAccountNumber ,
double* pBalance )
{
cout << "Введите номер счёта:" ;
cin >> *pAccountNumber ;
*pBalance = 0.0 ;
}
/* process — Обновление баланса */
void process( unsigned & accountNumber ,
double & balance )
{
cout << "Введите положительную сумму вклада,\n"
<< "отрицательную сумму для снятия со счёта\n"
<< "или нуль для завершения работы\n"
<< endl ;
double transaction ;
do
{
cout << ":" ;
cin >> transaction ;
// Вклад
if ( transaction > 0 )
_________________
345 стр. Глава 31. Программа BUDGET
{
/* Добавление на счёт */
balance += transaction ;
}
/* Снятие со счёта */
if ( transaction < 0 )
{
transaction = -transaction ;
if ( balance < transaction )
{
cout << "Недостаточно денег: всего"
<< balance
<< ", снимаем "
<< transaction
<<" \n" ;
}
else
{
balance -= transaction ;
}
}
} while ( transaction != 0 ) ;
}
Демонстрация работы данной программы:

Нажмите С для продолжения, X для выхода:
Программа создаёт банковские счета
С для создания счёта, X для выхода: С
Введите номер счёта: 1234
Введите положительную сумму вклада,
отрицательную сумму для снятия со счёта
или нуль для завершения работы
: 200
: -100
: -200
Недостаточно денег: всего 100 , снимаем 200
: 0
С для создания счёта, X для выхода: с
Введите номер счёта: 2345
Введите положительную сумму вклада,
отрицательную сумму для снятия со счёта
или нуль для завершения работы
: 200
: -50
: -50
: 0
С для создания счёта, X для выхода: х
Информация о счёте
Баланс счёта 1234 = 100
Баланс счёта 2345 = 100
Баланс по всем счетам = 200
Press any key to continue...
_________________
346 стр. Часть 6. Великолепная десятка
Разберёмся в том, как работает BUDGET . В этой программе было создано два массива, один из которых содержит номера счетов, а второй — балансы. Эти массивы синхронизированы таким образом, что элемент balance[ n ] содержит баланс счёта с номером из accountNumber[ n ] , независимо от значения n . В связи с ограничением длины массива количество счетов, содержащихся в программе, не может превышать MAXACCOUNTS .
Читать дальше