Autor Tema: Ayuda  (Leído 231 veces)

0916

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Ayuda
« en: 12 de Junio 2021, 21:46 »
Hola a todos estoy comenzando en este mundo ;)
este es un proyecto que tengo que hacer pero ando bien perdido  :-\
podrían ayudarme por favor.

Codifica y realiza un sistema  que contenga lo siguiente :
Que realice Altas, Bajás, Consultas ( utilizando Archivo de Textos )
« Última modificación: 12 de Junio 2021, 21:49 por 0916 »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 680
    • Ver Perfil
Re: Ayuda
« Respuesta #1 en: 12 de Junio 2021, 23:50 »
Hola.

Altas y Bajas... ¿de qué? ¿Clientes? ¿Productos? ¿Estudiantes? ¿Libros?...

En cualquier caso, yo comenzaría haciéndolo sin guardar en ficheros de texto, esta funcionalidad la añadiría al final, cuando ya se tuviera un programa funcionando con su menú y tal..

Comienza tú un código, llega hasta donde puedas y te ayudamos a completar.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

0916

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re: Ayuda
« Respuesta #2 en: 23 de Junio 2021, 23:14 »
esto es lo que llevo pero no se como dar de baja a alguien de los que ya e agregado

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 680
    • Ver Perfil
Re: Ayuda
« Respuesta #3 en: 24 de Junio 2021, 13:21 »
Para dar de baja, no podemos borrar directamente en el archivo. Hay que leer su contenido obviando lo que queremos "borrar" y luego volver a escribirlo todo, ya sin el dato que se ha de dar de baja.

Por otra parte, en este programa se requiere un menú de opciones y recomiendo usar métodos para cada acción, uno para escribir las altas, otro para hacer las bajas y otro para las consultas.

Te dejo una posible solución, con un menú mediante JOptionPane.
Hay comentarios explicando, pero pregunta cualquier cosa que no entiendas.
Un saludo.

Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

import javax.swing.JOptionPane;

public class ProyectoFinal {

public static void main(String[] args) {

final String[] OPCIONES = new String[] {"Alta", "Baja", "Consulta", "SALIR"};
int opcion = 0;

do {
opcion = JOptionPane.showOptionDialog(null, "Elija opcion:", "Menu Registro",
opcion, JOptionPane.QUESTION_MESSAGE, null, OPCIONES, null);

switch(opcion) {
case 0:
String nuevoNombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
                        "Solicitando datos", JOptionPane.QUESTION_MESSAGE);
String nuevoControl = JOptionPane.showInputDialog(null, "Ingresa el control",
                        "Solicitando datos", JOptionPane.QUESTION_MESSAGE);
alta(nuevoNombre, nuevoControl);
break;
case 1:
String borrarNombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
                        "Dar de baja", JOptionPane.QUESTION_MESSAGE);
baja(borrarNombre);
break;
case 2:
String consultaNombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
                        "Consultar", JOptionPane.QUESTION_MESSAGE);
String consulta = consulta(consultaNombre);
if (consulta == null)
JOptionPane.showMessageDialog(null, "No hay registro con ese nombre", "Consultar",
JOptionPane.WARNING_MESSAGE);
else
JOptionPane.showMessageDialog(null, "Datos encontrados:\n" + consulta, "Consultar",
JOptionPane.INFORMATION_MESSAGE);
break;
case 3:
JOptionPane.showMessageDialog(null, "FIN DE PROGRAMA", "Salir",
JOptionPane.INFORMATION_MESSAGE);
}
}while (opcion != 3);


}

private static void alta(String nombre, String control) {

try {
BufferedWriter escritor = new BufferedWriter(new FileWriter("proyecto.txt", true));
escritor.write(nombre + " -- " + control); //Escribimos nueva linea con los datos
escritor.newLine();
escritor.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Nueva Alta",
JOptionPane.WARNING_MESSAGE);
}
}

private static void baja(String nombre) {
/*
* Para dar de baja no podemos borrar directamente del archivo.
* Hay que leer todos los datos, excepto la línea a dar de baja y
* volver a escribir el resto.
*/
StringBuilder datosLeidos = new StringBuilder(); //Aquí almacenaremos las líneas leídas
try {
BufferedReader lector = new BufferedReader(new FileReader("proyecto.txt"));
String linea = lector.readLine(); //Leemos primera línea
while (linea != null) { //Mientras hayan líneas para leer...
if (!linea.startsWith(nombre)) //Si NO es la linea que queremos dar de baja
datosLeidos.append(linea + "\n"); //La guardamos

linea = lector.readLine(); //Leemos siguiente línea
}
lector.close();

//Ya hemos leído todos los datos excepto el que queremos dar de baja.
//Volvemos a volcarlos en el archivo de texto
BufferedWriter escritor = new BufferedWriter(new FileWriter("proyecto.txt", false));
escritor.write(datosLeidos.toString());
escritor.close();
//Proceso de baja terminado.
JOptionPane.showMessageDialog(null, "Registro Actualizado", "Baja",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Baja",
JOptionPane.WARNING_MESSAGE);
}
}

private static String consulta(String nombre) {
/*
* Para consultar buscamos por nombre en el archivo de texto
* y retornamos la línea de datos que corresponde
*/
try {
BufferedReader lector = new BufferedReader(new FileReader("proyecto.txt"));
String linea = lector.readLine();
while (linea != null) {
if (linea.startsWith(nombre)) { //Nombre encontrado, no hay que seguir buscando
lector.close(); //Cerramos lector
return linea; //Retornamos línea encontrada.
}
else //Si no, seguimos consultando líneas.
linea = lector.readLine();
}
lector.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Consulta",
JOptionPane.WARNING_MESSAGE);
}

//Si durante la lectura no se ha retornado la línea buscada,
//es que no existe el nombre que se busca. Retornamos null.
return null;
}

}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".