我正在用 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
- 输入模块所属的学年 -- 将显示一条消息,说明该模块已添加到该年的计划中
- 有人问我是否要添加另一个模块,所以我说是
- 程序再次执行相同的步骤,但这次跳过第一个,并从输入模块名称开始——当我再次执行这些步骤时,会显示另一条消息,说明第二个模块已添加到我第二次指定的任何年份都采用相同的方案
- 然后我被问到是否要添加另一个模块,我在其中输入“n”,然后返回到原始菜单。
- 这次我选择从方案中删除模块的选项
- 我被问到我想从哪个方案中删除模块,所以我输入了我添加模块的方案
- 然后我被问到我想删除哪个模块,所以我输入了我之前添加到它的模块之一,但我被告知该模块在方案中不存在。
这表明我在调用第一种方法(添加模块)时存储在变量中的数据在我调用第二种方法(删除模块)时刚刚被丢弃。
我如何确保这些信息不会丢失?是否有我需要设置和连接我的程序的数据库,或者我需要使用会话和会话变量?还是完全不同的东西?
任何帮助将非常感激!