Menu
CoddyTech

项目概览与结构

本课属于 Coddy GO 学习旅程的“面向对象编程”单元。第 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、书名和作者各占一行)
	// 并使用 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")
}

面向对象编程中的所有课

自己练习: Go 在线编译器