Buch- und Benutzermodelle
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 63 von 70.
Aufgabe
EinfachLassen Sie uns Ihr Bibliothekssystem erweitern, indem wir die Book- und User-Modelle mit umfangreicheren Funktionen ausbauen. Sie werden eine Statusverfolgung für Bücher, Ausleihfunktionen für Benutzer und eine ordnungsgemäße Kapselung hinzufügen, um Ihre Daten sicher zu halten.
Sie werden weiterhin mit Ihrer Struktur aus vier Dateien arbeiten:
Book.cs: Erweitern Sie Ihre Book-Klasse um eine eindeutige Kennung und Statusverfolgung. Jedes Buch sollte eineId(string), einenTitle(string), einenAuthor(string) undIsAvailable(bool, standardmäßig true) haben. Fügen Sie die MethodenBorrow()undReturn()hinzu, die den Verfügbarkeitsstatus ändern und eine Nachricht zurückgeben, die Erfolg oder Misserfolg anzeigt. Wenn jemand versucht, ein nicht verfügbares Buch auszuleihen, geben Sie"{Title} is not available"zurück. Wenn versucht wird, ein bereits verfügbares Buch zurückzugeben, geben Sie"{Title} was not borrowed"zurück. Erfolgreiche Operationen sollten"{Title} has been borrowed"oder"{Title} has been returned"zurückgeben.User.cs: Erweitern Sie Ihre User-Klasse, um ausgeliehene Bücher zu verfolgen. Fügen SieName(string),MemberId(int) und eine private Liste zum Speichern der IDs der ausgeliehenen Bücher hinzu. Fügen Sie eine schreibgeschützte EigenschaftBorrowedCounthinzu, die zurückgibt, wie viele Bücher der Benutzer derzeit hat. Fügen Sie die MethodenAddBorrowedBook(string bookId)undRemoveBorrowedBook(string bookId)hinzu, um die ausgeliehenen Bücher des Benutzers zu verwalten. Fügen Sie außerdem eine MethodeHasBook(string bookId)hinzu, die true zurückgibt, wenn der Benutzer dieses spezifische Buch ausgeliehen hat.Library.cs: Ihre Library-Klasse sollte Sammlungen von Büchern und Benutzern verwalten. Fügen Sie die MethodenAddBook(Book book)undRegisterUser(User user)hinzu, um die Bibliothek zu füllen. Fügen Sie eine MethodeGetBookById(string id)hinzu, die das Buch mit dieser ID zurückgibt (oder null, falls nicht gefunden), undGetUserById(int memberId), die für Benutzer ähnlich funktioniert.Program.cs: Führen Sie alles zusammen, indem Sie Bibliotheksoperationen basierend auf der Eingabe verarbeiten.
Sie erhalten die folgenden Eingaben:
- Name der Bibliothek
- Anzahl der hinzuzufügenden Bücher
- Für jedes Buch:
id|title|author - Anzahl der zu registrierenden Benutzer
- Für jeden Benutzer:
name|memberId - Anzahl der auszuführenden Operationen
- Für jede Operation:
action|bookId|memberId, wobei action entwederborrowoderreturnist
Geben Sie für jede Operation das Ergebnis der Ausleih- oder Rückgabeaktion aus. Geben Sie nach allen Operationen eine Zusammenfassung für jeden Benutzer aus, die seinen Namen und die Anzahl der aktuell ausgeliehenen Bücher im Format {Name}: {BorrowedCount} book(s) anzeigt.
Wenn die Eingaben beispielsweise wie folgt sind:
Downtown Library
2
B001|Clean Code|Robert Martin
B002|Design Patterns|Gang of Four
2
Alice|101
Bob|102
4
borrow|B001|101
borrow|B002|101
borrow|B001|102
return|B001|101Sollte die Ausgabe wie folgt aussehen:
Clean Code has been borrowed
Design Patterns has been borrowed
Clean Code is not available
Clean Code has been returned
Alice: 1 book(s)
Bob: 0 book(s)Beachten Sie, wie Alice erfolgreich zwei Bücher ausleiht, aber wenn Bob versucht, Clean Code auszuleihen (das Alice bereits hat), schlägt die Operation fehl. Nachdem Alice Clean Code zurückgegeben hat, sinkt ihre Anzahl auf 1. Dies zeigt, wie Ihre Modelle zusammenarbeiten, um die Bibliotheksregeln durchzusetzen!
Probier es selbst
using System;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// Eingaben lesen
string libraryName = Console.ReadLine();
string bookInput = Console.ReadLine();
string userInput = Console.ReadLine();
// Buchteingabe parsen (Format: title|author)
string[] bookParts = bookInput.Split('|');
string bookTitle = bookParts[0];
string bookAuthor = bookParts[1];
// Benutzereingabe parsen (Format: name|memberId)
string[] userParts = userInput.Split('|');
string userName = userParts[0];
int memberId = Convert.ToInt32(userParts[1]);
// Eine Library-Instanz mit dem Bibliotheksnamen erstellen
Library library = new Library(libraryName);
// Eine Book-Instanz mit dem Titel und Autor erstellen
Book book = new Book(bookTitle, bookAuthor);
// Eine User-Instanz mit dem Namen und der Mitglieds-ID erstellen
User user = new User(userName, memberId);
// Die Bibliotheksinformationen mit GetInfo() ausgeben
Console.WriteLine(library.GetInfo());
// Die Buchinformationen im Format ausgeben: Book: {Title} by {Author} - Available: {IsAvailable}
Console.WriteLine($"Book: {book.Title} by {book.Author} - Available: {book.IsAvailable}");
// Die Benutzerinformationen im Format ausgeben: User: {Name} (ID: {MemberId})
Console.WriteLine($"User: {user.Name} (ID: {user.MemberId})");
}
}
}
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