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.
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ớiId,Title,Author,IsAvailable, cùng các phương thứcBorrow()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ớiGetAllBooks()để 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 raAdded: {Title}ADD_USER|name|memberId- Đăng ký người dùng mới và in raRegistered: {Name}BORROW|bookId|memberId- Xử lý yêu cầu mượn sách bằng logicBorrowBookhiện cóRETURN|bookId|memberId- Xử lý yêu cầu trả sách bằng logicReturnBookhiện cóSEARCH|type|value- Tìm kiếm danh mục, trong đó type làtitle,author,availablehoặcborrowedSTATUS- 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: 2Giao 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
1Các khái niệm cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiKhông gian tên và chỉ thịGiới thiệu về lớp và đối tượngTừ khóa thisPhương thức và tham sốTrường và thuộc tínhHàm khởi tạoKhởi tạo đối tượngÔn tập: Máy tính đơn giản4Kế thừa
Cú pháp kế thừa cơ bản (:)Từ khóa 'base'Từ khóa virtual và overrideLớp sealedLớp cơ sở 'object'Ôn tập: hệ phân cấp nhân viên7Tính năng nâng cao
Nạp chồng toán tửBộ lập chỉ mục (this[])Ghi đè ToString()Phương thức mở rộngÔn tập: Danh sách tùy chỉnh10Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếSingleton an toàn với luồngMẫu FactoryMẫu Observer (sự kiện)Mẫu Strategy2Thuộc tính và thành viên tĩnh
Thuộc tính tự độngThuộc tính chỉ đọc hoặc chỉ ghiTrường và phương thức tĩnhLớp tĩnhThành viên có thân biểu thức5Đa hình và interface
Đa hình lúc biên dịch và lúc chạyInterface và lớp trừu tượngNhiều interfaceInterface tường minhUpcasting và downcastingÔn tập: bộ tính toán hình học8Các khái niệm OOP nâng cao
Ưu tiên composition hơn kế thừaGenerics (lớp và phương thức)Delegate và sự kiệnAttribute và reflectionGiao diện IDisposable và câu lệnh usingKiến thức cơ bản về dependency injection11Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổ hợp3Kiến trúc lớp
Dữ liệu instance và dữ liệu tĩnhTừ khóa 'readonly' và 'const'Trường lưu trữÔn tập: Trình quản lý tài khoản ngân hàng6Đóng gói
Bộ điều chỉnh quyền truy cậpThuộc tính để đóng góiTriển khai ẩn dữ liệuCác mẫu bất biếnÔn tập: hồ sơ học sinh12Dự án: hệ thống thư viện
Cấu trúc dự ánMô hình sách và người dùngLogic hệ thống mượn sáchLINQ để tìm kiếmGiao diện console / giao diện quản trịKiểm thử đơn vị (NUnit/xUnit)Tự luyện tập: Trình biên dịch C# online