mirror of https://github.com/E-Almqvist/hsf
parent
f20178181f
commit
a92eb97ee4
@ -1,2 +1,94 @@ |
|||||||
#!/usr/bin/ruby -w |
#!/usr/bin/ruby |
||||||
|
|
||||||
|
class CoffeMachine |
||||||
|
def initialize(location, change, coffees, price) |
||||||
|
@location = location |
||||||
|
@change = change |
||||||
|
@coffees = coffees |
||||||
|
@price = price |
||||||
|
@number_served = 0 |
||||||
|
end |
||||||
|
|
||||||
|
def prompt_for_payment() |
||||||
|
if( not self.empty? ) then |
||||||
|
puts("Welcome to the #{@location} Coffee Machine.") |
||||||
|
puts("Please pay #{@price} SEK for one coffee.") |
||||||
|
puts("Total amount served: #{@number_served}") |
||||||
|
|
||||||
|
print("Insert coins: ") |
||||||
|
coins = await_payment() |
||||||
|
else |
||||||
|
puts("Inget kaffe kvar :(") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def await_payment() |
||||||
|
inp = gets().chomp() |
||||||
|
coin_types = inp.split(",") |
||||||
|
|
||||||
|
coin_hash = Hash.new(0) |
||||||
|
|
||||||
|
coin_types.each do |t| |
||||||
|
x = t.split(":") |
||||||
|
coin_hash[x[0].to_i] = x[1].to_i |
||||||
|
end |
||||||
|
|
||||||
|
@change = @change.merge(coin_hash) |
||||||
|
sum, d = verify_payment(coin_hash) |
||||||
|
|
||||||
|
if( d > 0 ) then |
||||||
|
dispense_change(d) |
||||||
|
dispense_coffe() |
||||||
|
elsif( d < 0 ) then |
||||||
|
puts("Not enough money") |
||||||
|
else |
||||||
|
dispense_coffe() |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
private def verify_payment(coin_hash) |
||||||
|
sum = 0 |
||||||
|
coin_hash.each do |key, value| |
||||||
|
sum += value*key |
||||||
|
end |
||||||
|
|
||||||
|
return sum, sum - @price |
||||||
|
end |
||||||
|
|
||||||
|
private def calculate_change(d) |
||||||
|
@change.each do |type, amount| |
||||||
|
amount = d.to_f/type |
||||||
|
|
||||||
|
if( amount.to_i == amount && amount <= @change[type] ) then |
||||||
|
return type, amount.to_i |
||||||
|
else |
||||||
|
next |
||||||
|
end |
||||||
|
end |
||||||
|
return nil, nil |
||||||
|
end |
||||||
|
|
||||||
|
private def dispense_change(d) |
||||||
|
cointype, amount = calculate_change(d) |
||||||
|
if( cointype ) then |
||||||
|
puts("Här är din change:") |
||||||
|
@change[cointype] -= amount |
||||||
|
puts("-> #{amount}st #{cointype} kr") |
||||||
|
else |
||||||
|
puts("Kan ej ge tillbaka någon change, tack för pengarna.") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
private def dispense_coffe() |
||||||
|
puts("Här är ditt kaffe") |
||||||
|
@number_served += 1 |
||||||
|
@coffees -= 1 |
||||||
|
end |
||||||
|
|
||||||
|
def empty? |
||||||
|
@coffees <= 0 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
x = CoffeMachine.new("hej", {10=>2, 1=>100}, 5, 10) |
||||||
|
x.prompt_for_payment |
||||||
|
Loading…
Reference in new issue