Menu
CoddyTech

Podsumowanie – hierarchia pracowników

Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 20 z 65.

challenge icon

Wyzwanie

Średni

Zbuduj hierarchię klas firmy w pięciu plikach.

  • Person: person_name i age, ustawiane przez konstruktor. introduce() zwraca Hi, I'm NAME, AGE years old.
  • Employee dziedziczy po Person i dodaje employee_id (String) oraz salary (roczna, int). Nadpisz introduce(), aby po tekście klasy nadrzędnej dodać My employee ID is ID.. monthly_pay() zwraca pensję podzieloną przez 12.0.
  • Manager dziedziczy po Employee i dodaje department. Jego monthly_pay() to pensja pracownika pomnożona przez 1.2, a manage_team() zwraca Managing the DEPARTMENT department.
  • Engineer dziedziczy po Employee i dodaje language. code() zwraca Coding in LANGUAGE.
  • Payroll ma dwie funkcje statyczne. role(p) zwraca Manager, Engineer, Employee lub Person — najbardziej szczegółową klasę obiektu p. total_monthly(people) zwraca sumę wartości monthly_pay() dla osób będących pracownikami (w tym menedżerów i inżynierów).

Każdy konstruktor przekazuje wartości klasy nadrzędnej do super(), a każde nadpisanie rozszerzające wynik klasy nadrzędnej korzysta z super().

Dostarczony kod odczytuje liczbę kolejnych osób, a następnie po jednej osobie w każdym wierszu: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT lub engineer NAME AGE ID SALARY LANGUAGE. Dla każdej osoby wypisuje rolę w nawiasach kwadratowych i wynik introduce(), miesięczną pensję w przypadku pracowników, wynik manage_team() lub code(), jeśli dana metoda istnieje, a na końcu sumę. Dla employee Alice 35 E123 60000 i manager Bob 45 M54 85000 Marketing wypisuje:

[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

Umieść swój kod w plikach person.gd, employee.gd, manager.gd, engineer.gd i payroll.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

extends Node

func _ready():
	# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
	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))

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator GDScript online