diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..a590144 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..4158879 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..eba6e1f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/dev/Main.java b/src/main/java/dev/Main.java index 19ca657..c9acf98 100644 --- a/src/main/java/dev/Main.java +++ b/src/main/java/dev/Main.java @@ -4,19 +4,19 @@ import dev.service.StudentManager; import dev.thread.StudentLoader; import dev.utils.FileManager; +import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { - public static void main(String[] args) throws Exception { - + public static void main(String[] args) throws Exception + { Scanner scanner = new Scanner(System.in); - StudentManager manager = new StudentManager(); - while (true) { - + while (true) + { System.out.println(""" 1.Load students 2.Search student @@ -27,73 +27,73 @@ public class Main { int choice = scanner.nextInt(); - switch (choice) { - - case 1 -> { - + switch (choice) + { + case 1 -> + { List data = FileManager.loadStudents("students.txt"); - // TODO: + if (data.isEmpty()) + { + System.out.println("No data found in file."); + break; + } - // Split data into 3 parts + // TODO: Split data into 3 parts + int totalSize = data.size(); + int chunkSize = (int) Math.ceil(totalSize / 3.0); - List part1 = null; + List part1 = data.subList(0, Math.min(chunkSize, totalSize)); + List part2 = data.subList(Math.min(chunkSize, totalSize), Math.min(2 * chunkSize, totalSize)); + List part3 = data.subList(Math.min(2 * chunkSize, totalSize), totalSize); - List part2 = null; + StudentLoader t1 = new StudentLoader(part1); + StudentLoader t2 = new StudentLoader(part2); + StudentLoader t3 = new StudentLoader(part3); - List part3 = null; + t1.start(); + t2.start(); + t3.start(); - // TODO: + t1.join(); + t2.join(); + t3.join(); - StudentLoader t1 = null; - - StudentLoader t2 = null; - - StudentLoader t3 = null; - - // TODO: - - // start() - - // join() - - // merge results + manager.addStudents(t1.getStudents()); + manager.addStudents(t2.getStudents()); + manager.addStudents(t3.getStudents()); + System.out.println("Students loaded successfully using 3 threads."); } - case 2 -> { - + case 2 -> + { System.out.print("ID: "); - int id = scanner.nextInt(); - - System.out.println(manager.searchStudent(id)); - + var student = manager.searchStudent(id); + if (student != null) + { + System.out.println("Found: " + student); + } + else + { + System.out.println("Student not found."); + } } - case 3 -> { - + case 3 -> + { System.out.print("ID: "); - int id = scanner.nextInt(); - boolean removed = manager.removeStudent(id); - - System.out.println(removed); - + System.out.println("Removed: " + removed); } case 4 -> manager.printStudents(); - case 5 -> { - return; - } - + case 5 -> {return;} } - } - } - } \ No newline at end of file diff --git a/src/main/java/dev/model/Student.java b/src/main/java/dev/model/Student.java index f0484f4..65ad4b4 100644 --- a/src/main/java/dev/model/Student.java +++ b/src/main/java/dev/model/Student.java @@ -1,13 +1,10 @@ package dev.model; -public class Student { - +public class Student +{ private final int id; - private final String name; - private final String major; - private final double gpa; public Student( @@ -39,37 +36,22 @@ public class Student { } @Override - public int hashCode() { + public int hashCode() {return id % 97;} - // TODO: - // Return custom hash + @Override + public boolean equals(Object obj) + { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; - // Example: - // return id % 97; + Student other = (Student) obj; - return 0; + return this.id == other.id; } @Override - public boolean equals(Object obj) { - - // TODO: - - // Step 1: - // Check null - - // Step 2: - // Convert obj to Student - - // Step 3: - // Compare IDs - - return false; - } - - @Override - public String toString() { - + public String toString() + { return "Student{" + "id=" + id + ", name='" + name + '\'' + @@ -77,5 +59,4 @@ public class Student { ", gpa=" + gpa + '}'; } - } \ No newline at end of file diff --git a/src/main/java/dev/service/StudentManager.java b/src/main/java/dev/service/StudentManager.java index 403a1c6..baa6bb4 100644 --- a/src/main/java/dev/service/StudentManager.java +++ b/src/main/java/dev/service/StudentManager.java @@ -1,55 +1,53 @@ package dev.service; import dev.model.Student; - import java.util.ArrayList; - -public class StudentManager { - +public class StudentManager +{ private final ArrayList students = new ArrayList<>(); - public void addStudents(ArrayList newStudents) { - - // TODO: - - // Merge students - - // Hint: - // addAll() - + public void addStudents(ArrayList newStudents) + { + students.addAll(newStudents); } - public Student searchStudent(int id) { - - // TODO: - - // Loop through students - - // Compare IDs - + public Student searchStudent(int id) + { + for (Student student : students) + { + if (student.getId() == id) {return student;} + } return null; } - public boolean removeStudent(int id) { + public boolean removeStudent(int id) + { + Student foundStudent = null; - // TODO: + for (Student student : students) + { + if (student.getId() == id) + { + foundStudent = student; + break; + } + } - // Find student - - // Remove student + if (foundStudent != null) + { + students.remove(foundStudent); + return true; + } return false; } - public void printStudents() { - - for (Student student : students) { - + public void printStudents() + { + for (Student student : students) + { System.out.println(student); - } - } - } \ No newline at end of file diff --git a/src/main/java/dev/thread/StudentLoader.java b/src/main/java/dev/thread/StudentLoader.java index ab47522..287f1f8 100644 --- a/src/main/java/dev/thread/StudentLoader.java +++ b/src/main/java/dev/thread/StudentLoader.java @@ -1,59 +1,51 @@ package dev.thread; - - import dev.model.Student; - import java.util.ArrayList; import java.util.List; -public class StudentLoader extends Thread { - +public class StudentLoader extends Thread +{ // Assigned file lines - private final List lines; // Local student storage - private final ArrayList students = new ArrayList<>(); - public StudentLoader(List lines) { - - this.lines = lines; - } + public StudentLoader(List lines) {this.lines = lines;} @Override - public void run() { + public void run() + { + for (String line : lines) + { + if (line == null || line.trim().isEmpty()) {continue;} - // TODO: + String[] parts = line.split(","); - /* - Example line: + if (parts.length == 4) + { + try + { + int id = Integer.parseInt(parts[0].trim()); + String name = parts[1].trim(); + String major = parts[2].trim(); + double gpa = Double.parseDouble(parts[3].trim()); - 1001,Aryan,Computer Science,3.7 - */ + Student student = new Student(id, name, major, gpa); - for (String line : lines) { - - // TODO: - // split line - - // TODO: - // read values - - // TODO: - // create Student - - // TODO: - // add to students list + students.add(student); + } + catch (NumberFormatException e) + { + System.err.println("Skipping invalid line (format error): " + line); + } + } } - } public ArrayList getStudents() { - return students; } - } \ No newline at end of file diff --git a/src/main/java/dev/utils/FileManager.java b/src/main/java/dev/utils/FileManager.java index da7f6f5..101313f 100644 --- a/src/main/java/dev/utils/FileManager.java +++ b/src/main/java/dev/utils/FileManager.java @@ -2,31 +2,26 @@ package dev.utils; import java.io.BufferedReader; import java.io.FileReader; - import java.util.ArrayList; import java.util.List; public class FileManager { - public static List loadStudents(String path) throws Exception { - + public static List loadStudents(String path) throws Exception + { List lines = new ArrayList<>(); BufferedReader reader = new BufferedReader(new FileReader(path)); String line; - while ((line = reader.readLine()) != null) { - - // TODO: - - // Add line to list - + while ((line = reader.readLine()) != null) + { + if (!line.trim().isEmpty()) {lines.add(line);} } reader.close(); return lines; } - } \ No newline at end of file