Menu
Coddy logo textTech

Обзор и структура проекта

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

challenge icon

Задание

Легко

Давайте начнем проект Системы управления библиотекой с создания базовой структуры! На этом первом этапе вы создадите основу, которая будет поддерживать все функции, которые мы разработаем в следующих уроках.

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

  • book.go: Определите структуру Book, которая представляет библиотечную книгу. Каждая книга должна иметь поля ID, Title, Author и статус Available (логический тип). Создайте функцию-конструктор NewBook, которая принимает ID, название и автора в качестве параметров и возвращает указатель на новый объект Book, где Available по умолчанию установлено в true. Также добавьте метод String(), который возвращает информацию о книге в формате: [ID] Title by Author
  • user.go: Определите структуру User, представляющую участника библиотеки, с полями ID, Name и Email. Создайте функцию-конструктор NewUser, которая принимает все три значения и возвращает указатель на новый объект User. Добавьте метод String(), который возвращает: User: Name (Email)
  • main.go: Объедините все вместе, считывая входные данные для создания книг и пользователей, а затем отображая их информацию.

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

    После создания всех элементов выведите строковое представление каждой книги на отдельной строке, а затем строковое представление каждого пользователя на отдельной строке.

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

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

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

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

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

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

И при вводе:

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

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

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

Этот фундамент закладывает основные модели данных, которые вы будете расширять на протяжении всего проекта. В следующем уроке вы улучшите эти структуры и добавите функциональность выдачи книг!

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

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: Создайте слайс для хранения книг

	// TODO: Прочитайте информацию о каждой книге (ID, title, author на отдельных строках)
	// и создайте объекты Book, используя 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: Создайте новую книгу и добавьте её в свой слайс
	}

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

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

	// TODO: Прочитайте информацию о каждом пользователе (ID, name, email на отдельных строках)
	// и создайте объекты User, используя 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: Создайте нового пользователя и добавьте его в свой слайс
	}

	// TODO: Выведите строковое представление каждой книги

	// TODO: Выведите строковое представление каждого пользователя
	fmt.Println("TODO: Print output here")
}

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