Menu
Coddy logo textTech

Struktury książek i użytkowników

Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 99 z 107.

challenge icon

Wyzwanie

Łatwy

Zbudujmy podstawowe modele danych dla naszego systemu zarządzania biblioteką! Utworzysz podstawowe struktury reprezentujące książki i członków biblioteki, wraz z funkcjami-konstruktorami, które inicjalizują je sensownymi wartościami domyślnymi.

Rozmieścisz swój kod w trzech plikach:

  • book.go: Zdefiniuj strukturę Book z polami ID, Title, Author, ISBN i Available (wartość logiczna). Utwórz funkcję-konstruktor NewBook, która przyjmuje ID, tytuł, autora i ISBN jako parametry oraz zwraca wskaźnik do nowej książki. Nowe książki powinny zawsze być początkowo dostępne. Dodaj metodę Info(), która zwraca szczegóły książki w formacie: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: Zdefiniuj strukturę User z polami ID, Name, Email i BorrowedBooks (tablica ciągów znaków przechowująca identyfikatory książek). Utwórz konstruktor NewUser, który przyjmuje ID, imię i adres e-mail, a następnie zwraca wskaźnik do nowego użytkownika z pustą listą wypożyczonych książek. Dodaj metodę Info(), która zwraca: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Połącz modele, tworząc książki i użytkowników na podstawie danych wejściowych, a następnie wyświetlając ich informacje.

    Wczytaj liczbę książek, a następnie dla każdej książki wczytaj jej ID, tytuł, autora i ISBN w osobnych wierszach. Następnie wczytaj liczbę użytkowników, a dla każdego użytkownika wczytaj jego ID, imię i adres e-mail w osobnych wierszach.

    Wyświetl informacje o każdej książce w osobnym wierszu, a następnie informacje o każdym użytkowniku, również w osobnym wierszu.

Podane zostaną następujące dane wejściowe:

  • Liczba książek
  • Dla każdej książki: ID, tytuł, autor, ISBN (każda wartość w osobnym wierszu)
  • Liczba użytkowników
  • Dla każdego użytkownika: ID, imię, adres e-mail (każda wartość w osobnym wierszu)

Na przykład dla danych:

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

Wynik powinien wyglądać następująco:

[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

A dla danych:

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

Wynik powinien wyglądać następująco:

[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

Zwróć uwagę, jak konstruktory obsługują wartości domyślne: książki są początkowo dostępne, a użytkownicy nie mają początkowo żadnych wypożyczonych książek. Wykorzystywanie funkcji-konstruktorów, aby zapewnić prawidłową inicjalizację, to fundamentalny wzorzec w budowaniu niezawodnych systemów!

Spróbuj swoich sił

package main

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

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

	// Wczytaj liczbę książek
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Utwórz wycinek do przechowywania książek

	// Wczytaj dane każdej książki
	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: Utwórz nową książkę za pomocą konstruktora NewBook i dodaj ją do wycinka
	}

	// Wczytaj liczbę użytkowników
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Utwórz wycinek do przechowywania użytkowników

	// Wczytaj dane każdego użytkownika
	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: Utwórz nowego użytkownika za pomocą konstruktora NewUser i dodaj go do wycinka
	}

	// TODO: Wypisz informacje o każdej książce za pomocą metody Info()

	// TODO: Wypisz informacje o każdym użytkowniku za pomocą metody Info()

	fmt.Println() // Kod tymczasowy – usuń podczas implementacji
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online