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ı oluşturacak, ayrıca bunları mantıklı varsayılan değerlerle başlatan kurucu işlevler ekleyeceksin.

Kodunu üç dosyaya ayıracaksın:

  • book.go: Book, ID, Title, Author ve ISBN (boolean) alanlarına sahip Available struct'ını tanımla. Parametre olarak ID, başlık, yazar ve ISBN alan ve yeni bir Book'a işaretçi döndüren NewBook kurucu işlevini oluştur. Yeni kitaplar her zaman kullanılabilir olarak başlamalıdır. Kitabın ayrıntılarını şu formatta döndüren bir Info() metodu ekle: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: User, ID, Name ve kitap kimliklerini saklamak için bir string dilimi olan Email alanlarına sahip BorrowedBooks struct'ını tanımla. ID, ad ve e-posta alanlarını alan ve boş bir ödünç alınan kitaplar listesine sahip yeni bir User'a işaretçi döndüren NewUser kurucusunu oluştur. Şunu döndüren bir Info() metodu ekle: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Girdiden kitaplar ve kullanıcılar oluşturarak modellerini bir araya getir, ardından bilgilerini görüntüle.

    Kitap sayısını oku, ardından her kitap için ID, başlık, yazar ve ISBN değerlerini ayrı satırlarda oku. Sonra kullanıcı sayısını oku ve her kullanıcı için ID, ad ve e-posta değerlerini ayrı satırlarda oku.

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

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

  • Kitap sayısı
  • Her kitap için: ID, başlık, yazar, ISBN (her biri ayrı satırlarda)
  • Kullanıcı sayısı
  • Her kullanıcı için: ID, ad, e-posta (her biri ayrı satırlarda)

Örneğin, şu veriler 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 şöyle 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 veriler 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 şöyle 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

Kurucuların varsayılan değerleri nasıl yönettiğine dikkat et: kitaplar kullanılabilir olarak, kullanıcılar ise sıfır ödünç alınmış kitapla başlar. Doğru başlatmayı güvence altına almak için kurucu işlevleri kullanma yaklaşımı, 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 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 constructor'ını 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 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 constructor'ını kullanarak yeni bir kullanıcı oluştur ve slice'a ekle
	}

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

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

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

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

Kendi başına pratik yap: Online Go derleyicisi