From 8835227a50157e3031d5980aa0fe02ecbd17b438 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CSulemaMalik=E2=80=9D?=
 <“WMIS228@live.rhul.ac.uk”>
Date: Fri, 1 Nov 2024 07:01:49 +0000
Subject: [PATCH] Edit README.md file

---
 .../java/uk/ac/rhul/cs2800/model/Grade.java   | 34 +++++++
 .../java/uk/ac/rhul/cs2800/model/Module.java  | 32 +++++++
 .../uk/ac/rhul/cs2800/model/Registration.java | 27 ++++++
 .../java/uk/ac/rhul/cs2800/model/Student.java | 89 +++++++++++++++++++
 .../exception/NoGradeAvailableException.java  | 21 +++++
 .../exception/NoRegistrationException.java    | 17 ++++
 .../uk/ac/rhul/cs2800/model/GradeTest.java    | 24 +++++
 .../uk/ac/rhul/cs2800/model/ModuleTest.java   | 18 ++++
 .../model/NoGradeAvailableExceptionTest.java  | 14 +++
 .../model/NoRegistrationExceptionTest.java    | 14 +++
 .../rhul/cs2800/model/RegistrationTest.java   | 18 ++++
 .../uk/ac/rhul/cs2800/model/StudentTest.java  | 52 +++++++++++
 READ.md                                       |  4 +
 13 files changed, 364 insertions(+)
 create mode 100644 CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Grade.java
 create mode 100644 CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Module.java
 create mode 100644 CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Registration.java
 create mode 100644 CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Student.java
 create mode 100644 CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoGradeAvailableException.java
 create mode 100644 CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoRegistrationException.java
 create mode 100644 CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/GradeTest.java
 create mode 100644 CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/ModuleTest.java
 create mode 100644 CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoGradeAvailableExceptionTest.java
 create mode 100644 CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoRegistrationExceptionTest.java
 create mode 100644 CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/RegistrationTest.java
 create mode 100644 CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/StudentTest.java
 create mode 100644 READ.md

