Я пишу программу Ruby для имитации системы управления курсом. Поскольку моя программа в настоящее время стоит, когда пользователь сначала загружает программу, ей представлено меню. В настоящее время я просто работаю над первым вариантом в меню, который заключается в добавлении модуля в схему.Программа Ruby выходит слишком рано, данные перезаписываются
Работая поэтапно, когда пользователь выбирает эту опцию из меню, им предлагается ввести имя схемы, которое сохраняется как ключ в хеше, называемый «схемами». Затем им предлагается ввести имя модуля, которое сохраняется в хеше, под ключом, который принадлежит только что введенной схеме.
После этого печатается строка с сообщением пользователю о том, что схема и модуль были добавлены в систему.
Затем их спрашивают, хотели бы они добавить еще один модуль. Здесь у меня есть несколько вопросов:
A. Если пользователь вводит «y», им предлагается ввести схему - если введенная в нее схема уже существует, им говорят, если нет, то она создается , и затем их попросят имя модуля. Затем их спрашивают, хотели бы они добавить еще один модуль. Если пользователь набирает «n», существующие в настоящее время схемы вместе с их модулями распечатываются, и программа завершается.
B. В этом случае я добавил два модуля к одной и той же схеме, но был напечатан только последний, поэтому, по-видимому, он переопределяет первый, который был введен, - как я могу убедиться, что это doesn «Случись, и что после того, как первый модуль был сохранен в хеш-схеме, любые последующие добавляются в конец хеша, а не заменяют уже существующий?
Как я могу убедиться, что программа не выходит, когда пользователь «N» на стадии А, а возвращается в главное меню программы?
Как я могу убедиться, что первая часть данных, сохраненная в хеше, не переопределяется никакими последующими фрагментами данных, которые я сохраняю в хеш, а скорее, что они становятся отдельными элементами? (Идея в том, чтобы иметь что-то похожее на Java ArrayList, которая будет автоматически добавлять следующий бит данных к следующему элементу массива, который free- увеличивается численно)
два класса у меня есть является (Application который действует как мой интерфейс с пользователем) и CourseModules (где хранятся данные, введенные пользователем).
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.гь в настоящее время выглядит следующим образом:
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 12:35
def self.add_module
schemes = {}
scheme_exists = false
add_another_module = true
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
def removeModuleFromScheme
moduleName.moduleScheme = nil
end
def queryModule
end
* Редактировать 21/08/2012 в 18:00 **
Хорошо, мой класс courseModules теперь выглядит следующим образом:
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
, но теперь, когда я выбираю '1' из меню и вводим название схемы, я получаю сообщение об ошибке:
@schemes.has_key?(scheme_name.chop) ? scheme_exists = true : scheme_exists = false
который говорит
add_module': undefined method
в has_key? для nil: NilClass (NoMethodError)
Кто-нибудь знает, что я могу сделать, чтобы решить эту проблему?
Привет, извините, я так долго смотрел на это, я начинаю пропустить вещи ... Я изменил класс на то, что вы предложили, и попытался запустить его, но я получаю сообщение об ошибке в "while add_another_module part - он жалуется, что есть синтаксическая ошибка, неожиданно), ожидая ключевое слово_end ... – Someone2088
хорошо проверить еще раз, должно быть, что-то испортило в копии, потому что, насколько я вижу там не является синтаксической ошибкой, и она отлично работает. – saihgala
Я проверил еще раз, я удалил то, что было там, скопировано и вставлено снова, и я все еще получаю ту же ошибку. – Someone2088