Menu
Coddy logo textTech

Logica di prelievo

Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 25 di 61.

challenge icon

Sfida

Facile

Il tuo conto bancario sta crescendo! Ora aggiungiamo la possibilità di prelevare fondi. A differenza dei depositi, i prelievi hanno un vincolo aggiuntivo. Non puoi prelevare più denaro di quanto ne hai. La tua funzione di prelievo deve controllare il saldo prima di autorizzare la transazione.

Partendo dal progetto del conto bancario che hai già realizzato, estenderai il modulo aggiungendo la funzionalità di prelievo. È qui che l’incapsulamento dà il meglio di sé. La tua funzione può accedere al saldo nascosto per verificare che i fondi siano sufficienti, cosa che il codice esterno non potrebbe mai fare direttamente.

Lavorerai con tre file:

  • account.h: aggiungi un nuovo prototipo di funzione: withdraw. Questa funzione accetta un puntatore a Account e un importo di tipo double, e restituisce un int (1 in caso di successo, 0 se il prelievo non va a buon fine). Mantieni tutte le dichiarazioni esistenti per create_account, destroy_account e deposit.
  • account.c: implementa la funzione withdraw. Un prelievo dovrebbe andare a buon fine solo se sono soddisfatte due condizioni: l’importo deve essere positivo (maggiore di zero) E il conto deve avere fondi sufficienti (saldo >= importo). Se entrambe le condizioni sono soddisfatte, sottrai l’importo dal saldo e restituisci 1. Altrimenti, restituisci 0 senza modificare il saldo.
  • main.c: mostra l’intero flusso di deposito e prelievo. Crea un conto, effettua un deposito per stabilire un saldo, poi verifica i prelievi: sia quelli riusciti sia quelli non riusciti.

Riceverai quattro input: l’ID del conto (un intero), un importo da depositare (per stabilire i fondi iniziali), un importo per un prelievo riuscito (inferiore o uguale all’importo depositato) e un importo per un prelievo non riuscito (superiore al saldo rimanente).

Nel tuo file principale, crea un conto e stampa una conferma. Deposita i fondi iniziali e stampa il risultato. Poi effettua il prelievo riuscito e stampa se è andato a buon fine. Infine, prova a effettuare il prelievo che dovrebbe fallire (per fondi insufficienti) e stampa il risultato. Distruggi il conto e conferma la pulizia.

Stampa l’output in questo formato:

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

Dove 1001 è l’ID del conto, 500.00 è il deposito, 200.00 è il prelievo riuscito e 400.00 è il prelievo non riuscito (perché dopo il primo prelievo rimangono solo 300.00). Formatta tutti gli importi con due cifre decimali usando %.2f.

La tua funzione di prelievo dimostra la potenza dell’incapsulamento. Può controllare internamente il saldo nascosto per prendere decisioni, mentre il codice esterno non ha modo di aggirare questa convalida o di consultare direttamente il saldo.

Provalo tu

#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;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online