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