Menu
CoddyTech

Ulasan: Hierarki Karyawan

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 20 dari 65.

challenge icon

Tantangan

Sedang

Buat hierarki class perusahaan dalam lima file.

  • Person: person_name dan age, ditetapkan oleh constructor. introduce() mengembalikan Hi, I'm NAME, AGE years old.
  • Employee memperluas Person dan menambahkan employee_id (String) serta salary (tahunan, int). Override introduce() untuk menambahkan My employee ID is ID. setelah teks dari parent. monthly_pay() mengembalikan salary dibagi 12.0.
  • Manager memperluas Employee dan menambahkan department. monthly_pay()-nya adalah gaji employee dikalikan 1.2, dan manage_team() mengembalikan Managing the DEPARTMENT department.
  • Engineer memperluas Employee dan menambahkan language. code() mengembalikan Coding in LANGUAGE.
  • Payroll memiliki dua fungsi static. role(p) mengembalikan Manager, Engineer, Employee, atau Person, yaitu class paling spesifik dari p. total_monthly(people) mengembalikan jumlah monthly_pay() dari semua orang yang merupakan employee, termasuk manager dan engineer.

Setiap constructor meneruskan nilai milik parent ke super(), dan setiap override yang memperluas hasil dari parent menggunakan super().

Kode yang disediakan membaca jumlah orang yang akan dimasukkan, lalu satu baris untuk setiap orang: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT atau engineer NAME AGE ID SALARY LANGUAGE. Untuk setiap orang, kode mencetak perannya dalam tanda kurung siku dan introduce(), gaji bulanan untuk employee, manage_team() atau code() jika tersedia, lalu mencetak total di akhir. Untuk employee Alice 35 E123 60000 dan manager Bob 45 M54 85000 Marketing, kode mencetak:

[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

Tempatkan kodemu di person.gd, employee.gd, manager.gd, engineer.gd, dan payroll.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.

Coba sendiri

extends Node

func _ready():
	# Kode input/output yang disediakan: biarkan apa adanya
	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))

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online