Читать «С++ для "чайников" .» онлайн - страница 236

Стефан Рэнди Дэвис

    class Savings

    {

    public :

        Savings( int initialAN = 0 )

            : accountNumber( initialAN ) ,

              balance( 0.0 ) , noWithdrawals( 0 ) { }

        /* функции обращения */

        int accountNo( )

        {

            return accountNumber ;

        }

        double acntBalance( )

        {

            return balance ;

        }

        /* функции транзакций */

        void deposit( double amount )

        {

            balance += amount ;

        }

        void withdrawal( double amount ) ;

        /* Функция display — отображает объект */

        void display( )

        {

            cout << "Счёт " << accountNumber

                 << " = " << balance

                 << " ( номер снятия = "

                 << noWithdrawals

                 << " )\n" ;

        }

    protected :

        unsigned accountNumber ;

        double balance ;

        int noWithdrawals ;

    } ;

    void Savings::withdrawal( double amount )

    {

        if ( balance < amount )

        {

            cout << "Недостаточно денег на счёте: "

                 << "баланс равен " << balance

                 << ", снимается " << amount

                 << "\n" ;

        }

        else

        {

        /* После первого в месяце снятия денег... */

_________________

350 стр. . Великолепная десятка

            if ( ++noWithdrawals > 1 )

            {

            /* ...удерживать $5 */

            balance -= 5.00 ;

            }

            /* Снять деньги */

            balance -= amount ;

        }

    }

    /* Объявление прототипов */

    void process( Checking* pChecking ) ;

    void process( Savings* pSavings ) ;

    /* Объекты чековых и сберегательных счетов */

    Checking* chkAcnts[ maxAccounts ] ;

    Savings* svgAcnts[ maxAccounts ] ;

    /* main — собирает и выводит данные */

    int main( int argcs , char* pArgs[ ] )

    {

        setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */

        /* Повторять цикл до ввода 'X' или 'х' */

        int noChkAccounts = 0 ; /* Содержит количество счетов */

        int noSvgAccounts = 0 ;

        char accountType ; /* Тип счёта — 'S' или 'С' */

        while ( 1 )

        {

            cout << "Введите S для сберегательных счетов, " << "\n"

                 << "С для чековых, "

                 << "X для выхода:" ;

            cin >> accountType ;

        /* Выйти из цикла, если пользователь введёт X */

        if ( accountType == 'x' || accountType == 'X' )

        {

            break ;

        }

        /* В противном случае обрабатывать соответствующий счёт */

        switch ( accountType )

        {

        /* чековые счета */

            case 'c' :

            case 'C' :

            if ( noChkAccounts < maxAccounts )

            {

                int acnt ;

                cout << "Введите номер счёта:" ;

                cin >> acnt ;

                chkAcnts[ noChkAccounts ] = new Checking( acnt ) ;

                process( chkAcnts[ noChkAccounts ] ) ;