Menu
Coddy logo textTech

Trasferisci fondi

Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 24 di 70.

challenge icon

Sfida

Facile

La tua Banca Digitale è quasi completa! L’ultima funzionalità principale è la possibilità di trasferire denaro tra conti. È qui che il tuo design orientato agli oggetti dà davvero il meglio: un oggetto conto può interagire direttamente con un altro oggetto conto.

Aggiungerai un metodo :transfer(targetAccount, amount) che sposta denaro da un conto a un altro. Pensa a cosa comporta davvero questa operazione: è un prelievo dal conto sorgente seguito da un deposito nel conto destinatario. Il bello è che puoi riutilizzare i metodi che hai già creato!

Continua a lavorare sui file esistenti:

  • Account.lua: aggiungi un metodo :transfer(targetAccount, amount) alla tua classe Account. Questo metodo deve tentare di prelevare l’importo da self e, se ci riesce, depositare quell’importo in targetAccount. Se il prelievo non riesce (fondi insufficienti), il trasferimento non deve avvenire. Mantieni tutte le funzionalità esistenti (costruttore con ID, deposito, prelievo, getBalance e __tostring).
  • main.lua: crea più conti e mostra i trasferimenti tra di essi, illustrando come cambiano i saldi nei diversi oggetti conto.

Riceverai cinque input:

  1. ID del primo conto
  2. ID del secondo conto
  3. Deposito iniziale nel primo conto
  4. Importo del primo trasferimento (dal conto 1 al conto 2)
  5. Importo del secondo trasferimento (dal conto 1 al conto 2)

Nel tuo file principale, crea due conti con gli ID indicati (entrambi con saldo iniziale pari a 0), deposita l’importo iniziale nel primo conto, quindi tenta entrambi i trasferimenti dal primo conto al secondo. Dopo ogni tentativo di trasferimento, stampa entrambi i conti (__tostring mostrerà il loro stato attuale).

Ad esempio, se gli input sono 101, 102, 500, 200 e 400, l’output dovrebbe essere:

Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200

Il primo conto parte da 500 dopo il deposito. Il primo trasferimento di 200 riesce, lasciando il conto 101 con 300 e il conto 102 con 200. Il secondo trasferimento di 400 non riesce perché il conto 101 ha solo 300, quindi entrambi i saldi rimangono invariati.

Provalo tu

-- Importa il modulo Account
local Account = require('Account')

-- Leggi i cinque valori in input
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())

-- Crea due conti con ID
local account1 = Account:new(id1)
local account2 = Account:new(id2)

-- Deposita l'importo iniziale sul primo conto
account1:deposit(initialDeposit)

-- TODO: Prova a effettuare il primo trasferimento da account1 a account2

-- TODO: Stampa entrambi i conti dopo il primo trasferimento

-- TODO: Prova a effettuare il secondo trasferimento da account1 a account2

-- TODO: Stampa entrambi i conti dopo il secondo trasferimento

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Lua online