diff --git a/src/main/java/org/codedifferently/cbtyson/data/Group.java b/src/main/java/org/codedifferently/cbtyson/data/Group.java index 7aeeaa5..a89b923 100644 --- a/src/main/java/org/codedifferently/cbtyson/data/Group.java +++ b/src/main/java/org/codedifferently/cbtyson/data/Group.java @@ -5,14 +5,12 @@ public class Group { String name; String groupID; - int size; ArrayList studentList; - public Group(String name, String groupID, int size, ArrayList studentList) { + public Group(String name, String groupID, ArrayList studentList) { this.name = name; this.groupID = groupID; - this.size = size; this.studentList = studentList; } @@ -27,8 +25,4 @@ public ArrayList getStudentList() { public String getGroupID() { return groupID; } - - public int getSize() { - return size; - } } diff --git a/src/main/java/org/codedifferently/cbtyson/data/GroupList.java b/src/main/java/org/codedifferently/cbtyson/data/GroupList.java index a594d4c..9562362 100644 --- a/src/main/java/org/codedifferently/cbtyson/data/GroupList.java +++ b/src/main/java/org/codedifferently/cbtyson/data/GroupList.java @@ -15,7 +15,7 @@ public static void AddGroup(Group group) { groups.add(group); } - public static void AddStudentToGroup(String groupID,Student student) { + public static boolean AddStudentToGroup(String groupID,Student student) { boolean groupFound = false; @@ -30,21 +30,74 @@ public static void AddStudentToGroup(String groupID,Student student) { System.out.println("Group not found!"); } + return groupFound; + } - public static void RemoveStudentFromGroup(String groupID, Student student) { + public static boolean RemoveStudentFromGroup(String groupID, String studentID) { boolean groupFound = false; + boolean studentFound = false; for (Group group : groups) { if(group.getGroupID().equals(groupID)) { groupFound = true; - group.getStudentList().remove(student); + for(Student student : group.getStudentList()) { + if(student.getStudentID().equals(studentID)) { + studentFound = true; + group.getStudentList().remove(student); + return true; + } + } + } } + if(!studentFound && groupFound) { + System.out.println("Student ID not found!"); + } + if(!groupFound) { - System.out.println("Group not found!"); + System.out.println("Group ID not found!"); + } + return false; + } + + public static Student GetStudentFromGroup(String groupID, String studentID) { + boolean groupFound = false; + boolean studentFound = false; + + for (Group group : groups) { + if(group.getGroupID().equals(groupID)) { + groupFound = true; + for(Student student : group.getStudentList()) { + if(student.getStudentID().equals(studentID)) { + studentFound = true; + return student; + } + } + + } + } + + if(!studentFound && groupFound) { + System.out.println("Student ID not found!"); + } + + if(!groupFound) { + System.out.println("Group ID not found!"); + } + return null; + } + + public static String GetGroupIDFromStudentID(String studentID) { + for(Group group : groups) { + for(Student student : group.getStudentList()) { + if(student.getStudentID().equals(studentID)) { + return group.getGroupID(); + } + } } + return null; } } diff --git a/src/main/java/org/codedifferently/cbtyson/data/Student.java b/src/main/java/org/codedifferently/cbtyson/data/Student.java index 4face3e..c2bb0e5 100644 --- a/src/main/java/org/codedifferently/cbtyson/data/Student.java +++ b/src/main/java/org/codedifferently/cbtyson/data/Student.java @@ -7,10 +7,10 @@ public class Student { public String email; public String studentID; public int age; - public String gpa; + public double gpa; - public Student(String firstName, String lastName, String email, String studentID, int age, String gpa) { + public Student(String firstName, String lastName, String email, String studentID, int age, double gpa) { this.firstName = firstName; this.lastName = lastName; this.email = email; @@ -35,7 +35,7 @@ public String getEmail() { return email; } - public String getGpa() { + public double getGpa() { return gpa; } diff --git a/src/main/java/org/codedifferently/cbtyson/helpers/GroupRandomizer.java b/src/main/java/org/codedifferently/cbtyson/helpers/GroupRandomizer.java index 8fb0bb6..e5b72fc 100644 --- a/src/main/java/org/codedifferently/cbtyson/helpers/GroupRandomizer.java +++ b/src/main/java/org/codedifferently/cbtyson/helpers/GroupRandomizer.java @@ -1,4 +1,85 @@ package org.codedifferently.cbtyson.helpers; +import org.codedifferently.cbtyson.data.Group; +import org.codedifferently.cbtyson.data.GroupList; +import org.codedifferently.cbtyson.data.Student; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Scanner; + + public class GroupRandomizer { + public static void randomizeStudentsIntoGroups(ArrayList allStudents, int groupSize) { + List groups = GroupList.GetGroups(); + + if (groups.isEmpty()) { + System.out.println("No groups exist. Please add groups first."); + return; + } + if (allStudents == null || allStudents.isEmpty()) { + System.out.println("No students to assign."); + return; + } + + // Clear existing students from all groups + for (Group group : groups) { + group.getStudentList().clear(); + } + + // Shuffle a copy of the student list + ArrayList shuffled = new ArrayList<>(allStudents); + Collections.shuffle(shuffled); + + // Determine how many groups we need based on desired group size + int numGroupsNeeded = (int) Math.ceil((double) shuffled.size() / groupSize); + + if (numGroupsNeeded > groups.size()) { + System.out.println("Warning: Not enough groups for group size of " + groupSize + + ". Need " + numGroupsNeeded + " but only have " + groups.size() + + ". Some groups will be larger than requested."); + } + + // Assign students round-robin across available groups + for (int i = 0; i < shuffled.size(); i++) { + int groupIndex = i % groups.size(); + groups.get(groupIndex).getStudentList().add(shuffled.get(i)); + } + + System.out.println("Students assigned! Group breakdown:"); + for (Group g : groups) { + System.out.println(" " + g.getName() + ": " + g.getStudentList().size() + " students"); + } + } + + public static void randomizeStudentsIntoGroupsInteractive(ArrayList allStudents) { + Scanner scanner = new Scanner(System.in); + System.out.print("Enter desired group size: "); + + while (!scanner.hasNextInt()) { + System.out.print("Invalid input. Enter a number: "); + scanner.next(); + } + + int groupSize = scanner.nextInt(); + + if (groupSize <= 0) { + System.out.println("Group size must be at least 1."); + return; + } + + randomizeStudentsIntoGroups(allStudents, groupSize); + } + + public static void randomizeGroups() { + ArrayList studentList = new ArrayList<>(); + + for (Group group : GroupList.GetGroups()) { + for(Student student : group.getStudentList()) { + studentList.add(student); + } + } + randomizeStudentsIntoGroupsInteractive(studentList); + } } diff --git a/src/main/java/org/codedifferently/cbtyson/helpers/InputHandler.java b/src/main/java/org/codedifferently/cbtyson/helpers/InputHandler.java index 7c24166..92529ae 100644 --- a/src/main/java/org/codedifferently/cbtyson/helpers/InputHandler.java +++ b/src/main/java/org/codedifferently/cbtyson/helpers/InputHandler.java @@ -45,25 +45,25 @@ public static String handleStringInput() { return scanInput; } - public static String handleDoubleInput() { + public static Double handleDoubleInput() { Scanner scan = new Scanner(System.in); - String scanInput = ""; + double scanInput = 0; boolean validScanInput = false; //While loop to make sure user puts in the correct input while(!validScanInput) { //Call Scanner methods try { //Scanner method to collect input - scanInput = scan.nextLine(); + scanInput = scan.nextDouble(); validScanInput = true; } catch (Exception e) { //If user enters invalid input, the catch block will prevent errors. - System.out.println("Invalid input! Try typing a valid String!"); + System.out.println("Invalid input! Try typing a valid Double!"); scan.next(); } } - return String.format(".%2f", scanInput); + return scanInput; } public static String handleYesNoInput() { diff --git a/src/main/java/org/codedifferently/cbtyson/menus/AddGroupMenu.java b/src/main/java/org/codedifferently/cbtyson/menus/AddGroupMenu.java index c17d9d0..c4333e9 100644 --- a/src/main/java/org/codedifferently/cbtyson/menus/AddGroupMenu.java +++ b/src/main/java/org/codedifferently/cbtyson/menus/AddGroupMenu.java @@ -6,6 +6,7 @@ import org.codedifferently.cbtyson.helpers.InputHandler; import java.util.ArrayList; +import java.util.List; import java.util.UUID; public class AddGroupMenu { @@ -18,14 +19,14 @@ public void promptGroupMenu() { System.out.println("Enter your Group Name:"); String name = InputHandler.handleStringInput(); - System.out.println("How big is your group? "); - int groupSize = InputHandler.handleIntegerInput(); + // System.out.println("How big is your group? "); + // int groupSize = InputHandler.handleIntegerInput(); // Generate a new UUID object String groupID = UUID.randomUUID().toString(); groupID = groupID.substring(0,6); - Group group = new Group(name, groupID, groupSize, new ArrayList()); + Group group = new Group(name, groupID, new ArrayList()); System.out.println(); @@ -39,4 +40,41 @@ public void promptGroupMenu() { } } } + + public void promptGroupMenu(Student student) { + boolean inGroupMenu = true; + boolean addedStudent = false; + + while(inGroupMenu) { + System.out.println("Enter your new Group Name:"); + String name = InputHandler.handleStringInput(); + + //System.out.println("How big is your group? "); + //int groupSize = InputHandler.handleIntegerInput(); + + // Generate a new UUID object + String groupID = UUID.randomUUID().toString(); + groupID = groupID.substring(0,6); + + //add student to studentList here, only diff in overloaded method + ArrayList studentList = new ArrayList<>(); + if(!addedStudent) studentList.add(student); + addedStudent = true; + + Group group = new Group(name, groupID, studentList); + + System.out.println(); + + //Add new Group to List + GroupList.AddGroup(group); + System.out.println("The " + group.getName() + " has been made! ID: " + group.getGroupID()); + + System.out.println("Continue adding groups? (y/n)"); + System.out.println("==================================="); + String answer = InputHandler.handleYesNoInput(); + if(answer.equals("n")) { + inGroupMenu = false; + } + } + } } diff --git a/src/main/java/org/codedifferently/cbtyson/menus/AddStudentMenu.java b/src/main/java/org/codedifferently/cbtyson/menus/AddStudentMenu.java index d521e5f..4058707 100644 --- a/src/main/java/org/codedifferently/cbtyson/menus/AddStudentMenu.java +++ b/src/main/java/org/codedifferently/cbtyson/menus/AddStudentMenu.java @@ -34,7 +34,7 @@ public void promptAddStudentMenu() { int age = InputHandler.handleIntegerInput(); System.out.println("Enter their GPA: "); - String gpa = InputHandler.handleDoubleInput(); + double gpa = InputHandler.handleDoubleInput(); // Generate a new UUID object String studentID = UUID.randomUUID().toString(); @@ -42,16 +42,36 @@ public void promptAddStudentMenu() { Student student = new Student(firstName, lastName, email, studentID, age, gpa); - System.out.println(); - System.out.println("Which group is this new student going to?"); - System.out.println("Enter the Group ID here:"); - //Actually add student to group - String groupID = InputHandler.handleStringInput(); - GroupList.AddStudentToGroup(groupID, student); + boolean studentAddedToGroup = false; + + while(!studentAddedToGroup) { + System.out.println(); + System.out.println("Which group is this new student going to?"); + System.out.println("Enter the Group ID here:"); + + //Actually add student to group + String groupID = InputHandler.handleStringInput(); + boolean hasAddedStudent = GroupList.AddStudentToGroup(groupID, student); + + + if(!hasAddedStudent) { + System.out.println("What you like to create a new Group to add this student to? (y/n)"); + System.out.println("============================================================="); + String answerStr = InputHandler.handleYesNoInput(); + if (answerStr.equals("y")) { + AddGroupMenu addGroupMenu = new AddGroupMenu(); + addGroupMenu.promptGroupMenu(student); + studentAddedToGroup = true; + } + } + else { + studentAddedToGroup = true; + } + } System.out.println(); - System.out.println("Make another one? (y/n)"); + System.out.println("Continue adding students? (y/n)"); System.out.println("========================================="); String answerStr = InputHandler.handleYesNoInput(); diff --git a/src/main/java/org/codedifferently/cbtyson/menus/MainMenu.java b/src/main/java/org/codedifferently/cbtyson/menus/MainMenu.java index 0dd604d..12d7d5e 100644 --- a/src/main/java/org/codedifferently/cbtyson/menus/MainMenu.java +++ b/src/main/java/org/codedifferently/cbtyson/menus/MainMenu.java @@ -3,6 +3,7 @@ import org.codedifferently.cbtyson.data.Group; import org.codedifferently.cbtyson.data.GroupList; import org.codedifferently.cbtyson.data.Student; +import org.codedifferently.cbtyson.helpers.GroupRandomizer; import org.codedifferently.cbtyson.helpers.InputHandler; import java.util.ArrayList; @@ -33,8 +34,10 @@ public void promptMainMenu() { System.out.println("1. Add new Student"); System.out.println("2. Generate Group"); System.out.println("3. View Students/Groups"); - System.out.println("4. Remove Students from Group"); - System.out.println("5. Exit"); + System.out.println("4. Move Students across Groups."); + System.out.println("5. Remove Students from Group"); + System.out.println("6. Randomize Groups"); + System.out.println("7. Exit"); int inputCode = InputHandler.handleIntegerInput(); @@ -50,10 +53,17 @@ public void promptMainMenu() { viewMenu.viewGroups(); break; case 4: + MoveStudentMenu moveMenu = new MoveStudentMenu(); + moveMenu.moveGroups(); + break; + case 5: RemoveMenu removeMenu = new RemoveMenu(); removeMenu.removeStudentFromGroup(); break; - case 5: + case 6: + GroupRandomizer.randomizeGroups(); + break; + case 7: System.out.println("Have a Nice Day!"); inMainMenu = false; break; @@ -64,10 +74,10 @@ public void promptMainMenu() { //generates students, and adds them to a group. then adds them into the static groupList field. void generateDefaultStudents() { //Make new students - Student glenn = new Student("Glenn", "Tyson", "mrtyson@gmail.com", "31d13d31", 29, "3.6"); - Student chris = new Student("Chris", "Bennett", "cbswag@gmail.com", "1920vfvw", 30, "2.0"); - Student alex = new Student("Alex", "Trunzo", "vanyllagodzylla@gmail.com", "120-1f1f", 22, "4.0"); - Student bobby = new Student("Bobby", "Money", "bigmoney@gmail.com", "19911-wfwefwe", 25, "3.56"); + Student glenn = new Student("Glenn", "Tyson", "mrtyson@gmail.com", "31d13de", 29, 3.6); + Student chris = new Student("Chris", "Bennett", "cbswag@gmail.com", "1920vfa", 30, 2.0); + Student alex = new Student("Alex", "Trunzo", "vanyllagodzylla@gmail.com", "120-1fd", 22, 4.0); + Student bobby = new Student("Bobby", "Money", "bigmoney@gmail.com", "19911-f", 25, 3.56); //List of students added to arrayList ArrayList students1 = new ArrayList<>(); @@ -76,7 +86,7 @@ void generateDefaultStudents() { students1.add(alex); students1.add(bobby); - Group group = new Group("Vanylla Godzylla Band", "90121jofrv", 4, students1); + Group group = new Group("Vanylla Godzylla Band", "90121j", students1); //Add group GroupList.AddGroup(group); diff --git a/src/main/java/org/codedifferently/cbtyson/menus/MoveStudentMenu.java b/src/main/java/org/codedifferently/cbtyson/menus/MoveStudentMenu.java index 0e011bd..2f556ae 100644 --- a/src/main/java/org/codedifferently/cbtyson/menus/MoveStudentMenu.java +++ b/src/main/java/org/codedifferently/cbtyson/menus/MoveStudentMenu.java @@ -1,4 +1,42 @@ package org.codedifferently.cbtyson.menus; +import org.codedifferently.cbtyson.data.Group; +import org.codedifferently.cbtyson.data.GroupList; +import org.codedifferently.cbtyson.data.Student; +import org.codedifferently.cbtyson.helpers.InputHandler; + public class MoveStudentMenu { + + public void moveGroups() { + + System.out.println("Enter Student ID to move:"); + System.out.println("============================="); + + String studentID = InputHandler.handleStringInput(); + + System.out.println("Enter Group ID to move into:"); + String groupID = InputHandler.handleStringInput(); + + + //Get old GroupID that student used to be in + String oldGroupID = GroupList.GetGroupIDFromStudentID(studentID); + + //Get reference to student to be moved. + Student movedStudent = GroupList.GetStudentFromGroup(oldGroupID, studentID); + + //Remove them from old group + boolean removeResult = GroupList.RemoveStudentFromGroup(oldGroupID, studentID); + + if(removeResult) { + //Then add them to new group if remove was successful + boolean result = GroupList.AddStudentToGroup(groupID, movedStudent); + + if(result) System.out.println("Moved Students successfully!"); + } + else { + System.out.println("Removing student from previous group has failed!!"); + } + + } + } diff --git a/src/main/java/org/codedifferently/cbtyson/menus/ViewMenu.java b/src/main/java/org/codedifferently/cbtyson/menus/ViewMenu.java index f5e198a..e5f604f 100644 --- a/src/main/java/org/codedifferently/cbtyson/menus/ViewMenu.java +++ b/src/main/java/org/codedifferently/cbtyson/menus/ViewMenu.java @@ -3,6 +3,7 @@ import org.codedifferently.cbtyson.data.Group; import org.codedifferently.cbtyson.data.GroupList; import org.codedifferently.cbtyson.data.Student; +import org.codedifferently.cbtyson.helpers.InputHandler; public class ViewMenu { @@ -27,5 +28,8 @@ public void viewGroups() { System.out.println("=================================="); System.out.println(); } + System.out.println("Press anything to continue"); + System.out.println("=============================="); + InputHandler.handleStringInput(); } } \ No newline at end of file