From c0a4f9694617782dd5509f4e1e344aa38633c85c Mon Sep 17 00:00:00 2001
From: "miguel.velazquez" <zs22016063@estudiantes.uv.mx>
Date: Mon, 3 Mar 2025 03:34:44 +0000
Subject: [PATCH] Subir archivos a "BoletoX v1"

Version 1 de BoletoX
---
 BoletoX v1/AsientosConcierto.java | 163 ++++++++++++++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 BoletoX v1/AsientosConcierto.java

diff --git a/BoletoX v1/AsientosConcierto.java b/BoletoX v1/AsientosConcierto.java
new file mode 100644
index 0000000..f33cd0b
--- /dev/null
+++ b/BoletoX v1/AsientosConcierto.java	
@@ -0,0 +1,163 @@
+package com.mycompany.asientosconcierto;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
+
+public class AsientosConcierto extends JFrame {
+    private final int FILAS = 5;
+    private final int COLUMNAS = 10;
+    private JButton[][] asientos = new JButton[FILAS][COLUMNAS];
+    private List<String> asientosVendidos = new ArrayList<>();
+    private JButton btnConfirmarVenta;
+    private JButton btnGenerarReporte;
+
+    public AsientosConcierto() {
+        setTitle("Selección de Asientos - Concierto");
+        setSize(800, 600);
+        setDefaultCloseOperation(EXIT_ON_CLOSE);
+        setLocationRelativeTo(null);
+        setLayout(new BorderLayout());
+
+        JPanel panelAsientos = new JPanel(new GridLayout(FILAS, COLUMNAS, 5, 5));
+
+        for (int i = 0; i < FILAS; i++) {
+            for (int j = 0; j < COLUMNAS; j++) {
+                JButton asiento = new JButton();
+                asiento.setPreferredSize(new Dimension(50, 50));
+                
+                if (i == 0) {
+                    asiento.setBackground(Color.BLUE);
+                    asiento.setToolTipText("Primera Fila");
+                } else if (i == 1 || i == 2) {
+                    asiento.setBackground(new Color(218, 165, 32));
+                    asiento.setToolTipText("VIP");
+                } else {
+                    asiento.setBackground(Color.GREEN);
+                    asiento.setToolTipText("Normal");
+                }
+
+                final int fila = i;
+                final int columna = j;
+                
+                asiento.addActionListener(new ActionListener() {
+                    private boolean seleccionado = false;
+
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        if (!seleccionado && asiento.getBackground() != Color.GRAY) {
+                            asiento.setBackground(Color.RED);
+                            asientosVendidos.add("Fila " + fila + ", Columna " + columna + " - " + asiento.getToolTipText());
+                            seleccionado = true;
+                        } else if (asiento.getBackground() != Color.GRAY) {
+                            restaurarColorOriginal(asiento);
+                            asientosVendidos.remove("Fila " + fila + ", Columna " + columna + " - " + asiento.getToolTipText());
+                            seleccionado = false;
+                        }
+                    }
+                });
+
+                asientos[i][j] = asiento;
+                panelAsientos.add(asiento);
+            }
+        }
+        
+        JPanel panelBotones = new JPanel();
+        btnConfirmarVenta = new JButton("Confirmar Venta");
+        btnGenerarReporte = new JButton("Generar reporte de venta");
+
+        btnConfirmarVenta.addActionListener(e -> confirmarVenta());
+
+        btnGenerarReporte.addActionListener(e -> generarReporteDeVentaTXT()); 
+
+        panelBotones.add(btnConfirmarVenta);
+        panelBotones.add(btnGenerarReporte);
+        
+        add(panelAsientos, BorderLayout.CENTER);
+        add(panelBotones, BorderLayout.SOUTH);
+        
+        setVisible(true);
+    }
+
+    private void restaurarColorOriginal(JButton asiento) {
+        if (asiento.getToolTipText().equals("Primera Fila")) {
+            asiento.setBackground(Color.BLUE);
+        } else if (asiento.getToolTipText().equals("VIP")) {
+            asiento.setBackground(new Color(218, 165, 32));
+        } else {
+            asiento.setBackground(Color.GREEN);
+        }
+    }
+
+    private void confirmarVenta() {
+        if (asientosVendidos.isEmpty()) {
+            JOptionPane.showMessageDialog(this, "No ha seleccionado asientos.", "Error", JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+
+        StringBuilder detallesCompra = new StringBuilder("Asientos vendidos:\n");
+        for (String asientoInfo : asientosVendidos) {
+            detallesCompra.append(asientoInfo).append("\n");
+        }
+
+        JOptionPane.showMessageDialog(this, detallesCompra.toString(), "Comprobante de Compra", JOptionPane.INFORMATION_MESSAGE);
+
+        // Marcar los asientos como vendidos
+        for (int i = 0; i < FILAS; i++) {
+            for (int j = 0; j < COLUMNAS; j++) {
+                if (asientos[i][j].getBackground() == Color.RED) {
+                    asientos[i][j].setBackground(Color.GRAY);
+                    asientos[i][j].setEnabled(false);
+                }
+            }
+        }
+
+        // Guardar el estado de los asientos vendidos en un archivo
+        guardarAsientosVendidos();
+
+        asientosVendidos.clear();
+    }
+
+    private void generarReporteDeVentaTXT() {
+        File file = new File("reporte_ventas.txt");
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) {
+            if (asientosVendidos.isEmpty()) {
+                JOptionPane.showMessageDialog(this, "No hay nuevas ventas para generar reporte.", "Error", JOptionPane.ERROR_MESSAGE);
+                return;
+            }
+
+            writer.write("Reporte de Ventas:\n\n");
+            for (String asientoInfo : asientosVendidos) {
+                writer.write(asientoInfo + "\n");
+            }
+
+            JOptionPane.showMessageDialog(this, "Reporte generado con éxito: " + file.getAbsolutePath(), "Reporte Generado", JOptionPane.INFORMATION_MESSAGE);
+        } catch (IOException ex) {
+            JOptionPane.showMessageDialog(this, "Error al generar el reporte: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    private void guardarAsientosVendidos() {
+        File file = new File("asientos_vendidos.txt");
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
+            for (int i = 0; i < FILAS; i++) {
+                for (int j = 0; j < COLUMNAS; j++) {
+                    if (asientos[i][j].getBackground() == Color.GRAY) {
+                        writer.write(i + "," + j + "\n");
+                    }
+                }
+            }
+        } catch (IOException ex) {
+            JOptionPane.showMessageDialog(this, "Error al guardar los asientos vendidos: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    public static void main(String[] args) {
+        SwingUtilities.invokeLater(() -> new AsientosConcierto());
+    }
+}