Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: 0916 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 )
-
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.
-
Hola, esto es lo que llevo, pero no sé cómo dar de baja a alguien de los que ya he agregado.
package proyectofinal;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
public class ProyectoFinal {
public static void main(String[] args) {
File archivo;
FileWriter escribir;
PrintWriter linea;
String nombre = "", control = "";
archivo = new File("Proyecto.txt");
if (!archivo.exists()) {
try {
archivo.createNewFile();
nombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
"Solicitando datos", 3);
control = JOptionPane.showInputDialog(null, "Ingresa el control",
"Solicitando datos", 3);
escribir = new FileWriter(archivo, true);
linea = new PrintWriter(escribir);
linea.println(nombre);
linea.println(control);
linea.close();
escribir.close();
} catch (IOException ex) {
Logger.getLogger(ProyectoFinal.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
try {
nombre = JOptionPane.showInputDialog(null, "Ingresa el nombre",
"Solicitando datos", 3);
control = JOptionPane.showInputDialog(null, "Ingresa el control",
"Solicitando datos", 3);
escribir = new FileWriter(archivo, true);
linea = new PrintWriter(escribir);
linea.println(nombre);
linea.println(control);
linea.close();
escribir.close();
} catch (IOException ex) {
Logger.getLogger(ProyectoFinal.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
-
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.
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;
}
}