Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помощь с заданием на c++

deroga Ученик (102), закрыт 1 год назад
Задача: Напишите робота для коллекторов. В самом начале он спрашивает имя должника и сумму долга, а затем начинает требовать у него погашения долга до тех пор, пока тот не будет погашен полностью. Сумма долга должна уменьшаться, если пользователь ввёл сумму, меньшую чем сумма долга. Если пользователь внёс большую сумму, чем требуется для погашения, выведите сообщение о том, какой у него остаток на счету после такой операции. Обеспечьте контроль ввода.

Код у меня есть, но с ошибкой, а что за ошибка понять не могу.
Лучший ответ
Николай Веселуха Высший разум (360666) 1 год назад
 #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';
}
}
Остальные ответы
DER |-2SH-| KA Мыслитель (7317) 1 год назад
Не понимаю, в чём конкретно ошибка, но если шутка юмора в том, что он сначала пишет "Вы погасили долг, но на самом деле хрен там плавал - у вас кредит аж на 10 рублей", то уберите строчку "Вы погасили долг!" на в место, где долга уже действительно нет, а не сразу после внесения платежа. + заранее сделайте проверку после ввода суммы погашения долга проверку, а есть ли у него эта сумма
Сергей Гений (56248) 1 год назад
Задание не предусматривает обработку счета, с которого погашается задолженность.
В программе нет проверки вводимых данных.

cin >> debt_amount;
//вводим сумму долга
while (debt_amount > 0) //цикл запроса погашения идет пока сумма долга положительна
{
//вывод текущей суммы долга
cout << "ваш долг составляет " << debt_amount << endl;
//запрос на введение
cout << "введите сумму, которую вы хотите внести" << endl;
cin >> payment;
//проверка введенной суммы, если она нулевая или отрицательная - вернуться в начало цикла
if (payment<=0) {cout "вы там что курите? гоните бабки!"; continue;}
//обновить долг
debt_amount -= payment;
//вывести сообщение о успешном платеже и верунться в начало цикла
cout << "Платеж успешный" << endl;
}
//если долг стал нулевым или отрицательным, цикл завершается, выводим профит.
cout << "Спасибо за сотрудничество и погашение долга. На вашем счету: " << 0 - debt_amount << endl;

Контроль правильности введенных данных осушествляется отдельной функцией,
которая не входит в текущий тарифный план. Погасите вашу задолженность.
Это был пример алгоритма без проверки корректности введенных данных.
Похожие вопросы