Tekrar - Öğrenci Kayıt Sistemi
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 30 / 65.
Görev
Ortaİki sınıftan oluşan küçük bir öğrenci kayıt sistemi oluştur.
Student, student.gd dosyasında verilerini gizli tutar:
_init(id, new_name), ID'yi özel bir değişkende saklar ve adıstudent_nameayarlayıcısı üzerinden atar.student_idsalt okunurdur ve ID'yi döndürür.student_namebir ayarlayıcıya sahiptir:2karakterden kısa bir ad reddedilir (eski ad kalır) velast_errordeğeriName must be at least 2 charactersolur. Geçerli bir ad,last_errordeğerini temizler.add_grade(course, grade), dersin notunu özel bir Dictionary içinde saklar (aynı ders için yeni bir not eskisinin yerini alır) vetruedöndürür.0'ın altındaki veya100'ün üzerindeki bir not saklanmaz vefalsedöndürür.average, salt okunur, hesaplanan bir özelliktir: notlarınfloattüründeki ortalamasını, not yoksa0.0değerini verir.course_count(), not girilmiş derslerin sayısını döndürür.
StudentRegistry, student_registry.gd dosyasında öğrencileri, anahtar olarak ID'yi kullanarak özel bir Dictionary içinde tutar:
add_student(student), ID kullanımda olduğundafalsedöndürür ve hiçbir şeyi değiştirmez; aksi takdirde öğrenciyi kaydeder vetruedöndürür.remove_student(id), bir öğrencinin kaldırılıp kaldırılmadığını döndürür.get_student(id), öğrenciyi veyanulldeğerini döndürür.top_student(), ortalaması en yüksek olan öğrenciyi (eşitlik durumunda ilk ekleneni) veya kayıt defteri boşsanulldeğerini döndürür.get_ids(), öğrencilerin eklendikleri sırayla ID'lerini döndürür.
Sağlanan kod, komut sayısını okur ve ardından her satır için bir komut çalıştırır: add ID NAME, grade ID COURSE GRADE, rename ID NAME, remove ID, show ID, tamper ID (student_id ve average değerlerinin üzerine yazmayı dener; bu değerler değişmemelidir), top ve list. Bu girdi için:
10
add 1001 Alice Smith
add 1002 Bob
grade 1001 Math 90
grade 1001 Art 85
grade 1002 Math 95
grade 1002 Art 120
rename 1002 B
show 1002
top
listşunu yazdırır:
Added Alice Smith (1001)
Added Bob (1002)
Alice Smith: Math = 90
Alice Smith: Art = 85
Bob: Math = 95
Invalid grade: 120
Rejected: Name must be at least 2 characters
ID: 1002, Name: Bob, Courses: 1, Average: 95.00
Top: Bob (95.00)
ID: 1001, Name: Alice Smith, Courses: 2, Average: 87.50
ID: 1002, Name: Bob, Courses: 1, Average: 95.00Kodunu student.gd ve student_registry.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var registry := StudentRegistry.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ", true, 2)
var command := parts[0]
if command == "top":
var best := registry.top_student()
if best == null:
print("Top: none")
else:
print("Top: %s (%.2f)" % [best.student_name, best.average])
continue
if command == "list":
for listed_id in registry.get_ids():
print_student(registry.get_student(listed_id))
continue
var id := int(parts[1])
if command == "add":
var student := Student.new(id, parts[2])
if student.last_error != "":
print("Rejected: " + student.last_error)
elif registry.add_student(student):
print("Added %s (%d)" % [student.student_name, id])
else:
print("Duplicate ID: %d" % id)
continue
if command == "remove":
print(("Removed %d" if registry.remove_student(id) else "No student %d") % id)
continue
var student := registry.get_student(id)
if student == null:
print("No student %d" % id)
elif command == "grade":
var grade_parts := parts[2].split(" ")
if student.add_grade(grade_parts[0], int(grade_parts[1])):
print("%s: %s = %s" % [student.student_name, grade_parts[0], grade_parts[1]])
else:
print("Invalid grade: " + grade_parts[1])
elif command == "rename":
student.student_name = parts[2]
if student.last_error != "":
print("Rejected: " + student.last_error)
else:
print("Renamed to " + student.student_name)
elif command == "tamper":
# Salt okunur özelliklerin üzerine yazmaya çalışır
student.student_id = 0
student.average = 100.0
print_student(student)
else:
print_student(student)
func print_student(student: Student) -> void:
print("ID: %d, Name: %s, Courses: %d, Average: %.2f" % [student.student_id, student.student_name, student.course_count(), student.average])
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi