源程序及说明如下:
1 /* 2 设计一个类SavingsAccount,将id,balance,rate作为成员数据,将show,deposit,withdraw,settle作为其成员函数 3 计算利息:由于账户的余额是不断变化的。需要将一年当中每天的余额累积起来再除以一年的总天数,得到一个日均余额,再乘以年利率。 4 为简便起见,该类中的所有日期均用一个整数来表示该整数是一个以日为单位的相对日期 5 */ 6 7 #include<iostream> 8 #include<cmath> 9 using namespace std; 10 class SavingsAccount{ 11 public: 12 SavingsAccount(int date,int id,double rate); 13 int getId(){return id;} 14 double getBalance(){return balance;} 15 double getRate(){return rate;} 16 void deposit(int date,double amount);//存入现金 17 void withdraw(int date,double amount);//取出现金 18 //结算利息,每年1月1日调用一次该函数 19 void settle(int date); 20 //显示账户信息 21 void show(); 22 23 private: 24 int id;//帐号 25 double balance;//余额 26 double rate;//存款的年利率 27 int lastDate;//上次变更余额的日期 28 double accumulation;//余额按日累加之和 29 //记录一笔账,date为日期,amount为余额,desc为说明 30 void record(int date,double amount); 31 //获得到指定日期为止的存款余额按日累积值 32 double accumulate(int date) const { 33 return accumulation+balance*(date-lastDate); 34 } 35 36 }; 37 SavingsAccount::SavingsAccount(int date,int id,double rate) 38 :id(id),balance(0),rate(rate),lastDate(date),accumulation(0){ 39 cout<<date<<" #"<<id<<" is created"<<endl; 40 } 41 void SavingsAccount::record(int date,double amount){ 42 accumulation=accumulate(date); 43 lastDate=date; 44 amount=floor(amount*100+0.5)/100;//保留小数点后两位 45 balance+=amount; 46 cout<<date<<" #"<<id<<" "<<amount<<" "<<balance<<endl; 47 } 48 void SavingsAccount::deposit(int date,double amount){ 49 record(date,amount); 50 } 51 void SavingsAccount::withdraw(int date,double amount){ 52 if(amount>getBalance()) 53 cout<<"Erro:not enough money"<<endl; 54 else 55 record(date,-amount); 56 } 57 void SavingsAccount::settle(int date){ 58 double interest=accumulate(date)*rate/365; 59 if(interest!=0) 60 record(date,interest); 61 accumulation=0; 62 } 63 void SavingsAccount::show(){ 64 cout<<"#"<<id<<" Balance:"<<balance<<endl; 65 } 66 67 int main(){ 68 //建立几个账户 69 SavingsAccount sa0(1,17120701,0.015); 70 SavingsAccount sa1(1,17120702,0.015); 71 //几笔帐目 72 sa0.deposit(5,5000); 73 sa1.deposit(25,10000); 74 sa0.deposit(45,550); 75 sa1.withdraw(60,4000); 76 //开户后第90天到了银行的计息日,结算所有账户的年息 77 sa0.settle(90); 78 sa1.settle(90); 79 //输出各个账户信息 80 sa0.show(); 81 sa1.show(); 82 return 0; 83 }
运行结果: