From 36b45a17dca910be9d5060e6beedaa495afef4b8 Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Fri, 1 May 2026 14:13:20 +0330 Subject: [PATCH 01/10] Move files from HW03 to root directory --- .gitignore | 12 ++++++++++++ pom.xml | 10 ++++++++++ src/main/java/org/example/Main.java | 9 +++++++++ src/main/java/org/example/Movie.java | 28 ++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/org/example/Main.java create mode 100644 src/main/java/org/example/Movie.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..748e64a --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# Compiled +*.class +target/ + +# IDE +.idea/ +*.iml +.vscode/ + +# OS +.DS_Store +Thumbs.db diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..88887c4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,10 @@ + + + 4.0.0 + org.example + WS-04-oop-review + 1.0-SNAPSHOT + diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java new file mode 100644 index 0000000..0fcfac9 --- /dev/null +++ b/src/main/java/org/example/Main.java @@ -0,0 +1,9 @@ +package org.example; + +public class Main { + public static void main(String[] args) { + System.out.println("Welcome to Movie App!"); + Movie movie = new Movie("Inception", "Christopher Nolan", 2010, 8.8); + System.out.println(movie.getTitle()); + } +} diff --git a/src/main/java/org/example/Movie.java b/src/main/java/org/example/Movie.java new file mode 100644 index 0000000..025e85f --- /dev/null +++ b/src/main/java/org/example/Movie.java @@ -0,0 +1,28 @@ +package org.example; + +public class Movie { + private String title; + private String director; + private int year; + private double rating; + private String[] images; // باگ: باید List باشه + + public Movie(String title, String director, int year, double rating) { + this.title = title; + this.director = director; + this.year = year; + this.rating = rating; + } + + // Getters and Setters + public String getTitle() { return title; } + public void setTitle(String title) { this.title = title; } + public String getDirector() { return director; } + public void setDirector(String director) { this.director = director; } + public int getYear() { return year; } + public void setYear(int year) { this.year = year; } + public double getRating() { return rating; } + public void setRating(double rating) { this.rating = rating; } + public String[] getImages() { return images; } + public void setImages(String[] images) { this.images = images; } +} -- 2.54.0 From 9cee42eb50554e927df5fe752bd285d2baaf04f8 Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Fri, 1 May 2026 14:13:31 +0330 Subject: [PATCH 02/10] fix: images type in Movie class --- src/main/java/org/example/Movie.java | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/example/Movie.java b/src/main/java/org/example/Movie.java index 025e85f..553e7b0 100644 --- a/src/main/java/org/example/Movie.java +++ b/src/main/java/org/example/Movie.java @@ -1,17 +1,21 @@ package org.example; +import java.util.ArrayList; +import java.util.List; + public class Movie { private String title; private String director; private int year; private double rating; - private String[] images; // باگ: باید List باشه + private List images; // درست شد: از آرایه به لیست تغییر کرد public Movie(String title, String director, int year, double rating) { this.title = title; this.director = director; this.year = year; this.rating = rating; + this.images = new ArrayList<>(); } // Getters and Setters @@ -23,6 +27,21 @@ public class Movie { public void setYear(int year) { this.year = year; } public double getRating() { return rating; } public void setRating(double rating) { this.rating = rating; } - public String[] getImages() { return images; } - public void setImages(String[] images) { this.images = images; } + public List getImages() { return images; } + public void setImages(List images) { this.images = images; } + + // متدهای اضافی برای مدیریت تصاویر + public void addImage(String imageUrl) { + this.images.add(imageUrl); + } + + public void removeImage(String imageUrl) { + this.images.remove(imageUrl); + } + + @Override + public String toString() { + return "Movie{title='" + title + "', director='" + director + + "', year=" + year + ", rating=" + rating + ", images=" + images + "}"; + } } -- 2.54.0 From 500afde0c8a4f0e91ca2befd1d1d1a612e08942a Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sat, 2 May 2026 17:53:39 +0330 Subject: [PATCH 03/10] code and setup --- README.md | 125 ++++++++++ pom.xml | 12 + src/main/java/Main.java | 282 +++++++++++++++++++++++ src/main/java/models/Course.java | 67 ++++++ src/main/java/models/Student.java | 15 ++ src/main/java/models/Teacher.java | 53 +++++ src/main/java/models/User.java | 42 ++++ src/main/java/org/example/Main.java | 9 - src/main/java/org/example/Movie.java | 47 ---- src/main/java/services/SchoolSystem.java | 77 +++++++ 10 files changed, 673 insertions(+), 56 deletions(-) create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/models/Course.java create mode 100644 src/main/java/models/Student.java create mode 100644 src/main/java/models/Teacher.java create mode 100644 src/main/java/models/User.java delete mode 100644 src/main/java/org/example/Main.java delete mode 100644 src/main/java/org/example/Movie.java create mode 100644 src/main/java/services/SchoolSystem.java diff --git a/README.md b/README.md index e69de29..0aa0bc4 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,125 @@ +# 🧙‍♂️ Workshop: Hogwarts School System - A Magical OOP Adventure + +## Welcome, Young Wizard! + +> *"The sorting hat has placed you in Gryffindor... No, wait! It placed you in the **Java Development** house!"* + +Welcome to the **Hogwarts School System** workshop! This magical journey will help you master the fundamentals of **Object-Oriented Programming (OOP)** through a fun, wizard-themed project. + +--- + +## 🎯 Workshop Objectives + +By completing this workshop, you will learn and practice: + +| Concept | How it's used in this project | +|---------|-------------------------------| +| **Encapsulation** | Private fields with public getters/setters | +| **Inheritance** | `Student` and `Teacher` extend `User` | +| **Polymorphism** | Different user types with same methods | +| **Abstraction** | Abstract `User` class with common behavior | +| **Lists & Collections** | Managing students, teachers, and courses with `ArrayList` | +| **Input Validation** | Validating usernames and passwords | +| **ID-based Selection** | Finding courses by unique ID instead of name | + +--- + +## 🏰 Storyline + +*Professor Dumbledore has asked you to help modernize Hogwarts! The old parchment-based course enrollment system is a disaster. Students keep signing up for the wrong classes, and Professor Snape is furious because his Potions class is full of first-year students who can't tell a bezoar from a newt's eye.* + +*Your mission: Build a digital School Management System that allows:* + +- *Students to view available courses and enroll using magical Course IDs* +- *Teachers to create new courses and manage their classes* +- *Everyone to log in securely (even Filch needs to check who's where)* + +--- + +## 📚 Class Hierarchy Diagram + ┌─────────────────┐ + │ User │ + │ (Abstract) │ + └────────┬────────┘ + │ + ┌──────────────┴──────────────┐ + │ │ +┌─────▼─────┐ ┌─────▼─────┐ +│ Student │ │ Teacher │ +└─────┬─────┘ └─────┬─────┘ + │ │ +┌─────▼─────┐ ┌─────▼─────┐ +│enrolled │ │ myCourses │ +│ Courses │ │ (List) │ +└───────────┘ └───────────┘ + +┌─────────────────┐ +│ Course │ +├─────────────────┤ +│ - id (static) │ +│ - name │ +│ - teacher │ +│ - students │ +└─────────────────┘ + │ + │ contains + ▼ +┌─────────────────┐ +│ SchoolSystem │ +│ (Service) │ +└─────────────────┘ + +--- + + + + + +--- + +## 📋 Complete TODO List + +### 🔧 Student.java (3 TODOs) + +| # | Method | Description | +|---|--------|-------------| +| 1 | `enrollInCourse(Course course)` | Register student in a course | +| 2 | `showMyCourses()` | Display all enrolled courses | +| 3 | `getEnrolledCourses()` | Return list of enrolled courses | + +### 🔧 SchoolSystem.java (5 TODOs) + +| # | Method | Description | +|---|--------|-------------| +| 4 | `registerStudent(String username, String password)` | Register new student | +| 5 | `loginStudent(String username, String password)` | Student login | +| 6 | `findStudent(String username)` | Find student by username (private) | +| 7 | `addCourseToSystem(String courseName)` | Add new course to system | +| 8 | `findCourseById(int id)` | Find course by ID | + +### 🔧 Main.java (4 TODOs) + +| # | Location | Description | +|---|----------|-------------| +| 9 | `registerMenu()` - case 1 | Student registration | +| 10 | `loginMenu()` - case 1 | Student login | +| 11 | `studentMenu()` - case 3 | Show my courses | +| 12 | `enrollInCourse(Student student)` | Enroll logic | + +### 📊 Summary + +| File | TODO Count | +|------|------------| +| Student.java | 3 | +| SchoolSystem.java | 5 | +| Main.java | 4 | +| **Total** | **12** | + +--- + +## ℹ️ Note + +> This exercise is for practice only and has no bouns. +> Students can complete it in class with TA assistance. + +**Good luck, young wizard!** ✨ \ No newline at end of file diff --git a/pom.xml b/pom.xml index 88887c4..8fe5d97 100644 --- a/pom.xml +++ b/pom.xml @@ -7,4 +7,16 @@ org.example WS-04-oop-review 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 14 + 14 + + + + diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000..9916d83 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,282 @@ +import models.*; +import services.*; +import java.util.Scanner; + +public class Main { + private static SchoolSystem school = new SchoolSystem(); + private static Scanner scanner = new Scanner(System.in); + + public static void main(String[] args) { + school.addCourseToSystem("Potions"); + school.addCourseToSystem("Defense Against Dark Arts"); + school.addCourseToSystem("Transfiguration"); + + runMainMenu(); + } + + private static void runMainMenu() { + while (true) { + System.out.println("\n HOGWARTS SCHOOL SYSTEM "); + System.out.println("1. Register (Sign Up)"); + System.out.println("2. Login"); + System.out.println("3. Exit"); + System.out.print("\nChoose: "); + + int choice = getIntInput(); + + switch (choice) { + case 1: + registerMenu(); + break; + case 2: + loginMenu(); + break; + case 3: + System.out.println(" Goodbye!"); + return; + default: + System.out.println(" Invalid choice!"); + } + } + } + + private static void registerMenu() { + System.out.println("\n══════════ REGISTER ══════════"); + System.out.println("1. Register as Student"); + System.out.println("2. Register as Teacher"); + System.out.println("3. Back"); + System.out.print("Choose: "); + + int choice = getIntInput(); + + System.out.print("Enter username: "); + String username = scanner.nextLine(); + + String usernameError = User.validateUsername(username); + if (usernameError != null) { + System.out.println(" " + usernameError); + return; + } + + System.out.print("Enter password: "); + String password = scanner.nextLine(); + + String passwordError = User.validatePassword(password); + if (passwordError != null) { + System.out.println(" " + passwordError); + return; + } + + boolean success; + switch (choice) { + case 1: + //TODO + break; + case 2: + success = school.registerTeacher(username, password); + if (success) { + System.out.println(" Teacher registered successfully!"); + } else { + System.out.println(" Username already exists!"); + } + break; + case 3: + return; + default: + System.out.println(" Invalid choice!"); + } + } + + private static void loginMenu() { + System.out.println("\n══════════ LOGIN ══════════"); + System.out.println("1. Login as Student"); + System.out.println("2. Login as Teacher"); + System.out.println("3. Back"); + System.out.print("Choose: "); + + int choice = getIntInput(); + + System.out.print("Username: "); + String username = scanner.nextLine(); + System.out.print("Password: "); + String password = scanner.nextLine(); + + switch (choice) { + case 1: + //TODO + break; + case 2: + Teacher teacher = school.loginTeacher(username, password); + if (teacher != null) { + teacherMenu(teacher); + } else { + System.out.println(" Invalid username or password!"); + } + break; + case 3: + return; + default: + System.out.println(" Invalid choice!"); + } + } + + // ==================== STUDENT MENU ==================== + private static void studentMenu(Student student) { + while (true) { + System.out.println("\n══════════ STUDENT DASHBOARD ══════════"); + System.out.println("Welcome, " + student.getUsername() + "!"); + System.out.println("1. View All Available Courses"); + System.out.println("2. Enroll in a Course"); + System.out.println("3. View My Courses"); + System.out.println("4. Logout"); + System.out.print("\nChoose: "); + + int choice = getIntInput(); + + switch (choice) { + case 1: + school.showAllCourses(); + break; + case 2: + enrollInCourse(student); + break; + case 3: + //student.showMyCourses(); + break; + case 4: + System.out.println(" Goodbye, " + student.getUsername() + "!"); + return; + default: + System.out.println(" Invalid choice!"); + } + } + } + + private static void enrollInCourse(Student student) { + //TODO + } + + // ==================== TEACHER MENU ==================== + private static void teacherMenu(Teacher teacher) { + while (true) { + System.out.println("\n══════════ TEACHER DASHBOARD ══════════"); + System.out.println("Welcome, Professor " + teacher.getUsername() + "!"); + System.out.println("1. View All Available Courses"); + System.out.println("2. Add New Course to System"); + System.out.println("3. View My Courses"); + System.out.println("4. Add Course to My List (by ID)"); + System.out.println("5. Remove Course from My List (by ID)"); + System.out.println("6. View Students in My Course (by ID)"); + System.out.println("7. Logout"); + System.out.print("\nChoose: "); + + int choice = getIntInput(); + + switch (choice) { + case 1: + school.showAllCourses(); + break; + case 2: + addNewCourseToSystem(teacher); + break; + case 3: + teacher.showMyCourses(); + break; + case 4: + addCourseToTeacher(teacher); + break; + case 5: + removeCourseFromTeacher(teacher); + break; + case 6: + showStudentsInTeacherCourse(teacher); + break; + case 7: + System.out.println(" Goodbye, Professor " + teacher.getUsername() + "!"); + return; + default: + System.out.println(" Invalid choice!"); + } + } + } + + private static void addNewCourseToSystem(Teacher teacher) { + System.out.print("Enter new course name: "); + String courseName = scanner.nextLine(); + + if (school.addCourseToSystem(courseName)) { + System.out.println(" Course '" + courseName + "' created successfully!"); + Course newCourse = school.findCourseByName(courseName); + if (newCourse != null) { + teacher.addCourse(newCourse); + } + } else { + System.out.println(" Course already exists!"); + } + } + + private static void addCourseToTeacher(Teacher teacher) { + school.showAllCourses(); + System.out.print("\nEnter Course ID to add to your list: "); + int courseId = getIntInput(); + + Course course = school.findCourseById(courseId); + if (course == null) { + System.out.println(" Course not found!"); + return; + } + + if (teacher.addCourse(course)) { + System.out.println(" Course '" + course.getName() + "' added to your list!"); + } else { + System.out.println(" You already teach this course!"); + } + } + + private static void removeCourseFromTeacher(Teacher teacher) { + teacher.showMyCourses(); + if (teacher.getMyCourses().isEmpty()) return; + + System.out.print("\nEnter Course ID to remove from your list: "); + int courseId = getIntInput(); + + Course course = school.findCourseById(courseId); + if (course == null) { + System.out.println(" Course not found!"); + return; + } + + if (teacher.removeCourse(course)) { + System.out.println(" Course '" + course.getName() + "' removed from your list!"); + } else { + System.out.println(" You don't teach this course!"); + } + } + + private static void showStudentsInTeacherCourse(Teacher teacher) { + teacher.showMyCourses(); + if (teacher.getMyCourses().isEmpty()) return; + + System.out.print("\nEnter Course ID to see students: "); + int courseId = getIntInput(); + + Course course = school.findCourseById(courseId); + if (course == null) { + System.out.println(" Course not found!"); + return; + } + + teacher.showStudentsInCourse(course); + } + + private static int getIntInput() { + try { + int value = scanner.nextInt(); + scanner.nextLine(); + return value; + } catch (Exception e) { + scanner.nextLine(); + return -1; + } + } +} \ No newline at end of file diff --git a/src/main/java/models/Course.java b/src/main/java/models/Course.java new file mode 100644 index 0000000..61c3f00 --- /dev/null +++ b/src/main/java/models/Course.java @@ -0,0 +1,67 @@ +package models; + +import java.util.ArrayList; +import java.util.List; + +public class Course { + private static int nextId = 1; + + private int id; + private String name; + private Teacher teacher; + private List students; + + public Course(String name) { + this.id = nextId++; + this.name = name; + this.students = new ArrayList<>(); + } + + public int getId() { return id; } + public String getName() { return name; } + public Teacher getTeacher() { return teacher; } + + public void setTeacher(Teacher teacher) { + this.teacher = teacher; + } + + public boolean addStudent(Student student) { + if (students.contains(student)) { + return false; + } + students.add(student); + return true; + } + + public List getStudents() { + return students; // ساده، بدون unmodifiable + } + + public void showStudents() { + if (students.isEmpty()) { + System.out.println(" No students enrolled yet."); + } else { + System.out.println(" Students in " + name + ":"); + for (Student s : students) { + System.out.println(" - " + s.getUsername()); + } + } + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Course course = (Course) obj; + return id == course.id; + } + + @Override + public String toString() { + if (teacher != null) { + return "[ID:" + id + "] " + name + " (Teacher: " + teacher.getUsername() + ")"; + } else { + return "[ID:" + id + "] " + name + " (No teacher assigned)"; + } + } +} \ No newline at end of file diff --git a/src/main/java/models/Student.java b/src/main/java/models/Student.java new file mode 100644 index 0000000..d3ce65c --- /dev/null +++ b/src/main/java/models/Student.java @@ -0,0 +1,15 @@ +package models; + +import java.util.ArrayList; +import java.util.List; + +public class Student extends User { + private List enrolledCourses; + + public Student(String username, String password) { + super(username, password); + this.enrolledCourses = new ArrayList<>(); + } + //TODO(complete the student class) + +} \ No newline at end of file diff --git a/src/main/java/models/Teacher.java b/src/main/java/models/Teacher.java new file mode 100644 index 0000000..9f900fc --- /dev/null +++ b/src/main/java/models/Teacher.java @@ -0,0 +1,53 @@ +package models; + +import java.util.ArrayList; +import java.util.List; + +public class Teacher extends User { + private List myCourses; + + public Teacher(String username, String password) { + super(username, password); + this.myCourses = new ArrayList<>(); + } + + public boolean addCourse(Course course) { + if (myCourses.contains(course)) { + return false; + } + myCourses.add(course); + course.setTeacher(this); + return true; + } + + public boolean removeCourse(Course course) { + if (myCourses.remove(course)) { + course.setTeacher(null); + return true; + } + return false; + } + + public List getMyCourses() { + return myCourses; + } + + public void showMyCourses() { + if (myCourses.isEmpty()) { + System.out.println(" You don't teach any course yet."); + } else { + System.out.println("\n My Courses:"); + for (int i = 0; i < myCourses.size(); i++) { + System.out.println(" " + (i+1) + ". " + myCourses.get(i)); + } + } + } + + public void showStudentsInCourse(Course course) { + if (!myCourses.contains(course)) { + System.out.println(" You don't teach this course!"); + return; + } + course.showStudents(); + } +} \ No newline at end of file diff --git a/src/main/java/models/User.java b/src/main/java/models/User.java new file mode 100644 index 0000000..eabe35e --- /dev/null +++ b/src/main/java/models/User.java @@ -0,0 +1,42 @@ +package models; + +public abstract class User { + protected String username; + protected String password; // ساده نگه می‌داریم برای سطح مقدماتی + + public User(String username, String password) { + this.username = username; + this.password = password; + } + + public String getUsername() { return username; } + + public boolean checkPassword(String password) { + return this.password.equals(password); + } + + public static String validateUsername(String username) { + if (username == null || username.trim().isEmpty()) { + return "Username cannot be empty!"; + } + if (username.length() < 3) { + return "Username must be at least 3 characters!"; + } + return null; + } + + public static String validatePassword(String password) { + if (password == null || password.length() < 4) { + return "Password must be at least 4 characters!"; + } + return null; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + User user = (User) obj; + return username.equalsIgnoreCase(user.username); + } +} \ No newline at end of file diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java deleted file mode 100644 index 0fcfac9..0000000 --- a/src/main/java/org/example/Main.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.example; - -public class Main { - public static void main(String[] args) { - System.out.println("Welcome to Movie App!"); - Movie movie = new Movie("Inception", "Christopher Nolan", 2010, 8.8); - System.out.println(movie.getTitle()); - } -} diff --git a/src/main/java/org/example/Movie.java b/src/main/java/org/example/Movie.java deleted file mode 100644 index 553e7b0..0000000 --- a/src/main/java/org/example/Movie.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.example; - -import java.util.ArrayList; -import java.util.List; - -public class Movie { - private String title; - private String director; - private int year; - private double rating; - private List images; // درست شد: از آرایه به لیست تغییر کرد - - public Movie(String title, String director, int year, double rating) { - this.title = title; - this.director = director; - this.year = year; - this.rating = rating; - this.images = new ArrayList<>(); - } - - // Getters and Setters - public String getTitle() { return title; } - public void setTitle(String title) { this.title = title; } - public String getDirector() { return director; } - public void setDirector(String director) { this.director = director; } - public int getYear() { return year; } - public void setYear(int year) { this.year = year; } - public double getRating() { return rating; } - public void setRating(double rating) { this.rating = rating; } - public List getImages() { return images; } - public void setImages(List images) { this.images = images; } - - // متدهای اضافی برای مدیریت تصاویر - public void addImage(String imageUrl) { - this.images.add(imageUrl); - } - - public void removeImage(String imageUrl) { - this.images.remove(imageUrl); - } - - @Override - public String toString() { - return "Movie{title='" + title + "', director='" + director + - "', year=" + year + ", rating=" + rating + ", images=" + images + "}"; - } -} diff --git a/src/main/java/services/SchoolSystem.java b/src/main/java/services/SchoolSystem.java new file mode 100644 index 0000000..ec6f90e --- /dev/null +++ b/src/main/java/services/SchoolSystem.java @@ -0,0 +1,77 @@ +package services; + +import models.*; +import java.util.ArrayList; +import java.util.List; + +public class SchoolSystem { + private List students; + private List teachers; + private List allCourses; + + public SchoolSystem() { + this.students = new ArrayList<>(); + this.teachers = new ArrayList<>(); + this.allCourses = new ArrayList<>(); + } + + // ========== Student Management ========== + //TODO + + // ========== Teacher Management ========== + public boolean registerTeacher(String username, String password) { + if (findTeacher(username) != null) { + return false; + } + teachers.add(new Teacher(username, password)); + return true; + } + + public Teacher loginTeacher(String username, String password) { + Teacher teacher = findTeacher(username); + if (teacher != null && teacher.checkPassword(password)) { + return teacher; + } + return null; + } + + private Teacher findTeacher(String username) { + for (Teacher t : teachers) { + if (t.getUsername().equals(username)) return t; + } + return null; + } + + // ========== Course Management ========== + public boolean addCourseToSystem(String courseName) { + //TODO + return true; + } + + public Course findCourseById(int id) { + //TODO + return null; + } + + public Course findCourseByName(String name) { + for (Course c : allCourses) { + if (c.getName().equalsIgnoreCase(name)) return c; + } + return null; + } + + public void showAllCourses() { + if (allCourses.isEmpty()) { + System.out.println(" No courses available yet."); + } else { + System.out.println("\n All Available Courses:"); + for (int i = 0; i < allCourses.size(); i++) { + System.out.println(" " + (i+1) + ". " + allCourses.get(i)); + } + } + } + + public List getAllCourses() { + return allCourses; + } +} \ No newline at end of file -- 2.54.0 From 4619bb1c5017dd59bae1610ddbc6283cf12a5c6a Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sat, 2 May 2026 14:28:30 +0000 Subject: [PATCH 04/10] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0aa0bc4..376fea9 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ By completing this workshop, you will learn and practice: --- +```markdown ## 📚 Class Hierarchy Diagram ┌─────────────────┐ │ User │ @@ -69,7 +70,7 @@ By completing this workshop, you will learn and practice: │ (Service) │ └─────────────────┘ ---- + -- 2.54.0 From ec386e6b75a18f2f1c83f4912f639f5f33d1c890 Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sat, 2 May 2026 14:29:53 +0000 Subject: [PATCH 05/10] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 376fea9..ccbdb28 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,9 @@ By completing this workshop, you will learn and practice: --- -```markdown ## 📚 Class Hierarchy Diagram +```markdown + ┌─────────────────┐ │ User │ │ (Abstract) │ @@ -69,7 +70,7 @@ By completing this workshop, you will learn and practice: │ SchoolSystem │ │ (Service) │ └─────────────────┘ - +--- -- 2.54.0 From c4b08e72c447bacdccb163c6fb7b641603b1f909 Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sat, 2 May 2026 14:30:18 +0000 Subject: [PATCH 06/10] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ccbdb28..fdc6888 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,8 @@ By completing this workshop, you will learn and practice: │ SchoolSystem │ │ (Service) │ └─────────────────┘ ---- +```markdown + -- 2.54.0 From 4c5f31f43de5bf475cb3960465d34667d6cab0e2 Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sat, 2 May 2026 14:30:41 +0000 Subject: [PATCH 07/10] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index fdc6888..73083fa 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,6 @@ By completing this workshop, you will learn and practice: │ SchoolSystem │ │ (Service) │ └─────────────────┘ -```markdown -- 2.54.0 From 1d8d3e955bf7bb1fc2afeb12a574ad19ec404b0d Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sat, 2 May 2026 14:32:28 +0000 Subject: [PATCH 08/10] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 73083fa..640afa8 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ By completing this workshop, you will learn and practice: --- ## 📚 Class Hierarchy Diagram -```markdown +```plaintext ┌─────────────────┐ │ User │ @@ -71,7 +71,7 @@ By completing this workshop, you will learn and practice: │ (Service) │ └─────────────────┘ - +``` -- 2.54.0 From fb7b7716dec0bea5cf340ac1af700c725cdfe3fd Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sun, 3 May 2026 07:51:13 +0000 Subject: [PATCH 09/10] Update src/main/java/models/Course.java --- src/main/java/models/Course.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/models/Course.java b/src/main/java/models/Course.java index 61c3f00..17d5b3b 100644 --- a/src/main/java/models/Course.java +++ b/src/main/java/models/Course.java @@ -34,7 +34,7 @@ public class Course { } public List getStudents() { - return students; // ساده، بدون unmodifiable + return students; } public void showStudents() { -- 2.54.0 From 488b926db81a83c54ed32bb73f3deb026d270a73 Mon Sep 17 00:00:00 2001 From: Partow Roshani Date: Sun, 3 May 2026 07:51:33 +0000 Subject: [PATCH 10/10] Update src/main/java/models/User.java --- src/main/java/models/User.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/models/User.java b/src/main/java/models/User.java index eabe35e..f4b348f 100644 --- a/src/main/java/models/User.java +++ b/src/main/java/models/User.java @@ -2,7 +2,7 @@ package models; public abstract class User { protected String username; - protected String password; // ساده نگه می‌داریم برای سطح مقدماتی + protected String password; public User(String username, String password) { this.username = username; -- 2.54.0