Netbeans - Un sistema de registro de carros entrantes a un parqueo

 
Vista:

Un sistema de registro de carros entrantes a un parqueo

Publicado por Stacy (2 intervenciones) el 11/04/2023 07:15:13
Hola, me podrian ayudar con esto, crear un sistema de registro de carros entrantes a un parqueo, que registre la placa, dueño, hora de entrada, hora de salida, monto pagado, fecha, esto debe ser serializado y se debe permitir deserializar para su consulta.


Yo ya tengo todo pero no me compila, me ayudan a saber que fue el error por favor

public static void main(String[] args) throws IOException, FileNotFoundException, ClassNotFoundException {



Tiquetederegistro Tiquetederegistroactual = new Tiquetederegistro();

Scanner lectordeTeclado = new Scanner(System.in);
System.out.println("Escriba el nombre del Tiquete de Registro");
String nombredelTiquetederegistro = lectordeTeclado.next();
lectordeTeclado.nextLine();
Tiquetederegistroactual.AgregarTiquetederegistro(Tiquetederegistro);
System.out.println("Escriba la fecha del tiquete");
String fechadelTiquetederegistro = lectordeTeclado.next();
lectordeTeclado.nextLine();
Tiquetederegistroactual.Agregarfecha(fechadelTiquetederegistro);
while (true)
{
System.out.println("Escriba el numero de placa");
String placa = lectordeTeclado.next();
System.out.println("Escriba el nombre del dueño");
String nombredeldueño = lectordeTeclado.next();

System.out.println("Escriba el apellido del dueño");
String apellidodeldueño = lectordeTeclado.next();

System.out.println("Escriba el numero de cedula del dueño");
String numerodeceduladueño = lectordeTeclado.next();

Vehiculo vehiculo = new Vehiculo();
Vehiculo.RellenarVehiculo(placa,nombredueño,apellidodueño,numerodeceduladueño);

Tiquetederegistroactual.AgregarVehiculo(vehiculo);
System.out.println("Desea agregar otro Vehiculo? Escriba S o N");
String deseaseguir = lectordeTeclado.next();
if("N".equals(deseaseguir))
{
break;
}
}
Tiquetederegistroactual.guardaelTiquetederegistroactual();
System.out.println("Escriba el nombre del tiquete de registro que se encuentra guardado que desea cargar");
String nombredelTiquetederegistroguardada = lectordeTeclado.next();
lectordeTeclado.nextLine();

System.out.println("Escriba la fecha del Tiquete guardado que desea cargar");
String fechadelTiquetederegistroguardada = lectordeTeclado.next();
Vehiculo Tiquetederegistrocargadadearchivo = new Vehiculo();
Tiquetederegistrocargadadearchivo.AgregarTiquetederegistro(nombredelTiquetederegistroguardada);
Tiquetederegistrocargadadearchivo.Agregarfecha(fechadelTiquetederegistroguardada);
Tiquetederegistro Tiquetederegistrodesdeelarchivo = new Tiquetederegistro();
Tiquetederegistrodesdeelarchivo = Tiquetederegistrocargadadearchivo.cargarTiquetederegistro();
System.out.println(Tiquetederegistrodesdeelarchivo.DevuelvedatosdelTiquetederegistro());



}
}




Clases


public class Vehiculo {

//Elabore un proyecto en NetBeans en el lenguaje Java para crear un sistema de registro de carros entrantes a un parqueo, que registre la placa,
//dueño, hora de entrada, hora de salida, monto pagado, fecha, esto debe ser serializado y se debe permitir deserializar para su consulta.

private String placa;
private String nombredueño;
private String apellidodueño;
private String numerodeceduladueño;

public void Agregarnombredueño(String clase)
{
this.nombredueño = nombredueño;
}
public void Agregarplaca(String placa)
{
this.placa = placa;
}
public void Agregarapellidodueño(String apellidodueño)

{
this.apellidodueño=apellidodueño;

}
public String Agregarnumerodeceduladueño(String numerodeceduladueño)

{
this.numerodeceduladueño=numerodeceduladueño;

{
return this.nombredueño +" "+ this.apellidodueño+ " "+ this.numerodeceduladueño+" "+this.placa;

}

}


}




