Skip to content
Snippets Groups Projects
Commit 29230cb6 authored by “SulemaMalik”'s avatar “SulemaMalik”
Browse files

Add model files without nested repository

parent cdf49163
Branches
No related tags found
1 merge request!1Cw1
Showing
with 591 additions and 1 deletion
cs2800-lab-2024 @ c600a405
Subproject commit c600a405403a49cbcf627610878d5dae48e2a58a
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>StudentGradeManagement</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
</natures>
</projectDescription>
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/test/java=UTF-8
encoding/<project>=UTF-8
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>uk.ac.rhul.cs2800.model</groupId>
<artifactId>StudentGradeManagement</artifactId>
<version>1.0-SNAPSHOT</version>
<name>StudentGradeManagement</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>17</maven.compiler.release>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.11.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<!-- Optionally: parameterized tests support -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<configLocation>google_checks.xml</configLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<violationSeverity>warning</violationSeverity>
</configuration>
</plugin>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>4.8.6.0</version>
<configuration>
<threshold>High</threshold>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>jacoco-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>PACKAGE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.9</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.20.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.6.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<configLocation>google_checks.xml</configLocation>
<failsOnError>true</failsOnError>
<violationSeverity>warning</violationSeverity>
</configuration>
<reportSets>
<reportSet>
<reports>
<report>checkstyle</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>4.8.6.0</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<reportSets>
<reportSet>
<reports>
<report>report</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.10.0</version>
<configuration>
<doclint>all,-missing</doclint>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
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;
}
}
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;
}
}
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;
}
}
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;
}
}
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);
}
}
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);
}
}
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());
}
}
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());
}
}
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());
}
}
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));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment