Tekrar - Personel Maaşları
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 26 / 57.
Görev
OrtaKalıtım kullanarak bir bordro oluşturun. Employee.new(name, rate), pay(hours) yöntemine (oran çarpı saat; 40’ın üzerindeki saatler oranın 1,5 katı üzerinden ödenir) ve Ada (employee): 800.00 döndüren line(hours) yöntemine sahiptir. Bu çıktı pay(hours) ve role kullanılarak oluşturulur; role ise employee döndürür. Manager.new(name, rate, bonus), name ve rate değerlerini super yöntemine aktarır, bonusu super yönteminin ücretine ekler ve manager rolüne sahiptir. Contractor < Employee, fazla mesai olmadan oran çarpı saat üzerinden ücretlendirilir ve contractor rolüne sahiptir.
Sağlanan kod; employee Ada 20 40, manager Bo 30 45 500 veya contractor Cy 50 50 satırlarını (name, rate, hours ve yöneticiler için bonus) okur ve her biri için line(hours) çıktısını yazdırır. Ardından staff: 3, managers: 1, employees: 3 çıktısını (her ikisi de is_a? kullanılarak sayılır; yani yöneticiler ve taşeronlar da çalışandır) ve toplam ücreti yazdırır.
Kodunuz employee.rb, manager.rb ve contractor.rb dosyalarına gider. main.rb, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'employee'
require_relative 'manager'
require_relative 'contractor'
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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) })
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıf TanımlamaÖrnek DeğişkenleriMetotlar ve selfto_s ve inspectÖzet - Kütüphane Kartı7Çok Biçimlilik ve Ördek Tiplemesi
Çok BiçimlilikÖrdek TiplemesiSoyut Metotlarcase ve SınıflarTekrar - Ödeme Yöntemleri2Erişimciler ve self
Okuyucular ve YazıcılarÖzel Setter'larMetotlarda selfKimlik ve EşitlikTekrar - Kişi Listesi5Kalıtım
Alt sınıflarMetotları geçersiz kılmasuper çağrısıis_a? ve üst sınıflarTekrar - Personel Maaşları8Özel Metotlar
Eşitlik ve hashOperatör Metotlarıİndeksleme ve EklemeÖzel KoleksiyonlarTekrar - Kesirler11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Sınıf Metotları ve Değişkenleri
Sınıf MetotlarıSınıf Örnek DeğişkenleriSabitlerFabrika MetotlarıTekrar - Kupon KodlarıKendi başına pratik yap: Online Ruby derleyicisi