diff --git a/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Grade.java b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Grade.java
new file mode 100644
index 0000000..3557cea
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Grade.java
@@ -0,0 +1,34 @@
+package uk.ac.rhul.cs2800.model;
+
+/**
+ * This class represents a grade with both a numeric score and a module it belongs to.
+ */
+public class Grade {
+
+  private int score;
+  private Module module;
+
+  /**
+   * Constructs a Grade with the score and module.
+   * score of the grade module associated with the grade
+   */
+
+  public Grade(int score, Module module) {
+    this.score = score;
+    this.module = module;
+  }
+
+  public int getScore() {
+    return score;
+  }
+
+  public Module getModule() {
+    return module;
+  }
+
+
+  public void setScore(int score) {
+    this.score = score;
+  }
+
+}
diff --git a/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Module.java b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Module.java
new file mode 100644
index 0000000..beed787
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Module.java
@@ -0,0 +1,32 @@
+package uk.ac.rhul.cs2800.model;
+
+/**
+ * Represents a module with its code, name, and mandatory status.
+ */
+
+public class Module {
+  private String code;
+  private String name;
+  private boolean nmc;
+
+  /**
+   * Defines a module, including its code, name, and whether it's a mandatory module.
+   */
+  public Module(String code, String name, boolean nmc) {
+    this.code = code;
+    this.name = name;
+    this.nmc = nmc;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public boolean isNmc() {
+    return nmc;
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Registration.java b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Registration.java
new file mode 100644
index 0000000..7fb54ff
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Registration.java
@@ -0,0 +1,27 @@
+package uk.ac.rhul.cs2800.model;
+
+/**
+ * Registers a student to a specified module.
+ */
+
+public class Registration {
+  private Student student;
+  private Module module;
+
+  /**
+   * Registers a student to a specified module.
+   */
+
+  public Registration(Student student, Module module) {
+    this.student = student;
+    this.module = module;
+  }
+
+  public Student getStudent() {
+    return student;
+  }
+
+  public Module getModule() {
+    return module;
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Student.java b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Student.java
new file mode 100644
index 0000000..f50c16d
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/Student.java
@@ -0,0 +1,89 @@
+package uk.ac.rhul.cs2800.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import uk.ac.rhul.cs2800.model.exception.NoGradeAvailableException;
+
+/**
+ * Represents a student with personal and academic information.
+ */
+public class Student {
+
+  private Long id;
+  private String grade;
+  private String firstName;
+  private String lastName;
+  private String username;
+  private String email;
+  private List<Grade> grades = new ArrayList<>();
+  private List<Module> modules = new ArrayList<>();
+
+  /**
+   * Represents a student with basic identifying information. Each student has a unique ID, personal
+   * details, and contact information.
+   */
+
+  public Student(Long id, String firstName, String lastName, String username, String email) {
+    this.id = id;
+    this.firstName = firstName;
+    this.lastName = lastName;
+    this.username = username;
+    this.email = email;
+  }
+
+  /**
+   * Adds a grade to the student's list of grades.
+   *
+   * @param g the grade to add
+   */
+
+  public void addGrade(Grade g) {
+    grades.add(g);
+  }
+
+  /**
+   * Adds a grade to the student's list of grades.
+   *
+   * 
+   */
+
+  public Grade getGrade(Module m) throws NoGradeAvailableException {
+    for (Grade grade : grades) {
+      if (grade.getModule().equals(m)) {
+        return grade;
+      }
+    }
+    throw new NoGradeAvailableException("No grade available for module: " + m.getName());
+  }
+
+  /**
+   * Adds a grade to the student's list of grades.
+   *
+   * @param m the grade to add
+   */
+  public void registerModule(Module m) {
+    modules.add(m);
+  }
+
+  /**
+   * 0 if grade is empty.
+   */
+
+  public float computeAverage() {
+    if (grades.isEmpty()) {
+      return 0;
+    }
+    int total = 0;
+    for (Grade grade : grades) {
+      total += grade.getScore();
+    }
+    return (float) total / grades.size();
+  }
+
+
+
+  public List<Module> getModules() {
+    return modules;
+  }
+
+}
diff --git a/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoGradeAvailableException.java b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoGradeAvailableException.java
new file mode 100644
index 0000000..0e819c1
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoGradeAvailableException.java
@@ -0,0 +1,21 @@
+package uk.ac.rhul.cs2800.model.exception;
+
+/**
+ * Custom exception used when a grade is unavailable or missing. Includes a message to explain the
+ * reason.
+ */
+
+public class NoGradeAvailableException extends Exception {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * Custom exception to handle cases when registration cannot be completed. The message provides
+   * further context.
+   */
+
+  public NoGradeAvailableException(String message) {
+    super(message);
+  }
+}
+
+
diff --git a/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoRegistrationException.java b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoRegistrationException.java
new file mode 100644
index 0000000..e5f9c87
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/main/java/uk/ac/rhul/cs2800/model/exception/NoRegistrationException.java
@@ -0,0 +1,17 @@
+package uk.ac.rhul.cs2800.model.exception;
+
+/**
+ * Creates an association between a student and a module for registration purposes.
+ */
+public class NoRegistrationException extends Exception {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * Registers a student to a specified module.
+   */
+
+  public NoRegistrationException(String message) {
+    super(message);
+
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/GradeTest.java b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/GradeTest.java
new file mode 100644
index 0000000..3b16fcf
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/GradeTest.java
@@ -0,0 +1,24 @@
+package uk.ac.rhul.cs2800.model;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+class GradeTest {
+
+  @Test
+  void testGradeInitialization() {
+    Module module = new Module("CS2800", "CS4600", false);
+    Grade grade = new Grade(50, module);
+
+    equals(50);
+    assertEquals(module, grade.getModule());
+  }
+
+  @Test
+  void testSetScore() {
+    Grade grade = new Grade(50, null);
+    grade.setScore(95);
+    assertEquals(95, grade.getScore());
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/ModuleTest.java b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/ModuleTest.java
new file mode 100644
index 0000000..60cf663
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/ModuleTest.java
@@ -0,0 +1,18 @@
+package uk.ac.rhul.cs2800.model;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+import org.junit.jupiter.api.Test;
+
+class ModuleTest {
+
+  @Test
+  void testModuleInitialization() {
+    Module module = new Module("CS2800", "ComputerScience", false);
+
+    assertEquals("CS2800", module.getCode());
+    assertEquals("ComputerScience", module.getName());
+    assertFalse(module.isNmc());
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoGradeAvailableExceptionTest.java b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoGradeAvailableExceptionTest.java
new file mode 100644
index 0000000..2dfb757
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoGradeAvailableExceptionTest.java
@@ -0,0 +1,14 @@
+package uk.ac.rhul.cs2800.model.exception;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+class NoGradeAvailableExceptionTest {
+
+  @Test
+  void testExceptionMessage() {
+    NoGradeAvailableException exception = new NoGradeAvailableException("No grade found.");
+    assertEquals("No grade found.", exception.getMessage());
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoRegistrationExceptionTest.java b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoRegistrationExceptionTest.java
new file mode 100644
index 0000000..b43c5cc
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/NoRegistrationExceptionTest.java
@@ -0,0 +1,14 @@
+package uk.ac.rhul.cs2800.model.exception;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+class NoRegistrationExceptionTest {
+
+  @Test
+  void testExceptionMessage() {
+    NoRegistrationException exception = new NoRegistrationException("No registration found.");
+    assertEquals("No registration found.", exception.getMessage());
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/RegistrationTest.java b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/RegistrationTest.java
new file mode 100644
index 0000000..f658d75
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/RegistrationTest.java
@@ -0,0 +1,18 @@
+package uk.ac.rhul.cs2800.model;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+class RegistrationTest {
+
+  @Test
+  void testRegistrationInitialization() {
+    Student student = new Student(1L, "Anna", "Angelina", "Alina", "Izzy");
+    Module module = new Module("CS2800", "ComputerScience", false);
+    Registration registration = new Registration(student, module);
+
+    assertEquals(student, registration.getStudent());
+    assertEquals(module, registration.getModule());
+  }
+}
diff --git a/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/StudentTest.java b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/StudentTest.java
new file mode 100644
index 0000000..1fbedc3
--- /dev/null
+++ b/CW1/StudentGradeManagment/src/test/java/uk/ac/rhul/cs2800/model/StudentTest.java
@@ -0,0 +1,52 @@
+package uk.ac.rhul.cs2800.model;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import uk.ac.rhul.cs2800.model.exception.NoGradeAvailableException;
+
+
+class StudentTest {
+
+  private Student student;
+  private Module module;
+  private Grade grade;
+
+
+  @BeforeEach
+  void setUp() {
+    student = new Student(1L, "Anna", "Angelina", "Alina", "Izzy");
+    module = new Module("CS2800", "ComputerScience", false);
+    grade = new Grade(85, module);
+  }
+
+  @Test
+  void testAddGrade() throws NoGradeAvailableException {
+    student.addGrade(grade);
+    assertEquals(grade, student.getGrade(module));
+  }
+
+  @Test
+  void testComputeAverage() {
+    student.addGrade(new Grade(50, module));
+    student.addGrade(new Grade(90, new Module("CS2800", "ComputerScience", false)));
+    assertEquals(70.0, student.computeAverage(), 0.01);
+  }
+
+  @Test
+  void testGetGradeThrowsExceptionWhenNoGrade() {
+    Module newModule = new Module("CS2800", "ComputerScience", false);
+    assertThrows(NoGradeAvailableException.class, () -> student.getGrade(newModule));
+  }
+
+  @Test
+  void testRegisterModule() {
+    student.registerModule(module);
+
+    assertTrue(student.getModules().contains(module));
+  }
+}
diff --git a/READ.md b/READ.md
new file mode 100644
index 0000000..c9a0fe3
--- /dev/null
+++ b/READ.md
@@ -0,0 +1,4 @@
+This is my project
+for  CS2800
+
+CW1
-- 
GitLab