Menu
CoddyTech

סיכום – היררכיית עובדים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 20 מתוך 65.

challenge icon

אתגר

בינוני

בנו היררכיית מחלקות של חברה בחמישה קבצים.

  • Person: person_name ו-age, שנקבעים על ידי הבנאי. introduce() מחזירה Hi, I'm NAME, AGE years old.
  • Employee יורשת מ-Person ומוסיפה employee_id (String) ו-salary (שנתי, int). דרסו את introduce() כדי להוסיף My employee ID is ID. אחרי הטקסט של מחלקת האב. monthly_pay() מחזירה את המשכורת חלקי 12.0.
  • Manager יורשת מ-Employee ומוסיפה department. הערך של monthly_pay() שלה הוא השכר של העובד כפול 1.2, ו-manage_team() מחזירה Managing the DEPARTMENT department.
  • Engineer יורשת מ-Employee ומוסיפה language. code() מחזירה Coding in LANGUAGE.
  • Payroll כוללת שתי פונקציות סטטיות. role(p) מחזירה את Manager, Engineer, Employee או Person — המחלקה הספציפית ביותר של p. total_monthly(people) מחזירה את הסכום של monthly_pay() עבור האנשים שהם עובדים (כולל מנהלים ומהנדסים).

כל בנאי מעביר את הערכים של מחלקת האב אל super(), וכל דריסה שמרחיבה את התוצאה של מחלקת האב משתמשת ב-super().

הקוד שסופק קורא כמה אנשים מופיעים אחר כך, ואז שורה אחת לכל אחד: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT או engineer NAME AGE ID SALARY LANGUAGE. עבור כל אדם הוא מדפיס את התפקיד בסוגריים מרובעים ואת introduce(), את השכר החודשי של עובדים, את manage_team() או את code() כאשר הן קיימות, ובסוף את הסכום הכולל. עבור employee Alice 35 E123 60000 ו-manager Bob 45 M54 85000 Marketing יודפס:

[Employee] Hi, I'm Alice, 35 years old. My employee ID is E123.
Monthly pay: 5000.00
[Manager] Hi, I'm Bob, 45 years old. My employee ID is M54.
Monthly pay: 8500.00
Managing the Marketing department.
Total monthly payroll: 13500.00

הקוד שלכם ייכנס לקבצים person.gd, employee.gd, manager.gd, engineer.gd ו-payroll.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

extends Node

func _ready():
	# קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
	var count := int(OS.read_string_from_stdin())
	var people: Array[Person] = []
	for i in count:
		var p := OS.read_string_from_stdin().split(" ")
		if p[0] == "manager":
			people.append(Manager.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
		elif p[0] == "engineer":
			people.append(Engineer.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
		elif p[0] == "employee":
			people.append(Employee.new(p[1], int(p[2]), p[3], int(p[4])))
		else:
			people.append(Person.new(p[1], int(p[2])))
	for person in people:
		print("[%s] %s" % [Payroll.role(person), person.introduce()])
		if person is Employee:
			print("Monthly pay: %.2f" % (person as Employee).monthly_pay())
		if person is Manager:
			print((person as Manager).manage_team())
		elif person is Engineer:
			print((person as Engineer).code())
	print("Total monthly payroll: %.2f" % Payroll.total_monthly(people))

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר GDScript אונליין