Финал проекта: Основной цикл
Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 27 из 61.
Задание
ЛегкоПоздравляем — вы создали полноценную библиотеку для управления банковским счетом! Теперь пришло время сменить роль. Вместо того чтобы быть создателем библиотеки, вы станете пользователем библиотеки. Ваша задача — написать основную программу, которая проверит ваш модуль Account в деле.
Представьте, что клиент заходит в банк и совершает ряд операций. Вы создадите счет, внесете депозиты, снимете средства, будете проверять баланс по ходу дела и, наконец, закроете счет, когда закончите.
Вы будете работать с тремя файлами:
account.h: Ваш готовый заголовочный файл с непрозрачным типомAccountи всеми прототипами функций:create_account,destroy_account,deposit,withdrawиget_balance.account.c: Ваша полная реализация со скрытой структурой, содержащейidиbalance, а также все реализации функций, которые вы создали в ходе этого проекта.main.c: Здесь вы проявите себя! Напишите программу, которая демонстрирует полный жизненный цикл банковского счета через реалистичную последовательность транзакций.
Вы получите пять входных значений: ID счета (целое число), первый депозит, снятие средств, второй депозит и попытку овердрафта (снятие суммы, которое должно завершиться неудачей из-за нехватки средств).
Ваша основная программа должна рассказать историю жизни этого счета:
- Создать счет и объявить об этом
- Показать начальный баланс
- Внести первый депозит и показать новый баланс
- Снять часть средств и показать обновленный баланс
- Внести еще один депозит и показать баланс
- Попытаться снять сумму, превышающую баланс — это должно закончиться неудачей
- Показать итоговый баланс (неизменный после неудачного снятия)
- Закрыть счет
Выводите данные в следующем формате:
Account 2001 created
Balance: 0.00
Deposited 1000.00
Balance: 1000.00
Withdrew 250.00
Balance: 750.00
Deposited 500.00
Balance: 1250.00
Withdrawal failed: insufficient funds
Balance: 1250.00
Account 2001 closedГде 2001 — это ID счета, а суммы соответствуют вашим входным данным. Форматируйте все денежные значения с двумя знаками после запятой, используя %.2f. Сообщение о неудачном снятии средств должно выводиться, когда withdraw возвращает 0.
Этот финал демонстрирует все, что вы узнали об инкапсуляции — ваша основная программа взаимодействует с Account исключительно через его публичный интерфейс, никогда не обращаясь к скрытым внутренним данным напрямую.
Попробуйте сами
#include <stdio.h>
#include "account.h"
int main() {
// TODO: Считать account_id, deposit1, withdraw_amount, deposit2 и overdraft из входных данных
// TODO: Создать аккаунт и вывести "Account <id> created"
// TODO: Вывести начальный баланс
// TODO: Внести первый депозит, вывести "Deposited <amount>" и новый баланс
// TODO: Снять средства, вывести "Withdrew <amount>" и обновленный баланс
// TODO: Внести второй депозит, вывести "Deposited <amount>" и новый баланс
// TODO: Попытаться выполнить снятие с овердрафтом; если не удастся, вывести "Withdrawal failed: insufficient funds"
// TODO: Вывести итоговый баланс
// TODO: Вывести "Account <id> closed" и удалить аккаунт
return 0;
}
Все уроки раздела Object Oriented Programming
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация круга