银行账户加强版
建议新手观看,并从简单版编起
//date.h
#ifndef DATE_H
#define DATE_H
class DATE{
private:
int year;
int month;
int day;
public:
DATE(int year,int month,int day);
~DATE(){}
int getyear()const{return year;}
int getmonoth()const{return month;}
int getday()const{return day;}
int getmonthday(); //当年每月的天数之和
int ALL(); //计算相差总天数
void show() const; //显示准确日期
};
#endif
``
#include "date.h"
#include<iostream>
using namespace std;
DATE::DATE(int year,int month,int day):
year(year),month(month),day(day){}
int DATE::getmonthday(){
int allmonth[12]={0,31,59,90,120,151,181,212,243,273,304,334}; //利用数组计算当年的天数
return allmonth[month];
}
int DATE::ALL(){
if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0)&&month>2){ //当年为闰年
return 365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+getmonthday()+day+1;
}
else{ //当年为平年
return 365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+getmonthday()+day;
}
}void DATE::show() const{
cout<<year<<"年"<<month<<"月"<<day<<"日";
}
```cpp
//count.h
#ifndef Account_h
#define Account_h
#include<iostream>
#include<cmath>
using namespace std;
#include "date.h"
#include<string>
class SaveAccount{
private:
string id;
double balance,rate;
DATE lastdate;
double accumulation; //每日累计金额
double static total; //计算所有账户全部金额
public:
SaveAccount(string id,double rate,DATE date);
SaveAccount(); //设置默认参数
~SaveAccount(){}
string getid() const{return id;}
double getrate() const{return rate;}
double getbalance() const{return balance;}
void deposit(DATE date,double amount,string des); //存钱操作条件
void withdraw(DATE date,double amount,string des); //取钱操作
void record(DATE date,double amount); //改变balance,
double accumulate(DATE date); //计算返回每日累计金额accumulation
void settle(DATE date,string des); //计算截至日期内的利息
void show()const; //显示账户余额
};
#endif
//account.cpp
#include "count.h"
#include<iostream>
#include<cmath>
#include "date.h"
#include<string>
using namespace std;
/*每个操作(成员函数)只能做赋值累加积累,不能记录每个数据
函数(操作)是根据事情性质来添加参数的,作为外部改变的窗口*/
SaveAccount::SaveAccount(string id,double rate,DATE date):
id(id),rate(rate),lastdate(date),balance(0),accumulation(0)
{
lastdate.show();
cout<<"\t#"<<id<<" is created"<<endl;
}
SaveAccount::SaveAccount():lastdate(1,1,1)
{
id="0";rate=0.015;balance=0;accumulation=0;
}
//计算每日积累金额
double SaveAccount::accumulate(DATE date){
return accumulation+balance*(date.ALL()-lastdate.ALL());
//accumulation是累计赋值,天数不断改变
}
//存钱
void SaveAccount::deposit(DATE date,double amount,string des)
{ date.show();
cout<<"\t#"<<id<<"\t"<<des<<"\t"<<amount<<endl;
record(date,amount);
}
//取钱
void SaveAccount::withdraw(DATE date,double amount,string des)
{
if(amount>getbalance())
cout<<"Error:not enough money"<<endl;
else
date.show();
cout<<"\t#"<<id<<"\t"<<des<<"\t"<<amount<<endl;
record(date,-amount);
}
//计算改变每次存取钱余额变化
void SaveAccount::record(DATE date,double amount){
//成员函数里通过相同参数函数改变
accumulation=accumulate(date);
lastdate=date;
amount=floor(amount*100+0.5)/100; //保留小数点后两位
balance+=amount;
}
//计算利息
void SaveAccount::settle(DATE date,string des){
double interests=accumulate(date)*rate/365;
if(interests!=0)
record(date,interests); //把利息传给余额总值
accumulation=0;
date.show();
cout<<"\t#"<<id<<"\t"<<des<<"\t"<<interests<<endl;
}
void SaveAccount::show()const{
lastdate.show();
cout<<"\t"<<"#"<<id<<"\t利率:"<<rate<<"\tBalance:"<<balance<<endl;
}
实现代码:
//test.cpp
#include "count.h"
#include "date.h"
#include<string>
#include<iostream>
using namespace std;
int main(){
//确定创建几个用户
SaveAccount s[2]={
SaveAccount("1",0.015,DATE(2020,1,1)),
SaveAccount("2",0.015,DATE(2020,1,1)),
};
//进行的交易
s[0].deposit(DATE(2020,1,6),5000,"存入");
s[0].deposit(DATE(2020,2,20),5500,"存入");
s[1].deposit(DATE(2020,1,3),10000,"存入");
s[1].withdraw(DATE(2020,3,1),4000,"取出");
//结算年利息
s[0].settle(DATE(2020,3,31),"结算");
s[1].settle(DATE(2020,3,31),"结算");
//展现客户交易最后信息
s[0].show();
s[1].show();
return 0;
}
结果