C++银行账户加强版

银行账户加强版
建议新手观看,并从简单版编起

//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;
}

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值