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()); } }