`block in menu': undefined method :Class (NoMethodError)


#1



main.rb:173:in block in menu': undefined methodregistrar_cliente' for Sistema:Class (NoMethodError)
from main.rb:169:in loop'
from main.rb:169:in
menu'
from main.rb:185:in `'


Hello!

I cannot figure out what is wrong with the code. It appears to be the variable scope but I don't know what do to next ^.^'

S.O.S


require 'time'

class Cliente
  @@clientes = {}

  def initialize(cedula, nombre, apellido, direccion, telefono)
    @cedula = cedula
    @nombre = nombre
    @apellido = apellido
    @direccion = direccion
    @telefono = telefono
  end

  def self.clientes
    @@clientes
  end
end

class Vuelo
  attr_accessor :asientos, :numVuelo, :ciudadOrigen, :ciudadDestino, :fechaSalida, :tarifaGeneral

  @@indice = 0

  def initialize(ciudadOrigen, ciudadDestino, fechaSalida, tarifaGeneral)
    @@indice += 1
    @numVuelo = @@indice
    @ciudadOrigen = ciudadOrigen
    @ciudadDestino = ciudadDestino
    @fechaSalida = fechaSalida
    @tarifaGeneral = tarifaGeneral
    @asientos = {}
  end

  def self.indice
    @@indice
  end
end

class Boleto
  @@boletos = []

  def initialize(cliente, numVuelo, numAsiento, claseAsiento, tarifaTotal)
    @cliente = cliente
    @numVuelo = numVuelo
    @numAsiento = numAsiento
    @claseAsiento = claseAsiento
    @tarifaTotal = tarifaTotal
  end

  def self.push(boleto)
    @@boletos.push boleto
  end
end

class Sistema
  @@vuelos = []

  def registrar_vuelo
    puts "Registro de vuelo numero: #{Vuelo.indice + 1}"

    print 'Ciudad de origen: '
    ciudadOrigen = gets.chomp
    print 'Ciudad de destino: '
    ciudadDestino = gets.chomp
    print 'Fecha de salida: '
    fechaSalida = Time.parse(gets.chomp)
    print 'Tarifa general: '
    tarifaGeneral = gets.chomp

    @@vuelos.push Vuelo.new(ciudadOrigen, ciudadDestino, fechaSalida, tarifaGeneral)
    puts 'Vuelo registrado correctamente..'
  end

  def registrar_cliente
    puts 'Registro del cliente'

    print 'Cedula del cliente: '
    cedula = gets.chomp
    unless Cliente.clientes[cedula].nil?
      puts 'El cliente ya existe..'
      return Cliente.clientes[cedula]
    end

    print 'Nombre del cliente: '
    nombre = gets.chomp
    print 'Apellido del cliente: '
    apellido = gets.chomp
    print 'Direccion del cliente: '
    direccion = gets.chomp
    print 'Telefono del cliente: '
    telefono = gets.chomp

    Cliente.clientes[cedula] = Cliente.new(cedula, nombre, apellido, direccion, telefono)
    Cliente.clientes[cedula]
  end

  def registrar_pasajero
    puts '-Registro de pasajero en el vuelo-'

    print 'Ciudad de origen: '
    ciudadOrigen = gets.chomp
    print 'Ciudad de destino: '
    ciudadDestino = gets.chomp
    print 'Fecha de salida: '
    fechaSalida = Time.parse(gets.chomp)

    puts 'Vuelos disponibles:'
    @@vuelos.each_with_index do |v, i|
      if v.ciudadOrigen == ciudadOrigen && v.ciudadDestino == ciudadDestino && v.fechaSalida.yday == fechaSalida.yday && v.fechaSalida.year == fechaSalida.year
        puts "- Numero de vuelo #{v.numVuelo}, Hora de salida #{v.fechaSalida.hour}:#{v.fechaSalida.min}"
      elsif i == @@vuelos.length - 1
        puts 'No se encontro ningun vuelo con esas caracteristicas..'
        return
      end
    end

    print 'Numero de vuelo: '
    numVuelo = gets.chomp.to_i
    if numVuelo < 1 || numVuelo > Vuelo.indice
      puts 'Numero de vuelo incorrecto..'
      return
    end

    print 'Clase del asiento: '
    claseAsiento = gets.chomp.upcase
    print 'Columna del asiento: '
    colAsiento = gets.chomp.to_i
    print 'Fila del asiento: '
    filAsiento = gets.chomp.upcase
    asiento = colAsiento.to_s + filAsiento

    unless ('A'..'C').cover? claseAsiento
      puts 'Los valores del asiento son incorrectos..'
      return
    end
    unless (1..16).cover? colAsiento
      puts 'Los valores del asiento son incorrectos..'
      return
    end
    unless ('A'..'F').cover? filAsiento
      puts 'Los valores del asiento son incorrectos..'
      return
    end
    unless @@vuelos[numVuelo - 1].asientos[asiento].nil?
      puts 'El asiento esta ocupado..'
      return
    end

    @@vuelos[numVuelo - 1].asientos[asiento] = registrar_cliente
    puts 'Pasajero registrado correctamente..'

    cedula = @@vuelos[numVuelo - 1].asientos[asiento].to_a[0][0]
    tarifaGeneral = @@vuelos[numVuelo - 1].tarifaGeneral
    Boleto.push Cliente.clientes[cedula], numVuelo, asiento, claseAsiento, aplicar_tarifa(tarifaGeneral, claseAsiento)
  end

  def aplicar_tarifa(tarifaGeneral, claseAsiento)
    case claseAsiento
    when 'A' then return tarifaGeneral * 1.25
    when 'B' then return tarifaGeneral * 1.15
    when 'C' then return tarifaGeneral
    end
  end

  def self.menu
    puts 'comandos: -rc [Registrar clientes] -rv [Registrar vuelos] -rp [Registrar pasajeros] -s [salir]'
    print '>> '

    loop do
      comando = gets.chomp.upcase

      case comando
      when '-RC' then registrar_cliente
      when '-RV' then registrar_vuelo
      when '-RP' then registrar_pasajero
      when '-S'  then return
      else
        puts "Comando no encontrado.. \n"
        print '>> '
      end
    end
  end
end

Sistema.menu


#2

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.