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