Menu
Coddy logo textTech

Interfejs konsolowy / interfejs administratora

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 66 z 70.

challenge icon

Wyzwanie

Łatwy

Ukoń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ściami Id, Title, Author, IsAvailable oraz metodami Borrow() i Return().
  • 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świetla Added: {Title}
  • ADD_USER|name|memberId — rejestruje nowego użytkownika i wyświetla Registered: {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 to title, author, available lub borrowed
  • STATUS — 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
STATUS

Dane 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: 2

Twó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

Poćwicz samodzielnie: Kompilator C# online