Menu
Coddy logo textTech

Przegląd i struktura projektu

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

challenge icon

Wyzwanie

Łatwy

Rozpocznijmy projekt Systemu Zarządzania Biblioteką od przygotowania podstawowej struktury! W tym pierwszym kroku utworzysz podstawowy szkielet, który będzie obsługiwał wszystkie funkcje, jakie dodamy w kolejnych lekcjach.

Uporządkujesz kod w trzech plikach, aby zachować przejrzysty podział odpowiedzialności:

  • book.go: Zdefiniuj strukturę Book, która reprezentuje książkę biblioteczną. Każda książka powinna mieć ID, Title, Author oraz status Available (wartość logiczną). Utwórz funkcję konstruktora NewBook, która przyjmuje ID, tytuł i autora jako parametry oraz zwraca wskaźnik do nowej książki z domyślnie ustawionym Available na true. Dodaj też metodę String(), która zwraca informacje o książce w formacie: [ID] Title by Author
  • user.go: Zdefiniuj strukturę User reprezentującą użytkownika biblioteki z polami ID, Name i Email. Utwórz funkcję konstruktora NewUser, która przyjmuje wszystkie trzy wartości i zwraca wskaźnik do nowego użytkownika. Dodaj metodę String(), która zwraca: User: Name (Email)
  • main.go: Połącz wszystko, odczytując dane wejściowe w celu utworzenia książek i użytkowników, a następnie wyświetl ich informacje.

    Odczytaj liczbę książek do utworzenia. Dla każdej książki odczytaj jej ID, tytuł i autora, każdy w osobnym wierszu. Następnie odczytaj liczbę użytkowników, a dla każdego z nich odczytaj ID, imię i nazwisko oraz adres e-mail, każdy w osobnym wierszu.

    Po utworzeniu wszystkich elementów wypisz reprezentację tekstową każdej książki w osobnym wierszu, a następnie reprezentację tekstową każdego użytkownika, również w osobnym wierszu.

Dane wejściowe będą miały następujący format:

  • Liczba książek
  • Dla każdej książki: ID, tytuł i autor (każdy w osobnym wierszu)
  • Liczba użytkowników
  • Dla każdego użytkownika: ID, imię i nazwisko oraz adres e-mail (każdy w osobnym wierszu)

Na przykład dla danych:

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

Oczekiwany wynik:

[B001] The Go Programming Language by Alan Donovan
[B002] Clean Code by Robert Martin
User: Alice Smith (alice@library.com)

A dla danych:

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

Oczekiwany wynik:

[B100] Design Patterns by Gang of Four
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)

Ta podstawa tworzy kluczowe modele danych, które będziesz rozwijać w dalszej części projektu. W następnej lekcji rozbudujesz te struktury i dodasz funkcjonalność wypożyczania!

Spróbuj swoich sił

package main

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

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

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

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

	// TODO: Odczytaj dane każdej książki (ID, tytuł, autor w osobnych wierszach)
	// i utwórz obiekty Book za pomocą NewBook
	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)

		// TODO: Utwórz nową książkę i dodaj ją do swojego wycinka
	}

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

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

	// TODO: Odczytaj dane każdego użytkownika (ID, imię, email w osobnych wierszach)
	// i utwórz obiekty User za pomocą NewUser
	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 i dodaj go do swojego wycinka
	}

	// TODO: Wypisz reprezentację tekstową każdej książki

	// TODO: Wypisz reprezentację tekstową każdego użytkownika
	fmt.Println("TODO: Print output here")
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online