Menu
Coddy logo textTech

Kitap ve Kullanıcı Struct'ları

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

challenge icon

Görev

Kolay

Kütüphane Yönetim Sistemimiz için temel veri modellerini oluşturalım! Kitapları ve kütüphane üyelerini temsil eden temel struct'ları, onları mantıklı varsayılan değerlerle başlatan yapıcı (constructor) fonksiyonlarla birlikte oluşturacaksınız.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • book.go: ID, Title, Author, ISBN ve Available (boolean) alanlarına sahip Book struct'ınızı tanımlayın. Parametre olarak ID, title, author ve ISBN alan ve yeni bir Book'a işaret eden bir pointer döndüren bir NewBook yapıcı fonksiyonu oluşturun. Yeni kitaplar her zaman kullanılabilir (available) olarak başlamalıdır. Kitabın ayrıntılarını şu formatta döndüren bir Info() metodu ekleyin: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: ID, Name, Email ve BorrowedBooks (kitap ID'lerini saklamak için bir string dilimi/slice) alanlarına sahip User struct'ınızı tanımlayın. ID, name ve email alan, boş bir ödünç alınan kitaplar listesiyle yeni bir User'a işaret eden bir pointer döndüren bir NewUser yapıcı fonksiyonu oluşturun. Şunu döndüren bir Info() metodu ekleyin: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Girdiden kitaplar ve kullanıcılar oluşturup ardından bilgilerini görüntüleyerek modellerinizi bir araya getirin.

    Kitap sayısını okuyun, ardından her kitap için ID, title, author ve ISBN bilgilerini ayrı satırlarda okuyun. Sonra, kullanıcı sayısını okuyun ve her kullanıcı için ID, name ve email bilgilerini ayrı satırlarda okuyun.

    Her kitabın bilgisini kendi satırında, ardından her kullanıcının bilgisini kendi satırında yazdırın.

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

  • Kitap sayısı
  • Her kitap için: ID, title, author, ISBN (her biri ayrı satırlarda)
  • Kullanıcı sayısı
  • Her kullanıcı için: ID, name, email (her biri ayrı satırlarda)

Örneğin, şu girdi verildiğinde:

2
B001
The Go Programming Language
Alan Donovan
978-0134190440
B002
Clean Code
Robert Martin
978-0132350884
1
U001
Alice Smith
alice@library.com

Çıktınız şu olmalıdır:

[B001] "The Go Programming Language" by Alan Donovan (ISBN: 978-0134190440) - Available: true
[B002] "Clean Code" by Robert Martin (ISBN: 978-0132350884) - Available: true
Member: Alice Smith (alice@library.com) - Books borrowed: 0

Ve şu girdi verildiğinde:

1
B100
Design Patterns
Gang of Four
978-0201633610
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.com

Çıktınız şu olmalıdır:

[B100] "Design Patterns" by Gang of Four (ISBN: 978-0201633610) - Available: true
Member: Bob Jones (bob@email.com) - Books borrowed: 0
Member: Carol White (carol@email.com) - Books borrowed: 0

Yapıcıların varsayılan değerleri nasıl işlediğine dikkat edin; kitaplar kullanılabilir durumda başlar ve kullanıcılar sıfır ödünç alınmış kitapla başlar. Doğru başlatmayı sağlamak için yapıcı fonksiyonları kullanma kalıbı, güvenilir sistemler oluşturmanın temelidir!

Kendin dene

package main

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

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

	// Kitap sayısını oku
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Kitapları saklamak için bir slice oluştur

	// Her bir kitabın detaylarını oku
	for i := 0; i < numBooks; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		title, _ := reader.ReadString('\n')
		title = strings.TrimSpace(title)
		author, _ := reader.ReadString('\n')
		author = strings.TrimSpace(author)
		isbn, _ := reader.ReadString('\n')
		isbn = strings.TrimSpace(isbn)

		// TODO: NewBook kurucusunu kullanarak yeni bir kitap oluştur ve slice'a ekle
	}

	// Kullanıcı sayısını oku
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Kullanıcıları saklamak için bir slice oluştur

	// Her bir kullanıcının detaylarını oku
	for i := 0; i < numUsers; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		name, _ := reader.ReadString('\n')
		name = strings.TrimSpace(name)
		email, _ := reader.ReadString('\n')
		email = strings.TrimSpace(email)

		// TODO: NewUser kurucusunu kullanarak yeni bir kullanıcı oluştur ve slice'a ekle
	}

	// TODO: Info() metodunu kullanarak her bir kitabın bilgisini yazdır

	// TODO: Info() metodunu kullanarak her bir kullanıcının bilgisini yazdır

	fmt.Println() // Yer tutucu - uygularken kaldırın
}

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