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

Lassen wir Ihr Bibliothekssystem zum Leben erwecken, indem wir die zentrale Ausleihlogik implementieren! Sie werden ein zentralisiertes System erstellen, das zwischen Büchern und Benutzern koordiniert, Bibliotheksregeln wie Ausleihlimits durchsetzt und sicherstellt, dass Bücher nur ausgeliehen werden können, wenn sie verfügbar sind.

Sie werden auf Ihrer bestehenden Struktur aus vier Dateien aufbauen:

  • Book.cs: Behalten Sie Ihre Book-Klasse mit den Eigenschaften Id, Title, Author und IsAvailable sowie den Methoden Borrow() und Return() aus der vorherigen Lektion bei.
  • User.cs: Behalten Sie Ihre User-Klasse mit Name, MemberId, BorrowedCount und den Methoden zur Verwaltung ausgeliehener Bücher bei. Fügen Sie eine Konstante MaxBooks hinzu, die auf 3 gesetzt ist und die maximale Anzahl an Büchern darstellt, die ein Benutzer gleichzeitig ausleihen kann. Fügen Sie eine Methode CanBorrow() hinzu, die nur dann true zurückgibt, wenn der Benutzer weniger als MaxBooks ausgeliehen hat.
  • Library.cs: Hier fließt Ihre Logik für das Ausleihsystem zusammen. Ihre Library-Klasse sollte Sammlungen von Büchern und Benutzern sowie Methoden zum Hinzufügen dieser enthalten. Implementieren Sie zwei Schlüsselmethoden:
    • 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. Geben Sie für jeden Fehlerfall oder Erfolg entsprechende Meldungen zurück.
    • ReturnBook(string bookId, int memberId) - Verarbeitet Rückgaben, indem überprüft wird, ob der Benutzer das Buch tatsächlich hat, bevor die Rückgabe verarbeitet wird.
  • Program.cs: Verarbeiten Sie Bibliotheksoperationen und zeigen Sie die Ergebnisse an.

Ihre BorrowBook-Methode sollte je nach Situation diese Meldungen 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

Ihre ReturnBook-Methode sollte zurückgeben:

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

Sie erhalten die folgenden Eingaben:

  • Name der Bibliothek
  • Anzahl der Bücher, dann jedes Buch als id|title|author
  • Anzahl der Benutzer, dann jeder Benutzer als name|memberId
  • Anzahl der Operationen, dann jede Operation als action|bookId|memberId

Geben Sie das Ergebnis jeder Operation in einer eigenen Zeile aus.

Wenn die Eingaben beispielsweise wie folgt lauten:

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

Sollte die Ausgabe wie folgt 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

Beachten Sie, wie die Library-Klasse als Koordinator fungiert – sie validiert alle Bedingungen, bevor sie Operationen zulässt, und sorgt dafür, dass Ihre Book- und User-Klassen auf ihre eigenen Verantwortlichkeiten konzentriert bleiben. Diese Trennung macht Ihren Code einfacher 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