Skip to content

Commit 23bf6da

Browse files
committed
mouredev#50 - Java
1 parent 14e6aa4 commit 23bf6da

File tree

1 file changed

+184
-0
lines changed
  • Roadmap/50 - PLANIFICADOR DE OBJETIVOS DE AÑO NUEVO/java

1 file changed

+184
-0
lines changed
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
import java.io.IOException;
2+
import java.nio.file.Files;
3+
import java.nio.file.Path;
4+
import java.nio.file.StandardOpenOption;
5+
import java.util.*;
6+
7+
public class Josegs95 {
8+
public static void main(String[] args) {
9+
new Josegs95().newYearPlanner();
10+
}
11+
12+
final private Scanner sc = new Scanner(System.in);
13+
private List<Plan> planList = new ArrayList<>();
14+
15+
public void newYearPlanner(){
16+
17+
try(sc){
18+
app:
19+
while(true){
20+
printMenu();
21+
System.out.print("Selecciona la opción que desees: ");
22+
String option = sc.nextLine();
23+
switch (option){
24+
case "1" -> createGoal();
25+
case "2" -> System.out.println(calculatePlanning());
26+
case "3" -> savePlanningInAFile();
27+
case "4" -> {
28+
System.out.println("Saliendo de la aplicación...");
29+
break app;
30+
}
31+
default -> System.out.println("Error, opción no válida.");
32+
}
33+
}
34+
}
35+
}
36+
37+
private boolean createGoal(){
38+
if (planList.size() > 10){
39+
System.out.println("Solo puedes tener 10 objetivos de forma simultánea");
40+
return false;
41+
}
42+
43+
System.out.print("Introduzca el objetivo: ");
44+
String goal = sc.nextLine();
45+
Integer amount = askIntegerToUser("Introduzca la cantidad: ");
46+
System.out.print("Introduzca las unidades: ");
47+
String unit = sc.nextLine();
48+
49+
while(true){
50+
Integer deadline = askIntegerToUser("Introduzca el plazo (en meses): ");
51+
if (deadline > 12)
52+
System.out.println("El plazo máximo permitido son 12 meses.");
53+
else
54+
return planList.add(new Plan(goal, amount, unit, deadline));
55+
}
56+
}
57+
58+
private String calculatePlanning(){
59+
String[][] planning = initPlanning();
60+
61+
for (Plan plan : planList){
62+
int amountPerMonth = plan.getAmount() / plan.getDeadline();
63+
int rest = plan.getAmount() % plan.getDeadline();
64+
months:
65+
for (int i = 0; (rest > 0 || amountPerMonth > 0) && i < plan.getDeadline(); i++){
66+
for (int j = 0; j < planning[0].length; j++){
67+
if (planning[i][j] != null)
68+
continue;
69+
70+
int amount = amountPerMonth + (rest-- > 0 ? 1 : 0);
71+
planning[i][j] = plan.getGoal() + "(" + amount + " " + plan.getUnit() +
72+
"/mes). Total: " + plan.getAmount();
73+
continue months;
74+
}
75+
}
76+
}
77+
78+
return getPlanningAsString(planning);
79+
}
80+
81+
private boolean savePlanningInAFile(){
82+
String planningString = calculatePlanning();
83+
Path filePath = Path.of("planning.txt");
84+
try {
85+
Files.writeString(filePath, planningString,
86+
StandardOpenOption.CREATE,
87+
StandardOpenOption.TRUNCATE_EXISTING);
88+
System.out.println("Planificación guardada exitosamente en: '" + filePath.toFile().getAbsolutePath() + "'");
89+
} catch (IOException e) {
90+
throw new RuntimeException(e);
91+
}
92+
93+
return true;
94+
}
95+
96+
private String[][] initPlanning(){
97+
String[][] matrix = new String[12][11];
98+
matrix[0][0] = "Enero";
99+
matrix[1][0] = "Febrero";
100+
matrix[2][0] = "Marzo";
101+
matrix[3][0] = "Abril";
102+
matrix[4][0] = "Mayo";
103+
matrix[5][0] = "Junio";
104+
matrix[6][0] = "Julio";
105+
matrix[7][0] = "Agosto";
106+
matrix[8][0] = "Septiembre";
107+
matrix[9][0] = "Octubre";
108+
matrix[10][0] = "Noviembre";
109+
matrix[11][0] = "Diciembre";
110+
111+
return matrix;
112+
}
113+
114+
private String getPlanningAsString(String[][] planning){
115+
StringBuilder sb = new StringBuilder();
116+
117+
for (int i = 0; i < planning.length; i++){
118+
sb.append(planning[i][0] + ":" + System.lineSeparator());
119+
for (int j = 1; j < planning[0].length; j++){
120+
if (planning[i][j] == null){
121+
if (j == 1)
122+
sb.append("Nada." + System.lineSeparator());
123+
break;
124+
}
125+
126+
sb.append("[ ] " + j + ". " + planning[i][j] + System.lineSeparator());
127+
}
128+
sb.append(System.lineSeparator());
129+
}
130+
131+
return sb.toString();
132+
}
133+
134+
private Integer askIntegerToUser(String message){
135+
while(true){
136+
try{
137+
System.out.print(message);
138+
Integer userInput = Integer.parseInt(sc.nextLine());
139+
return userInput;
140+
} catch (NumberFormatException e) {
141+
System.out.println("Error, debes introducir un número entero");
142+
}
143+
}
144+
}
145+
146+
private void printMenu(){
147+
System.out.println("===== Menu =====");
148+
System.out.println("1. Añadir objetivo al 'planning'");
149+
System.out.println("2. Calcular el plan detallado");
150+
System.out.println("3. Guardar la planificación");
151+
System.out.println("4. Salir de la aplicación");
152+
System.out.println("================");
153+
}
154+
155+
public class Plan{
156+
private String goal;
157+
private Integer amount;
158+
private String unit;
159+
private Integer deadline;
160+
161+
public Plan(String goal, Integer amount, String unit, Integer deadline) {
162+
this.goal = goal;
163+
this.amount = amount;
164+
this.unit = unit;
165+
this.deadline = deadline;
166+
}
167+
168+
public String getGoal() {
169+
return goal;
170+
}
171+
172+
public Integer getAmount() {
173+
return amount;
174+
}
175+
176+
public String getUnit() {
177+
return unit;
178+
}
179+
180+
public Integer getDeadline() {
181+
return deadline;
182+
}
183+
}
184+
}

0 commit comments

Comments
 (0)