/*

Реализовать класс TAccount, представляющий собой банковский счет.

В классе должны быть четыре поля:

+ фамилия владельца
+ номер счета
+ процент начисления
+ сумма в рублях и копейках (дробная часть суммы).

Открытие нового счета выполняется операцией инициализации.

Необходимо выполнять следующие операции:

+ сменить владельца счета,
+ снять некоторую сумму денег со счета,
+ положить деньги на счет,
+ начислить проценты,
+ перевести сумму в доллары,
+ перевести сумму в евро,
+ вывести сумму прописью (например, преобразовать сумму 28125,22 в «двадцать восемь тысяч сто двадцать пять руб. 22 коп.»).

*/

#include <iostream>
#include <string>
#include <vector>
#include <cmath>

using namespace std;


// Массив для хранения названий единиц, десятков и сотен
const vector<string> units = {"", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"};
const vector<string> tens = {"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"};
const vector<string> hundreds = {"", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"};

// Функция для преобразования трехзначного числа в текст
string threeDigitToWords(int num) {
    string result;
    int hundredsDigit = num / 100;
    int tensDigit = (num % 100) / 10;
    int unitsDigit = num % 10;

    if (hundredsDigit > 0) {
        result += hundreds[hundredsDigit] + " ";
    }
    if (tensDigit > 0) {
        result += tens[tensDigit] + " ";
    }
    if (unitsDigit > 0 || num == 0) {
        result += units[unitsDigit];
    }

    return result;
}

// Функция для преобразования числа в текст (рублей и копеек)
string amountInWords(double amount) {
    long long rubles = static_cast<long long>(amount);
    int kopeks = static_cast<int>(round((amount - rubles) * 100));

    string result;

    // Разбиваем рубли на группы по три цифры
    vector<int> groups;
    while (rubles > 0) {
        groups.push_back(rubles % 1000);
        rubles /= 1000;
    }

    // Обрабатываем каждую группу
    for (int i = groups.size() - 1; i >= 0; --i) {
        int groupValue = groups[i];
        if (groupValue > 0) {
            result += threeDigitToWords(groupValue) + " ";
            switch (i) {
                case 1: result += "тысяч "; break;
                case 2: result += "миллионов "; break;
            }
        }
    }

    // Добавляем рубли и копейки
    result += result.empty() ? "ноль" : "";
    result += " руб. " + to_string(kopeks) + " коп.";

    return result;
}


class TAccount {
private:
    string owner;         // фамилия владельца
    string accountNumber; // номер счета
    double interestRate;  // процент начисления
    double balance;       // сумма в рублях и копейках

public:
    // Конструктор для инициализации нового счета
    TAccount(
        const string& owner,
        const string& accountNumber,
        double interestRate,
        double balance
    )
        : owner(owner)
        , accountNumber(accountNumber)
        , interestRate(interestRate)
        , balance(balance)
    {
    }

    // Смена владельца счета
    void changeOwner(const string& newOwner) {
        owner = newOwner;
    }

    // Снятие денег со счета
    bool withdraw(double amount) {
        if (amount <= balance) {
            balance -= amount;
            return true;
        }

        // Недостаточно средств
        return false;
    }

    // Пополнение счета
    void deposit(double amount) {
        balance += amount;
    }

    // Начисление процентов
    void accrueInterest() {
        balance += balance * interestRate / 100;
    }

    // Перевод в доллары (примерный курс)
    double toDollars() const {
        return balance / 75.0; // Примерный курс
    }

    // Перевод в евро (примерный курс)
    double toEuros() const {
        return balance / 85.0; // Примерный курс
    }

    // Вывод суммы прописью
    string convertAmountInWords() const {
        return amountInWords(balance);
    }
};


int main() {
    const TAccount account { "owner", "id", 7, 1234.1234 };

    cout << account.convertAmountInWords() << endl;
    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: