import java.lang.Math;
import java.util.ArrayList;
class Student {
private String name;
private int totalPoints;
private int totalAssignments;
private ArrayList<String> assignments;
private ArrayList<Double> grades;
private int maxTotalPoints;
private double currentGrade;
private double weightSum;
Student(String name) {
this.name = name;
this.totalPoints = 0;
this.totalAssignments = 0;
this.assignments = new ArrayList<>();
this.grades = new ArrayList<>();
this.maxTotalPoints = 0;
this.currentGrade = 100.0;
this.weightSum = 0.0;
System.out.println("Creating Student: " + this.name);
System.out.println("Student created successfully!");
System.out.println("");
}
private double avgGrade() {
double sum = 0;
for (Double g : this.grades) {
sum += Math.max(0, g);
}
double avg = sum;
if (this.grades.size() <= 0) {
avg = 1.0;
}
else {
double len = 1 / this.grades.size();
avg = sum / this.weightSum;
}
return avg;
}
public void addAssignment(String assignmentName, int points, int maxPoints, double weight) {
this.grades.add((double)(weight * points / maxPoints));
this.assignments.add(assignmentName);
this.totalPoints += points;
this.maxTotalPoints += maxPoints;
this.weightSum += weight;
double perc = ((double) points/maxPoints) * 100.0;
int grade = Math.max(0, (int)(perc));
this.totalAssignments = this.assignments.size();
System.out.println("Adding Grade: " + grade + "%");
}
public double getAverage() {
return (double)((this.totalPoints / this.maxTotalPoints)*100.0);
}
public String getGrade() {
this.currentGrade = (int)(this.avgGrade()*100.0);
String letterGrade = "";
String suffix = "";
if (this.currentGrade >= 90) {
letterGrade = "A";
if (this.currentGrade >= 96) {
suffix = "+";
}
else if (this.currentGrade <= 94) {
suffix = "-";
}
}
else if (this.currentGrade >= 80 && this.currentGrade <= 89.9) {
letterGrade = "B";
if (this.currentGrade >= 86) {
suffix = "+";
}
else if (this.currentGrade <= 84) {
suffix = "-";
}
}
else if (this.currentGrade >= 70 && this.currentGrade <= 79.9) {
letterGrade = "C";
if (this.currentGrade >= 76) {
suffix = "+";
}
else if (this.currentGrade <= 74) {
suffix = "-";
}
}
else if (this.currentGrade >= 60 && this.currentGrade <= 69.9) {
letterGrade = "D";
if (this.currentGrade >= 66) {
suffix = "+";
}
else if (this.currentGrade <= 64) {
suffix = "-";
}
}
else {
letterGrade = "F";
if (this.currentGrade >= 56) {
suffix = "+";
}
else if (this.currentGrade <= 54) {
suffix = "-";
}
}
String result = letterGrade + suffix;
return result;
}
public void reset() {
this.assignments = new ArrayList<>();
this.grades = new ArrayList<>();
this.totalPoints = 0;
this.maxTotalPoints = 0;
System.out.println("Reset " + this.name + "'s Report Card :(");
}
public void gradeReport() {
System.out.println("--- " + this.name + "'s Grade Report ---");
System.out.println("Total Points: " + this.totalPoints);
System.out.println("Current Grade Average: " + (int)(this.avgGrade() * 100.0));
System.out.println("Current Letter Grade: " + this.getGrade());
System.out.println("Good enough, I guess...");
}
}
System.out.println("=== Student Grade Tracker System ===");
System.out.println("");
Student carl = new Student("Carl Smite");
System.out.println("--- Adding Grades for Carl ---");
carl.addAssignment("Homework 1", 9, 10, 0.1);
carl.addAssignment("Homework 2", 10, 10, 0.1);
carl.addAssignment("Test", 96, 100, 0.9);
carl.addAssignment("Test Review", 46, 50, 0.1);
System.out.println("");
carl.gradeReport();
System.out.println("");
System.out.println("========================================");
System.out.println("");
Student antiCarl = new Student("Anti Carl");
System.out.println("--- Adding Grades for Anti Carl ---");
antiCarl.addAssignment("Homework 1", -9, 10, 0.1);
antiCarl.addAssignment("Homework 2", -10, 10, 0.1);
antiCarl.addAssignment("Test", -96, 100, 0.9);
antiCarl.addAssignment("Test Review", -46, 50, 0.1);
System.out.println("");
antiCarl.gradeReport();
System.out.println("");
antiCarl.reset();
System.out.println("");
antiCarl.gradeReport();