Menu
Coddy logo textTech

Buch- und Benutzermodelle

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

challenge icon

Aufgabe

Einfach

Lassen 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 eine Id (string), einen Title (string), einen Author (string) und IsAvailable (bool, standardmäßig true) haben. Fügen Sie die Methoden Borrow() und Return() 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 Sie Name (string), MemberId (int) und eine private Liste zum Speichern der IDs der ausgeliehenen Bücher hinzu. Fügen Sie eine schreibgeschützte Eigenschaft BorrowedCount hinzu, die zurückgibt, wie viele Bücher der Benutzer derzeit hat. Fügen Sie die Methoden AddBorrowedBook(string bookId) und RemoveBorrowedBook(string bookId) hinzu, um die ausgeliehenen Bücher des Benutzers zu verwalten. Fügen Sie außerdem eine Methode HasBook(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 Methoden AddBook(Book book) und RegisterUser(User user) hinzu, um die Bibliothek zu füllen. Fügen Sie eine Methode GetBookById(string id) hinzu, die das Buch mit dieser ID zurückgibt (oder null, falls nicht gefunden), und GetUserById(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 entweder borrow oder return ist

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|101

Sollte 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