Skip to content

Commit 91d7405

Browse files
committed
20230703A
0 parents  commit 91d7405

19 files changed

+1166
-0
lines changed

.vscode/settings.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"java.project.sourcePaths": ["src"],
3+
"java.project.outputPath": "bin",
4+
"java.project.referencedLibraries": [
5+
"lib/**/*.jar"
6+
]
7+
}

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
## Consignas de trabajo
2+
Proyecto Final - CAC Inicial 2023
3+
(Comisión 1 y 3)
4+
5+
Diseña y desarrolla un programa en Java que implemente un CRUD (Create, Read, Update, Delete) para gestionar los datos de alumnos de Codo a Codo. El programa debe utilizar la biblioteca Swing para la interfaz gráfica y almacenar los datos en un archivo de texto.
6+
7+
El programa debe tener las siguientes funcionalidades:
8+
9+
1. Crear un nuevo alumno: El usuario podrá ingresar el nombre, apellido,email, DNI y comisión del alumno a través de campos de texto en la interfaz gráfica.
10+
11+
Al seleccionar la opción "Agregar", se deberá crear un nuevo objeto Alumno con los datos ingresados y se guardarán en el archivo de texto.
12+
13+
2. Mostrar lista de alumnos: Al seleccionar una opción en un menú, se deberá mostrar la lista de alumnos existentes. Cada fila representará a un alumno y mostrará su nombre, apellido, email, DNI y comisión.
14+
15+
3. Actualizar información del alumno: El usuario podrá indicar que numero de registro quiere modificar y los datos que se modificaran. Al seleccionar la opción "Actualizar", se guardarán los cambios realizados en el archivo de texto.
16+
17+
4. Eliminar alumno: El usuario indicar que numero de registro eliminar y al seleccionar la opción "Eliminar", se eliminará el alumno del archivo de texto y se mostrara la lista de alumnos actualizada
18+
19+
5. Buscar alumno: Se proporcionará un campo de texto donde el usuario podrá ingresar el nombre o DNI de un alumno para buscarlo en la lista. Al seleccionar la opcion "Buscar", se mostrarán los alumnos que coincidan con el criterio de búsqueda.
20+
21+
Ten en cuenta que el programa debe validar la entrada de datos para asegurar que se ingresen valores válidos y proporcionar mensajes de error cuando corresponda. Además, se recomienda utilizar una estructura de datos adecuada (ArrayList) para almacenar y manipular los objetos Alumno en memoria antes de guardarlos en el archivo de texto.
22+
23+
Recuerda organizar el código en clases y métodos apropiados para mantener una estructura clara y código legible. También, considera manejar las excepciones que puedan ocurrir al leer y escribir en el archivo de texto.

alumnos.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Apellidos, Nombres, DNI, Email, Comision
2+
Juan, Lopez, 12345678, juan@gmail.com, 12345
3+
Pedro, Lee, 12345678, lee@gmail.com, 12345
4+
Ana, Garcia, 12345678, ana@gmail.com, 12345
5+
Jose, Lopez, 12345678, jose@aa.bb, 12345
6+
Ariel, Join, 78945612, andres@aa.bb, 12345
7+
Lucas, Amirlo, 45612378, lucas@aa.bb, 12345
8+
Miguel, Ann, 14725896, aa@aa.aa, 12345
9+
Gricelda, Torr, 96325874, bcvf@man.cc, 78945
10+
Lia, Fernandez, 45685236, aaa@bb.nn, 12345
11+
Pepe, Pais, 45685296, pepe@aa.bb, 12345
12+
Ana, Lee, 45636923, ana@ggg.vv, 12345

bin/Principal/Alumno.class

2 KB
Binary file not shown.

bin/Principal/ComisionValidator.class

556 Bytes
Binary file not shown.

bin/Principal/DniValidator.class

530 Bytes
Binary file not shown.

bin/Principal/EmailValidator.class

929 Bytes
Binary file not shown.

bin/Principal/GestionAlumno.class

7.92 KB
Binary file not shown.

bin/Principal/GestionArchivo.class

1.7 KB
Binary file not shown.

bin/Principal/Main copy

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
package Principal;
2+
3+
import java.io.BufferedReader;
4+
import java.io.BufferedWriter;
5+
import java.io.FileReader;
6+
import java.io.FileWriter;
7+
import java.io.IOException;
8+
import java.util.ArrayList;
9+
import java.util.Scanner;
10+
11+
import javax.swing.JOptionPane;
12+
13+
/**
14+
* Comentarios de documentación
15+
* Título del programa
16+
*
17+
* @autor: Grupo 1
18+
* @version 1.0
19+
*/
20+
21+
public class Main {
22+
// zona para variables globales, constantes, metodos
23+
//VARIABLES
24+
private static final String FILE_PATH = "alumnos.txt";
25+
26+
// MÉTODOS
27+
//método para escribir los datos ingresados por teclado en un arryList
28+
private static ArrayList<Alumno> cargarDatosScanner() {
29+
ArrayList<Alumno> listaDeAlumnos;
30+
return (null);
31+
//return listaDeAlumnos();
32+
}
33+
34+
//método para escribir en un archivo de texto
35+
public static void altaAlumno(String nombre, String apellido, int dni, String email, int comision) {
36+
try (BufferedWriter buffer = new BufferedWriter(new FileWriter(FILE_PATH, true))) {
37+
buffer.write(nombre + ", " + apellido + ", " + dni + ", "+email+", "+comision);
38+
buffer.newLine();
39+
} catch (IOException e) {
40+
System.out.println("No se pudo grabar en el archivo" + e.getMessage());
41+
}
42+
}
43+
44+
public static void main(String[] args) throws Exception {
45+
// código principal
46+
// declaración de variables
47+
Scanner teclado = new Scanner(System.in);
48+
String nombre="", apellido="", email="";
49+
int menu = 0, dni=0, comision=0;
50+
ArrayList<Alumno> listaDeAlumnos= new ArrayList<Alumno>();
51+
//listaDeAlumnos = cargarDatosScanner();
52+
53+
// menu principal de opciones
54+
while (menu != 6) {
55+
menu = Integer.parseInt(JOptionPane.showInputDialog(" MENU PRINCIPAL " + "\n" +
56+
"1.- Ingresar Alumno" + "\n" +
57+
"2.- Listar Alumno " + "\n" +
58+
"3.- Quitar Alumno " + "\n" +
59+
"4.- Modificar Alumnos " + "\n" +
60+
"5.- Buscar Alumnos " + "\n" +
61+
"6.- Salir"));
62+
63+
switch (menu) {
64+
case 1:
65+
// Sub menu ingresar alumno
66+
System.out.println("Gestion ingreso de alumno - en desarrollo");
67+
//cargar appellidos y nombres
68+
nombre = JOptionPane.showInputDialog("Ingrese el nombre del alumno");
69+
apellido = JOptionPane.showInputDialog("Ingrese el apellido del alumno");
70+
71+
//cargar y validar DNI
72+
// en este caso try + catch se usa para evitar que el programa se rompa si no se ingresan números
73+
try{
74+
dni = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el DNI del alumno"));
75+
76+
// Validacion del dni (número de 8 dígitos)
77+
DniValidator verificadorDni = new DniValidator();
78+
int digitosCuenta = 8;
79+
if (verificadorDni.validacionDni(dni, digitosCuenta)) {
80+
System.out.println("El DNI tiene la cantidad correcta de dígitos.");
81+
} else {
82+
System.out.println("El DNI no tiene la cantidad correcta de dígitos.");
83+
JOptionPane.showMessageDialog(null, "El DNI no es válido (Número de 8 dígitos)", "Error en la carga", JOptionPane.ERROR_MESSAGE);
84+
dni=Integer.parseInt(JOptionPane.showInputDialog("Ingrese nuevamente el DNI"));
85+
}
86+
}catch(NumberFormatException e){
87+
JOptionPane.showMessageDialog(null, "El DNI no es válido. Debe ingresar número de 8 dígitos", "Error en la carga", JOptionPane.ERROR_MESSAGE);
88+
dni=Integer.parseInt(JOptionPane.showInputDialog("Ingrese nuevamente el DNI"));
89+
//aquí hay un problema... si el ingreso del dni es por esta línea... no se realiza la verificación del formato de 8 dígitos...
90+
}
91+
92+
//cargar y verificar email
93+
email = JOptionPane.showInputDialog("Ingrese el correo electrónico del alumno");
94+
95+
// validación del email (formato de mail valido, texto alfanum, arroba, texto alfanum, punto, tres letras)
96+
EmailValidator validator = new EmailValidator();
97+
if (validator.validateEmail(email)) {
98+
System.out.println("La dirección de correo electrónico es válida.");
99+
} else {
100+
System.out.println("La dirección de correo electrónico no es válida.");
101+
JOptionPane.showMessageDialog(null, "El correo electrónico no es válido", "Error en la carga", JOptionPane.ERROR_MESSAGE);
102+
email = JOptionPane.showInputDialog("Ingrese nuevamente el correo electrónico del alumno");
103+
}
104+
105+
//cargar y validar comisión
106+
// en este caso try + catch se usa para evitar que el programa se rompa si no se ingresan números
107+
try{
108+
comision = Integer.parseInt(JOptionPane.showInputDialog("Ingrese la comision"));
109+
110+
// Validacion de la comision (número de 5 dígitos)
111+
ComisionValidator verificadorCom = new ComisionValidator();
112+
int digitosCuentaC = 5;
113+
114+
if (verificadorCom.validacionComision(comision, digitosCuentaC)) {
115+
System.out.println("La Comisión es correcta.");
116+
} else {
117+
System.out.println("La Comisión ingresada NO es correcta.");
118+
JOptionPane.showMessageDialog(null, "La comisión ingresada es inálida (Número de 5 dígitos)", "Error en la carga", JOptionPane.ERROR_MESSAGE);
119+
comision = Integer.parseInt(JOptionPane.showInputDialog("Ingrese nuevamente la comision"));
120+
}
121+
}catch(NumberFormatException e){
122+
JOptionPane.showMessageDialog(null, "La comisión ingresada es inválida Ingrese un número de 5 dígitos)", "Error en la carga", JOptionPane.ERROR_MESSAGE);
123+
comision=Integer.parseInt(JOptionPane.showInputDialog("Ingrese nuevamente la comisión"));
124+
//aquí hay un problema... si el ingreso de la comision es por esta línea... no se realiza la verificación del formato de 5 dígitos...
125+
}
126+
127+
//se escriben los datos ingresados en el arryList
128+
listaDeAlumnos.add(new Alumno(nombre, apellido, dni, email, comision));
129+
System.out.println(listaDeAlumnos);
130+
131+
//se vuelcan los datos ingresados en el archivo de texto
132+
altaAlumno(nombre, apellido, dni, email, comision);
133+
134+
break;
135+
case 2:
136+
// Sub menu listar alumno
137+
System.out.println("Gestion listado de alumno - en desarrollo");
138+
139+
// Leer el archivo de texto y almacenar los datos en una estructura de datos
140+
ArrayList<String> lineas = new ArrayList<>();
141+
142+
try {
143+
BufferedReader br = new BufferedReader(new FileReader("alumnos.txt"));
144+
String linea;
145+
146+
while ((linea = br.readLine()) != null) {
147+
lineas.add(linea+"\n");
148+
}
149+
150+
br.close();
151+
} catch (IOException e) {
152+
e.printStackTrace();
153+
return;
154+
}
155+
156+
System.out.println(lineas);
157+
158+
//mostrar el listado en una ventana emergente
159+
// Crear una cadena con el contenido del ArrayList
160+
StringBuilder contenido = new StringBuilder();
161+
for (String elemento : lineas) {
162+
contenido.append(elemento).append("\n");
163+
}
164+
165+
// Mostrar el contenido en una ventana emergente
166+
JOptionPane.showMessageDialog(null, contenido.toString(), "Listado de alumnos cargados", JOptionPane.INFORMATION_MESSAGE);
167+
168+
169+
break;
170+
case 3:
171+
// Sub menu quitar alumno
172+
System.out.println("Gestion quitar de alumno - en desarrollo");
173+
174+
//definición de un arrayList
175+
ArrayList<String> lineas2 = new ArrayList<>();
176+
177+
// Leer el archivo de texto y almacenar los datos en una estructura de datos dentro del arryList creado lineas2
178+
try {
179+
BufferedReader br2 = new BufferedReader(new FileReader("alumnos.txt"));
180+
String linea2;
181+
182+
while ((linea2 = br2.readLine()) != null) {
183+
lineas2.add(linea2+"\n");
184+
}
185+
186+
br2.close();
187+
} catch (IOException e) {
188+
e.printStackTrace();
189+
return;
190+
}
191+
192+
System.out.println(lineas2);
193+
194+
//mostrar el listado en una ventana emergente
195+
// Crear una cadena con el contenido del ArrayList
196+
StringBuilder contenido2 = new StringBuilder();
197+
for (String elemento2 : lineas2) {
198+
contenido2.append(elemento2).append("\n");
199+
}
200+
201+
//Ventana emergente que muestra los registros actuales del archivo de texto
202+
JOptionPane.showMessageDialog(null, "Para eliminar un registro, fíjese el número de línea que ocupa"+"\n"+contenido2.toString(), "Listado de alumnos cargados", JOptionPane.INFORMATION_MESSAGE);
203+
204+
//indicar el número de línea a eliminar
205+
int lineaE;
206+
lineaE = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el número de registro (línea) a eliminar"));
207+
208+
// Verificar si el número de línea a eliminar es válido
209+
if (lineaE >= 0 && lineaE < lineas2.size()) {
210+
// Eliminar la línea de la estructura de datos
211+
lineas2.remove(lineaE);
212+
213+
// Escribir las líneas restantes de vuelta al archivo de texto
214+
try {
215+
BufferedWriter bw2 = new BufferedWriter(new FileWriter("alumnos.txt"));
216+
217+
for (String linea : lineas2) {
218+
bw2.write(linea);
219+
//bw2.newLine();
220+
}
221+
222+
bw2.close();
223+
224+
System.out.println("La línea ha sido eliminada del archivo.");
225+
JOptionPane.showMessageDialog(null, "La l\u00EDnea ha sido eliminada del archivo.", "Acción realizada", JOptionPane.ERROR_MESSAGE);
226+
} catch (IOException e) {
227+
e.printStackTrace();
228+
}
229+
} else {
230+
System.out.println("El número de línea a eliminar es inválido.");
231+
JOptionPane.showMessageDialog(null, "El número de registro a eliminar es inválido", "Error en la carga", JOptionPane.ERROR_MESSAGE);
232+
}
233+
234+
case 4:
235+
// Sub menu modificar alumno
236+
System.out.println("Gestion modificación de alumnos - por desarrollar");
237+
System.out.println(listaDeAlumnos);
238+
break;
239+
case 5:
240+
// Sub menu buscar alumno
241+
System.out.println("Gestion búsqueda de alumno - por desarrollar");
242+
break;
243+
case 6:
244+
// Sub menú salida
245+
System.out.println("Gestion salida del menu principal- por desarrollar");
246+
break;
247+
default:
248+
System.out.println("Opción inválida.");
249+
250+
}
251+
}
252+
253+
// validación del email (formato de mail valido, texto alfanum, arroba, texto alfanum, punto, tres letras)
254+
EmailValidator validator = new EmailValidator();
255+
//email = "aaa@example.com";
256+
if (validator.validateEmail(email)) {
257+
System.out.println("La dirección de correo electrónico es válida.");
258+
} else {
259+
System.out.println("La dirección de correo electrónico no es válida.");
260+
}
261+
262+
// Validacion del dni (número de 8 dígitos)
263+
DniValidator verificadorDni = new DniValidator();
264+
//dni = 12345678;
265+
int digitosCuenta = 8;
266+
267+
if (verificadorDni.validacionDni(dni, digitosCuenta)) {
268+
System.out.println("El DNI tiene la cantidad correcta de dígitos.");
269+
} else {
270+
System.out.println("El DNI no tiene la cantidad correcta de dígitos.");
271+
}
272+
273+
// Validacion de la comision (número de 5 dígitos)
274+
ComisionValidator verificadorCom = new ComisionValidator();
275+
//comision = 12345;
276+
int digitosCuentaC = 5;
277+
278+
if (verificadorCom.validacionComision(comision, digitosCuentaC)) {
279+
System.out.println("La Comisión es correcta.");
280+
} else {
281+
System.out.println("La Comisión ingresada NO es correcta.");
282+
}
283+
284+
}
285+
286+
// nada aquí debajo
287+
}

bin/Principal/Main.class

2.07 KB
Binary file not shown.

0 commit comments

Comments
 (0)