1、为savingaccount增加一个静态数据成员total来记录各个账户的总金额,相应的静态成员函数getTotal用来对其访问。
2、将getbalance,accumulate这些成员函数改为常成员函数
3、将SavingAccount类从主函数所在的源文件中分开,建立两个新文件account.h和account.cpp,分别存放在SavingAccount类的定义和实现。
//整个程序分为三个部分:account.h是类定义头文件,account.cpp是类实现文件,1.cpp是主函数文件 //account.h #ifndef__ACCOUNT_H__ #define__ACCOUNT_H__ class SavingAccount{ private: int id; //账户 double balance; //余额 double rate; //年利率 int lastdate; //余额上一次变化的日期 double accumulation; //余额按日累加之和 int accumulate (int date) const; //获得到指定日期位置的存款累计值 double getbalance () const{return balance;} double getrate() const {return rate;} static double total; //所有账户的总金额 void record(int date,double amount); //记账 public: SavingAccount(int date,int id,double rate); //构造函数 static double getTotal(){return total;} void deposit(int date,double amount); //存款 void withdrawl(int date,double amount); //取款 void show(); //显示余额 void settle(int date); //结算利息,每年一月一日调用此函数 }; #endif//__ACCOUNT_H__ //account.cpp #include "account.h" #include<cmath> #include<iostream> using namespace std; double SavingAccount::total(0); //给静态成员数据赋值 //类的成员函数的实现 SavingAccount::SavingAccount(int date,int id,double rate):id(id),balance(0),rate(rate),lastdate(date),accumulation(0){ cout<<"#"<<id<<"is created"<<endl; } int SavingAccount::accumulate(int date){ return accumulation+balance*(date-lastdate); } void SavingAccount::record(int date,double amount){ lastdate=date; amount=floor(100*amount+0.5)/100; //floor为向下取整函数,此处可以做到保留两位小数 balance+=amount; cout<<date<<"\t#"<<id<<"\t"<<amount<<"\t"<<balance<<endl; } void SavingAccount::deposit(int date,double amount){ record(date,amount); } void SavingAccount::withdrawl(int date, double amount){ if(amount>balance) cout<<"not enough money"<<endl; else record(date,-amount); } void SavingAccount::show(){ cout<<"#"<<id<<"\tBalance"<<balance<<endl; } void SavingAccount::settle(int date){ double interest=accumulate(date)*rate/365; //计算年息 if(interest!=0) record(date,interest); accumulation=0; } //1.cpp #include"account.h" #include<iostream> using namespace std; int main() { SavingAccount s1(0,11111,0.015); SavingAccount s2(1,22222,0.015); s1.deposit(5,5000); s2.deposit(25,10000); s1.deposit(45,5500); s2.withdrawl(60,11000); s1.settle(90); s2.settle(90); s1.show(); s2.show(); cout<<"Total:"<<SavingAccount::getTotal()<<endl; return 0; }
不知道为什么要这么做