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

Uygun kapsüllemeyi gösteren bir Öğrenci Kayıtları sistemi oluşturalım. Hassas akademik verilerin korunurken, iyi tasarlanmış yöntemler aracılığıyla kontrollü erişim sağlandığı bir öğrenci yönetimi yapısı oluşturacaksınız.

Kodunuzu iki dosya arasında düzenleyeceksiniz:

  • student.go: Hassas bilgileri korurken güvenli genel verileri dışa açan bir Student yapısı oluşturun. Öğrencinin Name alanı dışa aktarılmış (genel erişime açık) olmalı; ancak grade (float64) ve studentID (string) alanları, bu hassas bilgileri korumak için dışa aktarılmamış olmalıdır.

    Aşağıdakileri uygulayın:

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

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

  • 1. satır: Öğrenci adı
  • 2. satır: Öğrenci kimliği
  • 3. satır: Başlangıç notu
  • 4. satır: Ayarlanacak ilk yeni not
  • 5. satır: Ayarlanacak ikinci yeni not

Öğrenciyi oluşturduktan sonra özetini yazdırın. Ardından her 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 biçimlendirin.

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

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

Son güncelleme, 150 geçerli aralığın dışında olduğu için başarısız olur. Ayarlayıcı yönteminiz bu kuralı uygular ve öğrencinin verilerini geçerli tutar. studentID ve grade alanlarına hiçbir zaman doğrudan erişilemediğine dikkat edin: harici kod, bu korunan verilerle etkileşim kurmak için alıcı ve ayarlayıcı yöntemlerinizi 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 ID'sini oku
	id, _ := reader.ReadString('\n')
	id = strings.TrimSpace(id)

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

	// İlk 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ıcısını kullanarak yeni bir öğrenci oluştur

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

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

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

	// İpucu: Summary() içinde notları biçimlendirmek için fmt.Sprintf ile %.2f kullan
	_ = 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

Kendi başına pratik yap: Online Go derleyicisi