#include
#include
using namespace std;
struct Money {
using money_t = long long;
};
class Credit : public Money {
public:
Credit() : credit(0) {}
void issued(const money_t value) {
credit += value;
}
void redeemed(const money_t value) {
credit -= value;
}
money_t remainder()const {
return credit;
}
private:
money_t credit;
};
class Account : public Money {
public:
void credited(const money_t value) {
money += value;
}
money_t balance()const {
return money;
}
void withdraw(money_t value) {
if (money <= value) value = money;
money -= value;
}
protected:
money_t money;
};
class PersonDebtor : public Account {
public:
PersonDebtor(const string& name, const money_t money) : name(name) {
this->money = money;
}
string client()const {
return name;
}
void approved(const money_t money) {
credit.issued(money);
}
money_t collector() {
auto remainder = credit.remainder();
auto balance = this->balance();
if (balance <= remainder) {
credit.redeemed(balance);
withdraw(balance);
return balance;
}
credit.redeemed(remainder);
withdraw(remainder);
return remainder;
}
bool isdebt()const {
return credit.remainder() > 0;
}
money_t debt()const {
return credit.remainder();
}
private:
string name;
Credit credit;
};
int main() {
PersonDebtor slava({ "Слава", 189 });
cout << "Введите размер задолженности: ";
Money::money_t money{};
cin >> money;
slava.approved(money);
do {
const auto balance = slava.balance();
if (!balance) {
puts("Недостаточно средств!");
break;
}
cout
<< "Баланс счёта клиента " << slava.client()
<< " составляет: " << balance << '\n';
const auto amount = slava.collector();
cout << "Погашена задолженность в сумме: " << amount << '\n';
} while (slava.isdebt());
if (slava.isdebt()) {
cout
<< "Задолженность клиента " << slava.client()
<< " составляет: " << slava.debt() << '\n';
} else {
cout
<< "Клиент " << slava.client()
<< " погасил задолженность в полном объёме.\n"
<< "Остаток на счёте составляет: " << slava.balance() << '\n';
}
}
Код у меня есть, но с ошибкой, а что за ошибка понять не могу.