Konsolen-UI / Admin-Interface
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 66 von 70.
Aufgabe
EinfachLassen 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 mitId,Title,Author,IsAvailablesowie den MethodenBorrow()undReturn()bei.User.cs: Behalten Sie Ihre User-Klasse mit der Leihverfolgung, der KonstanteMaxBooks,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 MethodeGetAllBooks()hinzu, die alle Bücher in der Bibliothek zurückgibt, undGetAllUsers(), 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 gibtAdded: {Title}ausADD_USER|name|memberId– Registriert einen neuen Benutzer und gibtRegistered: {Name}ausBORROW|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 Typtitle,author,availableoderborrowedsein kannSTATUS– 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
STATUSSollte 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: 2Ihre 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
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjekt-InitialisiererZusammenfassung - Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (:) SyntaxDas 'base'-SchlüsselwortVirtual & Override SchlüsselwörterVersiegelte KlassenDie 'object'-BasisklasseZusammenfassung – Mitarbeiter-Hierarchie7Fortgeschrittene Funktionen
OperatorüberladungIndexer (this[])ToString() überschreibenErweiterungsmethodenZusammenfassung - Benutzerdefinierte Liste2Eigenschaften & Statische Member
Automatisch implementierte EigenschaftenRead-Only- & Write-Only-EigenschaftenStatische Felder & MethodenStatische KlassenExpression-Bodied Member5Polymorphismus & Interfaces
Compile- vs. Runtime-PolymorphismusInterface vs. abstrakte KlasseMehrfache InterfacesExplizite InterfacesUpcasting & DowncastingRecap – Shape Calculator3Klassenarchitektur
Instanz- vs. statische Daten'readonly' & 'const' SchlüsselwörterBacking FieldsZusammenfassung - Bankkonto-Manager6Kapselung
ZugriffsmodifikatorenProperties zur KapselungImplementierung von Data HidingImmutability-MusterRückblick – Studierendendaten9Variable Argumente
Das 'params'-SchlüsselwortOptionale ParameterBenannte ArgumenteMethodenüberladung12Projekt: Bibliothekssystem
ProjektstrukturBuch- und Benutzermodelle