对银行存储用户对象的描述

//4.9_cpp
#include <iostream>
#include <cmath>
using namespace std;

class SavingsAccount{//储蓄账户类
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:
    //构造函数
    SavingsAccount(int date,int id,double rate);
    int getId() const{return id;}
    double getBalance() const{return balance;}
    double getRate() const{return rate;}

    //存入现金
    void deposit(int date,double amount);
    //取出现金
    void withdraw(int date,double amount);
    //结算利息,每年1月1日调用一次该函数
    void settle(int date);
    //显示账户信息
    void show() const;
};

//SavingsAccount类相关成员函数的实现
SavingsAccount::SavingsAccount(int date, int id, double rate) :
id(id),balance(0),rate(rate),lastDate(date),accumulation(0){}

void SavingsAccount::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 SavingsAccount::deposit(int date, double amount) {
    record(date,amount);
}

void SavingsAccount::withdraw(int date, double amount) {
    if(amount>getBalance())
        cout<<"Error : not enough money"<<endl;
    else
        record(date,-amount);
}

void SavingsAccount::settle(int date) {
    double interest = accumulate(date)*rate /365;
    if(interest!=0)
        record(date,interest);
    accumulation=0;
}

void SavingsAccount::show() const{
    cout<<"#"<<id<<"\tBalance:"<<balance;
}
int main()
{
    //建立几个账户
    SavingsAccount sa0(1,21325302,0.015);
    SavingsAccount sa1(1,58320212,0.015);

    //几笔数目
    sa0.deposit(5,5000);
    sa1.deposit(25,10000);
    sa0.deposit(45,5500);
    sa1.withdraw(60,6000);

    //开户后第九十天到了银行的计息日,结算所有账户的年息
    sa0.settle(90);
    sa1.settle(90);

    //输出各个账户信息
    sa0.show();cout<<endl;
    sa1.show();cout<<endl;

    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值