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

Erweitern wir dein Bibliothekssystem, indem wir die Modelle Book und User mit umfangreicherer Funktionalität ausbauen. Du fügst eine Statusverfolgung für Bücher, Ausleihfunktionen für Benutzer und eine geeignete Kapselung hinzu, 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 über eine Id (string), einen Title (string), einen Author (string) und IsAvailable (bool, standardmäßig true) verfügen. Füge die Methoden Borrow() und Return() hinzu, die den Verfügbarkeitsstatus ändern und eine Meldung zurückgeben, die Erfolg oder Fehlschlag angibt. Wenn jemand versucht, ein nicht verfügbares Buch auszuleihen, gib "{Title} is not available" zurück. Wenn jemand versucht, ein bereits verfügbares Buch zurückzugeben, gib "{Title} was not borrowed" zurück. Erfolgreiche Vorgänge sollten "{Title} has been borrowed" oder "{Title} has been returned" zurückgeben.
  • User.cs: Erweitere deine User-Klasse, damit sie ausgeliehene Bücher verfolgt. Füge Name (string), MemberId (int) und eine private Liste zum Speichern der IDs ausgeliehener Bücher hinzu. Füge eine schreibgeschützte Eigenschaft BorrowedCount hinzu, die zurückgibt, wie viele Bücher der Benutzer derzeit besitzt. 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 bestimmte 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, wenn es nicht gefunden wurde), sowie GetUserById(int memberId), die entsprechend für Benutzer funktioniert.
  • Program.cs: Führe alles zusammen, indem du Bibliotheksvorgänge 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 Vorgänge
  • Für jeden Vorgang: action|bookId|memberId, wobei action entweder borrow oder return ist

Gib für jeden Vorgang das Ergebnis der Ausleih- oder Rückgabeaktion aus. Gib nach allen Vorgängen für jeden Benutzer eine Zusammenfassung aus, die seinen Namen und die Anzahl der Bücher zeigt, die er derzeit ausgeliehen hat, und zwar im Format {Name}: {BorrowedCount} book(s).

Wenn die Eingaben beispielsweise folgendermaßen 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

Die Ausgabe sollte folgendermaßen 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)

Beachte, wie Alice erfolgreich zwei Bücher ausleiht, aber der Vorgang fehlschlägt, als Bob versucht, Clean Code auszuleihen, das Alice bereits besitzt. Nachdem Alice Clean Code zurückgibt, sinkt ihre Anzahl auf 1. Dies zeigt, wie deine Modelle zusammenarbeiten, um die Regeln der Bibliothek 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

Übe selbstständig: Online-C#-Compiler