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