Для контекста, я пытаюсь решить эту проблему.
Программное обеспечение для проверки расписания приема на прием к стоматологу
Реализация суперкласса Appointment
и подклассы OneTime
, Day
и Month
.У Appointment
есть description
(например, «Root Canal») и dates
информация (вы можете использовать объект Date или int Year, Int Month, Int Day).Заполните массив Appointment
объектов смесью встреч.
Напишите метод OccursOn внутри каждого из подклассов, который проверяет, происходит ли встреча в эту дату (OneTime), день(День) или месяц (месяц).Попросите пользователя ввести дату для проверки (например, 2006 10 5) и спросите пользователя, хотят ли они проверить встречу OneTime
, Day
или Month
.Основываясь на том, что выбрал пользователь, OccursOn внутри каждого подкласса должен запускаться и отображать любые подходящие встречи и связанные с ними описания.
Это то, что я имею до сих пор.
class Appointment
attr_accessor :day, :month, :year, :info
def initialize(day, month, year, info)
@day = day
@month = month
@year = year
@info = info
end
def occursOn
end
end
class OneTime < Appointment
def OneTime.occursOn(day, month, year)
if @day.to_i == day.to_i && @month.to_i == month.to_i && @year.to_i == year.to_i
puts "Good"
else
puts "Not Good"
end
end
end
class Day < Appointment
def Day.occursOn(day)
if @day.to_i == day.to_i
puts "Good"
else
puts "Not Good"
end
end
end
class Month < Appointment
def Month.occursOn(month)
if @month.to_i == month.to_i
puts "Good"
else
puts "Not Good"
end
end
end
app1 = OneTime.new("10", "11", "2018","Root Canal")
app2 = Day.new("10", "11", "2018", "Root Canal")
app3 = Month.new("10", "11", "2018", "Root Canal")
app4 = OneTime.new("11", "11", "2018", "Cleaning")
app5 = Day.new("11", "11", "2018", "Cleaning")
app6 = Month.new("11", "11", "2018", "Cleaning")
a = Array.new
a << app1 << app2 << app3 << app4 << app5 << app5 << app6
puts "Please enter the day of the appointment that you would like to search for"
day = gets.chomp
puts "Please enter the month of the appointment that you would like to search for"
month = gets.chomp
puts "Please enter the year of the appointment that you would like to search for"
year = gets.chomp
puts "Enter a number 1-3 to choose an answer out of OneTime, Day, or Month to search in that catagory respectivly"
answer = gets.chomp
if answer == "1"
OneTime.occursOn(day, month, year)
elsif answer == "2"
Day.occursOn(day)
elsif answer =="3"
Month.occursOn(month)
else
puts "Wrong answer"
end
Я пытаюсь проверить, совпадают ли введенные пользователем значения «день», «месяц» и «год» с числами в каждом из значений массива, которые соответствуют методу, введенному пользователем.Таким образом, OneTime.OccursOn должен выполнять поиск только в массивах, созданных с помощью OneTime.new.Я не могу использовать .include?из-за возможности того же значения дня и месяца.
Это выглядит полезным, но я не знаю, как бы я реализовал что-то подобное с моими подклассами.
array = [
["A", "X"],
["B", "Y"],
["C", "Z"]
]
str = "Y"
arr = array.find{|a| a[1] == str}
puts arr[0] if arr
# => B
Буду признателен за любую помощь.Спасибо.