编程语言
首页 > 编程语言> > 模拟银行帐户管理程序

模拟银行帐户管理程序

作者:互联网

UML类图:

代码:

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

// 银行账户类
class Account {
public:
	Account() :balance(0) {}
	Account(double balance) :balance(balance) {}
	/*向当前账户取钱,并且保证账户不会被透支。如果提取金额大于账户金额,函数将
	保持 balance 不变,并打印信息“Debit amount exceeded account balance”*/
	virtual bool debit(double amount);
	virtual bool credit(double amount); // 向当前账户加钱
	virtual double getBalance(); // 返回当前账户 balance 的值
	virtual ~Account() {}
private:
	double balance; // 账户余额
};

bool Account::debit(double amount) {
	if (amount > balance) {
		cout << "Debit amount exceeded account balance." << endl;
		return false;
	} else {
		this->balance = this->balance - amount;
		return true;
	}
}

bool Account::credit(double amount) {
	if (amount < 0) {
		return false;
	} else {
		this->balance = this->balance + amount;
		return true;
	}
}

double Account::getBalance() {
	return this->balance;
}

// 存款账户类
class SavingsAccount :public Account {
public:
	/*构造函数,接受初始余额值和初始利率值*/
	SavingsAccount(double balance, double rate) :Account(balance), interestRate(rate / 100) {}
	double getInterestRate() {
		return this->interestRate;
	}
	/*返回代表账户的利息的一个double值,这个值是 balance 和 interestRate 的乘积*/
	double calculateInterest() {
		return this->getBalance() * this->interestRate;
	}
	~SavingsAccount() {}
private:
	double interestRate; // 账户的比率(百分比)
};

// 支票账户类
class CheckAccount :public Account {
public:
	/*构造函数,接受初始余额值和交易费用值*/
	CheckAccount(double balance, double fee) :Account(balance), fee(fee) {}
	double getFee() {
		return this->fee;
	}
	/*重新定义成员函数 debit,当每笔交易完成时,从 balance 中减去每笔交易的费用。*/
	bool debit(double amount) {
		if (amount > this->getBalance()) {
			cout << "Debit amount exceeded account balance." << endl;
			return false;
		} else if (this->fee + amount > this->getBalance()) {
			cout << "Transaction fee exceeded account balance while debiting." << endl;
			return false;
		} else {
			Account::debit(amount + this->fee);
			return true;
		}
	}
	/*重新定义成员函数 credit,当每笔交易完成时,从 balance 中减去每笔交易的费用。*/
	bool credit(double amount) {
		if (this->fee > amount + this->getBalance()) {
			cout << "Transaction fee exceeded account balance while crediting." << endl;
			return false;
		} else {
			Account::credit(amount);
			Account::debit(this->fee);
			return true;
		}
	}
	~CheckAccount() {};
private:
	double fee; // 每笔交易的费用
};

int main() {
	Account* accounts[3];
	accounts[0] = new SavingsAccount(100, 3); // 余额100元,利息3%
	accounts[1] = new CheckAccount(100, 5); // 余额100元,交易费5元
	accounts[2] = new CheckAccount(50, 5); // 余额50元,交易费5元

	for (int i = 0; i < 3; i++) {
		cout << "第" << i + 1 << "次循环的结果:" << endl;
		accounts[i]->debit(200);
		accounts[i]->debit(40);
		accounts[i]->credit(50);
		accounts[i]->debit(49);
		accounts[i]->debit(43);
		accounts[i]->credit(1);
		SavingsAccount* derivedPtr = dynamic_cast<SavingsAccount*>(accounts[i]);
		if (derivedPtr != NULL) { //如果类型兼容,转换成功
			derivedPtr->credit(derivedPtr->calculateInterest());
		}
		cout << "账户的余额为:" << fixed << setprecision(2) << accounts[i]->getBalance() << endl;
	}

	delete accounts[0];
	delete accounts[1];
	delete accounts[2];

	return 0;
}

标签:Account,return,管理程序,double,amount,accounts,balance,银行帐户,模拟
来源: https://www.cnblogs.com/catting123/p/16640891.html