Логика пополнения
Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 24 из 61.
Задание
ЛегкоПора добавить первую настоящую банковскую операцию в ваш модуль Account: возможность вносить средства! Функция deposit должна быть интеллектуальной: она должна принимать только положительные суммы, защищая ваш account от invalid транзакций.
Основываясь на существующем проекте Bank Account, вы расширите модуль, добавив функциональность deposit. Ваша функция deposit должна проверять входные данные перед изменением скрытого balance. Так инкапсуляция защищает целостность ваших данных.
Вы будете работать с тремя файлами:
account.h: расширьте существующий заголовочный файл, добавив новый прототип функции:deposit. Эта функция должна принимать указатель Account и суммуdouble, возвращаяint(1 при успехе, 0, если сумма invalid). Сохраните существующие объявления дляcreate_accountиdestroy_account.account.c: Implement функциюdepositвместе с существующими конструктором и деструктором. Deposit должен выполняться только в том случае, если сумма положительная (больше нуля). Если сумма корректна, добавьте её к скрытому balance и верните 1. Если сумма равна нулю или отрицательна, отклоните её, вернув 0 и не изменяя balance.main.c: продемонстрируйте функциональность deposit, создав account и выполнив несколько операций deposit — как корректных, так и invalid, — чтобы показать, что проверка работает правильно.
Вы получите три входных значения: идентификатор account (целое число), корректную сумму deposit (положительное число) и invalid сумму deposit (ноль или отрицательное число).
В основном файле создайте account с указанным идентификатором и выведите подтверждение. Затем сначала попробуйте внести invalid сумму: выведите, выполнена ли операция успешно, и отметьте, что balance должен остаться без изменений. После этого внесите корректную сумму: выведите результат операции. Наконец, уничтожьте account и подтвердите очистку.
Выведите результат в следующем формате:
Account 1001 created
Deposit -50.00: 0
Deposit 200.00: 1
Account destroyedЗдесь 1001 — идентификатор account, -50.00 — invalid сумма, а 200.00 — корректная сумма. Форматируйте все суммы с двумя знаками после запятой, используя %.2f.
Ваша функция deposit выступает в роли привратника. Она гарантирует, что только корректные транзакции могут изменять скрытый balance account. Хотя пока вы не можете увидеть balance (мы добавим getter на следующем уроке), вы можете быть уверены, что invalid операции deposit правильно отклоняются.
Попробуйте сами
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
destroy_account(account);
printf("Account destroyed\n");
return 0;
}
Все уроки раздела Объектно-ориентированное программирование
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация кругаРеализация прямоугольникаПолиморфное использованиеКонтейнер фигурПотренируйтесь самостоятельно: Онлайн-компилятор C