diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..61069b7a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea/* \ No newline at end of file diff --git a/homework-java/pom.xml b/homework-java/pom.xml new file mode 100644 index 00000000..55057c41 --- /dev/null +++ b/homework-java/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + com.example + homework-java + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + org.junit.jupiter + junit-jupiter-engine + 5.9.2 + + + org.junit.jupiter + junit-jupiter-api + 5.9.2 + + + + + + \ No newline at end of file diff --git a/homework-java/src/main/java/com/example/CommandHandler.java b/homework-java/src/main/java/com/example/CommandHandler.java new file mode 100644 index 00000000..93fa441f --- /dev/null +++ b/homework-java/src/main/java/com/example/CommandHandler.java @@ -0,0 +1,182 @@ +package com.example; +import java.util.*; + +public class CommandHandler { + private List students; + private List teachers; + private List courses; + + public CommandHandler(List students, List courses, List teachers) { + this.students = students; + this.courses = courses; + this.teachers = teachers; + } + + public void executeCommand(String wholeCommand){ + String[] commandPart = wholeCommand.split(" "); + String command = commandPart[0]; + switch (command){ + case "ENROLL": + enrollStudent(commandPart[1],commandPart[2]); + break; + case "ASSIGN": + assignTeacher(commandPart[1],commandPart[2]); + break; + case "SHOW": + System.out.println(command); + handleShow(commandPart); + break; + case "LOOKUP": + lookUp(commandPart); + break; + } + } + + public Student findStudentById(String student_id){ + Student student = null; + for(Student s: students){ + if(s.getStudentId().equals(student_id)){ + student = s; + return student; + } + } + return null; + } + + public Course findCourseById(String course_id){ + Course course = null; + for(Course c: courses){ + if(c.getCourseId().equals(course_id)){ + course = c; + return course; + } + } + return null; + } + + public Teacher findTeacherById(String teacher_id){ + Teacher teacher = null; + for(Teacher t: teachers){ + if(t.getTeacherId().equals(teacher_id)){ + teacher = t; + return teacher; + } + } + return null; + } + + private void lookUp(String[] commandPart) { + switch (commandPart[1]){ + case "COURSE": + Course course = findCourseById(commandPart[2]); + if (course != null) + System.out.println(course.toString()); + else + System.out.println("Course not found."); + break; + case "STUDENT": + Student student = findStudentById(commandPart[2]); + if (student != null) + System.out.println(student.toString()); + else + System.out.println("Student not found."); + break; + case "TEACHER": + Teacher teacher = findTeacherById(commandPart[2]); + if (teacher != null) + System.out.println(teacher.toString()); + else + System.out.println("Teacher not found."); + break; + } + } + + private void enrollStudent(String student_id, String course_id) { + Student student = findStudentById(student_id); + Course course = findCourseById(course_id); + + if (student != null && course!= null) { + student.setCourse(course); + updateMoneyEarned(course); + System.out.println(student.toString()); + } else { + System.out.println("Couldn't assign the course"); + } + + } + + public void assignTeacher(String teacher_id, String course_id){ + Teacher teacher = findTeacherById(teacher_id); + Course course = findCourseById(course_id); + + if (teacher != null && course!=null){ + course.setTeacher(teacher); + System.out.println(course.toString()); + }else { + System.out.println("Couldn't assign the course"); + } + } + + private void updateMoneyEarned(Course course){ + double total = course.getMoney_earned() + course.getPrice(); + course.setMoney_earned(total); + } + + private void handleShow(String[] command) { + System.out.println(Arrays.toString(command) + "del handle"); + switch (command[1]){ + case "COURSES": + showCourses(); + break; + case "STUDENTS": + showStudents(); + break; + case "TEACHERS": + showTeachers(); + break; + case "PROFIT": + showProfit(); + break; + } + } + + private void showStudents() { + System.out.println("llego a show students"); + StringBuilder studentsString = new StringBuilder(); + for (Student student: students){ + studentsString.append(student.toString()).append("\n"); + } + System.out.println("Student usando el toString() es:"); + System.out.println(studentsString); + } + + private void showTeachers() { + StringBuilder teachersString = new StringBuilder(); + for (Teacher teacher: teachers){ + teachersString.append(teacher.toString()).append("\n"); + } + System.out.println(teachersString); + } + + private void showProfit() { + double totalEarned = courses.stream().mapToDouble(Course::getMoney_earned).sum(); + double totalSalaries = teachers.stream().mapToDouble(Teacher::getSalary).sum(); + + System.out.println("===== FINANCIAL REPORT ====="); + System.out.println("Total income from courses: $" + totalEarned); + System.out.println("Total expenses (teachers' salaries): $" + totalSalaries); + System.out.println("------------------------------"); + System.out.printf("Net profit: $%.2f%n", (totalEarned - totalSalaries)); + System.out.println("=============================="); + } + + private void showCourses() { + StringBuilder coursesString = new StringBuilder(); + for (Course course: courses){ + coursesString.append(course.toString()).append("\n"); + } + System.out.println(coursesString); + } + + +} diff --git a/homework-java/src/main/java/com/example/Course.java b/homework-java/src/main/java/com/example/Course.java new file mode 100644 index 00000000..a5a6354a --- /dev/null +++ b/homework-java/src/main/java/com/example/Course.java @@ -0,0 +1,96 @@ +package com.example; + +import java.util.HashSet; +import java.util.Random; +import java.util.Set; +import java.util.UUID; + +public class Course { + private static final Set usedIds = new HashSet<>(); + + private String courseId; + private String name; + private double price; + private double money_earned; + private Teacher teacher; + + //constructor de name y price + public Course(String name, double price) { + this.courseId = generateUniqueCourseId(); + this.name = name; + this.price = price; + } + //Constructor vacio para UUID + + public Course() { + this.courseId = UUID.randomUUID().toString(); + } + + private String generateUniqueCourseId() { + String id; + Random random = new Random(); + do { + int number = random.nextInt(900) + 100; + id = "C" + number; + } while (usedIds.contains(id)); + + usedIds.add(id); + return id; + } + + //getters y setters + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public String getCourseId() { + return courseId; + } + + public void setCourseId(String courseId) { + this.courseId = courseId; + } + + public double getMoney_earned() { + return money_earned; + } + + public void setMoney_earned(double money_earned) { + this.money_earned = money_earned; + } + + public Teacher getTeacher() { + return teacher; + } + + public void setTeacher(Teacher teacher) { + this.teacher = teacher; + } + + + @Override + public String toString() { + return String.format( + "πŸ“š Course Info:\n" + + "πŸ”’ ID : %s\n" + + "πŸ“– Name : %s\n" + + "πŸ’΅ Price : $%.2f\n" + + "πŸ’° Money Earned : $%.2f\n" + + "πŸ‘¨β€πŸ« Teacher : %s", + courseId, name, price, money_earned, teacher + ); + } +} diff --git a/homework-java/src/main/java/com/example/Main.java b/homework-java/src/main/java/com/example/Main.java new file mode 100644 index 00000000..182805d1 --- /dev/null +++ b/homework-java/src/main/java/com/example/Main.java @@ -0,0 +1,10 @@ +package com.example; + +//TIP To Run code, press or +// click the icon in the gutter. +public class Main { + public static void main(String[] args) { + +//comentario + } +} \ No newline at end of file diff --git a/homework-java/src/main/java/com/example/Menu.java b/homework-java/src/main/java/com/example/Menu.java new file mode 100644 index 00000000..72dacc77 --- /dev/null +++ b/homework-java/src/main/java/com/example/Menu.java @@ -0,0 +1,148 @@ +package com.example; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class Menu { + private School school; + + public static void main(String[] args) { + + + Scanner myScanner = new Scanner(System.in); + System.out.println("Please, enter a name for the new school: "); + String schoolName = myScanner.nextLine(); + var school = new School(schoolName); + + + System.out.println("Now, we need some teachers for your school " + schoolName + ". How wany teachers should be created? Please enter a number."); + int numberOfTeachers = Integer.parseInt(myScanner.nextLine()); + + for (int i = 0; i < numberOfTeachers; i++) { + System.out.println("\nEnter the details for teacher " + (i+1)); + + System.out.println("Name: "); + String name = myScanner.nextLine(); + + System.out.println("Salary: "); + double salary = Double.parseDouble(myScanner.nextLine()); + + Teacher teacher = new Teacher(name, salary); + school.addTeacher(teacher); + + System.out.println("Teacher " + (i+1) + " added."); + } + System.out.println(numberOfTeachers + "teachers created for " + schoolName); + + System.out.println("Now, we need some courses. How wany should be created? Please enter a number."); + int numberOfCourses = Integer.parseInt(myScanner.nextLine()); + + for (int i = 0; i < numberOfCourses; i++) { + System.out.println("\nEnter the details for course " + (i+1)); + + System.out.println("Name: "); + String name = myScanner.nextLine(); + + System.out.println("Price: "); + double price = Double.parseDouble(myScanner.nextLine()); + + Course course = new Course(name, price); + school.addCourse(course); + + System.out.println("Course " + i + " added."); + } + System.out.println(numberOfCourses + "courses created for " + schoolName); + + System.out.println("Let's create the students. How many should be created? Please enter a number."); + int numberOfStudents = Integer.parseInt(myScanner.nextLine()); + + for (int i = 0; i < numberOfStudents; i++) { + System.out.println("\nEnter the details for student " + (i+1)); + + System.out.println("Name: "); + String name = myScanner.nextLine(); + + System.out.println("Address: "); + String address = myScanner.nextLine(); + + System.out.println("Email: "); + String email = myScanner.nextLine(); + + Student student = new Student(name, address, email); + school.addStudent(student); + + System.out.println("Student " + (i+1) + " added."); + } + System.out.println(numberOfStudents + "students created for " + schoolName); + + //comandos + boolean continueRunning = true; + while (continueRunning) { + System.out.println("Enter a command from the next list: \n ENROLL [STUDENT_ID] [COURSE_ID] \n ASSIGN [TEACHER_ID] [COURSE_ID] \n SHOW COURSES \n LOOKUP COURSE [COURSE_ID] \n SHOW STUDENTS \n LOOKUP STUDENT [STUDENT_ID] \n SHOW TEACHERS \n LOOKUP TEACHER [TEACHER_ID] \n SHOW PROFIT "); + var input = myScanner.nextLine(); + + CommandHandler commandHandler = new CommandHandler (school.getStudents(), school.getCourses(), school.getTeachers()); + commandHandler.executeCommand(input); + /* + + String[] parts = input.split(" "); + + if (parts[0].equalsIgnoreCase("ENROLL") && parts.length == 3) { + CommandHandler.enrollStudent(parts[1], parts[2]); + } else if (parts[0].equalsIgnoreCase("ENROLL")) { + System.out.println("ENROLL command needs to follow this format: ENROLL [STUDENT_ID] [COURSE_ID]"); + } + + if (parts[0].equalsIgnoreCase("ASSIGN") && parts.length == 3) { + // commandHandler.??(parts[1], parts[2]); + } else if (parts[0].equalsIgnoreCase("ASSIGN")) { + System.out.println("ENROLL command needs to follow this format: [TEACHER_ID] [COURSE_ID]"); + } + + if (parts[0].equalsIgnoreCase("SHOW") && parts.length == 2 && parts[1].equalsIgnoreCase("COURSES")) { + CommandHandler.handleShow(); + } + + if (parts[0].equalsIgnoreCase("LOOKUP") && parts[1].equalsIgnoreCase("COURSE") && parts.length == 3) { + commandHandler.findCourseById(parts[2]); + } else if (parts[0].equalsIgnoreCase("LOOKUP") && parts[1].equalsIgnoreCase("COURSE")) { + System.out.println("LOOKUP COURSE command needs to follow this format: LOOKUP COURSE [COURSE_ID]"); + } + + if (parts[0].equalsIgnoreCase("SHOW") && parts.length == 2 && parts[1].equalsIgnoreCase("STUDENTS")) { + CommandHandler.showStudents(); + } + + if (parts[0].equalsIgnoreCase("LOOKUP") && parts[1].equalsIgnoreCase("STUDENT") && parts.length == 3) { + commandHandler.findStudentById(parts[2]); + } else if (parts[0].equalsIgnoreCase("LOOKUP") && parts[1].equalsIgnoreCase("STUDENT")) { + System.out.println("LOOKUP STUDENT command needs to follow this format: LOOKUP STUDENT [STUDENT_ID]"); + } + + if (parts[0].equalsIgnoreCase("SHOW") && parts.length == 2 && parts[1].equalsIgnoreCase("TEACHERS")) { + //commandHandler.enrollStudent(); + } + + if (parts[0].equalsIgnoreCase("LOOKUP") && parts[1].equalsIgnoreCase("TEACHER") && parts.length == 3) { + //commandHandler.enrollStudent(parts[2]); + } else if (parts[0].equalsIgnoreCase("LOOKUP") && parts[1].equalsIgnoreCase("TEACHER")) { + System.out.println("LOOKUP TEACHER command needs to follow this format: LOOKUP TEACHER [TEACHER_ID]"); + } + + if (parts[0].equalsIgnoreCase("SHOW") && parts.length == 2 && parts[1].equalsIgnoreCase("PROFIT")) { + //commandHandler.enrollStudent(); + } */ + + + System.out.println("Do you want to perform another action? (yes/no)"); + String response = myScanner.nextLine().trim().toLowerCase(); + if (!response.equals("yes")) { + continueRunning = false; + System.out.println("Thank you for using the School Manager. Goodbye!"); + } + + + } + } +} \ No newline at end of file diff --git a/homework-java/src/main/java/com/example/School.java b/homework-java/src/main/java/com/example/School.java new file mode 100644 index 00000000..928c05a5 --- /dev/null +++ b/homework-java/src/main/java/com/example/School.java @@ -0,0 +1,69 @@ +package com.example; +import java.util.ArrayList; +import java.util.List; + +public class School { + private String name; + private List teachers; + private List students; + private List courses; + + public School(String name) { + this.name = name; + this.teachers = new ArrayList<>(); + this.students = new ArrayList<>(); + this.courses = new ArrayList<>(); + } + public void addTeacher (Teacher teacher){ + teachers.add(teacher); + } + public List getTeachers () { + return teachers; + } + + /*public void showTeachers() { + if (teachers.isEmpty()) { + System.out.println("No teachers have been added yet."); + } else { + System.out.println("\n Teachers at " + name + ":"); + for (int i = 0; i < teachers.size(); i++) { + System.out.println(" #" + (i + 1) + " - " + teachers.get(i)); + } + } + }*/ + public void addCourse (Course course){ + courses.add(course); + } + public List getCourses () { + return courses; + } + + /*public void showCourses() { + if (courses.isEmpty()) { + System.out.println("No courses have been added yet."); + } else { + System.out.println("\n Courses at " + name + ":"); + for (int i = 0; i < courses.size(); i++) { + System.out.println(" #" + (i + 1) + " - " + courses.get(i)); + } + } + }*/ + public void addStudent (Student student){ + students.add(student); + } + public List getStudents () { + return students; + } + /* + public void showStudents() { + if (students.isEmpty()) { + System.out.println("No students have been added yet."); + } else { + System.out.println("\n Students at " + name + ":"); + for (int i = 0; i < students.size(); i++) { + System.out.println(" #" + (i + 1) + " - " + students.get(i)); + } + } + }*/ +} + diff --git a/homework-java/src/main/java/com/example/Student.java b/homework-java/src/main/java/com/example/Student.java new file mode 100644 index 00000000..03717972 --- /dev/null +++ b/homework-java/src/main/java/com/example/Student.java @@ -0,0 +1,90 @@ +package com.example; +import java.util.HashSet; +import java.util.Random; +import java.util.Set; +import java.util.UUID; + +public class Student { + private static final Set usedIds = new HashSet<>(); + + private final String studentId; + private String name; + private String address; + private String email; + private Course course; + + public Student(String name,String address,String email) { + this.studentId = generateUniqueStudentId(); + this.name = name; + this.address = address; + this.email = email; + this.course = null; + } + + public Student(){ + this.studentId = generateUniqueStudentId(); + } + + private String generateUniqueStudentId() { + String id; + Random random = new Random(); + do { + int number = random.nextInt(900) + 100; + id = "S" + number; + } while (usedIds.contains(id)); + + usedIds.add(id); + return id; + } + + public String getStudentId() { + return studentId; + } + + public Course getCourse() { + return course; + } + + public void setCourse(Course course) { + this.course = course; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getName() { + return name; + } + + public void setName(String name) { + if (!name.matches("[a-zA-ZΓ‘Γ©Γ­Γ³ΓΊΓΓ‰ΓΓ“ΓšΓ±Γ‘ ]+")) { + throw new IllegalArgumentException("El nombre no puede contener nΓΊmeros ni caracteres especiales."); + } + this.name = name; + } + + @Override + public String toString() { + return "\nπŸ“˜ Student Info\n" + + "------------------------\n" + + "πŸ†” ID : " + studentId + "\n" + + "πŸ‘€ Name : " + name + "\n" + + "🏠 Address : " + address + "\n" + + "πŸ“§ Email : " + email + "\n" + + "πŸ“š Course : " + (course != null ? getCourse().getName() : "Not enrolled") + "\n"; + } +} + diff --git a/homework-java/src/main/java/com/example/Teacher.java b/homework-java/src/main/java/com/example/Teacher.java new file mode 100644 index 00000000..cf69ab04 --- /dev/null +++ b/homework-java/src/main/java/com/example/Teacher.java @@ -0,0 +1,62 @@ +package com.example; + +import java.util.*; + +public class Teacher { + private String teacherId; + private String name; + private double salary; + + + public Teacher (String name, double salary) { + this.teacherId = generateUniqueTeacherId(); + setName(name); + setSalary(salary); + } + public Teacher(){ + this.teacherId = generateUniqueTeacherId(); + } + private static final Set usedIds = new HashSet<>(); + private String generateUniqueTeacherId() { + String id; + Random random = new Random(); + do { + int number = random.nextInt(900) + 100; // genera nΓΊmero entre 100 y 999 + id = "S" + number; + } while (usedIds.contains(id)); + + usedIds.add(id); + return id; + } + + public String getTeacherId() { + return teacherId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public String toString() { + return String.format( + "πŸ‘¨β€πŸ« Teacher Info:\n" + + "πŸ“› Name : %s\n" + + "πŸ†” ID : %s\n" + + "πŸ’° Salary : $%.2f", + name, teacherId, salary + ); + } +} diff --git a/homework-java/src/test/java/CommandHandlerTest.java b/homework-java/src/test/java/CommandHandlerTest.java new file mode 100644 index 00000000..26f525cb --- /dev/null +++ b/homework-java/src/test/java/CommandHandlerTest.java @@ -0,0 +1,33 @@ + +import com.example.CommandHandler; +import com.example.Course; +import com.example.Student; +import com.example.Teacher; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class CommandHandlerTest { + @Test + public void testEnrollStudentUpdatesStudentAndCourse(){ + + Student student = new Student("Studiant Diez", "Calle Su casa 12", "mail@mail"); + Course course = new Course("Ethics", 20.00); + + var studentList = List.of(student); + var courseList = List.of(course); + List teacherList = List.of(); + + CommandHandler commandHandler = new CommandHandler(studentList, courseList, teacherList); + + String commandWithIds = "ENROLL "+ student.getStudentId()+ " " + course.getCourseId(); + System.out.println(commandWithIds); + + commandHandler.executeCommand(commandWithIds); + + assertEquals("Ethics", student.getCourse().getName()); + + } +} diff --git a/homework-java/target/classes/com/example/CommandHandler.class b/homework-java/target/classes/com/example/CommandHandler.class new file mode 100644 index 00000000..384c9d1a Binary files /dev/null and b/homework-java/target/classes/com/example/CommandHandler.class differ diff --git a/homework-java/target/classes/com/example/Course.class b/homework-java/target/classes/com/example/Course.class new file mode 100644 index 00000000..bfef26dc Binary files /dev/null and b/homework-java/target/classes/com/example/Course.class differ diff --git a/homework-java/target/classes/com/example/Main.class b/homework-java/target/classes/com/example/Main.class new file mode 100644 index 00000000..3f9a731f Binary files /dev/null and b/homework-java/target/classes/com/example/Main.class differ diff --git a/homework-java/target/classes/com/example/Menu.class b/homework-java/target/classes/com/example/Menu.class new file mode 100644 index 00000000..ee4459a4 Binary files /dev/null and b/homework-java/target/classes/com/example/Menu.class differ diff --git a/homework-java/target/classes/com/example/School.class b/homework-java/target/classes/com/example/School.class new file mode 100644 index 00000000..ff606244 Binary files /dev/null and b/homework-java/target/classes/com/example/School.class differ diff --git a/homework-java/target/classes/com/example/Student.class b/homework-java/target/classes/com/example/Student.class new file mode 100644 index 00000000..075e98b2 Binary files /dev/null and b/homework-java/target/classes/com/example/Student.class differ diff --git a/homework-java/target/classes/com/example/Teacher.class b/homework-java/target/classes/com/example/Teacher.class new file mode 100644 index 00000000..9f924855 Binary files /dev/null and b/homework-java/target/classes/com/example/Teacher.class differ diff --git a/homework-java/target/test-classes/CommandHandlerTest.class b/homework-java/target/test-classes/CommandHandlerTest.class new file mode 100644 index 00000000..64a6bcf5 Binary files /dev/null and b/homework-java/target/test-classes/CommandHandlerTest.class differ