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..abb532a --- /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..0d77bc8 --- /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..8306744 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/java/dev/Main.java b/src/main/java/dev/Main.java index 19ca657..6cfdbcf 100644 --- a/src/main/java/dev/Main.java +++ b/src/main/java/dev/Main.java @@ -12,7 +12,7 @@ public class Main { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); - + // ساخت شیء مدیریت دانشجویان StudentManager manager = new StudentManager(); while (true) { @@ -30,70 +30,67 @@ public class Main { switch (choice) { case 1 -> { + // برای جلوگیری از تکرار داده‌ها، مدیر قبلی را با یک ابجکت جدید جایگزین می‌کنیم + manager = new StudentManager(); + // خواندن خطوط فایل List data = FileManager.loadStudents("students.txt"); - // TODO: + // تقسیم خطوط به ۳ بخش مساوی + int totalLines = data.size(); + int chunkSize = totalLines / 3; - // Split data into 3 parts + List part1 = data.subList(0, chunkSize); + List part2 = data.subList(chunkSize, chunkSize * 2); + List part3 = data.subList(chunkSize * 2, totalLines); - List part1 = null; + // ساختن ۳ ترد مجزا + StudentLoader t1 = new StudentLoader(part1); + StudentLoader t2 = new StudentLoader(part2); + StudentLoader t3 = new StudentLoader(part3); - List part2 = null; + // شروع کار همزمان تردها + t1.start(); + t2.start(); + t3.start(); - List part3 = null; + // انتظار برای پایان کار تردها + t1.join(); + t2.join(); + t3.join(); - // TODO: - - 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."); } case 2 -> { - System.out.print("ID: "); - int id = scanner.nextInt(); - + // جستجوی دانشجو System.out.println(manager.searchStudent(id)); - } case 3 -> { - System.out.print("ID: "); - int id = scanner.nextInt(); - + // حذف دانشجو و چاپ نتیجه boolean removed = manager.removeStudent(id); - System.out.println(removed); - } case 4 -> + // چاپ همه دانشجویان manager.printStudents(); 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..96e6b76 100644 --- a/src/main/java/dev/model/Student.java +++ b/src/main/java/dev/model/Student.java @@ -41,30 +41,22 @@ public class Student { @Override public int hashCode() { - // TODO: - // Return custom hash - - // Example: - // return id % 97; - - return 0; + // بازگرداندن هش سفارشی طبق فرمول خواسته شده + return this.id % 97; } @Override public boolean equals(Object obj) { - // TODO: + // بررسی یکی بودن رفرنس یا نال بودن ابجکت ورودی + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; - // Step 1: - // Check null + // تبدیل ابجکت ورودی به کلاس Student + Student student = (Student) obj; - // Step 2: - // Convert obj to Student - - // Step 3: - // Compare IDs - - return false; + // مقایسه IDها برای تعیین برابری + return this.id == student.id; } @Override diff --git a/src/main/java/dev/service/StudentManager.java b/src/main/java/dev/service/StudentManager.java index 403a1c6..a97ba86 100644 --- a/src/main/java/dev/service/StudentManager.java +++ b/src/main/java/dev/service/StudentManager.java @@ -1,44 +1,42 @@ package dev.service; import dev.model.Student; - import java.util.ArrayList; - public class StudentManager { private final ArrayList students = new ArrayList<>(); public void addStudents(ArrayList newStudents) { - // TODO: - - // Merge students - - // Hint: - // addAll() - + // ادغام لیست دانشجویان جدید با لیست اصلی + if (newStudents != null) { + students.addAll(newStudents); + } } public Student searchStudent(int id) { - // TODO: - - // Loop through students - - // Compare IDs - + // چرخیدن بین تک تک دانشجویان لیست + for (Student s : students) { + // مقایسه شناسه‌ها برای پیدا کردن دانشجوی مورد نظر + if (s.getId() == id) { + return s; + } + } return null; } public boolean removeStudent(int id) { - // TODO: - - // Find student - - // Remove student - + // پیدا کردن موقعیت دانشجو در لیست برای حذف آن + for (int i = 0; i < students.size(); i++) { + if (students.get(i).getId() == id) { + // حذف دانشجو از لیست اصلی + students.remove(i); + return true; + } + } return false; } @@ -47,9 +45,6 @@ public class StudentManager { 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..4aa00b1 100644 --- a/src/main/java/dev/thread/StudentLoader.java +++ b/src/main/java/dev/thread/StudentLoader.java @@ -1,59 +1,49 @@ package dev.thread; - - import dev.model.Student; - import java.util.ArrayList; import java.util.List; 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; } @Override public void run() { - // TODO: - - /* - Example line: - - 1001,Aryan,Computer Science,3.7 - */ - for (String line : lines) { - // TODO: - // split line + // اگر خط خالی بود از آن رد می‌شویم + if (line.trim().isEmpty()) { + continue; + } - // TODO: - // read values + // قطعه‌بندی خط بر اساس ویرگول + String[] tokens = line.split(","); - // TODO: - // create Student + // خواندن مقادیر از آرایه توکن‌ها + int id = Integer.parseInt(tokens[0].trim()); + String name = tokens[1].trim(); + String major = tokens[2].trim(); + double gpa = Double.parseDouble(tokens[3].trim()); - // TODO: - // add to students list + // ساختن شیء دانشجو + Student student = new Student(id, name, major, gpa); + // اضافه کردن به لیست محلی همین ترد + students.add(student); } - } 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..040055f 100644 --- a/src/main/java/dev/utils/FileManager.java +++ b/src/main/java/dev/utils/FileManager.java @@ -2,7 +2,6 @@ package dev.utils; import java.io.BufferedReader; import java.io.FileReader; - import java.util.ArrayList; import java.util.List; @@ -18,15 +17,14 @@ public class FileManager { while ((line = reader.readLine()) != null) { - // TODO: - - // Add line to list - + // خطوط خوانده شده را به لیست اضافه می‌کنیم + if (!line.trim().isEmpty()) { + lines.add(line); + } } reader.close(); return lines; } - } \ No newline at end of file