-
Notifications
You must be signed in to change notification settings - Fork 0
/
P8.java
135 lines (97 loc) · 4.64 KB
/
P8.java
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
package P8;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Scanner;
public class P8 {
// Variables para almacenar la lista de coches y el parking
static CarDB cdb;
static Parking miParking;
public static void main(String[] args) throws FileNotFoundException {
// Se comprueba si hay cinco argumentos de entrada (los nombres de los ficheros)
if (args.length != 7) {
System.out.println(
"Uso correcto: P8 <fichero_parking> <fichero_entradas_salidas> <fichero_parking_actualizado> <fichero_coches_ciudad> <fichero_lista_coches> <fichero_dibujo_parking> <fichero_ingresos>");
return; // Se cierra el programa en caso de argumentos incorrectos
}
// Se crea una objeto CarDB para almacenar los coches
cdb = new CarDB();
// Se leen y se almacenan los coches a partir del fichero con los coches de la
// ciudad
cdb.readCityCarsFile("P8/" + args[3]);
// Se crea el parking a partir del fichero del parking
miParking = new Parking("P8/" + args[0]);
// Se actualiza el parking a partir del fichero de entradas/salidas
processIO("P8/" + args[1]);
// Se guarda el parking en el fichero indicado por el tercer argumento de
// entrada
miParking.saveParking("P8/" + args[2]);
// Se ordena la colección de coches por su matrícula
cdb.sortByBatteryChargeAndPlate();
// Se guarda la colección de coches en el fichero indicado por el quinto
// argumento de entrada
cdb.saveCarsToFile("P8/" + args[4]);
// Se crea un objeto File para guardar el mapa del parking
File archivo = new File("P8/" + args[5]);
// Se crea el archivo
PrintWriter fichero = new PrintWriter(archivo);
// Se imprime el mapa en el archivo
fichero.println(miParking.toMap());
// Se cierra el PrintWriter
fichero.close();
miParking.savePayments("P8/" + args[6]);
}
// Método que actualiza el parking según un fichero de entradas/salidas
public static void processIO(String filename) throws FileNotFoundException {
// Se crea un objeto File con el nombre del fichero
File archivo = new File(filename);
// Se comprueba si el fichero existe
if (!archivo.exists()) {
System.out.println("No existe tal fichero");
return; // Se termina el programa en caso de no haber fichero
}
// Se crea un objeto Scanner para leer el archivo
Scanner input = new Scanner(archivo);
// Se lee línea por línea
while (input.hasNext()) {
String linea = input.nextLine();
// Si la línea empieza por '#', se considera un comentario y se ignora
if (linea.startsWith("#")) {
continue;
}
// Se separa la línea por donde había un ';'
String[] partes = linea.split(";");
// Se busca el coche en la lista
Car car = cdb.getCarFromPlate(partes[1]);
// Si es una entrada, se almacena el coche en el parking
if (partes[0].equals("I")) {
boolean chargerRequired = partes[3].equals("Y");
miParking.carEntry(car, partes[2], chargerRequired);
// Si es una salida, se elimina el coche del parking y se actualiza su nivel de
// batería en caso de ser eléctrico o híbrido
} else {
HashSet<CarSpace> busyCarSpaces = miParking.getBusyCarSpaces();
String entryTime = "";
float consumedEnergy = 0;
for (CarSpace carSpace : busyCarSpaces) {
if (carSpace.getPlate().equals(partes[1])) {
if (carSpace instanceof ElectricCarSpace) {
boolean chargerConnected = ((ElectricCarSpace) carSpace).getCharger().getConnected();
entryTime = miParking.carDeparture(partes[1]);
if (chargerConnected) {
consumedEnergy = cdb.increaseCarBatteryChargeLevel(partes[1], entryTime, partes[2]);
}
} else {
entryTime = miParking.carDeparture(partes[1]);
}
break;
}
}
miParking.registerPayment(partes[1], entryTime, partes[2], consumedEnergy);
}
}
// Se cierra el Scanner
input.close();
}
}