Menu
CoddyTech

Wiederholung – Mitarbeiterhierarchie

Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 20 von 65.

challenge icon

Aufgabe

Mittel

Erstelle die Klassenhierarchie eines Unternehmens in fünf Dateien.

  • Person: person_name und age, die vom Konstruktor festgelegt werden. introduce() gibt Hi, I'm NAME, AGE years old. zurück.
  • Employee erweitert Person und fügt employee_id (String) und salary (Jahresgehalt, int) hinzu. Überschreibe introduce(), sodass nach dem Text der Elternklasse My employee ID is ID. hinzugefügt wird. monthly_pay() gibt das durch 12.0 geteilte Gehalt zurück.
  • Manager erweitert Employee und fügt department hinzu. Sein monthly_pay() ist das Gehalt eines Mitarbeiters multipliziert mit 1.2, und manage_team() gibt Managing the DEPARTMENT department. zurück.
  • Engineer erweitert Employee und fügt language hinzu. code() gibt Coding in LANGUAGE. zurück.
  • Payroll hat zwei statische Funktionen. role(p) gibt die spezifischste Klasse von p zurück: Manager, Engineer, Employee oder Person. total_monthly(people) gibt die Summe von monthly_pay() für alle Personen zurück, die Mitarbeiter sind (einschließlich Manager und Ingenieure).

Jeder Konstruktor übergibt die Werte der Elternklasse an super(), und jedes Override, das das Ergebnis der Elternklasse erweitert, verwendet super().

Der bereitgestellte Code liest, wie viele Personen folgen, und danach jeweils eine Zeile: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT oder engineer NAME AGE ID SALARY LANGUAGE. Für jede Person gibt er die Rolle in eckigen Klammern und introduce() aus, bei Mitarbeitern das Monatsgehalt, sofern vorhanden manage_team() oder code(), und am Ende die Gesamtsumme. Für employee Alice 35 E123 60000 und manager Bob 45 M54 85000 Marketing gibt er Folgendes aus:

[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

Dein Code gehört in person.gd, employee.gd, manager.gd, engineer.gd und payroll.gd. main.gd enthält den bereitgestellten Ein- und Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

extends Node

func _ready():
	# Vorgegebener Ein-/Ausgabecode: unverändert lassen
	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))

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler