Ruby でコース管理プログラムを作成して、ユーザーがモジュールをスキームに追加/削除できるようにしています。
現在、私のプログラムではユーザーがモジュールを追加できますが、削除しようとすると、存在しないと言われます。
モジュールを追加するために使用している方法は次のとおりです。
def self.add_module
# schemes = {}
scheme_exists = false
add_another_scheme = true
# module_exists = false
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"
elsif
scheme_exists = true
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
# puts "Module #{module_name.chop} has been added to #{scheme_name.chop}"
# 22/08/2012 at 14:15 Now need to read in each module's unique identifier and year it belongs to
print "Enter module ID: "
$module_ID =gets
$schemes[scheme_name.chop].include?($module_ID.chop) ? true : $schemes[scheme_name.chop] << $module_ID.chop
$schemes.has_key?($module_ID.chop) ? module_exists = true : module_exists = false
print "Enter the academic year to which the module belongs: "
module_year = gets
$schemes[scheme_name.chop].include?(module_year.chop) ? true : $schemes[scheme_name.chop] << module_year.chop
if !$module_exists
$schemes[$module_ID.chop] = []
puts "Module #{$module_ID.chop} : #{module_name.chop} has been added to #{scheme_name.chop} for the year #{module_year}"
elsif
$module_exists = true
puts "A module with this ID has already been added to the scheme, please check if the module already exists, or choose another ID "
else
# puts "Module #{module_name.chop}, #{module_ID.chop} has been added to #{scheme_name.chop} for the year #{module_year}"
end
# puts "Module #{module_name.chop}, #{module_ID.chop} has been added to #{scheme_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
モジュールを削除するために使用している方法は次のとおりです。
def self.remove_module
print "Which scheme would you like to remove a module from? "
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} doesn't exist"
else
scheme_exists = true
puts "Which module would you like to remove from #{scheme_name.chop}?"
$module_ID = gets
if !$module_exists
$schemes[$module_ID.chop] = []
puts "Module #{$module_ID.chop} : does not exist in #{scheme_name.chop} "
else
module_exists = true
puts "Module #{$module_ID.chop} has been removed from #{scheme_name.chop} "
# puts "Module #{module_name.chop}, #{module_ID.chop} has been added to #{scheme_name.chop} for the year #{module_year}"
end
end
end
プログラムを実行すると、メニューが表示され、最初のメソッドを呼び出すスキームにモジュールを追加することを選択します。次の手順に従います。
- スキーム名を入力してください -- スキームがシステムに追加されたことを示すメッセージが表示されます
- モジュール名を入力してください
- モジュール ID を入力してください
- モジュールが属する学年を入力してください -- モジュールがその年のスキームに追加されたことを示すメッセージが表示されます
- 別のモジュールを追加するかどうか尋ねられたので、はいと言います
- プログラムは再び同じ手順を実行しますが、今回は最初の手順をスキップし、モジュール名の入力から開始します。もう一度手順を実行すると、2 番目のモジュールが追加されたことを示す別のメッセージが表示されます。 2 回目に指定した年に同じスキーム
- 次に、別のモジュールを追加するかどうか尋ねられ、「n」と入力すると、元のメニューに戻ります。
- 今回は、スキームからモジュールを削除するオプションを選択します
- モジュールを削除するスキームを尋ねられたので、モジュールを追加したスキームを入力します
- 次に、削除するモジュールを尋ねられたので、以前に追加したモジュールの 1 つを入力しましたが、そのモジュールはスキームに存在しないと言われました。
これは、最初のメソッド (モジュールを追加するため) を呼び出したときに変数に保存したデータが、2 番目のメソッド (モジュールを削除するため) を呼び出したときに破棄されたことを示唆しています。
この情報が失われないようにするにはどうすればよいですか? プログラムをセットアップして接続する必要があるデータベースはありますか、それともセッションとセッション変数を使用する必要がありますか? それとも全く違うものですか?
どんな助けでも大歓迎です!