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 0000000000000000000000000000000000000000..3557cea7740396303db6492c38946f0933e7f3a9 --- /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 0000000000000000000000000000000000000000..beed78715240b78c550473a11f9c049ee50a2713 --- /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 0000000000000000000000000000000000000000..7fb54ff44fefd64a22b532ac8762f618c97716d7 --- /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 0000000000000000000000000000000000000000..f50c16d080761ad4bbe7325341373fa3f492d5e5 --- /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 0000000000000000000000000000000000000000..0e819c12de730573483c8f8da96842272a94720a --- /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 0000000000000000000000000000000000000000..e5f9c873e34f1ba73bcbb170ba2a0909ce8e3710 --- /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 0000000000000000000000000000000000000000..3b16fcf7083caf46909115a21990e61a2d5cc7a0 --- /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 0000000000000000000000000000000000000000..60cf663a94322d520cc81f5e192796a49d9ee033 --- /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 0000000000000000000000000000000000000000..2dfb7579fb811c842711d460ee1dbc2985488f42 --- /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 0000000000000000000000000000000000000000..b43c5cca19c7ad523ee1d7bb52ffe57606ebef32 --- /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 0000000000000000000000000000000000000000..f658d75d1a292501ae9d4c0264482279c5f0753b --- /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 0000000000000000000000000000000000000000..1fbedc34987a2fcb5381dc19a616c7ff38509d82 --- /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 0000000000000000000000000000000000000000..c9a0fe3d2caa1cd722e54ca13333cdb0994b622a --- /dev/null +++ b/READ.md @@ -0,0 +1,4 @@ +This is my project +for CS2800 + +CW1