Menu
CoddyTech

Giao diện console / giao diện quản trị

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

challenge icon

Thử thách

Dễ

Hãy hoàn thiện hệ thống thư viện bằng cách xây dựng giao diện dòng lệnh kết nối tất cả các thành phần của bạn! Bạn sẽ tạo giao diện quản trị để xử lý lệnh quản lý thư viện: thêm sách, đăng ký người dùng, xử lý các thao tác mượn và tìm kiếm danh mục.

Bạn sẽ tiếp tục xây dựng dựa trên cấu trúc dự án hiện có:

  • Book.cs: Giữ lớp Book với Id, Title, Author, IsAvailable, cùng các phương thức Borrow() và Return().
  • User.cs: Giữ lớp User với chức năng theo dõi sách đã mượn, hằng số MaxBooks, CanBorrow() và các phương thức quản lý sách đã mượn.
  • Library.cs: Giữ lớp Library với toàn bộ logic mượn sách và các phương thức tìm kiếm LINQ bạn đã xây dựng. Thêm phương thức mới GetAllBooks() để trả về tất cả sách trong thư viện và GetAllUsers() để trả về tất cả người dùng đã đăng ký.
  • Program.cs: Đây là nơi giao diện dòng lệnh của bạn hoạt động! Bạn sẽ xây dựng bộ xử lý lệnh để đọc lệnh và thực hiện các thao tác phù hợp với thư viện. Hãy xem đây như bảng điều khiển quản trị cho hệ thống thư viện của bạn.

Giao diện dòng lệnh cần xử lý các lệnh sau:

  • ADD_BOOK|id|title|author - Thêm sách mới và in ra Added: {Title}
  • ADD_USER|name|memberId - Đăng ký người dùng mới và in ra Registered: {Name}
  • BORROW|bookId|memberId - Xử lý yêu cầu mượn sách bằng logic BorrowBook hiện có
  • RETURN|bookId|memberId - Xử lý yêu cầu trả sách bằng logic ReturnBook hiện có
  • SEARCH|type|value - Tìm kiếm danh mục, trong đó type là title, author, available hoặc borrowed
  • STATUS - In ra bản tóm tắt gồm tổng số sách, số sách hiện có, tổng số người dùng và tổng số sách đã được mượn

Với lệnh STATUS, hãy in bản tóm tắt theo định dạng sau:

--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}

Với kết quả tìm kiếm, hãy in mỗi cuốn sách trên một dòng theo định dạng {Title} by {Author}, hoặc in No books found nếu không có kết quả.

Bạn sẽ nhận các đầu vào sau:

  • Tên thư viện
  • Số lệnh cần xử lý
  • Mỗi lệnh nằm trên một dòng riêng theo các định dạng mô tả ở trên

Ví dụ, nếu đầu vào là:

Downtown Library
8
ADD_BOOK|B001|Clean Code|Robert Martin
ADD_BOOK|B002|The Pragmatic Programmer|David Thomas
ADD_USER|Alice|101
ADD_USER|Bob|102
BORROW|B001|101
SEARCH|available
BORROW|B002|102
STATUS

Đầu ra sẽ là:

Added: Clean Code
Added: The Pragmatic Programmer
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
The Pragmatic Programmer by David Thomas
Bob borrowed The Pragmatic Programmer
--- Library Status ---
Total Books: 2
Available: 0
Total Users: 2
Books Borrowed: 2

Giao diện dòng lệnh đóng vai trò kết nối đầu vào của người dùng với các thành phần thư viện được tổ chức tốt. Mỗi lệnh gọi phương thức phù hợp trong lớp Library, cho thấy kiến trúc rõ ràng giúp việc xây dựng giao diện người dùng trở nên đơn giản như thế nào!

Tự làm thử

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Đọc tên thư viện
            string libraryName = Console.ReadLine();
            
            // Tạo một instance của Library với tên thư viện
            Library library = new Library(libraryName);
            
            // Đọc số lượng lệnh
            int numCommands = Convert.ToInt32(Console.ReadLine());
            
            // Xử lý từng lệnh
            for (int i = 0; i < numCommands; i++)
            {
                string commandLine = Console.ReadLine();
                string[] parts = commandLine.Split('|');
                string command = parts[0];
                
                // TODO: Xử lý lệnh ADD_BOOK
                // Định dạng: ADD_BOOK|id|title|author
                // In ra: Added: {title}
                
                // TODO: Xử lý lệnh ADD_USER
                // Định dạng: ADD_USER|name|memberId
                // In ra: Registered: {name}
                
                // TODO: Xử lý lệnh BORROW
                // Định dạng: BORROW|bookId|memberId
                // In ra kết quả từ library.BorrowBook()
                
                // TODO: Xử lý lệnh RETURN
                // Định dạng: RETURN|bookId|memberId
                // In ra kết quả từ library.ReturnBook()
                
                // TODO: Xử lý lệnh SEARCH
                // Định dạng: SEARCH|type|value (type có thể là title, author, available hoặc borrowed)
                // In mỗi cuốn sách theo dạng "{Title} by {Author}" hoặc "No books found"
                
                // TODO: Xử lý lệnh STATUS
                // In ra:
                // --- Library Status ---
                // Total Books: {count}
                // Có sẵn: {count}
                // Total Users: {count}
                // Books Borrowed: {count}
            }
        }
    }
}

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 C# online