C++数据共享与保护static活期存款篇

设计活期存款类

题目: 设计活期存款类Deposit . 参考图1,每个账户有帐号(自动编号)、户名、密码、金额、月利率(静态成员)、开户时间6项信息。银行每月1号要根据账户余额发给客户利息,利息被累计到客户存款余额中。
分析:活期存款类Deposit需要设计的成员变量:

		int account; //账户 
		string name;//姓名 
		int password;//密码 
		double balance;//余额 
		static double interest;//月利率 
		static int num;//自动计数 
		Date date;//日期类 
		Date first_date = date;//开户日期类 

,时间可以放到一个结构体或者类中:

	private:
		int year,month,day;//日期年月日 
	public:
		Date(int y,int m,int d){
			year=y;month=m;day=d;// 日期类构造函数 
		}
		void setdate(int y,int m,int d){
			year=y;month=m;day=d;//设置日期 
		}
		void showdate(){//输出日期 
			cout<<year<<'-'<<month<<'-'<<day<<endl;
		}
		int time(int y,int m,int d){ //计算月份差 
			return (y-year)*12+m-month;
		}

,Deposit的成员函数设计比较简易:

		Deposit(string,int,double,int,int,int);//账户构造函数 
		static void setndate(int,int,int);//需要计算日期的时间 
		void show();//输出账户信息 
		static void Change_intereat(double);//改变利率 
		void new_balance(int ,int,int);//计算新的余额

程序思路:对象的构造就是一个构造函数,然后银行每月对账户余额进行发放利息,这里可以取巧一下,不用每月计算一次,可以用new_balance函数输入日期计算余额而不是真的去每月计算一次,但这样不能直接月利率月份差本金,而是要用循环(后面有代码);改变利率是用static的一个函数实现。
代码:

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class Date{
	private:
		int year,month,day;//日期年月日 
	public:
		Date(int y,int m,int d){
			year=y;month=m;day=d;// 日期类构造函数 
		}
		void setdate(int y,int m,int d){
			year=y;month=m;day=d;//设置日期 
		}
		void showdate(){//输出日期 
			cout<<year<<'-'<<month<<'-'<<day<<endl;
		}
		int time(int y,int m,int d){ //计算月份差 
			return (y-year)*12+m-month;
		}
};
class Deposit{
	private:
		int account; //账户 
		string name;//姓名 
		int password;//密码 
		double balance;//余额 
		static double interest;//月利率 
		static int num;//自动计数 
		Date date;//日期类 
		Date first_date = date;//开户日期类 
	public:
		Deposit(string,int,double,int,int,int);//账户构造函数 
		static void setndate(int,int,int);//需要计算日期的时间 
		void show();//输出账户信息 
		static void Change_intereat(double);//改变利率 
		void new_balance(int ,int,int);//计算新的余额 
};
Deposit::Deposit(string n,int p,double b,int y,int m,int d):date(y,m,d){
	this->account=++num;//从1开始 
	this->balance=b; 
	this->password=p;
	name = n;//‘=’是深拷贝 
}



void Deposit::show(){
	cout.setf(ios::fixed);//设置固定小数位 
	cout<<account<<"   "<<name<<"	"<<password<<"	"<<setprecision(2)<<balance<<"	"<<setprecision(3)<<interest<<"	";
	first_date.showdate();//输出日期,返回值是void不能直接放到cout 
}
double Deposit::interest=0.005;//初始化月利率 
int Deposit::num=0;//初始化计数 
void Deposit::Change_intereat(double in){//改变月利率 
	interest=in;
}
void Deposit::new_balance(int y,int m,int d){
	int time=date.time(y,m,d);//计算月份差 
	for(int i=0;i<time;i++)//每月计算一次余额 
	balance+=balance*interest;
	date.setdate(y,m,d);//记录上一次的月份 
}

void nbalance(Deposit *dd,const int n,int y,int m,int d){//对所有账户计算余额 
	for(int i=0;i<n;i++){
		dd[i].new_balance(y,m,d);
	}
}

void allshow(Deposit* dd,const int n){ 
	cout<<"输出所有账户信息:"<<endl;
	for(int i=0;i<n;i++){
		dd[i].show();
	}
}

int main(){
	Deposit d1("张三",123456,10000,2017,3,1);
	Deposit d2("李四",112233,20000,2016,2,1);
	Deposit d3("王五",111111,15000,2017,5,1);
	Deposit d4("赵六",222222,58000,2016,7,1);
	Deposit d5("周七",888888,50000,2017,3,1);
	Deposit dd[]={d1,d2,d3,d4,d5};
	int num=5;
	cout<<"初始账户信息:"<<endl;
	allshow(dd,num); 
	int nyear,nmonth,nday;
	cout<<"2017-7-1  "; 
	nyear=2017;nmonth=7;nday=1;
	nbalance(dd,num,nyear,nmonth,nday);allshow(dd,num);
	cout<<"2017-8-1 调整利率为0.4%"<<endl;
	nyear=2017;nmonth=8;nday=1; 
	nbalance (dd,num,nyear,nmonth,nday);
	Deposit::Change_intereat(0.004);
	cout<<"2017-9-1 ";
	nyear=2017;nmonth=9;nday=1;
	nbalance(dd,num,nyear,nmonth,nday);allshow(dd,num);
	cout<<"2017-10-1 ";
	nyear=2017;nmonth=10;nday=1;
	nbalance(dd,num,nyear,nmonth,nday);allshow(dd,num);
	return 0;
}

补充:如果你想自己修改时间可以把主函数的nyear,nmonth,nday,修改一下,可以做成用cin输入值来计算,甚至可以做到模拟每月计算一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值