Menu
Coddy logo textTech

Logik des Ausleihsystems

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

challenge icon

Aufgabe

Einfach

Bringen wir dein Bibliothekssystem zum Leben, indem wir die zentrale Ausleihlogik implementieren! Du erstellst ein zentralisiertes System, das Bücher und Benutzer koordiniert, Bibliotheksregeln wie Ausleihlimits durchsetzt und sicherstellt, dass Bücher nur ausgeliehen werden können, wenn sie verfügbar sind.

Du baust weiterhin auf deiner bestehenden Struktur aus vier Dateien auf:

  • Book.cs: Behalte deine Book-Klasse mit den Eigenschaften Id, Title, Author und IsAvailable sowie den Methoden Borrow() und Return() aus der vorherigen Lektion bei.
  • User.cs: Behalte deine User-Klasse mit Name, MemberId, BorrowedCount und den Methoden zur Verwaltung ausgeliehener Bücher bei. Füge eine auf 3 gesetzte Konstante MaxBooks hinzu, die die maximale Anzahl von Büchern angibt, die ein Benutzer gleichzeitig ausleihen kann. Füge eine Methode CanBorrow() hinzu, die nur dann true zurückgibt, wenn der Benutzer weniger als MaxBooks Bücher ausgeliehen hat.
  • Library.cs: Hier kommt die Logik deines Ausleihsystems zusammen. Deine Library-Klasse sollte Sammlungen von Büchern und Benutzern sowie Methoden zu deren Hinzufügen enthalten. Implementiere zwei wichtige Methoden:
    • BorrowBook(string bookId, int memberId) – Koordiniert den Ausleihvorgang. Sie sollte prüfen, ob das Buch existiert, ob der Benutzer existiert, ob das Buch verfügbar ist und ob der Benutzer weitere Bücher ausleihen kann. Gib für jeden Fehlerfall oder bei Erfolg eine passende Nachricht zurück.
    • ReturnBook(string bookId, int memberId) – Verarbeitet Rückgaben, indem sie überprüft, ob der Benutzer das Buch tatsächlich ausgeliehen hat, bevor die Rückgabe verarbeitet wird.
  • Program.cs: Verarbeite Bibliotheksvorgänge und zeige die Ergebnisse an.

Deine Methode BorrowBook sollte je nach Situation diese Nachrichten zurückgeben:

  • Book not found – wenn die Buch-ID nicht existiert
  • User not found – wenn die Mitglieds-ID nicht existiert
  • {Title} is not available – wenn das Buch bereits ausgeliehen ist
  • {Name} has reached the borrowing limit – wenn der Benutzer bereits 3 Bücher hat
  • {Name} borrowed {Title} – bei erfolgreicher Ausleihe

Deine Methode ReturnBook sollte Folgendes zurückgeben:

  • Book not found oder User not found – bei ungültigen IDs
  • {Name} did not borrow {Title} – wenn der Benutzer versucht, ein Buch zurückzugeben, das er nicht besitzt
  • {Name} returned {Title} – bei erfolgreicher Rückgabe

Du erhältst die folgenden Eingaben:

  • Name der Bibliothek
  • Anzahl der Bücher, danach jedes Buch als id|title|author
  • Anzahl der Benutzer, danach jeder Benutzer als name|memberId
  • Anzahl der Vorgänge, danach jeder Vorgang als action|bookId|memberId

Gib das Ergebnis jedes Vorgangs in einer eigenen Zeile aus.

Wenn die Eingaben beispielsweise folgendermaßen aussehen:

Central Library
4
B001|The Hobbit|Tolkien
B002|1984|Orwell
B003|Dune|Herbert
B004|Foundation|Asimov
2
Alice|101
Bob|102
6
borrow|B001|101
borrow|B002|101
borrow|B003|101
borrow|B004|101
borrow|B001|102
return|B002|101

Die Ausgabe sollte folgendermaßen aussehen:

Alice borrowed The Hobbit
Alice borrowed 1984
Alice borrowed Dune
Alice has reached the borrowing limit
The Hobbit is not available
Alice returned 1984

Beachte, wie die Library-Klasse als Koordinator fungiert: Sie überprüft alle Bedingungen, bevor sie Vorgänge zulässt, und hält dadurch deine Book- und User-Klassen auf ihre jeweiligen Verantwortlichkeiten fokussiert. Diese Trennung macht deinen Code leichter zu warten und zu testen!

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
            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);
            }
            
            // 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]);
                
                if (action == "borrow")
                {
                    string result = library.BorrowBook(bookId, memberId);
                    Console.WriteLine(result);
                }
                else if (action == "return")
                {
                    string result = library.ReturnBook(bookId, memberId);
                    Console.WriteLine(result);
                }
            }
        }
    }
}

Alle Lektionen in Objektorientierte Programmierung

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