Menu
CoddyTech

Rangkuman: Penggajian Staf

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 26 dari 57.

challenge icon

Tantangan

Sedang

Buat sistem penggajian dengan inheritance. Employee.new(name, rate) memiliki pay(hours) (rate dikalikan jam kerja, dengan jam kerja di atas 40 dibayar sebesar 1.5 kali rate) dan line(hours) yang mengembalikan Ada (employee): 800.00, yang dibuat dari pay(hours) dan role, dengan role mengembalikan employee. Manager.new(name, rate, bonus) meneruskan name dan rate ke super, menambahkan bonus ke bayaran dari super, dan memiliki role manager. Contractor < Employee dibayar sebesar rate dikalikan jam kerja tanpa lembur dan memiliki role contractor.

Kode yang disediakan membaca baris employee Ada 20 40, manager Bo 30 45 500 atau contractor Cy 50 50 (nama, rate, jam kerja, dan bonus untuk manager), lalu mencetak line(hours) untuk setiap baris, kemudian staff: 3, managers: 1, employees: 3 (keduanya dihitung dengan is_a?, jadi manager dan contractor juga merupakan employee), serta total bayaran.

Kodemu ditulis di employee.rb, manager.rb, dan contractor.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

require_relative 'employee'
require_relative 'manager'
require_relative 'contractor'

# Kode input/output yang disediakan: biarkan tetap seperti ini
input = []
while (line = gets)
  input << line.chomp
end
staff = input.map do |line|
  kind, name, rate, hours, bonus = line.split
  worker = case kind
           when "manager" then Manager.new(name, rate.to_f, bonus.to_f)
           when "contractor" then Contractor.new(name, rate.to_f)
           else Employee.new(name, rate.to_f)
           end
  [worker, hours.to_i]
end
staff.each { |worker, hours| puts worker.line(hours) }
managers = staff.count { |w, _| w.is_a?(Manager) }
employees = staff.count { |w, _| w.is_a?(Employee) }
puts "staff: #{staff.size}, managers: #{managers}, employees: #{employees}"
puts format("total: %.2f", staff.sum { |w, h| w.pay(h) })

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online