我正在用Ruby编写课程管理程序,以允许用户向模式添加/删除模块。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',并返回到原始菜单。
- 这一次,我选择的选项从计划中删除模块
- 我问我想删除从一个模块,该模块方案,所以我输入我已经添加了模块
- 我的一个然后问我想删除哪个模块,因此我输入了之前添加的模块之一,但我被告知该模块不存在于该模式中。
这表明我调用第一种方法(添加模块)时我存储在变量中的数据刚刚在我调用第二种方法(删除模块)时被丢弃。
如何确保这些信息不会丢失?是否有需要设置并连接我的程序的数据库,还是需要使用会话和会话变量?或者是完全不同的东西?
任何帮助将不胜感激!
Re。代码“$ schemes”的第一部分是我存储了用户调用'add module'方法时添加的方案的数组。如果该方案尚未添加 - 我需要让用户知道,因为没有关联的模块要移除,否则(即如果该方案已被添加),那么我需要询问用户哪个模块与该方案相关联他们想要删除。 – Someone2088
Re。代码'scheme_exists'的第二部分与'module_exists'类似,只是它检查方案是否存在,而不是模块是否存在...方案和模块是两个不同的东西。 – Someone2088
@ Someone2088该代码是相同的,只有地图是不同的。相同的代码。您不一定需要相信或理解我所说的内容,但最终如果您希望其他人能够阅读您的代码,则需要对其进行相当程度的更改。现在真的很难相处。 –