/* Savings — свойства, уникальные для сберегательного счёта */
class Savings : public Account
{
public :
Savings::Savings( AccountLinkedList* pLL ,
unsigned accNo ) :
Account( pLL , accNo )
{ noWithdrawals = 0 ; }
/* Функции транзакций */
virtual bool withdrawal( double amount ) ;
virtual char* type( ) { return "Сберегательный" ; }
protected :
int noWithdrawals ;
} ;
/* withdrawal — перегрузка Account::withdrawal( ) */
bool Savings::withdrawal( double amount )
{
if ( ++noWithdrawals > 1 )
{
balance -= 5.00 ;
}
return Account::withdrawal( amount ) ;
}
/* Прототипы функций */
unsigned getAccntNo( ) ;
void process( Account* pAccount ) ;
void getAccounts( AccountLinkedList* pLinkedList ) ;
void displayResults( AccountLinkedList* pLinkedList ) ;
/* main — собирает и выводит данные */
int main( int argcs , char* pArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
/* Создание связанного списка */
AccountLinkedList* pLinkedList = new AccountLinkedList( ) ;
/* Чтение пользовательского ввода */
getAccounts( pLinkedList ) ;
/* Вывод связанного списка */
displayResults( pLinkedList ) ;
_________________
360 стр. Часть 6. Великолепная десятка
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
/* getAccounts — загрузка массива счетов */
void getAccounts( AccountLinkedList* pLinkedList )
{
Account* pA ;
/* Цикл, пока не введено 'X' или 'х' */
char accountType ; /* S или С */
while ( true )
{
cout << "Введите S для сберегательного счёта,\n"
<< "С для чекового, X для выхода: " ;
cin >> accountType ;
switch ( accountType )
{
case 'c' :
case 'C' :
pA = new Checking( pLinkedList , getAccntNo( ) ) ;
break ;
case 's' :
case 'S' :
pA = new Savings( pLinkedList , getAccntNo( ) ) ;
break ;
case 'x' :
case 'X' :
return ;
default :
cout << "Неверный ввод.\n" ;
}
/* Обработка вновь созданного объекта */
process( pA ) ;
}
}
/* displayResults — вывод информации о счетах в связанном списке */
void displayResults( AccountLinkedList* pLinkedList )
{
double total = 0.0 ;
cout << "\nИтоговая информация:\n" ;
for ( Node* pN = Node::firstNode( pLinkedList ) ;
pN != 0 ;
pN = pN -> nextNode( ) )
{
Account* pA = pN -> currentAccount( ) ;
pA -> display( ) ;
total += pA -> acntBalance( ) ;
}
_________________
361 стр. Глава 31. Программа BUDGET
cout << "Итого = " << total << "\n" ;
}
/* getAccntNo — номер счёта для его создания */
unsigned getAccntNo( )
{
unsigned accntNo ;
cout << "Введите номер счёта: " ;
cin >> accntNo ;
return accntNo ;
}
/* process( Account ) — обработка счёта */
void process( Account* pAccount )
{