静态成员(C++)

现需要处理银行活期存款业务,设账户类为,CAount,请根据如下需求实现该类,并在 main 函数中测试。
 每个账户需要有一个浮点型的成员 m_Money 用于存储账上余额;
 每个账户需要描述存款的日期;
 银行的年利息采用浮点型静态数据成员 m_InterestRate 描述,从而避免为每个账户存储利息;
 为年利息成员提供静态成员 SetInterestRate 进行设置;
 为年利息成员提供静态成员 GetInterestRate 进行获取;
 提供存款成员函数 SaveMoney;
 提供取款成员函数 LendMoney;
 提供计算利息函数 CalcInterest;
 提供结算利息函数 SaveInterest,该函数将计算出的利息结算到本金中。
 为简化计算,请考虑以下定义或限制:
1) 本题目不考虑闰年,每个月都认为 30 天,一年认为 360 天。
2) 存款仅考虑发生一次!
3) 取款允许发生多次,但取款是否允许需要考虑“本金是否足够”的条件银行相关业务和利息的计算方法如下:
(1). 假设年利率 m_InterestRate=0.036(表示 3.6%)。m_InterestRate 是静态成员变量,按照静态成员变量的感念,对所有账户 CAount 类的对象而言m_InterestRate 只有 1 个,这样才能实现一改全改的效果!
(2). 我于 2014-1-1 到银行存了 100000 元,m_Money=100000。
(3). 2014-3-10 银行给我“结算利息”一次。2014-1-1 到 2014-3-10 之间一共间隔了70 天,本金 m_Money=100000+100000*0.036/360*70=100700。“结算利息”以后,存款日期变为了 2014-3-10!
(4). 2014-3-30 我到银行想取款 200000,由于本金 m_Money 只有 100700,所以不允许取款!
(5). 2014-4-4 我到银行想取款 50000,由于本金有 100700,所以允许取款。2014-3-10 到 2014-4-4 之间一共间隔了 25 天,本次取得的金额是50000+50000*0.036/360*25=50125,本金 m_Money=100700-50000=50700(利息不从我的账户中扣除,这是由银行提供给我的回报),存款日期仍然维持为 2014-3-10
 

/*=======================================================
*学号:
*作业:E12
*功能:现需要处理银行活期存款业务,设账户类为,CAount,请
根据如下需求实现该类,并在 main 函数中测试。
 每个账户需要有一个浮点型的成员 m_Money 用于存储账上余额;
 每个账户需要描述存款的日期;
 银行的年利息采用浮点型静态数据成员 m_InterestRate 描述,从而避免为每个
账户存储利息;
 为年利息成员提供静态成员 SetInterestRate 进行设置;
 为年利息成员提供静态成员 GetInterestRate 进行获取;
 提供存款成员函数 SaveMoney;
 提供取款成员函数 LendMoney;
 提供计算利息函数 CalcInterest;
 提供结算利息函数 SaveInterest,该函数将计算出的利息结算到本金中。
*作者:
*日期:2016.5.2
*========================================================*/

#include<iostream>

using namespace std;
//创建一个Date类存储账户有关时间的变量
class Date
{
private:
	int saveDate[3];
	int lendDate[3];
	int closeDate[3];
public:
	void SetsaveDate(int year,int month,int day)
	{
		saveDate[0]=year;
		saveDate[1]=month;
		saveDate[2]=day;
	}
	void SetlendDate(int year,int month,int day)
	{
		lendDate[0]=year;
		lendDate[1]=month;
		lendDate[2]=day;
	}
	void SetcloseDate(int year,int month,int day)
	{
		closeDate[0]=year;
		closeDate[1]=month;
		closeDate[2]=day;
	}
	void update_saveDate()
	{
		saveDate[0]=closeDate[0];
		saveDate[1]=closeDate[1];
		saveDate[2]=closeDate[2];
	}
	int calcu_lend_save()
	{
		return ((lendDate[0]-saveDate[0])*360+(lendDate[1]-saveDate[1])*30+lendDate[2])-saveDate[2]+1;
	}
	int calcu_close_save()
	{
		return ((closeDate[0]-saveDate[0])*360+(closeDate[1]-saveDate[1])*30+closeDate[2])-saveDate[2]+1;
	}
};
//创建一个CAount类模拟银行账户
class CAount
{
private:
	double m_Money;
	static double m_InterestRate;
public:
	Date date;
	void display_m_Money(){cout<<m_Money<<endl;}
	//为年利息成员提供静态成员SetInterestRate进行设置
	static void SetInterestRate(double c_InterestRate)
	{
		m_InterestRate=c_InterestRate;
	}
	//为年利息成员提供静态成员GetInterestRate进行获取
	static double GetInterestRate()
	{
		return m_InterestRate;
	}
	//提供存款成员函数SaveMoney
	void SaveMoney(double S_Money)
	{
		m_Money=S_Money;
	}
	//提供计算利息函数CalcInterest
	double CalcInterest(double L_Money)
	{
		return L_Money*m_InterestRate/360*date.calcu_lend_save();
	}
	//提供取款成员函数LendMoney
	double LendMoney(double L_Money)
	{
		if(m_Money>=L_Money)
		{
			m_Money=m_Money-L_Money;
			return L_Money+CalcInterest(L_Money);
		}
		else
		{
			return -1;  //若提取金额大于本金,则不允许取款,返回值为-1
		}
	}
	//提供结算利息函数SaveInterest
	void SaveInterest()//模拟银行结算金额过程,将本金利息结算出来后一起作为本金重新存入银行并更新存款时间
	{
		m_Money+=m_Money*m_InterestRate/360*date.calcu_close_save();
		date.update_saveDate();
	}
};

//静态数据成员类外分配空间并初始化
double CAount::m_InterestRate=0;

int main()
{
	CAount a;
	double t;

	CAount::SetInterestRate(0.036);//将年利息率设为0.036
	cout<<"年利率为0.036"<<endl;

	a.date.SetsaveDate(2014,1,1);
	cout<<"存款时间为2014-1-1"<<endl;

	a.SaveMoney(100000);
	cout<<"存款金额为100000元"<<endl;

	cout<<"2014-3-10结算利息"<<endl;
	a.date.SetcloseDate(2014,3,10);
	a.SaveInterest();

	cout<<"结算利息后本金为:";
	a.display_m_Money();
	a.date.SetlendDate(2014,4,4);
	cout<<"取款日期为2014-4-4"<<endl;

	cout<<"请输入取款金额:";
	cin>>t;
	double Im=a.LendMoney(t);
	if(Im>=0)
	{
		cout<<"取款成功!取款金额为:"<<Im<<endl;
		cout<<"本金为:";
		a.display_m_Money();
	}
	else
	{
		cout<<"余额不足!"<<endl;
	}

    return 0;
}

猜你喜欢

转载自blog.csdn.net/ukco_well/article/details/86576517