Menu
Coddy logo textTech

プロジェクトの概要と構成

CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 98/107。

challenge icon

チャレンジ

簡単

基礎となる構造をセットアップして、図書館管理システムプロジェクトを開始しましょう!この最初のステップでは、今後のレッスンで構築するすべての機能を支える基本的な足場を作成します。

関心の分離を明確にするために、コードを3つのファイルに整理します。

  • book.go: 図書館の本を表す Book 構造体を定義します。各本は IDTitleAuthor、および Available ステータス(ブール値)を持つ必要があります。ID、タイトル、著者をパラメータとして受け取り、Available がデフォルトで true に設定された新しい Book へのポインタを返すコンストラクタ関数 NewBook を作成します。また、本の情報を [ID] Title by Author の形式で返す String() メソッドを追加します。
  • user.go: IDNameEmail フィールドを持つ図書館の利用者をあらわす User 構造体を定義します。3つの値すべてを受け取り、新しい User へのポインタを返すコンストラクタ関数 NewUser を作成します。User: Name (Email) を返す String() メソッドを追加します。
  • 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、タイトル、著者。それぞれ別々の行)を読み込む
	// そして NewBook を使用して Book オブジェクトを作成する
	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、名前、メールアドレス。それぞれ別々の行)を読み込む
	// そして NewUser を使用して User オブジェクトを作成する
	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")
}

オブジェクト指向プログラミングのすべてのレッスン