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