Sistema di prestito
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 79 di 87.
Sfida
FacileContinuiamo a costruire il sistema di gestione della biblioteca creando un sistema di prestito adeguato con una classe Library che gestisce la raccolta di libri e utenti. È qui che il tuo sistema comincia a sembrare una vera biblioteca: tiene traccia di chi ha cosa e applica le regole di prestito!
Organizzerai il codice in quattro file:
Book.java: Mantieni la tua classe Book della sfida precedente con tutte le sue funzionalità: isbn, title, author, isAvailable, borrowedBy, getDetails() e i getter/setter appropriati.User.java: Mantieni la tua classe User con id, name, l'ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() e toString().Library.java: Crea la classe centraleLibraryche gestisce tutto. La tua biblioteca dovrebbe mantenere due ArrayList: una per gli oggettiBooke una per gli oggettiUser. Includi questi metodi:addBook(Book book)- aggiunge un libro alla raccolta della biblioteca.registerUser(User user)- aggiunge un utente agli utenti registrati della biblioteca.findBookByIsbn(String isbn)- cerca tra i libri e restituisce il Book con l'ISBN corrispondente, oppurenullse non viene trovato.findUserById(String id)- cerca tra gli utenti e restituisce l'User con l'ID corrispondente, oppurenullse non viene trovato.borrowBook(String userId, String isbn)- trova l'utente e il libro, poi, se esistono entrambi e il libro è disponibile, fa prendere in prestito il libro all'utente e stampa[userName] borrowed [bookTitle]. Se il libro non è disponibile, stampaBook not available. Se l'utente o il libro non viene trovato, stampaInvalid user or book.returnBook(String userId, String isbn)- trova l'utente e il libro, poi fa restituire il libro all'utente e stampa[userName] returned [bookTitle]. Se l'utente o il libro non viene trovato, stampaInvalid user or book.Main.java: Metti insieme il sistema della biblioteca! Riceverai gli input per due libri (ISBN, titolo, autore per ciascuno), un utente (ID, nome) e poi una serie di operazioni.Crea una Library, aggiungi entrambi i libri e registra l'utente. Poi elabora le operazioni: riceverai una stringa separata da virgole, in cui ogni operazione è nel formato
borrow:userId:isbnoppurereturn:userId:isbn.Dopo aver elaborato tutte le operazioni, stampa un riepilogo che mostri lo stato di ciascun libro nel formato
[isbn]: [Available/Borrowed].
Riceverai gli input in questo ordine: ISBN del book1, titolo del book1, autore del book1, ISBN del book2, titolo del book2, autore del book2, ID dell'utente, nome dell'utente e infine la stringa delle operazioni.
Per esempio, con gli input ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice e borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001, il tuo output sarebbe:
Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: BorrowedQuesta sfida mette insieme composizione, incapsulamento e progettazione dei metodi per creare un sistema coeso. La classe Library funge da coordinatore, delegando la logica effettiva del prestito alle classi User e Book e gestendo al contempo la raccolta complessiva!
Provalo tu
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leggi le informazioni del libro 1
String isbn1 = scanner.nextLine();
String title1 = scanner.nextLine();
String author1 = scanner.nextLine();
// Leggi le informazioni del libro 2
String isbn2 = scanner.nextLine();
String title2 = scanner.nextLine();
String author2 = scanner.nextLine();
// Leggi le informazioni dell'utente
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// Leggi la stringa delle operazioni (separate da virgole, formato: borrow:userId:isbn o return:userId:isbn)
String operationsStr = scanner.nextLine();
// TODO: Crea gli oggetti Book per book1 e book2
// TODO: Crea un oggetto User
// TODO: Crea una Library, aggiungi entrambi i libri e registra l'utente
// TODO: Suddividi operationsStr usando "," e gestisci ogni operazione
// Per ogni operazione, suddividila usando ":" per ottenere action, userId e isbn
// Chiama library.borrowBook() o library.returnBook() a seconda dell'operazione
// TODO: Stampa un riepilogo per ogni libro nel formato "[isbn]: [Available/Borrowed]"
}
}Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato10Gestione delle eccezioni in OOP
Gerarchia delle classi di eccezioneEccezioni personalizzateEccezioni controllate e non controllatePattern try-with-resourcesRiepilogo - Utente validato13Progetto: Gestione della biblioteca
Panoramica del progetto e progettazione UMLClassi Libro e UtenteSistema di prestitoFunzionalità di ricercaInterfaccia amministratoreIntegrazione della gestione delle eccezioniTest e integrazione2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online