Menu
Coddy logo textTech

Manejo de errores

Parte de la sección Fundamentos del Journey de Ruby de Coddy — lección 85 de 88.

challenge icon

Desafío

Fácil

Completa el Rastreador de Gastos Diarios agregando el manejo de errores para opciones de menú inválidas.

Tu programa debe:

  1. Inicializar un array vacío llamado expenses
  2. Crear un loop do que muestre el menú y lea la entrada del usuario
  3. Cuando el usuario ingrese "1", solicitar el nombre y el monto del gasto, crear un hash con las llaves :name y :amount, agregarlo al array expenses e imprimir Expense added!
  4. Cuando el usuario ingrese "2", mostrar todos los gastos o un mensaje si no existe ninguno
  5. Cuando el usuario ingrese "3", calcular y mostrar el total y el promedio de todos los gastos, o un mensaje si no existe ninguno
  6. Cuando el usuario ingrese "4", borrar todos los gastos del array e imprimir All expenses cleared!
  7. Cuando el usuario ingrese "5", imprimir Goodbye! y salir del bucle
  8. Para cualquier otra entrada, imprimir: Invalid option. Please try again.

El menú debe mostrarse exactamente como antes:


--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: 

Por ejemplo, si las entradas son 7, abc, luego 5 (dos opciones inválidas, luego salir), la salida debe ser:


--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Invalid option. Please try again.

--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Invalid option. Please try again.

--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Goodbye!

Si las entradas son 1, Coffee, 4.5, 6, 2, luego 5 (agregar gasto, opción inválida, ver, salir), la salida debe ser:


--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Expense name: Amount: Expense added!

--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Invalid option. Please try again.

--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: 
--- Your Expenses ---
Coffee: $4.5

--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Goodbye!

Pruébalo tú mismo

expenses = []

loop do
  puts "--- Expense Tracker ---"
  puts "1. Add Expense"
  puts "2. View Expenses"
  puts "3. Total & Average"
  puts "4. Clear All"
  puts "5. Exit"
  print "Choose an option: "
  
  choice = gets.chomp
  
  if choice == "1"
    print "Expense name: "
    name = gets.chomp
    print "Amount: "
    amount = gets.chomp.to_f
    expenses << { name: name, amount: amount }
    puts "Expense added!"
  elsif choice == "2"
    if expenses.empty?
      puts "No expenses recorded yet."
    else
      expenses.each do |expense|
        puts "#{expense[:name]}: $#{expense[:amount]}"
      end
    end
  elsif choice == "3"
    if expenses.empty?
      puts "No expenses to calculate."
    else
      total = expenses.sum { |expense| expense[:amount] }
      average = total / expenses.length
      puts "Total: $#{total}"
      puts "Average: $#{average}"
    end
  elsif choice == "4"
    expenses.clear
    puts "All expenses cleared!"
  elsif choice == "5"
    puts "Goodbye!"
    break
  end
  
  puts ""
end

Todas las lecciones de Fundamentos