class Passenger
attr :name
def initialize(name)
@name = name
end
def book(flight)
flight.book(self)
booked(flight)
rescue Exception => ex
puts "can't book: #{ex.message}"
end
def booked(flight)
puts "booked flight: #{flight}"
end
end
class Flight
attr :segments
def initialize(*segments)
@segments = segments
end
def getPrice()
result = 0
@segments.each { |s| result += s.getPrice() }
return result
end
def book(passenger)
@segments.each { |s| raise "#{@start}->#{@destination}: no seats available!" if (s.seats<1) }
@segments.each { |s| s.book(passenger) }
end
def to_s()
return @segments.collect{ |s| "\n *#{s.start}->#{s.destination} (#{s.seats})" }.join()
end
end
class Segment
attr :start
attr :destination
attr :seats
attr :date
attr :price
def initialize(start, destination, seats, date, price)
@start = start
@destination = destination
@seats = seats
@date = date
@price = price
end
def getPrice()
return @price
end
def getDistance()
return DistanceManager.getDistance(@start, @destination)
end
def book(passenger)
raise "#{@start}->#{@destination}: no seats available!" if (@seats<1)
@seats -= 1
end
end
class DistanceManager
@@distances = Hash.new
def DistanceManager.addDistance(from, to, distance)
@@distances["#{from}#{to}"] = distance
@@distances["#{to}#{from}"] = distance
end
def DistanceManager.getDistance(from, to)
return (@@distances["#{from}#{to}"] or 0)
end
end
DistanceManager.addDistance("Berlin", "Frankfurt", 400)
DistanceManager.addDistance("Berlin", "Hamburg", 150)
DistanceManager.addDistance("Frankfurt", "New York", 6200)
DistanceManager.addDistance("Frankfurt", "Atlanta", 6800)
DistanceManager.addDistance("Hamburg", "New York", 6100)
if __FILE__ == $0
bf = Segment.new("Berlin", "Frankfurt", 100, nil, 500)
fb = Segment.new("Frankfurt", "Berlin", 1, nil, 500)
flight = Flight.new(bf, fb)
puts flight.to_s
p = Passenger.new("Bert")
p.book(flight)
puts flight.to_s
end
syntax highlighted by Code2HTML, v. 0.9.1