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

Lass uns dein Bibliothekssystem erweitern, indem wir die Book- und User-Modelle mit umfangreicheren Funktionalitäten ausstatten. Du wirst eine Statusverfolgung für Bücher, Ausleihfunktionen für Benutzer und eine ordnungsgemäße Kapselung hinzufügen, um deine Daten zu schützen.

Du arbeitest weiterhin mit deiner Struktur aus vier Dateien:

  • Book.cs: Erweitere deine Book-Klasse um eine eindeutige Kennung und eine Statusverfolgung. Jedes Buch sollte eine Id (string), einen Title (string), einen Author (string) und ein IsAvailable (bool, Standardwert true) besitzen. Füge die Methoden Borrow() und Return() hinzu, die den Verfügbarkeitsstatus ändern und eine Nachricht zurückgeben, die den Erfolg oder Fehlschlag anzeigt. Wenn jemand versucht, ein nicht verfügbares Buch auszuleihen, gib "{Title} is not available" zurück. Wenn versucht wird, ein bereits verfügbares Buch zurückzugeben, gib "{Title} was not borrowed" zurück. Erfolgreiche Operationen sollten "{Title} has been borrowed" oder "{Title} has been returned" zurückgeben.
  • User.cs: Erweitere deine User-Klasse, um ausgeliehene Bücher zu verfolgen. Füge Name (string), MemberId (int) und eine private Liste zum Speichern von ausgeliehenen Buch-IDs hinzu. Füge eine schreibgeschützte Eigenschaft BorrowedCount hinzu, die zurückgibt, wie viele Bücher der Benutzer derzeit hat. Füge die Methoden AddBorrowedBook(string bookId) und RemoveBorrowedBook(string bookId) hinzu, um die ausgeliehenen Bücher des Benutzers zu verwalten. Füge außerdem eine Methode HasBook(string bookId) hinzu, die true zurückgibt, wenn der Benutzer dieses spezifische Buch ausgeliehen hat.
  • Library.cs: Deine Library-Klasse sollte Sammlungen von Büchern und Benutzern verwalten. Füge die Methoden AddBook(Book book) und RegisterUser(User user) hinzu, um die Bibliothek zu füllen. Füge eine Methode GetBookById(string id) hinzu, die das Buch mit dieser ID zurückgibt (oder null, falls nicht gefunden), sowie GetUserById(int memberId), die für Benutzer ähnlich funktioniert.
  • Program.cs: Führe alles zusammen, indem du Bibliotheksoperationen basierend auf der Eingabe verarbeitest.

Du erhältst 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

Gib für jede Operation das Ergebnis der Ausleih- oder Rückgabeaktion aus. Gib nach allen Operationen eine Zusammenfassung für jeden Benutzer aus, die seinen Namen zeigt und wie viele Bücher er derzeit ausgeliehen hat, im Format {Name}: {BorrowedCount} book(s).

Wenn die Eingaben beispielsweise wie folgt aussehen:

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 sein:

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)

Beachte, wie Alice erfolgreich zwei Bücher ausleiht, aber wenn Bob versucht, Clean Code auszuleihen (was Alice bereits hat), schlägt die Operation fehl. Nachdem Alice Clean Code zurückgibt, sinkt ihre Anzahl auf 1. Dies zeigt, wie deine Modelle zusammenarbeiten, um die Bibliotheksregeln durchzusetzen!

Probier es selbst

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Bibliotheksnamen lesen
            string libraryName = Console.ReadLine();
            
            // Eine Library-Instanz mit dem Bibliotheksnamen erstellen
            Library library = new Library(libraryName);
            
            // Anzahl der Bücher lesen
            int numBooks = Convert.ToInt32(Console.ReadLine());
            
            // Bücher lesen und hinzufügen
            for (int i = 0; i < numBooks; i++)
            {
                string bookInput = Console.ReadLine();
                string[] bookParts = bookInput.Split('|');
                string bookId = bookParts[0];
                string bookTitle = bookParts[1];
                string bookAuthor = bookParts[2];
                
                Book book = new Book(bookId, bookTitle, bookAuthor);
                library.AddBook(book);
            }
            
            // Anzahl der Benutzer lesen
            int numUsers = Convert.ToInt32(Console.ReadLine());
            
            // Benutzer lesen und registrieren
            List<User> usersList = new List<User>();
            for (int i = 0; i < numUsers; i++)
            {
                string userInput = Console.ReadLine();
                string[] userParts = userInput.Split('|');
                string userName = userParts[0];
                int memberId = Convert.ToInt32(userParts[1]);
                
                User user = new User(userName, memberId);
                library.RegisterUser(user);
                usersList.Add(user);
            }
            
            // Anzahl der Operationen lesen
            int numOperations = Convert.ToInt32(Console.ReadLine());
            
            // Operationen verarbeiten
            for (int i = 0; i < numOperations; i++)
            {
                string operationInput = Console.ReadLine();
                string[] opParts = operationInput.Split('|');
                string action = opParts[0];
                string bookId = opParts[1];
                int memberId = Convert.ToInt32(opParts[2]);
                
                Book book = library.GetBookById(bookId);
                User user = library.GetUserById(memberId);
                
                if (action == "borrow")
                {
                    string result = book.Borrow();
                    Console.WriteLine(result);
                    if (result.Contains("has been borrowed"))
                    {
                        user.AddBorrowedBook(bookId);
                    }
                }
                else if (action == "return")
                {
                    string result = book.Return();
                    Console.WriteLine(result);
                    if (result.Contains("has been returned"))
                    {
                        user.RemoveBorrowedBook(bookId);
                    }
                }
            }
            
            // Zusammenfassung für jeden Benutzer ausgeben
            foreach (User user in usersList)
            {
                Console.WriteLine($"{user.Name}: {user.BorrowedCount} book(s)");
            }
        }
    }
}

Alle Lektionen in Objektorientierte Programmierung