סיכום – שכר העובדים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Ruby של Coddy. שיעור 26 מתוך 57.
אתגר
בינוניבנו מערכת שכר באמצעות ירושה. ל־Employee.new(name, rate) יש את pay(hours) (תעריף כפול מספר השעות, כאשר שעות מעבר ל־40 משולמות לפי פי 1.5 מהתעריף) ואת line(hours) שמחזירה Ada (employee): 800.00, שנבנית מתוך pay(hours) ו־role, כאשר role מחזירה employee. Manager.new(name, rate, bonus) מעבירה את name ואת rate ל־super, מוסיפה את הבונוס לשכר של super והתפקיד שלה הוא manager. Contractor < Employee מקבל שכר לפי התעריף כפול מספר השעות ללא שעות נוספות, והתפקיד שלו הוא contractor.
הקוד שסופק קורא שורות employee Ada 20 40, manager Bo 30 45 500 או contractor Cy 50 50 (שם, תעריף, מספר שעות ובונוס עבור מנהלים) ומדפיס את line(hours) עבור כל אחת מהן, ואז את staff: 3, managers: 1, employees: 3 (שניהם נספרים באמצעות is_a?, ולכן גם מנהלים וקבלנים הם עובדים) ואת סך השכר.
הקוד שלכם ייכתב בקבצים employee.rb, manager.rb ו־contractor.rb. הקובץ main.rb מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.
נסו בעצמכם
require_relative 'employee'
require_relative 'manager'
require_relative 'contractor'
# קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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) })
כל השיעורים ביחידה תכנות מונחה עצמים
3מתודות ומשתנים של מחלקה
מתודות של מחלקהמשתני מופע של מחלקהקבועיםמתודות ליצירת מופעיםסיכום – קודי קופוןתרגלו בעצמכם: קומפיילר Ruby אונליין