public class Tiquetederegistro {

private String entrada;
private String salida;
private int monto;
private String fecha;
private ArrayList<Vehiculo> Vehiculo = new ArrayList<Vehiculo>();


public void rellenarTiquetederegistro(

String entrada,
String salida,
int monto,
String fecha
)
{
this.entrada=entrada;
this.salida=salida;
this.monto=monto;
this.fecha=fecha;

/**
*
* @param vehiculo
*/
public void agregavehiculo(vehiculo vehiculo)
{
this.Vehiculo.add(vehiculo);
}
public String devuelvalafecha()
{
return this.fecha;

}
public String devuelvalaentrada()
{
return this.entrada;

}
public String devuelvalasalida()
{
return this.salida;

}
public int devuelvaelmonto()
{
return this.monto;

}
public String muestradatosdelTiquetederegistro();


{

String datosadevolver = "";

datosadevolver = this.Vehiculo + " " + this. \n";" + "
for(Tiquetederegistro Tiquete : this.AgregarTiquetederegistro(Tiquete)) {
datosadevolver + = "" + Tiquetederegistro.muestradatosdelTiquete() + "\n";
}

return datosadevolver;
}

public void guardarelTiquetederegistro() throws FileNotFoundException, IOException



{
FileOutputStream fileOut = new FileOutputStream(this.Vehiculo + this.fecha +this.entrada+this.salida+this.monto+ ".txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);

out.writeObject(this);

out.close();

fileOut.close();


}

public Vehiculo cargarVehiculo() throws FileNotFoundException, IOException, ClassNotFoundException
{

FileInputStream fileIn = new FileInputStream(this.clase + this.fecha + ".txt");
ObjectInputStream in = new ObjectInputStream(fileIn);
Asistencia obj = (Asistencia)in.readObject();
in.close();
fileIn.close();
return obj;

}

void AgregarVehiculo(Vehiculo vehiculo) {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}



}



Cualquier comentario lo agradezco
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 12
Ha aumentado su posición en 13 puestos en Netbeans (en relación al último mes)
Gráfica de Netbeans

Un sistema de registro de carros entrantes a un parqueo

Publicado por Kabuto (17 intervenciones) el 12/04/2023 00:36:20
En la clase Vehiculo hay que corregir este método, ya que el nombre del argumento no es correcto:
1
2
3
4
public void Agregarnombredueño(String clase)
	{
		this.nombredueño = nombredueño;
	}

Ha de quedar así:
1
2
3
4
public void Agregarnombredueño(String nombredueño)
	{
		this.nombredueño = nombredueño;
	}

Luego, en la clase Tiquetederegistro, hay numerosos fallos:

Tras declarar los atributos, declaras el método rellenarTiquetederegistro() y dentro de él, declaras el resto de métodos, lo cuál no es válido y es la razón principal de que no compile.
De hecho, eso no debería ser un método, si no un constructor.

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
public class Tiquetederegistro {
 
	private String entrada;
	private String salida;
	private int monto;
	private String fecha;
	private ArrayList<Vehiculo> Vehiculo = new ArrayList<Vehiculo>();
 
 
	public void rellenarTiquetederegistro(String entrada,String salida,	int monto,String fecha)
	{
		this.entrada=entrada;
		this.salida=salida;
		this.monto=monto;
		this.fecha=fecha;
 
		/**
		 *
		 * @param vehiculo
		 */
		public void agregavehiculo(vehiculo vehiculo)
		{
			this.Vehiculo.add(vehiculo);
		}
		public String devuelvalafecha()


Luego hay un método con un ; al final de su cabecera, otro error de sintaxis.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public String muestradatosdelTiquetederegistro();
 
 
		{
 
			String datosadevolver = "";
 
			datosadevolver = this.Vehiculo + " " + this. \n";" + "
					for(Tiquetederegistro Tiquete : this.AgregarTiquetederegistro(Tiquete)) {
						datosadevolver + = "" + Tiquetederegistro.muestradatosdelTiquete() + "\n";
					}
 
			return datosadevolver;
		}

Igualmente, dentro de ese método se está intentando crear un String imposible de compilar.
No se a que piensas que estás referenciando con this.Vehiculo, pero es que aunque fuese una referencia válida, no puedes concatenarla con un String.
Y lo que hay entre los paréntesis del for()..., ¿pero qué es?...
1
for(Tiquetederegistro Tiquete : this.AgregarTiquetederegistro(Tiquete))


Y por aquí se usa una tal clase Asistencia, que no está declarada en ninguna parte..
Y "this.clase" tampoco existe.
1
2
3
4
5
6
7
8
9
10
11
public Vehiculo cargarVehiculo() throws FileNotFoundException, IOException, ClassNotFoundException
		{
 
			FileInputStream fileIn = new FileInputStream(this.clase + this.fecha + ".txt");
			ObjectInputStream in = new ObjectInputStream(fileIn);
			Asistencia obj = (Asistencia)in.readObject();
			in.close();
			fileIn.close();
			return obj;
 
		}

Bueno, y más cosas, que al final es mejor reescribirlo desde el principio.
De hecho, yo le daría otro enfoque.

La clase Vehiculo podría estar bien, pero en realidad no es esta la entidad que necesitamos gestionar.
Lo que interesa, no son los carros en sí, si no el Registro de entradas y salidas de carros.


Yo crearía una clase llamada Registro, con los datos que nos interesan.
Imprescindible que esta clase implemente la interfaz Serializable, de lo contrario, no será posible serializar los datos para guardarlos en disco.
Serializar significa que los datos se van a guardar en forma de bytes. Tal cuál están en la RAM, se copiaran al disco.
Es decir, no se va a crear un archivo de texto (.txt). Se creará un archivo con datos binarios, podemos poner la extensión que queramos, pero lo habitual es usar .bin o .dat

Esta sería la clase Registro
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
import java.io.Serializable;
 
public class Registro implements Serializable {
 
	private String placa;
	private String nombreCliente;
	private String horaEntrada;
	private String horaSalida;
	private double montoPagado;
	private String fecha;
 
	public Registro(String placa, String nombreCliente, String horaEntrada, String horaSalida, double montoPagado,
			String fecha) {
		this.placa = placa;
		this.nombreCliente = nombreCliente;
		this.horaEntrada = horaEntrada;
		this.horaSalida = horaSalida;
		this.montoPagado = montoPagado;
		this.fecha = fecha;
	}
 
	public String getPlaca() {
		return placa;
	}
 
	public void setPlaca(String placa) {
		this.placa = placa;
	}
 
	public String getNombreCliente() {
		return nombreCliente;
	}
 
	public void setNombreCliente(String nombreCliente) {
		this.nombreCliente = nombreCliente;
	}
 
	public String getHoraEntrada() {
		return horaEntrada;
	}
 
	public void setHoraEntrada(String horaEntrada) {
		this.horaEntrada = horaEntrada;
	}
 
	public String getHoraSalida() {
		return horaSalida;
	}
 
	public void setHoraSalida(String horaSalida) {
		this.horaSalida = horaSalida;
	}
 
	public double getMontoPagado() {
		return montoPagado;
	}
 
	public void setMontoPagado(double montoPagado) {
		this.montoPagado = montoPagado;
	}
 
	public String getFecha() {
		return fecha;
	}
 
	public void setFecha(String fecha) {
		this.fecha = fecha;
	}
 
	public void mostrarRegistro() {
		System.out.printf("Placa: %s\tDueño: %s\n", placa, nombreCliente);
		System.out.printf("Entrada: %s\tSalida: %s\n", horaEntrada, horaSalida);
		System.out.printf("Monto: %.2f\tFecha: %s\n", montoPagado, fecha);
	}
 
}

Luego, podemos hacer otra clase que se encargue de gestionar estos registros.
Tendrá que poder acumular registros en un ArrayList y guardarlos en disco. También tendrá que recuperarlos, es decir, lo primero que ha de hacer al comenzar el programa es comprobar si ya existen datos guardados en disco de una sesión anterior.
Si existen, con dichos datos tendrá que recomponer el ArrayList.
Si no existen, pues el ArrayList comenzará vacío.

Este proceso de recuperación de datos y decidir como se va a inicalizar el ArrayList, lo podemos hacer en su constructor.

A parte de esto, necesitará tres métodos más:
Uno simplemente para recibir un registro y guardarlo en el ArrayList.
Otro para listar los registros almacenados.
Y otro para guardar en disco los datos cada vez que se haga un nuevo registro.

Esta podría ser la clase GestionRegistros
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
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
 
public class GestionRegistros {
 
	private final File DATOS_DISCO = new File("d:/datos.bin");
	private ArrayList<Registro> registros;
 
	@SuppressWarnings("unchecked")
	public GestionRegistros() {
 
		//Comprobamos si existen datos guardados en disco
		System.out.println("Buscando datos en disco...");
 
		if (DATOS_DISCO.exists()) {
			//Existen, intentamos recuperarlos
			try {
				ObjectInputStream entrada = new ObjectInputStream(new FileInputStream(DATOS_DISCO));
				registros = (ArrayList<Registro>) entrada.readObject();
				System.out.println("Datos en disco recuperados. Total registros: " + registros.size());
				entrada.close();
			} catch (Exception e) {
				System.out.println("ERROR intentando recuperar datos: " + e.getMessage());
				System.out.println("El programa iniciará con un registro nuevo.");
				registros = new ArrayList<Registro>();
			}
		}
		else {
			System.out.println("No hay datos guardados. Se creará un registro nuevo.");
			registros = new ArrayList<Registro>();
		}
 
	}
 
	public void nuevoRegistro(Registro reg) {
		registros.add(reg);
		guardarDatos();
	}
 
	public void listarRegistros() {
		if (registros.isEmpty())
			System.out.println("No hay Registros guardados.");
		else {
			for (Registro reg: registros) {
				System.out.println("\n\t**********************************");
				reg.mostrarRegistro();
				System.out.println("\t**********************************");
			}
			System.out.println("\nTotal registros: " + registros.size());
		}
	}
 
	public void guardarDatos() {
		try {
			ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream(DATOS_DISCO));
			salida.writeObject(registros);
			salida.close();
		} catch (Exception e) {
			System.out.println("ERROR intentando guardar datos: " + e.getMessage());
			System.out.println("El ultimo Registro realizado no se ha podido almacenar en disco.");
		}
	}
 
}

Por último, un main para poner en marcha el programa.
Inicializaremos un objeto GestionRegistros y mostraremos un menú simple para elegir entre crear registros y listar los ya almacenados.
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
import java.util.Scanner;
 
public class Parking {
 
	private static GestionRegistros gr = new GestionRegistros();
	private static Scanner teclado = new Scanner(System.in);
 
	public static void main(String[] args) {
 
		int opcion = 0;
		do {
			System.out.println("\n\n\t\tREGISTRO PARKING");
			System.out.println("\t\t-------- -------\n");
			System.out.println("(1) --- Crear nuevo Registro");
			System.out.println("(2) --- Listar Registros");
			System.out.println("(9) --- TERMINAR PROGRAMA");
			System.out.printf("Elija: ");
			opcion = Integer.parseInt(teclado.nextLine());
			switch(opcion) {
			case 1:
				crearRegistro();
				break;
			case 2:
				listarRegistros();
				break;
			case 9:
				System.out.println("\n\t\tFIN DE PROGRAMA");
				break;
			default:
				System.out.println("Opcion equivocada");
			}
		} while(opcion != 9);
 
	}
 
	private static void crearRegistro() {
		//Pedimos datos
		System.out.println("\n\tNUEVO REGISTRO");
		System.out.print("Placa del vehiculo: ");
		String placa = teclado.nextLine();
		System.out.print("Nombre del dueño: ");
		String nombre = teclado.nextLine();
		System.out.print("Hora entrada: ");
		String entrada = teclado.nextLine();
		System.out.print("Hora salida: ");
		String salida = teclado.nextLine();
		System.out.print("Monto pagado: ");
		double monto = Double.parseDouble(teclado.nextLine());
		System.out.print("Fecha: ");
		String fecha = teclado.nextLine();
 
		//Creamos nuevo registro
		gr.nuevoRegistro(new Registro(placa, nombre, entrada, salida, monto, fecha));
	}
 
	private static void listarRegistros() {
		System.out.println("\n\t\tLISTADO DE REGISTROS");
		gr.listarRegistros();
	}
 
}

Y con esto ya podemos crear registros, serializarlos en disco y que persistan para luego recuperarlos en las siguientes sesiones.

Pruébalo y pregunta si algo no se ha entendido bien.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un sistema de registro de carros entrantes a un parqueo

Publicado por Stacy (2 intervenciones) el 13/04/2023 03:02:18
Muchas gracias por su ayuda, me quedo muy claro el proceso que hiciste y me funcionó.Le agradezco mucho!




Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar