From 8d3b26bf60fc299b4a1a1bd2136aa05206b14de2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20Mu=C3=B1oz?= Date: Thu, 12 Jun 2025 14:59:03 +0200 Subject: [PATCH] feat(examen 9-5-25): terminado --- .../controlador/ControladorConcierto.java | 90 ++++++++++++ .../vista/PanelEstadisticas.java | 130 ++++++++++++++++++ .../vista/PanelFiltradoConciertos.java | 19 ++- .../vista/VentanaPrincipal.java | 4 +- 4 files changed, 240 insertions(+), 3 deletions(-) create mode 100644 src/tutorialJava/examenes/examen20250509/vista/PanelEstadisticas.java diff --git a/src/tutorialJava/examenes/examen20250509/controlador/ControladorConcierto.java b/src/tutorialJava/examenes/examen20250509/controlador/ControladorConcierto.java index 0a5cb0c..1ca84fe 100644 --- a/src/tutorialJava/examenes/examen20250509/controlador/ControladorConcierto.java +++ b/src/tutorialJava/examenes/examen20250509/controlador/ControladorConcierto.java @@ -186,6 +186,92 @@ public class ControladorConcierto { } return lista; } + + + + public static Object[][] getTotalesFestivalesPorCiudad() { + List list = new ArrayList(); + try { + Connection conn = ConnectionManager.getConnection(); + Statement s = conn.createStatement(); + ResultSet rs = s.executeQuery("select sala.ciudad as ciudad, " + + "count(concierto.id) as festivales " + + "from concierto inner join sala " + + "on (concierto.sala_id = sala.id) " + + "where concierto.es_festival = 1 " + + "group by sala.ciudad;"); + while (rs.next()) { + Object fila[] = new Object[2]; + fila[0] = rs.getString("ciudad"); + fila[1] = rs.getString("festivales"); + list.add(fila); + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + + // Convierto la lista en una matriz + Object m[][] = new Object[list.size()][2]; + for (int i = 0; i < list.size(); i++) { + m[i][0] = list.get(i)[0]; + m[i][1] = list.get(i)[1]; + } + + return m; + } + + + + /** + * + * @return + */ + public static float getPrecioMedioConciertos() { + try { + Connection conn = ConnectionManager.getConnection(); + Statement s = conn.createStatement(); + ResultSet rs = + s.executeQuery("select avg(precio) from concierto"); + + if (rs.next()) { + return rs.getFloat(1); + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + return -1; + } + + + + /** + * + * @return + */ + public static String getGrupoConMasConciertos() { + try { + Connection conn = ConnectionManager.getConnection(); + Statement s = conn.createStatement(); + ResultSet rs = + s.executeQuery("select count(concierto.id) as total, " + + "grupo.nombre " + + "from concierto inner join grupo " + + "on concierto.grupo_id = grupo.id " + + "group by grupo.nombre " + + "order by total desc limit 1"); + + if (rs.next()) { + return rs.getString(2); + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + return "Error al obtener el grup con más conciertos"; + } + } @@ -198,3 +284,7 @@ public class ControladorConcierto { + + + + diff --git a/src/tutorialJava/examenes/examen20250509/vista/PanelEstadisticas.java b/src/tutorialJava/examenes/examen20250509/vista/PanelEstadisticas.java new file mode 100644 index 0000000..731a6aa --- /dev/null +++ b/src/tutorialJava/examenes/examen20250509/vista/PanelEstadisticas.java @@ -0,0 +1,130 @@ +package tutorialJava.examenes.examen20250509.vista; + +import javax.swing.JPanel; +import java.awt.GridBagLayout; +import javax.swing.JScrollPane; +import java.awt.GridBagConstraints; +import javax.swing.JLabel; +import java.awt.Insets; +import java.awt.Font; +import javax.swing.JButton; +import javax.swing.JTable; + +import tutorialJava.examenes.examen20250509.controlador.ControladorConcierto; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +public class PanelEstadisticas extends JPanel { + + private static final long serialVersionUID = 1L; + private JTable jTableDatos; + private JLabel lblPrecioMedio; + JLabel lblGrupoConMasConciertos; + + /** + * Create the panel. + */ + public PanelEstadisticas() { + GridBagLayout gridBagLayout = new GridBagLayout(); + gridBagLayout.columnWidths = new int[]{0, 0, 0}; + gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0}; + gridBagLayout.columnWeights = new double[]{1.0, 0.0, Double.MIN_VALUE}; + gridBagLayout.rowWeights = new double[]{0.0, 1.0, 0.0, 0.0, Double.MIN_VALUE}; + setLayout(gridBagLayout); + + JLabel lblNewLabel = new JLabel("Estadísticas"); + lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 15)); + GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); + gbc_lblNewLabel.gridwidth = 2; + gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5); + gbc_lblNewLabel.gridx = 0; + gbc_lblNewLabel.gridy = 0; + add(lblNewLabel, gbc_lblNewLabel); + + JScrollPane scrollPane = new JScrollPane(); + GridBagConstraints gbc_scrollPane = new GridBagConstraints(); + gbc_scrollPane.gridwidth = 2; + gbc_scrollPane.insets = new Insets(0, 0, 5, 5); + gbc_scrollPane.fill = GridBagConstraints.BOTH; + gbc_scrollPane.gridx = 0; + gbc_scrollPane.gridy = 1; + add(scrollPane, gbc_scrollPane); + + jTableDatos = new JTable(getMatrizDeDatos(), getTitulosMatriz()); + scrollPane.setViewportView(jTableDatos); + + JButton btnNewButton_1 = new JButton("Calcular precio medio"); + btnNewButton_1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + lblPrecioMedio.setText("" + + ControladorConcierto.getPrecioMedioConciertos()); + } + }); + GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints(); + gbc_btnNewButton_1.insets = new Insets(0, 0, 5, 5); + gbc_btnNewButton_1.gridx = 0; + gbc_btnNewButton_1.gridy = 2; + add(btnNewButton_1, gbc_btnNewButton_1); + + lblPrecioMedio = new JLabel("New label"); + GridBagConstraints gbc_lblPrecioMedio = new GridBagConstraints(); + gbc_lblPrecioMedio.insets = new Insets(0, 0, 5, 0); + gbc_lblPrecioMedio.gridx = 1; + gbc_lblPrecioMedio.gridy = 2; + add(lblPrecioMedio, gbc_lblPrecioMedio); + + JButton btnNewButton = new JButton("Grupo con más conciertos"); + btnNewButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + lblGrupoConMasConciertos.setText( + ControladorConcierto.getGrupoConMasConciertos()); + } + }); + GridBagConstraints gbc_btnNewButton = new GridBagConstraints(); + gbc_btnNewButton.insets = new Insets(0, 0, 0, 5); + gbc_btnNewButton.gridx = 0; + gbc_btnNewButton.gridy = 3; + add(btnNewButton, gbc_btnNewButton); + + lblGrupoConMasConciertos = new JLabel("New label"); + GridBagConstraints gbc_lblGrupoConMasConciertos = new GridBagConstraints(); + gbc_lblGrupoConMasConciertos.gridx = 1; + gbc_lblGrupoConMasConciertos.gridy = 3; + add(lblGrupoConMasConciertos, gbc_lblGrupoConMasConciertos); + + } + + /** + * + * @return + */ + private Object[][] getMatrizDeDatos() { +// String matriz[][] = new String[2][2]; +// matriz[0][0] = "Rafa"; +// matriz[0][1] = "Ismael"; +// matriz[1][0] = "Rubén"; +// matriz[1][1] = "Mª Jesús"; + return ControladorConcierto.getTotalesFestivalesPorCiudad(); + } + + /** + * + * @return + */ + private String[] getTitulosMatriz() { + return new String[] {"Ciudad", "Número de festivales"}; + } + +} + + + + + + + + + + + + diff --git a/src/tutorialJava/examenes/examen20250509/vista/PanelFiltradoConciertos.java b/src/tutorialJava/examenes/examen20250509/vista/PanelFiltradoConciertos.java index fd54066..c33f800 100644 --- a/src/tutorialJava/examenes/examen20250509/vista/PanelFiltradoConciertos.java +++ b/src/tutorialJava/examenes/examen20250509/vista/PanelFiltradoConciertos.java @@ -31,6 +31,7 @@ public class PanelFiltradoConciertos extends JPanel { JComboBox jcbSalas; DefaultListModel dlmConciertos = new DefaultListModel(); + JList jlistConciertos; /** * Create the panel. @@ -106,10 +107,15 @@ public class PanelFiltradoConciertos extends JPanel { gbc_scrollPane.gridy = 3; add(scrollPane, gbc_scrollPane); - JList jlistConciertos = new JList(dlmConciertos); + jlistConciertos = new JList(dlmConciertos); scrollPane.setViewportView(jlistConciertos); JButton btnEliminar = new JButton("Eliminar"); + btnEliminar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + eliminarSeleccionados(); + } + }); GridBagConstraints gbc_btnEliminar = new GridBagConstraints(); gbc_btnEliminar.anchor = GridBagConstraints.SOUTH; gbc_btnEliminar.insets = new Insets(0, 0, 5, 0); @@ -166,6 +172,17 @@ public class PanelFiltradoConciertos extends JPanel { dlmConciertos.removeAllElements(); dlmConciertos.addAll(conciertosFiltrados); } + + /** + * + */ + private void eliminarSeleccionados() { + int selectedIndices[] = this.jlistConciertos.getSelectedIndices(); + for (int i = selectedIndices.length - 1; i >= 0; i--) { + System.out.println("Selected index: " + selectedIndices[i]); + dlmConciertos.removeElementAt(selectedIndices[i]); + } + } } diff --git a/src/tutorialJava/examenes/examen20250509/vista/VentanaPrincipal.java b/src/tutorialJava/examenes/examen20250509/vista/VentanaPrincipal.java index ca70603..f246667 100644 --- a/src/tutorialJava/examenes/examen20250509/vista/VentanaPrincipal.java +++ b/src/tutorialJava/examenes/examen20250509/vista/VentanaPrincipal.java @@ -58,8 +58,8 @@ public class VentanaPrincipal extends JFrame { PanelFiltradoConciertos panel2 = new PanelFiltradoConciertos(); tabbedPane.addTab("Filtrado de conciertos", null, panel2, null); - JPanel panel3 = new JPanel(); - tabbedPane.addTab("New tab", null, panel3, null); + PanelEstadisticas panel3 = new PanelEstadisticas(); + tabbedPane.addTab("Estadísticas", null, panel3, null); } }