Menu
Coddy logo textTech

Konsolen-UI / Admin-Interface

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 66 von 70.

challenge icon

Aufgabe

Einfach

Lassen Sie uns Ihr Bibliothekssystem vervollständigen, indem wir eine Konsolenschnittstelle erstellen, die alle Ihre Komponenten zusammenführt! Sie werden eine Admin-Schnittstelle erstellen, die Befehle zur Verwaltung der Bibliothek verarbeitet – das Hinzufügen von Büchern, das Registrieren von Benutzern, das Abwickeln von Leihvorgängen und das Durchsuchen des Katalogs.

Sie werden auf Ihrer bestehenden Projektstruktur weiter aufbauen:

  • Book.cs: Behalten Sie Ihre Book-Klasse mit Id, Title, Author, IsAvailable sowie den Methoden Borrow() und Return() bei.
  • User.cs: Behalten Sie Ihre User-Klasse mit der Leihverfolgung, der Konstante MaxBooks, CanBorrow() und den Methoden zur Verwaltung ausgeliehener Bücher bei.
  • Library.cs: Behalten Sie Ihre Library-Klasse mit der gesamten Ausleihlogik und den LINQ-Suchmethoden bei, die Sie erstellt haben. Fügen Sie eine neue Methode GetAllBooks() hinzu, die alle Bücher in der Bibliothek zurückgibt, und GetAllUsers(), die alle registrierten Benutzer zurückgibt.
  • Program.cs: Hier erwacht Ihre Konsolenschnittstelle zum Leben! Sie werden einen Befehlsprozessor bauen, der Befehle liest und die entsprechenden Bibliotheksoperationen ausführt. Betrachten Sie dies als das Admin-Dashboard für Ihr Bibliothekssystem.

Ihre Konsolenschnittstelle sollte diese Befehle verarbeiten:

  • ADD_BOOK|id|title|author – Fügt ein neues Buch hinzu und gibt Added: {Title} aus
  • ADD_USER|name|memberId – Registriert einen neuen Benutzer und gibt Registered: {Name} aus
  • BORROW|bookId|memberId – Verarbeitet eine Leihanfrage (verwenden Sie Ihre bestehende BorrowBook-Logik)
  • RETURN|bookId|memberId – Verarbeitet eine Rückgabeanfrage (verwenden Sie Ihre bestehende ReturnBook-Logik)
  • SEARCH|type|value – Durchsucht den Katalog, wobei der Typ title, author, available oder borrowed sein kann
  • STATUS – Gibt eine Zusammenfassung aus, die die Gesamtzahl der Bücher, verfügbare Bücher, die Gesamtzahl der Benutzer und die Gesamtzahl der ausgeliehenen Bücher anzeigt

Geben Sie für den Befehl STATUS die Zusammenfassung in diesem Format aus:

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

Geben Sie für Suchergebnisse jedes Buch als {Title} by {Author} in einer eigenen Zeile aus, oder No books found, falls die Liste leer ist.

Sie erhalten die folgenden Eingaben:

  • Name der Bibliothek
  • Anzahl der zu verarbeitenden Befehle
  • Jeder Befehl in einer eigenen Zeile in den oben beschriebenen Formaten

Wenn die Eingaben zum Beispiel wie folgt lauten:

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

Sollte die Ausgabe wie folgt aussehen:

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

Ihre Konsolenschnittstelle fungiert als Bindeglied, das Benutzereingaben mit Ihren gut organisierten Bibliothekskomponenten verbindet. Jeder Befehl delegiert an die entsprechende Methode in Ihrer Library-Klasse und zeigt so, wie eine saubere Architektur die Erstellung von Benutzeroberflächen unkompliziert macht!

Probier es selbst

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Bibliotheksnamen einlesen
            string libraryName = Console.ReadLine();
            
            // Erstelle eine Library-Instanz mit dem Bibliotheksnamen
            Library library = new Library(libraryName);
            
            // Anzahl der Befehle einlesen
            int numCommands = Convert.ToInt32(Console.ReadLine());
            
            // Jeden Befehl verarbeiten
            for (int i = 0; i < numCommands; i++)
            {
                string commandLine = Console.ReadLine();
                string[] parts = commandLine.Split('|');
                string command = parts[0];
                
                // TODO: ADD_BOOK-Befehl verarbeiten
                // Format: ADD_BOOK|id|title|author
                // Ausgabe: Added: {title}
                
                // TODO: ADD_USER-Befehl verarbeiten
                // Format: ADD_USER|name|memberId
                // Ausgabe: Registered: {name}
                
                // TODO: BORROW-Befehl verarbeiten
                // Format: BORROW|bookId|memberId
                // Das Ergebnis von library.BorrowBook() ausgeben
                
                // TODO: RETURN-Befehl verarbeiten
                // Format: RETURN|bookId|memberId
                // Das Ergebnis von library.ReturnBook() ausgeben
                
                // TODO: SEARCH-Befehl verarbeiten
                // Format: SEARCH|type|value (type kann title, author, available, borrowed sein)
                // Jedes Buch als "{Title} by {Author}" oder "No books found" ausgeben
                
                // TODO: STATUS-Befehl verarbeiten
                // Ausgabe:
                // --- Library Status ---
                // Total Books: {count}
                // Available: {count}
                // Total Users: {count}
                // Books Borrowed: {count}
            }
        }
    }
}

Alle Lektionen in Objektorientierte Programmierung