Menu
Coddy logo textTech

Logika wypłaty

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 25 z 61.

challenge icon

Wyzwanie

Łatwy

Twoje konto bankowe rośnie! Teraz dodajmy możliwość wypłacania środków. W przeciwieństwie do wpłat, wypłaty mają dodatkowe ograniczenie. Nie możesz wypłacić więcej pieniędzy, niż masz. Twoja funkcja wypłaty musi sprawdzić saldo przed zatwierdzeniem transakcji.

Rozwijając istniejący projekt konta bankowego, rozszerzysz moduł o funkcjonalność wypłat. Właśnie tutaj enkapsulacja pokazuje swoją siłę. Twoja funkcja może uzyskać dostęp do ukrytego salda, aby sprawdzić, czy środki są wystarczające — czego kod zewnętrzny nie może zrobić bezpośrednio.

Będziesz pracować z trzema plikami:

  • account.h: Dodaj nowy prototyp funkcji: withdraw. Ta funkcja przyjmuje wskaźnik na Account oraz kwotę typu double, a zwraca int (1 w przypadku powodzenia, 0, jeśli wypłata się nie powiedzie). Zachowaj wszystkie dotychczasowe deklaracje funkcji create_account, destroy_account i deposit.
  • account.c: Zaimplementuj funkcję withdraw. Wypłata powinna się powieść tylko wtedy, gdy spełnione są dwa warunki: kwota musi być dodatnia (większa od zera) ORAZ na koncie muszą znajdować się wystarczające środki (saldo >= kwota). Jeśli oba warunki są spełnione, odejmij kwotę od salda i zwróć 1. W przeciwnym razie zwróć 0 bez zmieniania salda.
  • main.c: Zademonstruj pełny przebieg wpłaty i wypłaty. Utwórz konto, dokonaj wpłaty, aby ustalić saldo, a następnie przetestuj wypłaty: zarówno udane, jak i nieudane.

Otrzymasz cztery dane wejściowe: identyfikator konta (liczbę całkowitą), kwotę wpłaty (aby zapewnić początkowe środki), kwotę udanej wypłaty (mniejszą lub równą wpłaconej kwocie) oraz kwotę nieudanej wypłaty (większą niż pozostałe saldo).

W pliku głównym utwórz konto i wyświetl potwierdzenie. Wpłać początkowe środki i wyświetl wynik. Następnie wykonaj udaną wypłatę i wyświetl informację, czy się powiodła. Na koniec spróbuj wykonać wypłatę, która powinna się nie powieść (z powodu niewystarczających środków), i wyświetl jej wynik. Zniszcz konto i potwierdź zwolnienie zasobów.

Wyświetl wynik w tym formacie:

Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed

Gdzie 1001 to identyfikator konta, 500.00 to wpłata, 200.00 to udana wypłata, a 400.00 to nieudana wypłata (ponieważ po pierwszej wypłacie pozostaje tylko 300.00). Formatuj wszystkie kwoty z dokładnością do dwóch miejsc po przecinku, używając %.2f.

Twoja funkcja wypłaty pokazuje siłę enkapsulacji. Może wewnętrznie sprawdzać ukryte saldo, aby podejmować decyzje, podczas gdy kod zewnętrzny nie ma możliwości ominięcia tej walidacji ani bezpośredniego podejrzenia salda.

Spróbuj swoich sił

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

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double valid_amount;
    scanf("%lf", &valid_amount);
    
    double invalid_amount;
    scanf("%lf", &invalid_amount);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    int result_invalid = deposit(account, invalid_amount);
    printf("Deposit %.2f: %d\n", invalid_amount, result_invalid);
    
    int result_valid = deposit(account, valid_amount);
    printf("Deposit %.2f: %d\n", valid_amount, result_valid);
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online