Progetto Gestione Libreria in Java

Descrizione del Progetto

In questo progetto, creerai un semplice sistema di gestione di una libreria utilizzando la linea di comando in Java e MySQL per la gestione dei dati. Il sistema permetterà di aggiungere libri, visualizzare i libri disponibili e cercare libri per titolo.

Requisiti

  1. Librerie Java: Utilizzare le librerie standard di Java e il connettore MySQL.
  2. Database: Utilizzare MySQL per la gestione dei dati.
  3. Input e Output: Utilizzare la riga di comando per l’input e l’output.
  4. Funzionalità della Libreria:
    • Aggiungere nuovi libri.
    • Visualizzare tutti i libri.
    • Cercare libri per titolo.
  5. Gestione degli Errori: Gestire input non validi e operazioni non valide.

Struttura del Progetto

libreria/
├── src/
│   ├── Main.java
│   ├── Libreria.java
│   └── DatabaseConnection.java
└── README.md

Configurazione del Database

Eseguire i seguenti comandi SQL per creare il database e la tabella necessaria:

CREATE DATABASE libreria_db;

USE libreria_db;

CREATE TABLE libri (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titolo VARCHAR(255) NOT NULL,
    autore VARCHAR(255) NOT NULL,
    anno INT NOT NULL
);

Codice di Esempio

Main.java: Questo file contiene il punto di ingresso dell’applicazione.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Libreria libreria = new Libreria();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("1. Aggiungi un nuovo libro");
            System.out.println("2. Visualizza tutti i libri");
            System.out.println("3. Cerca un libro per titolo");
            System.out.println("4. Esci");

            int scelta = scanner.nextInt();
            scanner.nextLine(); // Consuma il newline

            switch (scelta) {
                case 1:
                    System.out.print("Inserisci il titolo del libro: ");
                    String titolo = scanner.nextLine();
                    System.out.print("Inserisci l'autore del libro: ");
                    String autore = scanner.nextLine();
                    System.out.print("Inserisci l'anno di pubblicazione: ");
                    int anno = scanner.nextInt();
                    libreria.aggiungiLibro(titolo, autore, anno);
                    break;
                case 2:
                    libreria.visualizzaLibri();
                    break;
                case 3:
                    System.out.print("Inserisci il titolo del libro: ");
                    String titoloRicerca = scanner.nextLine();
                    libreria.cercaLibroPerTitolo(titoloRicerca);
                    break;
                case 4:
                    System.out.println("Uscita in corso...");
                    scanner.close();
                    return;
                default:
                    System.out.println("Scelta non valida.");
            }
        }
    }
}

Libreria.java: Questo file contiene l’implementazione delle operazioni della libreria.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Libreria {
    private Connection connection;

    public Libreria() {
        connection = DatabaseConnection.getConnection();
    }

    public void aggiungiLibro(String titolo, String autore, int anno) {
        String query = "INSERT INTO libri (titolo, autore, anno) VALUES (?, ?, ?)";
        try (PreparedStatement stmt = connection.prepareStatement(query)) {
            stmt.setString(1, titolo);
            stmt.setString(2, autore);
            stmt.setInt(3, anno);
            stmt.executeUpdate();
            System.out.println("Libro aggiunto con successo.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void visualizzaLibri() {
        String query = "SELECT * FROM libri";
        try (PreparedStatement stmt = connection.prepareStatement(query);
             ResultSet rs = stmt.executeQuery()) {
            while (rs.next()) {
                int id = rs.getInt("id");
                String titolo = rs.getString("titolo");
                String autore = rs.getString("autore");
                int anno = rs.getInt("anno");
                System.out.printf("ID: %d, Titolo: %s, Autore: %s, Anno: %d%n", id, titolo, autore, anno);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void cercaLibroPerTitolo(String titolo) {
        String query = "SELECT * FROM libri WHERE titolo LIKE ?";
        try (PreparedStatement stmt = connection.prepareStatement(query)) {
            stmt.setString(1, "%" + titolo + "%");
            try (ResultSet rs = stmt.executeQuery()) {
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String risultatoTitolo = rs.getString("titolo");
                    String autore = rs.getString("autore");
                    int anno = rs.getInt("anno");
                    System.out.printf("ID: %d, Titolo: %s, Autore: %s, Anno: %d%n", id, risultatoTitolo, autore, anno);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

DatabaseConnection.java: Questo file contiene la gestione della connessione al database.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnection {
    private static final String URL = "jdbc:mysql://localhost:3306/libreria_db";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    private static Connection connection = null;

    static {
        try {
            connection = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        return connection;
    }
}

Istruzioni per l’Esecuzione

  1. Compilare il Progetto:

    javac src/Main.java src/Libreria.java src/DatabaseConnection.java -d out
    
  2. Eseguire l’Applicazione:

    java -cp out Main
    

Estensioni Possibili

  1. Funzionalità Avanzate: Aggiungere funzionalità come l’eliminazione di libri, l’aggiornamento delle informazioni sui libri, ecc.
  2. Interfaccia Grafica: Integrare un’interfaccia grafica utilizzando Swing o JavaFX.
  3. Gestione Utenti: Implementare un sistema di gestione degli utenti con autenticazione e autorizzazione.