Menu
Coddy logo textTech

Структуры Book и User

Часть раздела Объектно-ориентированное программирование путешествия по GO на Coddy — урок 99 из 107.

challenge icon

Задание

Легко

Давайте создадим основные модели данных для нашей Системы Управления Библиотекой! Вы создадите базовые структуры (structs), представляющие книги и членов библиотеки, а также функции-конструкторы, которые инициализируют их значениями по умолчанию.

Вы организуете свой код в трех файлах:

  • book.go: Определите структуру Book с полями ID, Title, Author, ISBN и Available (логический тип). Создайте функцию-конструктор NewBook, которая принимает ID, название, автора и ISBN в качестве параметров и возвращает указатель на новый объект Book. Новые книги всегда должны быть доступны изначально. Добавьте метод Info(), который возвращает информацию о книге в формате: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: Определите структуру User с полями ID, Name, Email и BorrowedBooks (срез строк для хранения ID книг). Создайте конструктор NewUser, который принимает ID, имя и email, возвращая указатель на нового пользователя с пустым списком взятых книг. Добавьте метод Info(), который возвращает: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Объедините ваши модели, создавая книги и пользователей на основе входных данных, а затем отображая информацию о них.

    Считайте количество книг, затем для каждой книги считайте её ID, название, автора и ISBN (каждое значение на отдельной строке). Далее считайте количество пользователей, и для каждого пользователя считайте его ID, имя и email (также на отдельных строках).

    Выведите информацию о каждой книге на отдельной строке, а затем информацию о каждом пользователе на отдельной строке.

Будут предоставлены следующие входные данные:

  • Количество книг
  • Для каждой книги: ID, название, автор, ISBN (каждое на отдельной строке)
  • Количество пользователей
  • Для каждого пользователя: ID, имя, email (каждое на отдельной строке)

Например, при вводе:

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

Ваш вывод должен быть:

[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

И при вводе:

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

Ваш вывод должен быть:

[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

Обратите внимание, как конструкторы обрабатывают значения по умолчанию — книги изначально доступны, а у пользователей изначально ноль взятых книг. Этот паттерн использования функций-конструкторов для обеспечения правильной инициализации является фундаментальным для создания надежных систем!

Попробуйте сами

package main

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

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

	// Прочитать количество книг
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Создать срез для хранения книг

	// Прочитать данные каждой книги
	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, и добавить в срез
	}

	// Прочитать количество пользователей
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Создать срез для хранения пользователей

	// Прочитать данные каждого пользователя
	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, и добавить в срез
	}

	// TODO: Вывести информацию о каждой книге, используя метод Info()

	// TODO: Вывести информацию о каждом пользователе, используя метод Info()

	fmt.Println() // Заполнитель - удалить при реализации
}

Все уроки раздела Объектно-ориентированное программирование