【C++OJ_静态与友元】银行账户(静态成员与友元函数)

【C++OJ_静态与友元】银行账户(静态成员与友元函数)

题目描述

银行账户类的基本描述如下:

要求如下:

实现该银行账户类

为账户类Account增加一个友元函数,实现账户结息,要求输出结息后的余额(结息余额=账户余额+账户余额*利率)。友元函数声明形式为 friend void Update(Account& a);

在main函数中,定义一个Account类型的指针数组,让每个指针指向动态分配的Account对象,并调用成员函数测试存款、取款、显示等函数,再调用友元函数测试进行结息。

大家可以根据实际需求在类内添加新的成员

要求所有和银行账户相关的数据都不能用全局变量形式,必须封装在类内

输入

第1行:利率
第2行:账户数目n
第3行开始,每行依次输入一个账户的“账号”、“姓名”、“余额”、存款数,取款数。

输出

第1行开始,每行输出一个账户的相关信息,包括账号、姓名、存款后的余额、存款后结息余额、取款后余额。

最后一行输出所有账户的余额。

输入样例

0.01
3
201501 张三 10000 1000 2000
201502 李四 20000 2000 4000
201503 王二 80000 4000 6000

输出样例

201501 张三 11000 11110 9110
201502 李四 22000 22220 18220
201503 王二 84000 84840 78840
106170

参考代码

#include <iostream>
#include <cstring>
using namespace std;

//要求所有和银行账户相关的数据都不能用全局变量形式,必须封装在类内
class Account //银行账户类
{
    static int count;          //银行账户数量
    static float InterestRate; //利率
    string _accno, _accname;   //账户与户名
    float _balance;            //账户余额

public:
    Account() {}                                                                                                            //无参构造
    Account(string accno, string accname, float balance) : _accno(accno), _accname(accname), _balance(balance) { count++; } //有参构造,每次调用一次,count++
    ~Account() { count--; }                                                                                                 //每次调用,count--
    void Deposit(float amount) { _balance += amount; }                                                                      //存款
    void Withdraw(float amount) { _balance -= amount; }                                                                     //取款
    float GetBalance() { return _balance; }                                                                                 //获取账户余额
    static int GetCount() { return count; }                                                                                 //获取账户数
    static float GetInterestRate() { return InterestRate; }                                                                 //获取利率
    static void SetInterestRate(float rate) { InterestRate = rate; }                                                        //设置利率,使用静态成员函数,可以全局访问
    void Show() { cout << _accno << ' ' << _accname << ' ' << _balance; }                                                   //显示账户所有基本信息
    friend void Update(Account &a);                                                                                         //友元函数,实现账户结息:输出结息后的余额
};

int Account::count = 0; //类外定义
float Account::InterestRate = 0;
void Update(Account &a) { a._balance += a._balance * Account::InterestRate; } //友元函数(结息余额=账户余额+账户余额*利率),可访问静态变量

int main()
{
    float rate, sum = 0; // sum用来存放所有账户的余额
    int count;
    cin >> rate;                        //第1行:利率
    cin >> count;                       //第2行:账户数目
    Account::SetInterestRate(rate);     //设置利率,调用的是静态成员函数
    Account **p = new Account *[count]; //定义一个Account类型的指针数组,
    for (int i = 0; i < count; i++)
    {
        string accno, accname;
        float balance, deposit, withdraw;
        cin >> accno >> accname >> balance >> deposit >> withdraw; //每行依次输入一个账户的“账号”、“姓名”、“余额”、存款数,取款数。
        p[i] = new Account(accno, accname, balance);               //让每个指针指向动态分配的Account对象
        p[i]->Deposit(deposit);                                    //存款,指针使用箭头
        p[i]->Show();                                              //输出一个账户的相关信息,包括账号、姓名、存款后的余额
        Update(*p[i]);                                             //进行结息
        cout << ' ' << p[i]->GetBalance();                         //输出存款后结息余额
        p[i]->Withdraw(withdraw);                                  //进行取款
        cout << ' ' << p[i]->GetBalance() << endl;                 //输出取款后余额
        sum += p[i]->GetBalance();                                 //最后一行输出所有账户的余额
        delete p[i];                                               //删除动态分配的空间
    }
    cout << sum << endl;
    delete[] p;
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ferry_xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值