第六章 第一次综合实例
/*
* @Descripttion:
* @version: v_1.0.0
* @Author: Mailor
* @Email: xiaolele19980118@163.com
* @Date: 2021-01-06 21:40:18
* @LastEditors: Mailor
* @LastEditTime: 2021-01-07 01:57:44
*/
#ifdef _WIN64
#include <string>
#include <iostream>
#elif __APPLE__
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#endif
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){
accumulation = accumulate(date);
lastDate = date ;
amount = floor(amount*100 + 0.5) / 100 ; //小数点保留好后两位
balance += amount;
//理论上还应该把账单变动原因记录在数据库中;这里简单起见 直接 print
cout.setf(std::ios::left);//左对齐
cout<<"\t#人名的 id:";
cout.width(5);
cout<<id<<"变动金额: ";
cout.width(10);
cout<<amount<<"变动时间: ";
cout.width(8);
cout<<date<<"变动后,总金额为: "<<balance<<endl;
};
//获得指定日期为止的存款金额按日累加
double accumulate(int date) const {
return accumulation + balance * (date - lastDate);
}
public:
SavingsAccount(){}
SavingsAccount(int date, int id, double rate):lastDate(date),id(id),rate(rate),balance(0),accumulation(0){
cout<<"时间: "<<date<<"\t您创建了一个账户;"<<endl;
}
// ~SavingsAccount(){}
int getId(){return id;}
double getBalance(){return balance;}
double getRate(){return this->rate;}
//存入现金
void deposit(int date, double amount){
record(date,amount);
}
//取出现金
void withdraw( int date, double amount){
if(amount>balance){
cout<<"余额不足,请及时充值!"<<endl;
}//好像需要设置一种状态
record(date, (-1)*amount);
}
//结算利息
void settle(int date){
double interest = accumulate(date)*rate / 365; //计算年利息
if(interest>0){
record(date,interest);
}
accumulation = 0.0;
}
//显示账户信息
void show(){
cout.setf(std::ios::left);//左对齐
cout<<"人名 id:";
cout.width(3);
cout<<id<<"\t余额: ";
cout.width(8);
cout<<balance<<"\t存款年化利率: ";
cout.width(10);
cout<<rate<<"\t上次存款变动时间: "<<lastDate<<endl;
};
};
int main(){
//建立几个账户
SavingsAccount person1(1,0001,0.015);
SavingsAccount person2(2,0002,0.015);
person1.deposit(5,5000);
person2.deposit(25,100000);
person1.deposit(25,55000);
person2.deposit(45,250000);
person2.withdraw(90,5000);
//开户 200 天后 银行计算利息,进行清算
person2.settle(200);
person1.settle(200);
//person1 查询自己 的账户信息;
person1.show();
//person2 查询自己的账户信息
person2.show();
return 0;
}
输出::
时间: 1 您创建了一个账户;
时间: 2 您创建了一个账户;
#人名的 id:1 变动金额: 5000 变动时间: 5 变动后,总金额为: 5000
#人名的 id:2 变动金额: 100000 变动时间: 25 变动后,总金额为: 100000
#人名的 id:1 变动金额: 55000 变动时间: 25 变动后,总金额为: 60000
#人名的 id:2 变动金额: 250000 变动时间: 45 变动后,总金额为: 350000
#人名的 id:2 变动金额: -5000 变动时间: 90 变动后,总金额为: 345000
#人名的 id:2 变动金额: 2289.04 变动时间: 200 变动后,总金额为: 347289
#人名的 id:1 变动金额: 435.62 变动时间: 200 变动后,总金额为: 60435.6
人名 id:1 余额: 60435.6 存款年化利率: 0.015 上次存款变动时间: 200
人名 id:2 余额: 347289 存款年化利率: 0.015 上次存款变动时间: 200