Menu
Coddy logo textTech

Logica del sistema di prestito

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 64 di 70.

challenge icon

Sfida

Facile

Diamo vita al tuo sistema bibliotecario implementando la logica di base per il prestito! Creerai un sistema centralizzato che coordina libri e utenti, applicando le regole della biblioteca, come i limiti di prestito e verificando che i libri possano essere presi in prestito solo quando sono disponibili.

Continuerai a sviluppare la struttura esistente a quattro file:

  • Book.cs: Mantieni la tua classe Book con le proprietà Id, Title, Author e IsAvailable, insieme ai metodi Borrow() e Return() della lezione precedente.
  • User.cs: Mantieni la tua classe User con Name, MemberId, BorrowedCount e i metodi per gestire i libri presi in prestito. Aggiungi una costante MaxBooks impostata a 3, che rappresenta il numero massimo di libri che un utente può prendere in prestito contemporaneamente. Aggiungi un metodo CanBorrow() che restituisce true solo se l'utente ha preso in prestito meno di MaxBooks.
  • Library.cs: Qui si riunisce la logica del sistema di prestito. La tua classe Library dovrebbe avere raccolte di libri e utenti, oltre a metodi per aggiungerli. Implementa due metodi chiave:
    • BorrowBook(string bookId, int memberId) - Coordina il processo di prestito. Dovrebbe verificare se il libro esiste, se l'utente esiste, se il libro è disponibile e se l'utente può prendere in prestito altri libri. Restituisci messaggi appropriati per ogni caso di errore o di successo.
    • ReturnBook(string bookId, int memberId) - Gestisce le restituzioni verificando che l'utente abbia effettivamente il libro prima di procedere.
  • Program.cs: Elabora le operazioni della biblioteca e mostra i risultati.

Il tuo metodo BorrowBook dovrebbe restituire questi messaggi in base alla situazione:

  • Book not found - quando l'ID del libro non esiste
  • User not found - quando l'ID del membro non esiste
  • {Title} is not available - quando il libro è già stato preso in prestito
  • {Name} has reached the borrowing limit - quando l'utente ha già 3 libri
  • {Name} borrowed {Title} - in caso di prestito completato correttamente

Il tuo metodo ReturnBook dovrebbe restituire:

  • Book not found o User not found - per gli ID non validi
  • {Name} did not borrow {Title} - quando l'utente prova a restituire un libro che non ha
  • {Name} returned {Title} - in caso di restituzione completata correttamente

Riceverai i seguenti input:

  • Nome della biblioteca
  • Numero di libri, poi ogni libro nel formato id|title|author
  • Numero di utenti, poi ogni utente nel formato name|memberId
  • Numero di operazioni, poi ogni operazione nel formato action|bookId|memberId

Stampa il risultato di ogni operazione su una riga separata.

Ad esempio, se gli input sono:

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

L'output dovrebbe essere:

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

Nota come la classe Library agisca da coordinatrice: convalida tutte le condizioni prima di consentire le operazioni, lasciando che le classi Book e User si concentrino sulle rispettive responsabilità. Questa separazione rende il codice più facile da mantenere e testare!

Provalo tu

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Leggi il nome della biblioteca
            string libraryName = Console.ReadLine();
            
            // Crea un'istanza di Library con il nome della biblioteca
            Library library = new Library(libraryName);
            
            // Leggi il numero di libri
            int numBooks = Convert.ToInt32(Console.ReadLine());
            
            // Leggi e aggiungi i libri
            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);
            }
            
            // Leggi il numero di utenti
            int numUsers = Convert.ToInt32(Console.ReadLine());
            
            // Leggi e registra gli utenti
            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);
            }
            
            // Leggi il numero di operazioni
            int numOperations = Convert.ToInt32(Console.ReadLine());
            
            // Elabora le operazioni
            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);
                }
            }
        }
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C# online