#include <iostream>
#include <cmath>
using namespace std;
class savingaccount {
private:
int id; //账号
double balance; //余额
double rate; //存款的年利率
int lastdate; //上次余额变更的时间
double accumulation; //余额按日累加之和
//记录一笔账,date为日期,amount为金额,desc为说明
void record(int date, double amount);
//获得到指定日期为止的存款金额按日累积值
double accumulate(int date)const {
return accumulation + balance * (date - lastdate);
}
public:
savingaccount(int date, int id, double rate);
int getid() { return id; }
double getbalance() { return balance; }
double getrate() { return rate; }
void deposit(int date, double amount);//存钱
void withdraw(int date, double amount);//取钱
//结算利息,每年一月一日调用一次该函数
void settle(int date);
//显示账户信息
void show();
};
//类的成员函数实现
savingaccount::savingaccount(int date, int id, double rate):id(id),lastdate(date),rate(rate),accumulation(0),balance(0) {
cout << date << "\t#" << "is created" << endl;
}
void savingaccount::record(int date, double amount) {
accumulation = accumulate(date);
lastdate = date;
amount = floor(amount * 100 + 0.5) / 100;//保留小数点后两位
balance += amount;
cout << date << "\t#" << id << "\t#" << amount << "\t" << balance << endl;
}
void savingaccount::deposit(int date, double amount) {
record(date, amount);
}
void savingaccount::withdraw(int date,double amount) {
if (amount > getbalance())
cout << "Error:not enough money" << endl;
else
record(date, -amount);
}
void savingaccount::settle(int date) {
double interest = accumulate(date) * rate / 365; //计算年息
if (interest != 0)
record(date, interest);
accumulation = 0;
}
void savingaccount::show(){
cout<<"#"<<id<<"\tbalance:"<<balance<<endl;
}
int main() {
savingaccount sa(1, 2022052, 0.015);
savingaccount sb(1, 2022053, 0.015);
//几笔账目
sa.deposit(5, 500);
sb.deposit(25, 1000);
sa.deposit(45, 5500);
sb.withdraw(60, 400);
//开户后九十天到了银行的结息日,结算所有账户的年息
sa.settle(90);
sb.settle(90);
sa.show();
sb.show();
return 0;
}
初次发稿,多多指教