25 mayo, 2021

Cuarta Evaluación Continua Java Avanzado

¡Buen día, coders! En esta oportunidad vamos a resolver una evaluación continua que nos envió un seguidor de la página. Consta de 1 parte sobre Manejo de Archivos y Clases, Les dejaré la solución a este examen y cualquier duda que tengan en la sección de comentarios.

Problema 1. 

Se tiene la base de datos cibercole. Realizar una aplicación que controle el ingreso de sus usuarios mediante una consulta a la tabla usuarios de su base de datos ventas, la cual se puede definir mediante el siguiente Script:

create database cibercole;

use cibercole;

create table usuarios(

usuario char(4) unique primary key,

password varchar(15) );

insert into usuarios values('U001','123456');

insert into usuarios values('U002','654321');

Para su validación se debe realizar una GUI como el modelo o emplear JOPtionPane.:



El botón Ingresar mostrará un mensaje de error en el caso de no encontrase el usuario en la tabla. La correcta validación mostrará un mensaje de Bienvenida.



Solución:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class Problema1 {

	public static void main(String args[]) {
		String x = JOptionPane.showInputDialog(null, "Ingrese usuario");
		String y = JOptionPane.showInputDialog(null, "Ingrese contraseña");
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			Connection con = DriverManager
					.getConnection("jdbc:mysql://localhost/cibercole?" 
							+ "&useUnicode=true&JDBCCompliantTimezoneShift=true"
							+ "&useLegacyDatetimeCode=false&serverTimezone=UTC", 
							       "root", "root");
			System.out.println("Conexion a BD establecida");
			Statement stmt = con.createStatement();
			ResultSet rs = stmt
					.executeQuery("SELECT * FROM usuarios where usuario = '" + x + 
							      "' and password='" + y + "'");
			if (rs.next())
				JOptionPane.showMessageDialog(null, "Bienvenido Sr. " + x);
			else
				JOptionPane.showMessageDialog(null, 
						"El usuario ' " + x + "' no existe ");
		} catch (SQLException ex) {
			System.out.println(" Error de conexión: " + ex.getMessage());
		} catch (Exception e) {
			System.out.println("Se produjo un error inesperado: " + e.getMessage());
		}
	}
	
}

Resultado:



Problema 2. 

La misma base de datos, tiene una tabla notas con los siguientes campos:

Codigo = char (4), Nombre = Char(15) y Promedio = int(2)

Insertar 5 datos y realizar los procesos necesarios para realizar el mantenimiento de la base de datos
Para la creación de la GUI puede tomar como referencia el siguiente modelo.


public class Ec4 extends JFrame{ // Clase principal (contenedora)
Pila<String> p=new Pila<String>(); // Este es un Collections
public Ec4(){
Container c = getContentPane();
c.setLayout(new FlowLayout());
final JTextField campoTexto = new JTextField(20) ;
c.add (new JLabel ("Nombre")) ;
c.add (campoTexto);
final JTextArea area = new JTextArea(8,30);
c.add(area);
JButton boton1 = new JButton("Agregar");
JButton boton2 = new JButton("Quitar");
c.add(boton1);
c.add(boton2);
setSize(350,250);
setTitle("Gestion de Pila");
setVisible(true);
boton1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
p.agregar(campoTexto.getText());
area.setText( ---OJO --- p.muestra());
// OJO --- Realizar un proceso que permita mostrar la información del ArrayList 
campoTexto.setText("");
}
});
}
public static void main(String[] args){
new Ec4();
}
}


Solución:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

// Clase Principal
public class Problema2 extends JFrame {
	
	List<Nota> p = new ArrayList<Nota>(); // Este es un Collections
	MantenerNotas mn = new MantenerNotas(); // Instancia de Mantenimiento
	
