0

私はRubyでコース管理プログラムを作成しており、大学でのコース、各コースに関連するモジュール、および各コースとモジュールに登録されている学生の管理を支援しています。

各学生は1つのコース(またはスキーム)にのみ登録でき、自分のスキームで利用可能なモジュールのみを受講できます。

現在、2つのクラスがあります。ユーザーと対話するためにメニューとして使用しているクラスであるApplication.rbと、すべての作業を行っているクラスであるCourseModules.rbです。

Application.rb:

class Application
# To change this template use File | Settings | File Templates.
require './courseModules.rb'
def initialize
  mainMenu
end

=begin
  def navigateTo(what)
  what.new(v).display
  mainMenu
  end
=end

def mainMenu
  puts "What would you like to do?
      1: Add module to a scheme
      2: Remove module from a scheme
      3: Query modules
      4: Modify module
      5: Register a student on a scheme
      6: Remove a student from a scheme
      7: Register a student on a module
      8: Remove a student from a module"
  case gets.strip
    when "1"
      CourseModules.add_module
    when "2"
      CourseModules.removeModuleFromScheme
    when "3"
      navigateTo CourseModules
    when "4"
      navigateTo CourseModules
    when "5"
      navigateTo Student
    when "6"
      navigateTo Student
    when "7"
      navigateTo Student
  end
end
Application.new
end

CourseModules.rb:

class CourseModules
# To change this template use File | Settings | File Templates.
@@moduleScheme = nil
@@moduleYear = nil
#@moduleTitle = ""
@noOfModulesInScheme = 0

def self.moduleYear
  @@moduleYear
end

def initialize(v)
  @val = v
end
# Set and get the @val object value
def set (v)
  @val = v
end
def get
  return @val
end


# Attempt at add_module method on 21/08/2012 at 16:30
def self.add_module
  schemes = {}
  scheme_exists = false
  add_another_scheme = true
  add_another_module = true

  while add_another_scheme
    print "Enter scheme name: "
    scheme_name = gets
    @schemes.has_key?(scheme_name.chop) ? scheme_exists = true : scheme_exists = false

    if !scheme_exists
      @schemes[scheme_name.chop] = []
      puts "Scheme #{scheme_name.chop} has been added to the system"
    else
      scheme_exists = false
      puts "This scheme has already been added"
    end

    while add_another_module
      print "Enter module name: "
      module_name = gets
      @schemes[scheme_name.chop].include?(module_name.chop) ? true : @schemes[scheme_name.chop] << module_name.chop
      print "Add another module? "
      ask_if_user_wants_to_add_another_module = gets
      if(!ask_if_user_wants_to_add_another_module.chop == "y" or ask_if_user_wants_to_add_another_module == "yes")
      add_another_scheme = false
    end

 end

 print "Add another scheme? "
 ask_if_user_wants_to_add_another_scheme = gets
 if !(ask_if_user_wants_to_add_another_scheme.chop == "y" or ask_if_user_wants_to_add_another_scheme.chop == "yes")
   add_another_scheme = false
 end
 puts @schemes

end

 while add_another_module
   print "Enter scheme name: "
   scheme_name = gets
   schemes.has_key?(scheme_name.chop) ? scheme_exists = true : scheme_exists = false

   if !scheme_exists
     print "Enter module name: "
     module_name = gets
     schemes[scheme_name.chop] = module_name.chop
     puts "Scheme #{scheme_name.chop} with module #{module_name} has been added to the system"
   else
     scheme_exists = false
     puts "This scheme has already been added"
     puts "Enter module name: "
     module_name = gets
     schemes[scheme_name.chop] = module_name.chop
     puts "Scheme #{scheme_name.chop} with module #{module_name} has been added to the system"
   end

   print "Add another module? "
   ask_if_user_wants_to_add_another_module = gets
   if !(ask_if_user_wants_to_add_another_module.chop == "y" or ask_if_user_wants_to_add_another_module.chop == "yes")
     add_another_module = false
   end
 end
 puts schemes
 end

end

現時点では、Application.rbからプログラムを実行すると、メニューが表示され、オプション1(モジュールをスキームに追加)を選択します。次に、スキーム名を入力するように求められます。これを入力して、Enterキーを押します。

ただし、「has_key」の「add_module」で「undefinedmethod」エラーが発生します。'nil:NilClass(NoMethodError)用だと書いてあります

誰かが私にこれを説明できますか?どのように私はそれを正しくするでしょうか?

4

1 に答える 1

0

あなたは参照して@schemesいますが、それをとして定義しているschemes = {}ので、nil:NilClass (NoMethodError)

于 2012-08-21T20:18:00.287 に答える