Please enable JavaScript.
Coggle requires JavaScript to display documents.
tecnologia teatro - Coggle Diagram
tecnologia teatro
📁 1. PACKAGE client – CLI.java
🔹 connetti() – apre socket e stream
canale = new Socket("127.0.0.1", 7777);
outVersoServer = new ObjectOutputStream(canale.getOutputStream());
outVersoServer.flush();
inDalServer = new ObjectInputStream(canale.getInputStream());
🔹 comunica() – menu principale
do {
stampaMenu(); // 1) Inserisci abbonato, 2) Inserisci abbonamento, 3) Uscita
switch(leggiIntero()) {
case 1: inserisciNuovoAbbonato(); break;
case 2: inserisciNuovoAbbonamento(); break;
case 3: System.out.println("Uscita"); break;
} while(scelta != 3);
🔹 inserisciNuovoAbbonato() – raccolta dati e invio oggetto Abbonato
Abbonato a = new Abbonato(nome, cognome, cf, email, tel);
inviaOggetto(a);
String risposta = (String) riceviOggetto();
System.out.println(risposta);
🔹 inserisciNuovoAbbonamento() – raccolta e invio Abbonamento
Abbonamento ab = new Abbonamento(codiceAbbonato, tipoAbb, tipoPoltrona);
inviaOggetto(ab);
String risposta = (String) riceviOggetto();
System.out.println(risposta);
🔹 inviaOggetto() / riceviOggetto()
outVersoServer.writeObject(obj); outVersoServer.flush();
return inDalServer.readObject();
📁 3. PACKAGE teatro_server_ps
🧩 Server.java – avvio multithread
private static final int PORTA = 7777;
try (ServerSocket ss = new ServerSocket(PORTA)) {
while (true) new ServerThread(ss.accept()).start();
} catch (IOException e) { e.printStackTrace(); }
🧩 ServerThread.java – gestisce un client
public class ServerThread extends Thread {
private Socket client;
private ObjectInputStream in;
private ObjectOutputStream out;
public ServerThread(Socket socket) { this.client = socket; }
public void run() {
try {
out = new ObjectOutputStream(client.getOutputStream()); out.flush();
in = new ObjectInputStream(client.getInputStream());
while (true) {
Object obj = in.readObject();
if (obj instanceof Abbonato) {
Abbonato a = (Abbonato) obj;
String ris = GestioneDB.inserimentoAbbonato(a.getNome(), a.getCognome(), a.getCodiceFiscale(), a.getEmail(), a.getNumeroTelefonico());
out.writeObject(ris);
} else if (obj instanceof Abbonamento) {
Abbonamento a = (Abbonamento) obj;
String ris = GestioneDB.inserimentoAbbonamento(a.getCodiceAbbonato(), a.getTipoAbbonamento(), a.getTipoPoltrona());
out.writeObject(ris);
} else {
out.writeObject("Tipo non riconosciuto");
}
out.flush();
}
} catch (EOFException e) { System.out.println("Client disconnesso");
} catch (IOException | ClassNotFoundException e) { e.printStackTrace();
} finally {
try { if (in != null) in.close(); if (out != null) out.close(); if (client != null) client.close(); } catch (IOException e) {}
}
}
🧩 GestioneDB.java – accesso al database
Costanti DB
private static final String URL = "jdbc:mysql://localhost:3306/teatro_db";
private static final String USER = "root";
private static final String PASSWORD = "mysql";
static { try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } }
🔹 cercaAbbonatoPerCodice(int codice)
String sql = "SELECT 1 FROM abbonati WHERE codice = ?";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, codice);
ResultSet rs = ps.executeQuery();
return rs.next(); :
} catch (SQLException e) { e.printStackTrace(); }
return false;
🔹 inserimentoAbbonato(nome, cognome, cf, email, tel)
int esistente = cercaAbbonatoPerCF(cf);
if (esistente != -1) return "Abbonato già esistente, codice = " + esistente;
String sql = "INSERT INTO abbonati (nome, cognome, CF, email, tel) VALUES (?,?,?,?,?)";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
ps.setString(1, nome); ps.setString(2, cognome); ps.setString(3, cf); ps.setString(4, email); ps.setString(5, tel);
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) return "Nuovo abbonato inserito: codice = " + rs.getInt(1);
} catch (SQLException e) { e.printStackTrace(); }
return "Errore durante l'inserimento";
🔹 inserimentoAbbonamento(codiceAbbonato, tipoAbb, tipoPoltrona)
if (!cercaAbbonatoPerCodice(codiceAbbonato)) return "Abbonato inesistente";
if (!tipoAbb.equalsIgnoreCase("mensile") && !tipoAbb.equalsIgnoreCase("annuale")) return "Tipo abbonamento non valido";
if (!tipoPoltrona.equalsIgnoreCase("platea") && !tipoPoltrona.equalsIgnoreCase("galleria")) return "Tipo poltrona non valido";
int costo = cercaCostoAbbonamento(tipoAbb, tipoPoltrona);
if (costo == -1) return "Costo non trovato";
LocalDate inizio = LocalDate.now();
LocalDate fine = tipoAbb.equalsIgnoreCase("mensile") ? inizio.plusDays(30) : inizio.plusDays(365);
String sql = "INSERT INTO abbonamenti (codice_abbonato, tipo_abbonamento, tipo_poltrona, data_inizio, data_fine) VALUES (?,?,?,?,?)";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
ps.setInt(1, codiceAbbonato); ps.setString(2, tipoAbb.toLowerCase()); ps.setString(3, tipoPoltrona.toLowerCase());
ps.setDate(4, Date.valueOf(inizio)); ps.setDate(5, Date.valueOf(fine));
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) return "Abbonamento creato: " + rs.getInt(1) + " con data inizio: " + inizio.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + " e data fine: " + fine.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + ". Costo = " + costo;
} catch (SQLException e) { e.printStackTrace(); }
return "Errore durante l'inserimento";
🔹 cercaCostoAbbonamento(tipoAbb, tipoPoltrona) – privato
String sql = "SELECT costo FROM tipo_abbonamento WHERE tipo_abbonamento = ? AND tipo_poltrona = ?";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, tipoAbb.toLowerCase()); ps.setString(2, tipoPoltrona.toLowerCase());
ResultSet rs = ps.executeQuery();
if (rs.next()) return rs.getInt("costo");
} catch (SQLException e) { e.printStackTrace(); }
return -1;
📁 2. PACKAGE model – classi serializzabili
🧩 Abbonato.java – attributi: nome, cognome, codiceFiscale, email, numeroTelefonico; costruttore, getter, setter, Serializable
🧩 Abbonamento.java – attributi: codiceAbbonato (int), tipoAbbonamento (String), tipoPoltrona (String); costruttore, getter, setter, Serializable