Menu
Coddy logo textTech

Получение баланса

Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 26 из 61.

challenge icon

Задание

Легко

Ваш банковский счет почти готов! Вы реализовали возможность создания счетов, внесения средств и снятия денег — но не хватает одной важной детали. На данный момент у внешнего кода нет способа узнать текущий баланс. Давайте исправим это, добавив функцию-геттер.

Геттер — это правильный способ предоставления доступа к скрытым данным в инкапсулированном модуле. Вместо того чтобы делать поле баланса публичным (что нарушило бы инкапсуляцию), вы предоставляете функцию только для чтения, которая возвращает значение. Это сохраняет данные защищенными, обеспечивая при этом контролируемый доступ.

Вы продолжите работу с тремя файлами:

  • account.h: Добавьте прототип новой функции: get_balance. Эта функция принимает const Account * (так как она только читает данные и никогда их не изменяет) и возвращает double, представляющий текущий баланс. Сохраните все существующие объявления.
  • account.c: Реализуйте функцию get_balance. Она просто возвращает значение скрытого поля баланса из структуры счета. Обратите внимание, что эта функция может обращаться к внутренним данным, так как она определена в том же файле, что и структура — внешний код по-прежнему не может заглянуть внутрь напрямую.
  • main.c: Теперь вы наконец-то сможете увидеть, что происходит внутри ваших счетов! Создайте счет, выполните несколько транзакций и используйте свой новый геттер для отображения баланса на каждом этапе.

Вы получите четыре входных значения: ID счета (целое число), сумму депозита, сумму снятия и вторую сумму депозита.

В вашем основном файле создайте счет и выведите его начальный баланс (должен быть 0.00). Внесите первую сумму и выведите новый баланс. Снимите указанную сумму и снова выведите баланс. Наконец, внесите второй депозит и выведите итоговый баланс. Затем удалите объект счета.

Выводите результат в следующем формате:

Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyed

Где 1001 — это ID счета, а значения баланса отражают: начальный (0.00), после внесения 500.00, после снятия 300.00 и после внесения еще 150.00. Форматируйте все значения баланса с двумя знаками после запятой, используя %.2f.

С добавлением этого геттера ваш модуль банковского счета теперь обеспечивает полный контролируемый доступ к данным счета — пользователи могут видеть баланс, но могут изменять его только через ваши проверенные функции внесения и снятия средств.

Попробуйте сами

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double deposit1;
    scanf("%lf", &deposit1);
    
    double withdraw_amount;
    scanf("%lf", &withdraw_amount);
    
    double deposit2;
    scanf("%lf", &deposit2);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    // TODO: Вывести начальный баланс, используя get_balance
    
    deposit(account, deposit1);
    // TODO: Вывести баланс после первого депозита
    
    withdraw(account, withdraw_amount);
    // TODO: Вывести баланс после снятия средств
    
    deposit(account, deposit2);
    // TODO: Вывести баланс после второго депозита
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

Все уроки раздела Object Oriented Programming