1、为savingaccount增加一个静态数据成员total来记录各个账户的总金额,相应的静态成员函数getTotal用来对其访问。
2、将getbalance,accumulate这些成员函数改为常成员函数
3、将SavingAccount类从主函数所在的源文件中分开,建立两个新文件account.h和account.cpp,分别存放在SavingAccount类的定义和实现。
//1.cpp
//在主函数中要将需要的函数头文件全部写出
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#include"account.h"
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;
}
//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"
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;
total++; //要对静态变量++
}
int SavingAccount::accumulate(int date)const{ //要加const
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;
}