	// Constructor
	public Problema2(){
		Container c = getContentPane();
		c.setLayout(new FlowLayout());

		final JTextField campocodigo = new JTextField(20);
		c.add(new JLabel("Codigo"));
		c.add(campocodigo);

		final JTextField camponombre = new JTextField(20);
		c.add(new JLabel("Nombre"));
		c.add(camponombre);

		final JTextField campopromedio = new JTextField(20);
		c.add(new JLabel("Promedio"));
		c.add(campopromedio);

		final JTextArea area = new JTextArea(8, 20);
		c.add(area);
		JButton boton1 = new JButton("Agregar");
		JButton boton2 = new JButton("Consultar");
		JButton boton3 = new JButton("Eliminar");
		c.add(boton1);
		c.add(boton2);
		c.add(boton3);
		setSize(300, 300);
		setTitle("Gestion de Pila");
		setVisible(true);
		listar(area, campocodigo.getText()); // Cargar datos al iniciar el programa
		
		// Agregar
		boton1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					// Leemos los datos de la GUI
					String codigo = campocodigo.getText();
					String nombre = camponombre.getText();
					int promedio = Integer.parseInt(campopromedio.getText());
					Nota alumno = mn.obtener(codigo); // Buscamos si el alumno existe en la bd
			        if (alumno == null) { // Si el alumno no existe
			        	alumno = new Nota(codigo, nombre, promedio);
			        	p.add(alumno); // Agregamos el alumno a la lista
			        	mn.registrar(alumno); // Registramos el alumno en la bd
						listar(area, ""); // Actualizamos la pantalla
			            JOptionPane.showMessageDialog(null, "Alumno Ingresado"); // Muestro mensaje
			        } else
			        	JOptionPane.showMessageDialog(null, "El alumno con código '" + 
		        			codigo + "' ya existe");
				} catch (Exception e2) {
					JOptionPane.showMessageDialog(null, "Ingrese los datos correctamente");
				}
			}
		});

		// Consultar
		boton2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					listar(area, campocodigo.getText()); // Actualizo la pantalla
				} catch (Exception ex) {
					JOptionPane.showMessageDialog(null, "Ingrese un código válido: " + ex);
				}
			}
		});

		// Eliminar
		boton3.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					String codigo = campocodigo.getText(); // Leo eL código de la GUI
					Nota alumno = mn.obtener(codigo); // Busco en bd el alumno por su código
					if (alumno != null) { // Si el alumno existe
						p.remove(alumno); // Remuevo el alumno de la lista
						mn.eliminar(codigo); // Actualizo la bd
						listar(area, ""); // Actualizo la pantalla
						JOptionPane.showMessageDialog(null, "Alumno eliminado"); // Muestro mensaje
					} else {
						JOptionPane.showMessageDialog(null, "El alumno con código '" + 
							codigo + "' que está queriendo eliminar, no existe.");
					}
				} catch (Exception ex) {
					JOptionPane.showMessageDialog(null, "Ingrese un código válido: " + ex);
				}
			}
		});
	}
	
	// Método Listar / Consultar
	public void listar(JTextArea area, String codigo) {
		area.setText(""); // Limpiamos la pantalla
		p =  mn.listar(codigo); // Traemos los alumnos de la bd
		if (p.size() > 0) { // Si hay alumnos
			area.append("Codigo \t Nombre \t Promedio \n");
			for (int i = 0; i < p.size(); i++) { // Recorremos la lista
				Nota a = p.get(i); // Obtenemos el alumno
				area.append(a.getCodigo() + "\t" + 
							a.getNombre() + "\t" + 
						    a.getPromedio() + "\n"); // Mostramos su datos
			}
		} else
			area.append("No hay alumnos\n"); // Si no hay alumnos en la bd
	}

	// Método "Main" que lanza la aplicación
	public static void main(String[] args) {
		new Problema2();
	}

}


// Clase Base
class Nota {
	
	private String codigo;
	private String nombre;
	private int promedio;

	public Nota(String codigo, String nombre, int promedio) {
		this.codigo = codigo;
		this.nombre = nombre;
		this.promedio = promedio;
	}

	public String getCodigo() {
		return codigo;
	}

	public String getNombre() {
		return nombre;
	}

	public int getPromedio() {
		return promedio;
	}

	public String tosString() {
		return codigo + "" + nombre + " (" + promedio + ")";
	}

}

// Clase Mantenimiento de Notas
class MantenerNotas {
	
