Menu
Coddy logo textTech

Özet - Öğrenci Kayıtları

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 51 / 107.

challenge icon

Görev

Kolay

Doğru kapsüllemeyi (encapsulation) gösteren bir Öğrenci Kayıt sistemi oluşturalım. Hassas akademik verilerin korunduğu, ancak iyi tasarlanmış metotlar aracılığıyla kontrollü erişim sağlandığı bir öğrenci yönetim yapısı oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • student.go: Güvenli genel verileri dışa açarken hassas bilgileri koruyan bir Student struct'ı oluşturun. Öğrencinin Name alanı dışa aktarılmalı (herkese açık olmalı), ancak grade (float64) ve studentID (string) alanları bu hassas bilgileri korumak için dışa aktarılmamalıdır (unexported).

    Aşağıdakileri uygulayın:

    • Bir öğrenci oluşturan NewStudent(name, id string, initialGrade float64) *Student yapıcı metodu (constructor). Başlangıç notu yalnızca 0 ile 100 (dahil) arasındaysa ayarlanmalıdır; aksi takdirde varsayılan olarak 0 olmalıdır.
    • Mevcut notu döndüren bir Grade() float64 alıcı metodu (getter).
    • Öğrenci kimliğini döndüren bir StudentID() string alıcı metodu (getter).
    • Notu yalnızca yeni değer 0 ile 100 (dahil) arasındaysa güncelleyen bir SetGrade(newGrade float64) bool ayarlayıcı metodu (setter). Not güncellendiyse true, aksi takdirde false döndürün.
    • Şu formatı döndüren bir Summary() string metodu: [Name] (ID: [studentID]) - Grade: [grade]
  • main.go: Girdiden öğrenci bilgilerini okuyun, yapıcı metodu kullanarak bir öğrenci oluşturun ve ardından not işlemlerini gerçekleştirin. Oluşturulduktan sonra ve her not güncelleme denemesinden sonra öğrencinin özetini görüntüleyin.

Aşağıdaki girdiler sağlanacaktır:

  • Satır 1: Öğrenci adı
  • Satır 2: Öğrenci ID
  • Satır 3: Başlangıç notu
  • Satır 4: Ayarlanacak ilk yeni not
  • Satır 5: Ayarlanacak ikinci yeni not

Öğrenciyi oluşturduktan sonra özetini yazdırın. Ardından her bir not güncellemesini deneyin; başarılı olursa güncellenmiş özeti yazdırın; reddedilirse Invalid grade rejected yazdırın. Tüm not değerlerini iki ondalık basamakla formatlayın.

Örneğin, Emma Wilson, STU001, 85.5, 92.0 ve 150 verildiğinde çıktınız şöyle olmalıdır:

Emma Wilson (ID: STU001) - Grade: 85.50
Emma Wilson (ID: STU001) - Grade: 92.00
Invalid grade rejected

Son güncelleme başarısız olur çünkü 150 geçerli aralığın dışındadır. Ayarlayıcı (setter) metodunuz bu kuralı uygulayarak öğrencinin verilerini geçerli tutar. studentID ve grade alanlarına hiçbir zaman doğrudan erişilemediğine dikkat edin; harici kod, bu korumalı verilerle etkileşim kurmak için alıcı (getter) ve ayarlayıcı (setter) metotlarınızı kullanmalıdır.

Kendin dene

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Öğrenci adını oku
	name, _ := reader.ReadString('\n')
	name = strings.TrimSpace(name)

	// Öğrenci numarasını oku
	id, _ := reader.ReadString('\n')
	id = strings.TrimSpace(id)

	// Başlangıç notunu oku
	initialGradeStr, _ := reader.ReadString('\n')
	initialGrade, _ := strconv.ParseFloat(strings.TrimSpace(initialGradeStr), 64)

	// Birinci yeni notu oku
	newGrade1Str, _ := reader.ReadString('\n')
	newGrade1, _ := strconv.ParseFloat(strings.TrimSpace(newGrade1Str), 64)

	// İkinci yeni notu oku
	newGrade2Str, _ := reader.ReadString('\n')
	newGrade2, _ := strconv.ParseFloat(strings.TrimSpace(newGrade2Str), 64)

	// TODO: NewStudent yapısını kullanarak yeni bir öğrenci oluşturun

	// TODO: Oluşturulduktan sonra öğrenci özetini yazdırın

	// TODO: İlk not güncellemesini deneyin
	// Başarılı olursa, güncellenmiş özeti yazdırın
	// Reddedilirse, "Invalid grade rejected" yazdırın

	// TODO: İkinci not güncellemesini deneyin
	// Başarılı olursa, güncellenmiş özeti yazdırın
	// Reddedilirse, "Invalid grade rejected" yazdırın

	// İpucu: Summary() içindeki notları formatlamak için %.2f ile fmt.Sprintf kullanın
	_ = newGrade1 // Değişkeni kullandığınızda bu satırı kaldırın
	_ = newGrade2 // Değişkeni kullandığınızda bu satırı kaldırın
}

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