Логика пополнения
Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 24 из 61.
Задание
ЛегкоПришло время добавить первую реальную банковскую операцию в ваш модуль Account — возможность внесения средств! Функция депозита должна быть продуманной: она должна принимать только положительные суммы, защищая ваш счет от неверных транзакций.
Опираясь на ваш существующий проект Bank Account, вы расширите модуль функциональностью депозита. Ваша функция депозита должна проверять входные данные перед изменением скрытого баланса — это инкапсуляция, работающая на защиту целостности ваших данных.
Вы будете работать с тремя файлами:
account.h: Расширьте существующий заголовочный файл, добавив прототип новой функции:deposit. Эта функция должна принимать указатель на Account и сумму типаdouble, возвращаяint(1 в случае успеха, 0, если сумма невалидна). Сохраните существующие объявления дляcreate_accountиdestroy_account.account.c: Реализуйте функциюdepositвместе с существующим конструктором и деструктором. Депозит должен быть успешным только в том случае, если сумма положительна (больше нуля). Если сумма валидна, добавьте её к скрытому балансу и верните 1. Если сумма равна нулю или отрицательна, отклоните её, вернув 0 без изменения баланса.main.c: Продемонстрируйте работу функции депозита, создав аккаунт и выполнив несколько операций по внесению средств — как валидных, так и невалидных — чтобы показать, что ваша проверка работает правильно.
Вы получите три входных значения: ID аккаунта (целое число), валидную сумму депозита (положительное число) и невалидную сумму депозита (ноль или отрицательное число).
В вашем основном файле создайте аккаунт с заданным ID и выведите подтверждение. Затем сначала попытайтесь внести невалидную сумму — выведите, была ли операция успешной, и отметьте, что баланс должен остаться неизменным. Затем внесите валидную сумму — выведите результат успеха. Наконец, удалите аккаунт и подтвердите очистку.
Выведите результат в следующем формате:
Account 1001 created
Deposit -50.00: 0
Deposit 200.00: 1
Account destroyedГде 1001 — это ID аккаунта, -50.00 — невалидная сумма, а 200.00 — валидная сумма. Форматируйте все суммы с двумя знаками после запятой, используя %.2f.
Ваша функция депозита действует как привратник — она гарантирует, что только валидные транзакции могут изменять скрытый баланс аккаунта. Даже если вы пока не видите баланс (мы добавим геттер в следующем уроке), вы можете быть уверены, что невалидные депозиты отклоняются должным образом.
Попробуйте сами
#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;
}
Все уроки раздела Object Oriented Programming
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация круга