	public Nota obtener(String codigo) {
		Nota objCli = null;
		Connection cn = Conexion.obtenerConexion();
		try {
			// Definimos la sentencia
			String sentencia = "select * from notas where codigo = ? ";
			// La preparamos
			PreparedStatement pst = cn.prepareStatement(sentencia);
			// Asignamos valores a las interrogantes
			pst.setString(1, codigo);
			// Ejecutamos
			ResultSet rs = pst.executeQuery();
			if (rs.next()) {
				// caso de exito, si existe el email
				objCli = new Nota(rs.getString(1), rs.getString(2), rs.getInt(3));
			}
			cn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return objCli;
	}
	
	public List<Nota> listar(String codigo) {
		Connection cn = Conexion.obtenerConexion();
		List<Nota> notas = new ArrayList<Nota>();
		try {
			// Definimos la sentencia
			String sentencia = "select *"
					         + "from notas where codigo like ?";
			// La preparamos
			PreparedStatement pst = cn.prepareStatement(sentencia);
			// Asignamos valores a las interrogantes
			pst.setString(1, "%" + codigo + "%");
			// Ejecutamos
			ResultSet rs = pst.executeQuery();
			while (rs.next()) {
				// Caso de exito
				Nota n = new Nota(rs.getString(1), rs.getString(2), rs.getInt(3));
				notas.add(n);
			}
			cn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return notas;
	}

	public void registrar(Nota objCli) {
		Connection cn = Conexion.obtenerConexion();
		try {
			// Definimos la sentecia
			String sentencia = "insert into Notas(codigo,nombre,promedio)" + 
			                    " values (?,?,?) ";
			PreparedStatement pst = cn.prepareStatement(sentencia);
			// Asignamos valores a las interrogantes
			pst.setString(1, objCli.getCodigo());
			pst.setString(2, objCli.getNombre());
			pst.setInt(3, objCli.getPromedio());
			// Ejecutamos
			pst.executeUpdate();
			cn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void eliminar(String codigo) {
		// Obtenemos la conexión
		Connection cn = Conexion.obtenerConexion();
		try {
			// Definimos la sentencia a ejecutar
			String sql = "DELETE FROM notas WHERE codigo = ?";
			// La preparamos
			PreparedStatement st = cn.prepareStatement(sql);
			// Asignamos valores a las interrogantes
			st.setString(1, codigo);
			// Ejecutamos la sentencia
			st.executeUpdate();
			// Cerrar la conexión
			cn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

// Clase Conexión
class Conexion {

	static {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static Connection obtenerConexion() {
		Connection con = null;
		try {
			con = DriverManager
					.getConnection("jdbc:mysql://localhost/cibercole" + 
							"?serverTimezone=UTC&useSSL=false", 
							"root", "root");
			System.out.println("Conexion a BD establecida");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return con;
	}

}

Resultado:








Extra - Usando Dialog


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class Problema2 {

	public static void main(String[] args) {
		String codigo, nombre;
		int promedio;
		do {
			String opcion = JOptionPane.showInputDialog(null, 
					"Agregar\nConsultar\nEliminar");
			try {
				if (opcion.equalsIgnoreCase("Agregar")) {
					codigo = JOptionPane.showInputDialog(null, "Ingrese el código");
					nombre = JOptionPane.showInputDialog(null, "Ingrese el nombre");
					promedio = Integer.parseInt(JOptionPane
							.showInputDialog(null, "Ingrese el promedio"));
					if (ingresar(codigo, nombre, promedio) == 1)
						JOptionPane.showMessageDialog(null, "Usuario agregado");
					else
						JOptionPane.showMessageDialog(null, "No se pudo agregar");
				} else if (opcion.equalsIgnoreCase("Consultar")) {
					codigo = JOptionPane.showInputDialog(null, "Ingrese el código");
					consultar(codigo);
				} else {
					codigo = JOptionPane.showInputDialog(null, "Ingrese el código");
					if(eliminar(codigo) == 1)
						JOptionPane.showMessageDialog(null, "Usuario eliminado");
					else
						JOptionPane.showMessageDialog(null, 
								"El usuario '" + codigo + "' no existe");
				}

			} catch (SQLException ex) {
				System.out.println(ex.getMessage());
			} catch (Exception e) {
				System.out.println("Se produjo un error inesperado: " 
						+ e.getMessage());
			}
		} while (JOptionPane.showConfirmDialog(null, "Continua....") == 0);
	}

	private static int ingresar(String codigo, String nombre, int promedio)
			throws ClassNotFoundException, SQLException {
		Connection con = Conexion.obtenerConexion();
		int rows_updated = 0;
		PreparedStatement ps = (PreparedStatement) con
				.prepareStatement("INSERT INTO notas (codigo, nombre, promedio)" + 
		                          "VALUES  (?,?,?)");
		ps.setString(1, codigo);
		ps.setString(2, nombre);
		ps.setInt(3, promedio);
		try {
			rows_updated = ps.executeUpdate();
		} catch (SQLException e) {
			rows_updated = 0;
		}
		con.close();
		return rows_updated;
	}

	private static int eliminar(String codigo) 
			throws ClassNotFoundException, SQLException {
		Connection con = Conexion.obtenerConexion();
		Statement stmt = con.createStatement();
		int rows_updated = stmt.executeUpdate(
				"DELETE FROM notas where codigo='" + codigo + "'");
		con.close();
		return rows_updated;
	}
	
	private static void consultar(String codigo) 
			throws ClassNotFoundException, SQLException {
		Connection con = Conexion.obtenerConexion();
		Statement stmt = con.createStatement();
		ResultSet rs = stmt.executeQuery("SELECT * FROM notas where codigo = '" 
							+ codigo + "'");
		if (rs.next())
			JOptionPane.showMessageDialog(null, 
					"Código  : " + rs.getString("codigo") + "\n" +
					"Nombre  : " + rs.getString("nombre") + "\n" +
					"Promedio: " + rs.getInt("promedio"));
		else
			JOptionPane.showMessageDialog(null, "El usuario '" 
					+ codigo + "' no existe");
		con.close();
	}
	
}

class Conexion {

	static {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static Connection obtenerConexion() {
		Connection con = null;
		try {
			con = DriverManager
					.getConnection("jdbc:mysql://localhost/cibercole" + 
					"?serverTimezone=UTC&useSSL=false", 
					"root", "root");
			System.out.println("Conexion a BD establecida");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return con;
	}

}


DESARROLLO TUS ALGORITMOS 🔥🔥


✅ 1. Envía tu algoritmo.
✅ 2. Indica en qué lenguaje de Programación lo deseas.
✅ 3. Para qué fecha lo quieres.
✅ 4. De que país eres (para tu forma de pago)
✅ 5. También se desarrollan al momento.
✅ 6. Los 3 primeros ejercicios son gratis.
🔸 Explico cada ejercicio que desarrollo en el código.

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!