Menu
Coddy logo textTech

E-Öğrenme Platformu

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

challenge icon

Görev

Kolay

Kursları ve öğrencileri yöneten, öğrenme ilerlemesini takip eden bir E-Öğrenme Platformu oluşturalım! Öğrencilerin kurslara kaydolup dersleri tamamlayabildiği, yapıları, arayüzleri, bileşimi ve çok biçimliliği bir araya getiren uyumlu bir sistem oluşturacaksın.

Kodunu beş dosyaya ayıracaksın:

  • lesson.go: Bireysel öğrenme birimlerini temsil eden bir Lesson yapısı tanımla. Her dersin bir ID, Title ve Duration (dakika cinsinden) alanı vardır. Bir Lesson işaretçisi döndüren bir NewLesson oluşturucusu ekle.
  • course.go: Bir Course, ID, Title ve Instructor işaretçilerinden oluşan bir dilim içeren bir *Lesson yapısı oluştur. Bir NewCourse oluşturucusu ve bir AddLesson metodu ekle. Ayrıca kurstaki tüm derslerin sürelerinin toplamını döndüren bir TotalDuration() int metodu uygula.
  • student.go: Student, ID ve Name alanlarına sahip bir Email yapısı tanımla. Bir NewStudent oluşturucusu ekle.
  • enrollment.go: İlerleme takibinin gerçekleştiği yer burasıdır. Bir öğrenciyi bir kursa bağlayan ve hangi dersleri tamamladığını takip eden bir Enrollment yapısı oluştur. Şunlara sahip olmalıdır:
    • Student işaretçisi
    • Course işaretçisi
    • Ders ID'sinden boolean değerine eşleyen bir CompletedLessons map'i

    Yüzdeyi (0.0 ile 100.0 arası) döndüren bir Progressable metoduna sahip bir Progress() float64 arayüzü tanımla.

    Bu metotları Enrollment üzerinde uygula:

    • NewEnrollment(student *Student, course *Course) *Enrollment: tamamlanan dersler için boş bir map başlatan oluşturucu
    • CompleteLesson(lessonID string) string: Bir dersi tamamlandı olarak işaretler. Ders kursta mevcut değilse lesson not found, zaten tamamlandıysa already completed, başarılı olursa completed döndürür
    • Progress() float64: Tamamlanan derslerin yüzdesini (tamamlanan/toplam * 100) döndürür veya kursta hiç ders yoksa 0.0 döndürür
  • main.go: Platformunu oluştur ve kayıt işlemlerini gerçekleştir.

    Bir kursun ID'sini, başlığını ve eğitmenini oku. Ardından ders sayısını ve her dersin ID'sini, başlığını ve süresini oku. Bir öğrencinin ID'sini, adını ve e-posta adresini oku. Öğrenciyi kursa bağlayan bir kayıt oluştur.

    Ardından işlem sayısını oku. Her işlem ya complete [lessonID] ya da progress şeklindedir. Tamamlama işlemleri için sonuç mesajını yazdır. İlerleme işlemleri için ilerlemeyi bir ondalık basamakla biçimlendirip ardından yüzde işareti ekleyerek yazdır.

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

  • Kurs ID'si, Başlık, Eğitmen (3 satır)
  • Ders sayısı, ardından her dersin ID'si, Başlığı, Süresi (her biri 3 satır)
  • Öğrenci ID'si, Adı, E-posta adresi (3 satır)
  • İşlem sayısı, ardından her işlem (her biri 1 satır)

Örneğin, aşağıdaki girdi verildiğinde:

C001
Go Fundamentals
Jane Smith
3
L001
Variables
30
L002
Functions
45
L003
Structs
60
S001
Alice
alice@learn.com
5
progress
complete L001
progress
complete L001
complete L002

Çıktın şöyle olmalıdır:

0.0%
completed
33.3%
already completed
completed

Ve aşağıdaki girdi verildiğinde:

C100
Python Basics
Bob Teacher
2
L100
Intro
20
L101
Loops
40
S100
Charlie
charlie@edu.com
4
complete L999
complete L100
complete L101
progress

Çıktın şöyle olmalıdır:

lesson not found
completed
completed
100.0%

Enrollment yapısının öğrencileri ve kursları birbirine bağlamak için bileşimi nasıl kullandığına, Progressable arayüzünün ise herhangi bir türün tamamlama durumunu bildirmesine dikkat et. Bu tasarım genişletmeyi kolaylaştırır. Aynı arayüzü kullanarak bireysel derslere veya tüm öğrenme yollarına ilerleme takibi ekleyebilirsin!

Kendin dene

package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	// Bir satır okumak için yardımcı fonksiyon
	readLine := func() string {
		scanner.Scan()
		return strings.TrimSpace(scanner.Text())
	}

	// Kurs bilgilerini oku
	courseID := readLine()
	courseTitle := readLine()
	courseInstructor := readLine()

	// TODO: NewCourse kullanarak kursu oluştur
	_ = courseID
	_ = courseTitle
	_ = courseInstructor

	// Ders sayısını oku
	numLessons, _ := strconv.Atoi(readLine())

	// TODO: Her dersi oku ve kursa ekle
	for i := 0; i < numLessons; i++ {
		lessonID := readLine()
		lessonTitle := readLine()
		lessonDuration, _ := strconv.Atoi(readLine())

		// TODO: Dersi oluştur ve kursa ekle
		_ = lessonID
		_ = lessonTitle
		_ = lessonDuration
	}

	// Öğrenci bilgilerini oku
	studentID := readLine()
	studentName := readLine()
	studentEmail := readLine()

	// TODO: NewStudent kullanarak öğrenciyi oluştur
	_ = studentID
	_ = studentName
	_ = studentEmail

	// TODO: Öğrenciyi kursa bağlayan kaydı oluştur

	// İşlem sayısını oku
	numOps, _ := strconv.Atoi(readLine())

	// Her işlemi işle
	for i := 0; i < numOps; i++ {
		operation := readLine()

		if operation == "progress" {
			// TODO: Progress() çağır ve "%.1f%%" formatıyla yazdır
			fmt.Println("0.0%") // Gerçek ilerlemeyle değiştir
		} else if strings.HasPrefix(operation, "complete ") {
			lessonID := strings.TrimPrefix(operation, "complete ")
			// TODO: CompleteLesson'ı çağır ve sonucu yazdır
			_ = lessonID
			fmt.Println("") // Gerçek sonuçla değiştir
		}
	}
}

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

Kendi başına pratik yap: Online Go derleyicisi