Main.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import java.util.Scanner;
  2. import java.util.Map;
  3. import java.util.HashMap;
  4. class Main {
  5. // Atributos que pertenecen a la clase y
  6. // no a las instancias individuales de los objetos.
  7. private static Scanner scanner = new Scanner(System.in);
  8. private static Map<Integer, Student> studentsMap = new HashMap<>();
  9. public static void main(String[] args) {
  10. int option = 0;
  11. do {
  12. displayMenu();
  13. System.out.print("Selecciona una opción: ");
  14. option = scanner.nextInt();
  15. scanner.nextLine(); // Limpia el buffer del scanner.
  16. switch (option) {
  17. case 1:
  18. addStudent();
  19. break;
  20. case 2:
  21. removeStudent();
  22. break;
  23. case 3:
  24. listStudents();
  25. break;
  26. case 4:
  27. filterStudentsByName();
  28. break;
  29. case 5:
  30. modifyStudent();
  31. break;
  32. case 6:
  33. filterStudentsByLetterA();
  34. break;
  35. case 7:
  36. System.out.println("Saliendo del programa!!");
  37. break;
  38. default:
  39. System.out.println("Opción no válida!!");
  40. }
  41. } while (option != 7);
  42. scanner.close();
  43. }
  44. // Muestra el menú de opciones.
  45. private static void displayMenu() {
  46. System.out.println("\n---- Menú de opciones ----");
  47. System.out.println("1. Agregar Estudiante");
  48. System.out.println("2. Eliminar Estudiante");
  49. System.out.println("3. Listar Estudiantes");
  50. System.out.println("4. Filtrar Estudiantes por Nombre");
  51. System.out.println("5. Modificar Estudiante");
  52. System.out.println("6. Filtrar Estudiantes por Nombre con letra 'A' o 'a'");
  53. System.out.println("7. Salir");
  54. }
  55. // Agrega un nuevo estudiante al mapa.
  56. private static void addStudent() {
  57. String name = "", dni = "";
  58. // Captura el nombre del nuevo estudiante.
  59. do {
  60. System.out.print("Ingresa el nombre del estudiante: ");
  61. name = scanner.nextLine();
  62. // Valida que el nombre sea único.
  63. if (! containsStudentByName(name)) break;
  64. System.out.println("El nombre del estudiante ya se encuentra registrado!!");
  65. } while (true);
  66. // Captura el DNI del nuevo estudiante.
  67. do {
  68. System.out.print("Ingresa el DNI del estudiante: ");
  69. dni = scanner.nextLine();
  70. // Valida que el DNI sea único.
  71. if (! containsStudentByDni(dni)) break;
  72. System.out.println("El DNI del estudiante ya se encuentra registrado!!");
  73. } while (true);
  74. int studentId = generateUniqueId();
  75. // Almacena la información del nuevo estudiante.
  76. studentsMap.put(studentId, new Student(studentId, name, dni));
  77. System.out.println("La información del estudiante se registró correctamente!!");
  78. }
  79. // Elimina un estudiante registrado utilizando su ID.
  80. private static void removeStudent() {
  81. System.out.print("Ingresa el ID del estudiante: ");
  82. int studentIdToRemove = scanner.nextInt();
  83. scanner.nextLine(); // Limpia el buffer.
  84. // Valida si el estudiante se encuentra en el mapa.
  85. if (studentsMap.containsKey(studentIdToRemove)) {
  86. Student removedStudent = studentsMap.remove(studentIdToRemove);
  87. System.out.println("El estudiante se ha eliminado correctamente!!\n" + removedStudent);
  88. } else {
  89. System.out.println("No se encuentra el estudiante que deseas eliminar!!");
  90. }
  91. }
  92. // Muestra todos los estudiantes registrados.
  93. private static void listStudents() {
  94. studentsMap.values().forEach(System.out::println);
  95. }
  96. // Filtra el mapa de estudiantes por nombre.
  97. private static void filterStudentsByName() {
  98. System.out.print("Ingresa el parámetro de búsqueda por nombre: ");
  99. String filterSearch = scanner.nextLine();
  100. for (Student student : studentsMap.values()) {
  101. if (student.getName().equalsIgnoreCase(filterSearch)) {
  102. System.out.println(student);
  103. }
  104. }
  105. }
  106. // Modifica la información del estudiante desde su ID.
  107. private static void modifyStudent() {
  108. System.out.print("Ingresa el ID del estudiante a modificar: ");
  109. int studentIdToModify = scanner.nextInt();
  110. scanner.nextLine(); // Limpia el buffer
  111. // Valida si el estudiante se encuentra en el mapa.
  112. if (! studentsMap.containsKey(studentIdToModify)) {
  113. System.out.println("No se encuentra el estudiante que deseas modificar!!");
  114. return;
  115. }
  116. String newName = "", newDni = "";
  117. // Captura el nuevo nombre del estudiante.
  118. do {
  119. System.out.print("Ingresa el nuevo nombre del estudiante: ");
  120. newName = scanner.nextLine();
  121. // Valida que el nombre sea único.
  122. if (! containsStudentByName(newName)) break;
  123. System.out.println("El nombre del estudiante ya se encuentra registrado!!");
  124. } while(true);
  125. // Captura el nuevo DNI del estudiante.
  126. do {
  127. System.out.print("Ingresa el nuevo DNI del estudiante: ");
  128. newDni = scanner.nextLine();
  129. // Valida que el DNI sea único.
  130. if (! containsStudentByDni(newDni)) break;
  131. System.out.println("El DNI del estudiante ya se encuentra registrado!!");
  132. } while(true);
  133. // Modifica la información del estudiante.
  134. studentsMap.put(studentIdToModify, new Student(studentIdToModify, newName, newDni));
  135. System.out.println("El estudiante se ha modificado correctamente!!");
  136. }
  137. // Filtra el mapa de estudiantes por nombre con letra "A" o "a".
  138. private static void filterStudentsByLetterA() {
  139. System.out.println("=> Estudiantes filtrados por nombre que contienen 'A' o 'a'");
  140. for (Student student : studentsMap.values()) {
  141. if (student.getName().toLowerCase().contains("a")) {
  142. System.out.println(student);
  143. }
  144. }
  145. }
  146. // Valida si el nombre del estudiante existe en el mapa.
  147. private static boolean containsStudentByName(String name) {
  148. return studentsMap.values().stream()
  149. .anyMatch(student -> student.getName().equalsIgnoreCase(name));
  150. }
  151. // Valida si el DNI del estudiante existe en el mapa.
  152. private static boolean containsStudentByDni(String dni) {
  153. return studentsMap.values().stream()
  154. .anyMatch(student -> student.getDni().equals(dni));
  155. }
  156. // Genera un ID único para el estudiante.
  157. private static int generateUniqueId() {
  158. return studentsMap.size() + 1;
  159. }
  160. }