diff --git a/AdminTicket/MVC/.vscode/settings.json b/AdminTicket/MVC/.vscode/settings.json new file mode 100644 index 0000000..70f48a2 --- /dev/null +++ b/AdminTicket/MVC/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "java.project.referencedLibraries": [ + "lib/**/*.jar", + "c:\\Users\\Tron7\\Documents\\DesarrolloSoftware\\VentaBoletos\\AdminTicket\\MVC\\modelo\\mysql-connector-j-8.3.0.jar" + ] +} \ No newline at end of file diff --git a/AdminTicket/MVC/Main.java b/AdminTicket/MVC/Main.java new file mode 100644 index 0000000..7de1b69 --- /dev/null +++ b/AdminTicket/MVC/Main.java @@ -0,0 +1,13 @@ +import modelo.Database; +import vista.VentaBoletosView; +import controlador.VentaBoletosController; + +public class Main { + public static void main(String[] args) { + Database database = new Database(); + VentaBoletosView vista = new VentaBoletosView(); + VentaBoletosController controlador = new VentaBoletosController(vista, database); + + vista.setVisible(true); + } +} \ No newline at end of file diff --git a/AdminTicket/MVC/controlador/VentaBoletosController.java b/AdminTicket/MVC/controlador/VentaBoletosController.java new file mode 100644 index 0000000..2288d6d --- /dev/null +++ b/AdminTicket/MVC/controlador/VentaBoletosController.java @@ -0,0 +1,107 @@ +package controlador; + +import modelo.*; +import vista.VentaBoletosView; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +public class VentaBoletosController { + private VentaBoletosView vista; + private Database database; + private List<JButton> botonesAsientos; + + public VentaBoletosController(VentaBoletosView vista, Database database) { + this.vista = vista; + this.database = database; + this.botonesAsientos = new ArrayList<>(); + + cargarAsientos(); + agregarListeners(); + } + + private void cargarAsientos() { + try { + Connection conexion = database.getConexion(); + Statement stmt = conexion.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT * FROM asientos"); + + while (rs.next()) { + int numeroAsiento = rs.getInt("numero_asiento"); + boolean disponible = rs.getBoolean("disponible"); + + JButton btnAsiento = new JButton(String.valueOf(numeroAsiento)); + btnAsiento.setEnabled(disponible); + btnAsiento.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + venderAsiento(numeroAsiento); + } + }); + + botonesAsientos.add(btnAsiento); + vista.agregarBotonAsiento(btnAsiento); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private void venderAsiento(int numeroAsiento) { + try { + Connection conexion = database.getConexion(); + PreparedStatement pstmt = conexion.prepareStatement("UPDATE asientos SET disponible = FALSE WHERE numero_asiento = ?"); + pstmt.setInt(1, numeroAsiento); + pstmt.executeUpdate(); + + pstmt = conexion.prepareStatement("INSERT INTO ventas (fecha_venta, numero_asiento, precio) VALUES (NOW(), ?, ?)"); + pstmt.setInt(1, numeroAsiento); + pstmt.setDouble(2, 100.00); // Precio fijo por simplicidad + pstmt.executeUpdate(); + + vista.mostrarMensaje("Boleto vendido: Asiento " + numeroAsiento); + actualizarBotones(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private void actualizarBotones() { + for (JButton btn : botonesAsientos) { + btn.setEnabled(false); + } + vista.actualizarBotones(); + } + + private void generarReporte() { + try { + Connection conexion = database.getConexion(); + Statement stmt = conexion.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT * FROM ventas"); + + StringBuilder reporte = new StringBuilder("Reporte de Ventas:\n"); + while (rs.next()) { + reporte.append("Fecha: ").append(rs.getTimestamp("fecha_venta")).append(", "); + reporte.append("Asiento: ").append(rs.getInt("numero_asiento")).append(", "); + reporte.append("Precio: $").append(rs.getDouble("precio")).append("\n"); + } + + vista.mostrarMensaje(reporte.toString()); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private void agregarListeners() { + vista.getBtnGenerarReporte().addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + generarReporte(); + } + }); + } +} \ No newline at end of file diff --git a/AdminTicket/MVC/modelo/Asiento.java b/AdminTicket/MVC/modelo/Asiento.java new file mode 100644 index 0000000..07e30ba --- /dev/null +++ b/AdminTicket/MVC/modelo/Asiento.java @@ -0,0 +1,25 @@ +package modelo; + +public class Asiento { + private int id; + private int numeroAsiento; + private boolean disponible; + + public Asiento(int id, int numeroAsiento, boolean disponible) { + this.id = id; + this.numeroAsiento = numeroAsiento; + this.disponible = disponible; + } + + public int getNumeroAsiento() { + return numeroAsiento; + } + + public boolean isDisponible() { + return disponible; + } + + public void setDisponible(boolean disponible) { + this.disponible = disponible; + } +} \ No newline at end of file diff --git a/AdminTicket/MVC/modelo/Database.java b/AdminTicket/MVC/modelo/Database.java new file mode 100644 index 0000000..17571f0 --- /dev/null +++ b/AdminTicket/MVC/modelo/Database.java @@ -0,0 +1,35 @@ +package modelo; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class Database { + private Connection conexion; + + public Database() { + conectar(); + } + + private void conectar() { + try { + conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/venta_boletos", "root", "4560"); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public Connection getConexion() { + return conexion; + } + + public void cerrarConexion() { + try { + if (conexion != null) { + conexion.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/AdminTicket/MVC/modelo/Venta.java b/AdminTicket/MVC/modelo/Venta.java new file mode 100644 index 0000000..b13adb1 --- /dev/null +++ b/AdminTicket/MVC/modelo/Venta.java @@ -0,0 +1,29 @@ +package modelo; + +import java.sql.Timestamp; + +public class Venta { + private int id; + private Timestamp fechaVenta; + private int numeroAsiento; + private double precio; + + public Venta(int id, Timestamp fechaVenta, int numeroAsiento, double precio) { + this.id = id; + this.fechaVenta = fechaVenta; + this.numeroAsiento = numeroAsiento; + this.precio = precio; + } + + public Timestamp getFechaVenta() { + return fechaVenta; + } + + public int getNumeroAsiento() { + return numeroAsiento; + } + + public double getPrecio() { + return precio; + } +} \ No newline at end of file diff --git a/AdminTicket/MVC/modelo/mysql-connector-j-8.3.0.jar b/AdminTicket/MVC/modelo/mysql-connector-j-8.3.0.jar new file mode 100644 index 0000000..5c720ab Binary files /dev/null and b/AdminTicket/MVC/modelo/mysql-connector-j-8.3.0.jar differ diff --git a/AdminTicket/MVC/vista/VentaBoletosView.java b/AdminTicket/MVC/vista/VentaBoletosView.java new file mode 100644 index 0000000..9789b5f --- /dev/null +++ b/AdminTicket/MVC/vista/VentaBoletosView.java @@ -0,0 +1,43 @@ +package vista; + +import java.awt.*; +import javax.swing.*; + +public class VentaBoletosView extends JFrame { + private JPanel panelAsientos; + private JButton btnGenerarReporte; + + public VentaBoletosView() { + super("Venta de Boletos"); + setSize(600, 400); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + + panelAsientos = new JPanel(new GridLayout(10, 10)); + btnGenerarReporte = new JButton("Generar Reporte de Ventas"); + + add(panelAsientos, BorderLayout.CENTER); + add(btnGenerarReporte, BorderLayout.SOUTH); + } + + public JPanel getPanelAsientos() { + return panelAsientos; + } + + public JButton getBtnGenerarReporte() { + return btnGenerarReporte; + } + + public void agregarBotonAsiento(JButton boton) { + panelAsientos.add(boton); + } + + public void mostrarMensaje(String mensaje) { + JOptionPane.showMessageDialog(this, mensaje); + } + + public void actualizarBotones() { + panelAsientos.revalidate(); + panelAsientos.repaint(); + } +} \ No newline at end of file diff --git a/AdminTicket/bd.sql b/AdminTicket/bd.sql new file mode 100644 index 0000000..093b2b5 --- /dev/null +++ b/AdminTicket/bd.sql @@ -0,0 +1,28 @@ +CREATE DATABASE venta_boletos; + +USE venta_boletos; + +CREATE TABLE asientos ( + id INT AUTO_INCREMENT PRIMARY KEY, + numero_asiento INT NOT NULL, + disponible BOOLEAN NOT NULL DEFAULT TRUE +); + +CREATE TABLE ventas ( + id INT AUTO_INCREMENT PRIMARY KEY, + fecha_venta DATETIME NOT NULL, + numero_asiento INT NOT NULL, + precio DECIMAL(10, 2) NOT NULL +); + +INSERT INTO asientos (numero_asiento, disponible) VALUES +(101, true), +(102, false), +(103, true), +(104, true), +(105, false), +(106, true), +(107, true), +(108, false), +(109, true), +(110, true); \ No newline at end of file