• 第三次作业


    个人第三次作业

    利用P177 例5-11个人银行账户管理程序来对
    1.常成员函数
    2.静态数据成员
    3.C++多文件结构
    进行说明
    首先编写一个个人账户的头文件,使文件分离,让主函数代码更加简洁

    #ifndef _ACCOUNT_H_
    #define _ACCOUNT_H_
    class SavingsAccount
    {
    private:
    	int id;//个人ID
    	double balance;//个人余额
    	double rate;//年利率
    	int LastDate;//上次变余额日期
    	double accumulation;//余额按日累加和
    	static double total;//所有账户的总金额,具有全局生存周期的静态数据成员,便于累加所有账户金额。不用静态常数据成员是因为增加一个人,所有账户总金额就要修改,而静态常数据成员的值不能修改
    	void record(int date, double amount);//存钱记账,如xx date存入 xx amount
    	double accumulate(int date)const//常成员函数,不会更改目的对象数据成员的值,当调用常函数,这个对象就被视为常对象,所以它不能更新目的对象的数据成员
    	{
    		return accumulation + balance * (date - LastDate);
    
    	}//得到指定日期为止金额按日累加值,方便后面算利息
    public:
    	SavingsAccount(int date, int id, double rate);//构造函数,个人信息
    	int GetId()const
    	{
    		return id;
    	}//得到个人ID,因为不能直接访问类的私有数据成员,只能通过函数返回值得形式来访问
    	double GetBalance()const { return balance; }//得到个人存款
    	double GetRate()const { return rate; }//得到年利率
    	static double GetTotal() { return total; }//得到个人总存款。设置成静态成员函数便于对类中静态数据成员的访问,静态成员函数属于整个类,可以被这个类中所有对象访问
    	void deposit(int date, double amount);//存钱
    	void withdraw(int date, double amonut);//取钱
    	void settle(int date);//年结算
    	void show()const;
    
    };
    #endif // !_ACCOUNT_H_
    

    接下来编写头文件中的函数的实现

    #include"account.h"//引用头文件
    #include"cmath"
    #include"iostream"
    using namespace std;
    double SavingsAccount::total = 0;//静态数据成员在类外进行初始化(因为它不属于任何对象),分配空间,让所有对象共同维护一个Total
    SavingsAccount::SavingsAccount(int date, int id, double rate) :id(id), balance(0), rate(rate), LastDate(date), accumulation(0)
    {
    	cout << date << "	#" << id << "is created" << endl;
    
    }
    void SavingsAccount::record(int date, double amount)
    {
    	accumulation = accumulate(date);
    	LastDate = date;
    	amount = floor(amount * 100 + 0.5) / 100;
    	balance += amount;//余额变动
    	total += amount;//余额变动
    	cout << date << "	#" << id << "	" << amount << "	" << balance << endl;
    
    
    }
    void SavingsAccount::deposit(int date, double amount)
    {
    	record(date, amount);
    }
    void SavingsAccount::withdraw(int date, double amount)
    {
    	if (amount > GetBalance())
    		cout << "error:not enough monry" << endl;//要取得钱大于余额,提示存款不足!
    	else
    		record(date, -amount);
    }
    void SavingsAccount::settle(int date)
    {
    	double interest = accumulate(date) * rate/365;
    	if (interest != 0)
    		record(date, interest);//利息记入余额
    	accumulation = 0;//新的一年,利息更新
    }
    void SavingsAccount::show()const
    {
    	cout << "#" << id << "	balance" << balance;
    }
    

    然后就是主函数啦

    #include"account.h"
    #include"iostream"
    using namespace std;
    int main()
    {
    	SavingsAccount sa0(1,1325301, 0.015);
    	SavingsAccount sa1(1, 58320212, 0.015);
    	sa0.deposit(5, 5000);//5号存入5000
    	sa1.deposit(25, 10000);
    	sa0.deposit(45, 5500);
    	sa1.withdraw(60,  4000);
    	sa0.settle(90);
    	sa1.settle(90);
    	sa0.show();cout << endl;
    	sa1.show();cout << endl;
    	cout << "Total:" << SavingsAccount::GetTotal() << endl;//静态成员函数的输出可以通过类名,也可以通过对象名
    	return 0;
    
    
    
    }
    

    结果如下

  • 相关阅读:
    小小小康
    GC日志补充
    一次GC问题定位
    mycat1.5~1.6的一个bug
    [转] java Statement和PreparedStatement批量更新
    java 中的instanceof 运算符
    Java学习篇之数组方法
    iOS7适配的一点小技巧
    iOS 中正确切换摄像头&正确实现设置帧率的方式
    iOS 音量键事件监控响应
  • 原文地址:https://www.cnblogs.com/simple5960/p/11583482.html
Copyright © 2020-2023  润新知