Konsolen-UI / Administrationsoberfläche
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 66 von 70.
Aufgabe
EinfachVervollständige dein Bibliothekssystem, indem du eine Konsolenschnittstelle erstellst, die alle deine Komponenten zusammenführt! Du erstellst eine Administrationsoberfläche, die Befehle verarbeitet, um die Bibliothek zu verwalten – Bücher hinzuzufügen, Benutzer zu registrieren, Ausleihvorgänge zu bearbeiten und den Katalog zu durchsuchen.
Du baust weiterhin auf deiner bestehenden Projektstruktur auf:
Book.cs: Behalte deine Book-Klasse mitId,Title,Author,IsAvailablesowie den MethodenBorrow()undReturn()bei.User.cs: Behalte deine User-Klasse mit der Nachverfolgung ausgeliehener Bücher, der KonstanteMaxBooks,CanBorrow()und den Methoden zur Verwaltung ausgeliehener Bücher bei.Library.cs: Behalte deine Library-Klasse mit der gesamten von dir erstellten Ausleihlogik und den LINQ-Suchmethoden bei. Füge eine neue MethodeGetAllBooks()hinzu, die alle Bücher der Bibliothek zurückgibt, sowieGetAllUsers(), die alle registrierten Benutzer zurückgibt.Program.cs: Hier wird deine Konsolenschnittstelle zum Leben erweckt! Du erstellst einen Befehlsprozessor, der Befehle liest und die entsprechenden Bibliotheksoperationen ausführt. Stell dir dies als das Administrationsdashboard für dein Bibliothekssystem vor.
Deine Konsolenschnittstelle sollte diese Befehle verarbeiten:
ADD_BOOK|id|title|author– Fügt ein neues Buch hinzu und gibtAdded: {Title}aus.ADD_USER|name|memberId– Registriert einen neuen Benutzer und gibtRegistered: {Name}aus.BORROW|bookId|memberId– Verarbeitet eine Ausleihanfrage (verwende deine bestehende BorrowBook-Logik).RETURN|bookId|memberId– Verarbeitet eine Rückgabeanfrage (verwende deine bestehende ReturnBook-Logik).SEARCH|type|value– Durchsucht den Katalog, wobei typetitle,author,availableoderborrowedsein kann.STATUS– Gibt eine Zusammenfassung mit der Gesamtzahl der Bücher, der verfügbaren Bücher, der Benutzer und der ausgeliehenen Bücher aus.
Gib die Zusammenfassung für den Befehl STATUS in diesem Format aus:
--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}Gib bei den Suchergebnissen jedes Buch in einer eigenen Zeile als {Title} by {Author} aus oder No books found, wenn keine Ergebnisse vorhanden sind.
Du erhältst die folgenden Eingaben:
- Name der Bibliothek
- Anzahl der zu verarbeitenden Befehle
- Jeden Befehl in einer eigenen Zeile in den oben beschriebenen Formaten
Wenn die Eingaben beispielsweise 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
STATUSDie Ausgabe sollte 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: 2Deine Konsolenschnittstelle dient als Bindeglied zwischen der Benutzereingabe und deinen gut strukturierten Bibliothekskomponenten. Jeder Befehl delegiert an die entsprechende Methode in deiner Library-Klasse und zeigt, wie eine klare Architektur das Erstellen von Benutzeroberflächen vereinfacht!
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. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – Schülerdaten9Variable Argumente
Das Schlüsselwort 'params'Optionale ParameterBenannte ArgumenteMethodenüberladung12Projekt: Bibliothekssystem
ProjektstrukturBuch- und BenutzermodelleLogik des AusleihsystemsLINQ für die SucheKonsolen-UI / AdministrationsoberflächeUnit-Tests (NUnit/xUnit)Übe selbstständig: Online-C#-Compiler