/*
Реализовать класс 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;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: