Interfejs konsolowy / interfejs administratora
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 66 z 70.
Wyzwanie
ŁatwyUkończmy Twój System biblioteczny, tworząc interfejs konsolowy, który połączy wszystkie komponenty! Stworzysz interfejs administratora przetwarzający polecenia do zarządzania biblioteką — dodawania książek, rejestrowania użytkowników, obsługi wypożyczeń i przeszukiwania katalogu.
Będziesz dalej rozwijać istniejącą strukturę projektu:
Book.cs: Zachowaj klasę Book z właściwościamiId,Title,Author,IsAvailableoraz metodamiBorrow()iReturn().User.cs: Zachowaj klasę User z mechanizmem śledzenia wypożyczeń, stałąMaxBooks, metodąCanBorrow()i metodami do zarządzania wypożyczonymi książkami.Library.cs: Zachowaj klasę Library z całą utworzoną logiką wypożyczania i metodami wyszukiwania LINQ. Dodaj nową metodęGetAllBooks(), która zwraca wszystkie książki w bibliotece, oraz metodęGetAllUsers(), która zwraca wszystkich zarejestrowanych użytkowników.Program.cs: To tutaj ożyje Twój interfejs konsolowy! Zbudujesz procesor poleceń, który odczytuje polecenia i wykonuje odpowiednie operacje biblioteczne. Potraktuj go jak panel administratora systemu bibliotecznego.
Interfejs konsolowy powinien obsługiwać następujące polecenia:
ADD_BOOK|id|title|author— dodaje nową książkę i wyświetlaAdded: {Title}ADD_USER|name|memberId— rejestruje nowego użytkownika i wyświetlaRegistered: {Name}BORROW|bookId|memberId— obsługuje prośbę o wypożyczenie (użyj istniejącej logiki BorrowBook)RETURN|bookId|memberId— obsługuje prośbę o zwrot (użyj istniejącej logiki ReturnBook)SEARCH|type|value— przeszukuje katalog, w którym typ totitle,author,availablelubborrowedSTATUS— wyświetla podsumowanie zawierające łączną liczbę książek, liczbę dostępnych książek, łączną liczbę użytkowników i łączną liczbę wypożyczonych książek
W przypadku polecenia STATUS wyświetl podsumowanie w następującym formacie:
--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}Wyniki wyszukiwania wyświetlaj w osobnych wierszach, po jednym dla każdej książki, w formacie {Title} by {Author}, albo No books found, jeśli nie znaleziono żadnych wyników.
Otrzymasz następujące dane wejściowe:
- Nazwę biblioteki
- Liczbę poleceń do przetworzenia
- Każde polecenie w osobnym wierszu, w jednym z opisanych powyżej formatów
Na przykład, jeśli dane wejściowe to:
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
STATUSDane wyjściowe powinny wyglądać następująco:
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: 2Twój interfejs konsolowy spaja dane wprowadzane przez użytkownika z dobrze zorganizowanymi komponentami biblioteki. Każde polecenie przekazuje zadanie odpowiedniej metodzie w klasie Library, pokazując, jak czysta architektura ułatwia tworzenie interfejsów użytkownika!
Spróbuj swoich sił
using System;
using System.Collections.Generic;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// Odczytaj nazwę biblioteki
string libraryName = Console.ReadLine();
// Utwórz instancję klasy Library, używając nazwy biblioteki
Library library = new Library(libraryName);
// Odczytaj liczbę poleceń
int numCommands = Convert.ToInt32(Console.ReadLine());
// Przetwórz każde polecenie
for (int i = 0; i < numCommands; i++)
{
string commandLine = Console.ReadLine();
string[] parts = commandLine.Split('|');
string command = parts[0];
// TODO: Obsłuż polecenie ADD_BOOK
// Format: ADD_BOOK|id|title|author
// Wypisz: Added: {title}
// TODO: Obsłuż polecenie ADD_USER
// Format: ADD_USER|name|memberId
// Wypisz: Registered: {name}
// TODO: Obsłuż polecenie BORROW
// Format: BORROW|bookId|memberId
// Wypisz wynik z library.BorrowBook()
// TODO: Obsłuż polecenie RETURN
// Format: RETURN|bookId|memberId
// Wypisz wynik z library.ReturnBook()
// TODO: Obsłuż polecenie SEARCH
// Format: SEARCH|type|value (type może mieć wartość title, author, available lub borrowed)
// Wypisz każdą książkę jako "{Title} by {Author}" lub "No books found"
// TODO: Obsłuż polecenie STATUS
// Wypisz:
// --- Library Status ---
// Total Books: {count}
// Dostępne: {count}
// Total Users: {count}
// Books Borrowed: {count}
}
}
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metod12Projekt: System biblioteczny
Struktura projektuModele książki i użytkownikaLogika systemu wypożyczeńWyszukiwanie za pomocą LINQInterfejs konsolowy / interfejs administratoraTesty jednostkowe (NUnit/xUnit)Poćwicz samodzielnie: Kompilator C# online