03类设计题目

本文介绍了如何设计一个包含存款、取款功能的Account类和处理年利率的SavingsAccounts类,强调了构造函数、析构函数、set和get函数的作用,以及封装在类设计中的重要性。通过实例展示了如何在实际场景中运用类和对象的概念。
摘要由CSDN通过智能技术生成

本次类设计题目要求完成一个账户的存款,取款以及计算该账户余额n年后的账户总余额,首先根据题目要求定义一个Account类表示银行的余额,完成存款,取款等操作,和一个SavingsAccounts类,完成年利率等相关计算操作。

本题主要考察了对类的相关知识的掌握,首先我们要先知道一些重要知识点:

1.构造函数:构造函数在创建类对象时自动调用,主要完成对象创建时有关的初始化工作;

2.析构函数:对象撤销时,析构函数自动调用,它本身并不释放对象占用的内存空间,它只是在系统回收对象的内存空间之前执行扫尾工作,这样内存可以重新用于保存新的对象。如果没有定义析构函数,编译器会提供一个“空的”析构函数。无参数,无返回值;

3.set函数:便于类的客户设置私有成员;

4.get函数:便于类的客户访问私有成员,又称访问函数

5.封装:将数据和对数据的操作封装在一起,组成一种新的数据类型。封装可以隐藏类的内部实现细节,只暴露必要的接口给外部使用。这样可以防止外部直接访问和修改对象的内部数据,提高了安全性,同时封装使得类的内部实现可以独立于外部,当需要修改内部实现时,只需要修改类的内部,而不影响外部代码。

以上为本次代码所涉及的知识,完整代码如下:

Account.h

#ifndef ACCOUNT_H
#define ACCOUNT_H
#include <iostream>

using namespace std;

class Account
{
public:
    Account()
    {

    }
    Account(double b)
    {
        balance=(b>=0)?b:0;
        if(balance==0)
        {
            cout << "账户余额无效!"<<endl;
        }

    }
    ~Account()
    {

    }
    void setbalance(double b)
    {
        balance=b;
    }
    void setbalance()
    {
        this->balance=balance;
    }
    double getbalance() const
    {
        return balance;
    }
    void credit()
    {
        cout << "请输入你要存款的金额:";
        double c;
        cin >> c;
        if (c>0)
        {
            double sum;
        sum=getbalance()+c;
        setbalance(sum);
        cout << "存款后金额为"<<getbalance()<<endl;
        }
        else
        {
            cout << "您输入的金额无效!"<<endl;
        }
    }
    void debit()
    {
        cout << "请输入你要取出的金额:";
        double d;
        cin >> d;
        if (d>getbalance())
        {
            cout << "Debit amount exceeded account balence!"<<endl;
        }
        else
        {
           double remainder;
           remainder=getbalance()-d;
           setbalance(remainder);
           cout << "取款后的金额为"<<getbalance()<<endl;
        }
    }
private:
    double balance;

};
#endif // ACCOUNT_H

SavingsAccounts.h

#ifndef SAVINGSACCOUNTS_H
#define SAVINGSACCOUNTS_H
class SavingsAccounts
{
  public:
      SavingsAccounts()
      {

      }
     SavingsAccounts(double r,Account b):rate(r),balance(b)
     {

     }
     ~SavingsAccounts()
     {

     }
     double calculate(int year)
     {
         double m_balance=balance.getbalance();
         for (int i=0;i<year;i++)
         {
             m_balance=m_balance* rate+m_balance;
         }
         return m_balance;
     }
  private:
    double rate;
    Account balance;
};
#endif // SAVINGSACCOUNTS_H

main.cpp

#include <iostream>
#include "Account.h"
#include "SavingsAccounts.h"
using namespace std;
void menu()
{
    cout <<"********************"<<endl;
    cout <<"*****1----存款******"<<endl;
    cout <<"*****2----取款******"<<endl;
    cout <<"*****3----显示余额**"<<endl;
    cout <<"*****0----退出******"<<endl;
    cout <<"********************"<<endl;
}

int main()
{

    double balance1,rate1;
    cout << "请输入年利率和余额:";
    cin >> rate1>>balance1;
    Account a2(balance1);
    if (a2.getbalance()==0)
    {
        cout << "请重新输入金额:";
        int balance2;
        cin >> balance2;
        a2.setbalance(balance2);

    }
    SavingsAccounts a1(rate1,a2);
    int n;
    menu();
    while(cin >>n)
    {
        int flag=0;
        switch(n)
        {
        case 0:
            flag=1;
            break;
        case 1:
            a2.credit();
            break;
        case 2:
            a2.debit();
            break;
        case 3:
            cout << "请输入已存储的年份:";
            int y;
            cin >> y;
            cout << y<<"年后的总金额为:"<<a1.calculate(y)<<endl;
            break;
        default:
            cout <<"您的输入无效,请重新输入!"<<endl;
            break;



        }
        if (flag==1)
        {
            break;
        }
    }
    return 0;
}

收获:通过解题,首先,我更深入地理解了类和对象的概念,以及它们之间的关系,同时也使我对类成员变量的使用以及成员函数的使用更加熟练,其次,在解题过程中,我意识到封装的重要性,它可以帮助隐藏实现细节、简化接口、提高安全性和可维护性,有利于设计一个良好的类,最后通过思考如何设计类,编写成员函数等,加强了对面向对象编程的理解和应用能力,以及对解题过程中遇到的问题的思考与解决,提高了我的问题解决能力和逻辑思维能力。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值