Menu
CoddyTech

Tekrar: Çalışan Hiyerarşisi

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 20 / 65.

challenge icon

Görev

Orta

Bir şirketin sınıf hiyerarşisini beş dosyada oluşturun.

  • Person: Kurucu tarafından ayarlanan person_name ve age. introduce(), Hi, I'm NAME, AGE years old. döndürür.
  • Employee, Person sınıfını genişletir ve employee_id (String) ile salary (yıllık, int) ekler. Ebeveyn sınıfın metninden sonra My employee ID is ID. eklemek için introduce() metodunu geçersiz kılar. monthly_pay(), maaşın 12.0'a bölünmüş hâlini döndürür.
  • Manager, Employee sınıfını genişletir ve department ekler. monthly_pay(), çalışan maaşının 1.2 ile çarpılmış hâlidir ve manage_team(), Managing the DEPARTMENT department. döndürür.
  • Engineer, Employee sınıfını genişletir ve language ekler. code(), Coding in LANGUAGE. döndürür.
  • Payroll iki statik fonksiyona sahiptir. role(p), p nesnesinin en özel sınıfı olan Manager, Engineer, Employee veya Person değerini döndürür. total_monthly(people), çalışan olan kişiler için monthly_pay() değerlerinin toplamını döndürür (yöneticiler ve mühendisler dâhil).

Her kurucu, ebeveynin değerlerini super()'a aktarır ve ebeveynin sonucunu genişleten her geçersiz kılma super() kullanır.

Sağlanan kod, ardından kaç kişinin geleceğini okur; sonrasında her kişi için bir satır okur: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT veya engineer NAME AGE ID SALARY LANGUAGE. Her kişi için rolü köşeli parantez içinde ve introduce() sonucunu, çalışanlar için aylık maaşı, varsa manage_team() veya code() sonucunu yazdırır; en sonda toplamı yazdırır. employee Alice 35 E123 60000 ve manager Bob 45 M54 85000 Marketing için şu çıktıyı verir:

[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

Kodunuzu person.gd, employee.gd, manager.gd, engineer.gd ve payroll.gd dosyalarına yazın. main.gd, sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.

Kendin dene

extends Node

func _ready():
	# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
	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))

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi