Menu
CoddyTech

Tổng quan và cấu trúc dự án

Thuộc phần Lập trình hướng đối tượng trong hành trình GO của Coddy. Bài học 98 trên 107.

challenge icon

Thử thách

Dễ

Hãy bắt đầu dự án Hệ thống quản lý thư viện bằng cách thiết lập cấu trúc nền tảng! Ở bước đầu tiên này, bạn sẽ tạo bộ khung cơ bản hỗ trợ mọi tính năng chúng ta sẽ xây dựng trong các bài học tiếp theo.

Bạn sẽ sắp xếp code trong ba tệp để phân chia rõ ràng các mối quan tâm:

  • book.go: Định nghĩa một struct Book đại diện cho một cuốn sách trong thư viện. Mỗi cuốn sách cần có ID, Title, Author và trạng thái Available (kiểu boolean). Tạo hàm khởi tạo NewBook nhận ID, tiêu đề và tác giả làm tham số, rồi trả về con trỏ đến một Book mới, trong đó Available mặc định được đặt thành true. Đồng thời thêm phương thức String() trả về thông tin sách theo định dạng: [ID] Title by Author
  • user.go: Định nghĩa một struct User đại diện cho một thành viên thư viện, với các trường ID, Name và Email. Tạo hàm khởi tạo NewUser nhận cả ba giá trị và trả về con trỏ đến một User mới. Thêm phương thức String() trả về: User: Name (Email)
  • main.go: Kết hợp mọi thứ bằng cách đọc đầu vào để tạo sách và người dùng, sau đó hiển thị thông tin của họ.

    Đọc số lượng sách cần tạo. Với mỗi cuốn sách, đọc ID, tiêu đề và tác giả trên các dòng riêng biệt. Sau đó đọc số lượng người dùng; với mỗi người dùng, đọc ID, tên và email trên các dòng riêng biệt.

    Sau khi tạo tất cả các mục, in biểu diễn dạng chuỗi của từng cuốn sách trên một dòng riêng, rồi in biểu diễn dạng chuỗi của từng người dùng trên một dòng riêng.

Đầu vào sẽ có dạng sau:

  • Số lượng sách
  • Với mỗi cuốn sách: ID, tiêu đề và tác giả (mỗi thông tin trên một dòng riêng)
  • Số lượng người dùng
  • Với mỗi người dùng: ID, tên và email (mỗi thông tin trên một dòng riêng)

Ví dụ, với đầu vào:

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

Đầu ra của bạn sẽ là:

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

Và với đầu vào:

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

Đầu ra của bạn sẽ là:

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

Nền tảng này thiết lập các mô hình dữ liệu cốt lõi mà bạn sẽ mở rộng trong suốt dự án. Trong bài học tiếp theo, bạn sẽ cải tiến các struct này và thêm chức năng mượn sách!

Tự làm thử

package main

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

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

	// Đọc số lượng sách
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Tạo một slice để lưu các cuốn sách

	// TODO: Đọc thông tin của từng cuốn sách (ID, tiêu đề, tác giả trên các dòng riêng)
	// và tạo các đối tượng Book bằng 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: Tạo một cuốn sách mới và thêm vào slice của bạn
	}

	// Đọc số lượng người dùng
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Tạo một slice để lưu người dùng

	// TODO: Đọc thông tin của từng người dùng (ID, tên, email trên các dòng riêng)
	// và tạo các đối tượng User bằng 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: Tạo một người dùng mới và thêm vào slice của bạn
	}

	// TODO: In ra biểu diễn dạng chuỗi của từng cuốn sách

	// TODO: In ra biểu diễn dạng chuỗi của từng người dùng
	fmt.Println("TODO: Print output here")
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Go online