私はRubyonRailsを使用して、ユーザーが大学のコース、モジュール、およびそれらに登録している学生を管理できるようにするプログラムを作成しています。
現在、Application.rbとCourseModules.rbの2つのクラスがあります。
Application.rbは、ユーザーとのインターフェイスに使用しているクラスです。現在、次のようになっています。
コード:
class Application
# To change this template use File | Settings | File Templates.
require './courseModules.rb'
def initialize
main_menu
end
=begin
def navigateTo(what)
what.new(v).display
mainMenu
end
=end
def main_menu
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
else if(ask_if_user_wants_to_add_another_module.chop != "y" or ask_if_user_wants_to_add_another_module != "yes")
Application.main_menu
end
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:「モジュールをスキームに追加する」を選択します。
次に、スキーム名を入力するように求められます。これを行うと、スキームがシステムに追加されたことを示す行が表示されます。
次に、モジュールの名前を入力するように求められます。次に、別のモジュールを入力するかどうかを尋ねられます。「y」または「yes」と入力すると、別のモジュールの名前を入力できます。ただし、「n」または「y」または「yes」以外の何かを入力すると、プログラムがクラッシュし、コンソールでいくつかのエラーが発生します。
これらのエラーの最初のものは次のように述べています。
add_module': undefined method
Application:Class(NoMethodError)のmain_menu'に
ライン上:
Application.main_menu
の中に
def self.add_module
私のCourseModules.rbクラスのメソッド。
ユーザーが別のモジュールを追加するかどうかを尋ねられたときに「n」または「y」または「yes」以外の何かを入力すると、プログラムのメインメニューに戻る必要があります。
誰かが私がここで間違っていることを知っていますか?どうすれば正しくできますか?