钱能C++教材习题答案十二

   /2005-05-08

 

第16章

//************
//***16.1*****
//*Daiyuebing*
//************
# include "account.h"
# include "savings.h"
# include "checking.h"
# include <iostream.h>

void main()
{

        Account *  p;
        Account *  q;
        unsigned accNo;
        float balan;
        cout<<"please input acneNumber and balance:"<<endl;
        cin>>accNo>>balan;
        while(accNo!=0)
        {
                int i;
                cout<<"please choice (1--储蓄    其它--结算):"<<endl;
                cin>>i;
                if(i=1)
                {
                       
                        p=(new Savings(accNo,balan));
                }
                else
                {
               
                        q=(new Checking(accNo,balan));
                }
                cout<<"please input acneNumber and balance:";
                cin>>accNo>>balan;
        }
        Account *  x=p->First();//此处的()表示成员函数,即为P所指对象的成员函数
        for(;x!=NULL;x=x->Next())
        {
                x->Display();
        }       
}


//************
//***16.2*****
//*Daiyuebing*
//************
//account.h
# include <iostream.h>
# ifndef account
# define account

class Account
{
        public:
                Account(unsigned accNo,float balan=0.0);
                ~Account()
                {
                        cout<<"Distroy..."<<endl;
                };
                unsigned AccountNo();
                float AcntBalan();
                static Account * First();
                Account * Next();
                static int NoAccounts();
                virtual void Display();//此处需要设置的虚函数
                void Desposit(float amount);
                virtual void Withdrawal(float amount);
        protected:
                static Account * pFirst;
                Account * pNext;
                static int count;
                unsigned acntNumber;
                float balance;
};

# endif

Account * Account::pFirst=0;
int Account::count=0;

Account::Account(unsigned accNo,float balan)
{
        acntNumber=accNo;
        balance=balan;
        pNext=0;
        count++;
        if(pFirst==0)
                pFirst=this;
        else
        {
                Account * pS=pFirst;
                for(;pS->pNext;pS=pS->pNext);
                pS->pNext=this;
        }
        pNext=0;
        cout<<"Construct..."<<endl;
}

unsigned Account::AccountNo()
{
        return acntNumber;
}

float Account::AcntBalan()
{
        return balance;
}

Account * Account::First()
{
        return pFirst;
}

Account * Account::Next()
{
        return pNext;
}

int Account::NoAccounts()
{
        return count;
}

void Account:isplay()
{
        cout<<"Account number:"<<acntNumber
                <<"    balance:"<<balance<<endl;
}

void Account:esposit(float amount)
{
        balance+=amount;
}

void Account::Withdrawal(float amount)
{
        return;
}

// checking.h


enum REMIT{remitByPost,remitByCable,other};

class Checking:public Account
{
        public:
                Checking(unsigned accNo,float balan=0.0);
                virtual void Withdrawal(float amount);
                void SetRemit(REMIT re);
                void Display();//************************************
        protected:
                REMIT remittance;
};
void Checking:isplay()
{
        cout<<"Checking number:"<<acntNumber
                <<"    balance:"<<balance
                <<"    remittance:"<<remittance<<endl;
}
Checking::Checking(unsigned accNo,float balan):Account(accNo,balan)
{
        remittance=other;
}

void Checking::Withdrawal(float amount)
{
        float temp=amount;
        if(remittance==remitByPost)
                temp=amount+30;
        else if(remittance==remitByCable)
                temp=amount+60;

        if(balance<temp)
                cout<<"Insufficient funds:balance"<<balance
                        <<",withdrawal"<<temp<<endl;
        else
                balance-=temp;
}

void Checking::SetRemit(REMIT re)
{
        remittance=re;
}

 


class Savings:public Account
{
        public:
                Savings(unsigned accNo,float balan=0.0);
                virtual void Withdrawal(float amount);
                void Display();//********************************
        protected:
                static float minbalance;
};
float Savings::minbalance=500.0;
void Savings:isplay()
{
        cout<<"Savings number:"<<acntNumber
                <<"    balance:"<<balance
                <<"    minbalance:"<<minbalance<<endl;
}
Savings::Savings(unsigned accNo,float balan):Account(accNo,balan){}

void Savings::Withdrawal(float amount)
{
        if(balance+minbalance<amount)
                cout<<"Insufficient funds:balance"<<balance
                        <<",withdramal"<<amount<<endl;
        else
                balance-=amount;
}

 

Account a1(12,123);
Account a2(123,123);
Account a3(124,123);
Account a4(125,123);

Savings s1(12,123);
Savings s2(123,123);
Savings s3(124,123);
Savings s4(125,123);

Checking c1(12,123);
Checking c2(123,123);
Checking c3(124,123);
Checking c4(125,123);

void fn(Account * y)
{
        y->Display();
}

void main()
{
        Account *  x=s1.First();
        cout<<endl;
        for(;x!=0;x=x->Next())
        {
                fn(x);
        }       
}

//************
//***16.4*****
//*Daiyuebing*
//************
# include <iostream.h>
//****************************************************************************
class Account
{
        public:
                Account(unsigned accNo,float balan=0.0);
                unsigned AccountNo();
                float AcntBalan();
                static Account * First();
                Account * Next();
                static int NoAccounts();
                virtual void Display();
                void Desposit(float amount);
                virtual void Withdrawal(float amount);
        protected:
                static Account * pFirst;
                Account * pNext;
                static int count;
                unsigned acntNumber;
                float balance;
};
//****************************************************************************
Account * Account::pFirst=0;
int Account::count=0;


相关话题/

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19