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() // Заполнитель - удалить при реализации
}

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

Потренируйтесь самостоятельно: Онлайн-компилятор Go