Skip to content

Instantly share code, notes, and snippets.

@germanescobar
Last active October 17, 2018 20:52
Show Gist options
  • Save germanescobar/f39fc2dcd057abfbba7e8a8283642f51 to your computer and use it in GitHub Desktop.
Save germanescobar/f39fc2dcd057abfbba7e8a8283642f51 to your computer and use it in GitHub Desktop.

La clase Bank sería así:

class Bank
  def initialize
    @accounts = {} # acá vamos a almacenar las cuentas
    @seq = 0 # consecutivo para los ids de las cuentas
  end

  def open(name, initial_balance)
    @seq += 1 # incrementamos el consecutivo

    account = { id: @seq, name: name, balance: initial_balance }
    @accounts[@seq] = account
    account
  end

  # devuelve la info de la cuenta con el nuevo balance o nil si la cuenta no existe
  def deposit(id, amount)
    account = @accounts[id]
    account[:balance] += amount if account
    account # acá sería mejor account.clone para que no se pueda cambiar el balance
  end

  # devuleve la info de la cuenta con el nuevo balance o nil si la cuenta no existe o
  # no tiene fondos
  def withdraw(id, amount)
    account = @accounts[id]
    if account && account[:balance] >= amount
      account[:balance] -= amount
      account
    else
      nil
    end
  end

  def accounts
    @accounts.values # acá sería mejor @accounts.values.clone para que no se puedan modificar desde afuera
  end
end

Se podría probar de la siguiente forma:

# la idea es utilizarlo de la siguiente forma
bank = Bank.new

a1 = bank.open("Juan", 100)
a2 = bank.open("Pedro", 100)
a3 = bank.open("Pablo", 100)

bank.deposit(a1[:id], 100)
bank.withdraw(a2[:id], 100)

puts bank.accounts.inspect
class Bank
def initialize
@accounts = {} # acá vamos a almacenar las cuentas
@seq = 0 # consecutivo para los ids de las cuentas
end
def open(name, initial_balance)
@seq += 1 # incrementamos el consecutivo
account = { id: @seq, name: name, balance: initial_balance }
@accounts[@seq] = account
account
end
# devuelve la info de la cuenta con el nuevo balance o nil si la cuenta no existe
def deposit(id, amount)
account = @accounts[id]
account[:balance] += amount if account
account # acá sería mejor account.clone para que no se pueda cambiar el balance
end
# devuleve la info de la cuenta con el nuevo balance o nil si la cuenta no existe o
# no tiene fondos
def withdraw(id, amount)
account = @accounts[id]
if account && account[:balance] >= amount
account[:balance] -= amount
account
else
nil
end
end
def accounts
@accounts.values # acá sería mejor @accounts.values.clone para que no se puedan modificar desde afuera
end
end
class CLI
def initialize
@bank = Bank.new
end
def run
puts "**************************************************"
puts "****** Bienvenido(a) al Make it Real Bank *******"
puts "**************************************************"
option = print_menu
while option != 5
if option == 1
open_account
elsif option == 2
list_accounts
elsif option == 3
deposit
elsif option == 4
withdraw
end
option = print_menu
end
puts
puts "Hasta pronto!"
end
private
def print_menu
puts
puts "\t1. Abrir una cuenta"
puts "\t2. Listar las cuentas"
puts "\t3. Hacer un deposito"
puts "\t4. Hacer un retiro"
puts "\t5. Salir"
puts
print "Ingresa una opción: "
gets.chomp.to_i
end
def open_account
print "Ingresa el nombre: "
name = gets.chomp
print "Ingresa el saldo inicial: "
amount = gets.chomp.to_i
account = @bank.open(name, amount)
puts
puts "Se ha creado la cuenta con número #{account[:id]}"
end
def list_accounts
puts @bank.accounts.inspect
end
def deposit
print "Ingresa el número de la cuenta: "
id = gets.chomp.to_i
print "Ingresa el valor a depositar: "
amount = gets.chomp.to_i
result = @bank.deposit(id, amount)
puts
if result
puts "El depósito se realizó correctamente, el nuevo balance es #{result[:balance]}"
else
puts "No se encontró la cuenta"
end
end
def withdraw
print "Ingresa el número de la cuenta: "
id = gets.chomp.to_i
print "Ingresa el valor a retirar: "
amount = gets.chomp.to_i
result = @bank.withdraw(id, amount)
puts
if result
puts "El retiro se realizó correctamente, el nuevo balance es #{result[:balance]}"
else
puts "No se encontró la cuenta"
end
end
end
cli = CLI.new
cli.run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment