Menu
CoddyTech
flag Ar iconالعربيةdown icon

مراجعة - التسلسل الهرمي للموظفين

جزء من قسم البرمجة كائنية التوجّه في رحلة 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) الفئة الأكثر تحديدًا لـ p: Manager أو Engineer أو Employee أو Person. تُعيد 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 عبر الإنترنت