-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCourse.java
More file actions
115 lines (99 loc) · 3.92 KB
/
Copy pathCourse.java
File metadata and controls
115 lines (99 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.util.*;
import java.io.*;
// Represents a university course with enrollment, instructor, and grading functionality
public class Course implements Reportable {
//Fields
private String code;
private String name;
private String department;
private int credits;
private String semester;
private String programCode;
private AcademicMember instructor;
private List<Student> enrolledStudents;
private Map<Student, String> grades;
// Constructor initializes course details and collections
public Course(String code, String name, String department, int credits, String semester, String programCode) {
this.code = code;
this.name = name;
this.department = department;
this.credits = credits;
this.semester = semester;
this.programCode = programCode;
this.enrolledStudents = new ArrayList<>();
this.grades = new HashMap<>();
}
// Enrolls a student into the course
public void enrollStudent(Student student) {
enrolledStudents.add(student);
}
// Assigns an instructor to the course
public void assignInstructor(AcademicMember instructor) {
this.instructor = instructor;
}
// Assigns a grade to a student in this course
public void assignGrade(Student student, String grade) {
grades.put(student, grade);
}
// Calculates the average numerical grade for the course
public double calculateAverageGrade() {
if (grades.isEmpty()) return 0.0;
double total = 0;
for (String grade : grades.values()) {
total += GradeConverter.convert(grade);
}
return total / grades.size();
}
// Returns a distribution of letter grades and their counts
public Map<String, Integer> getGradeDistribution() {
Map<String, Integer> distribution = new LinkedHashMap<>();
for (String g : grades.values()) {
distribution.put(g, distribution.getOrDefault(g, 0) + 1);
}
return distribution;
}
// Generates a report of the course including grades and enrolled students
public String generateReport() {
StringWriter writer = new StringWriter();
writer.write("Course Code: " + code + "\n");
writer.write("Name: " + name + "\n");
writer.write("Department: " + department + "\n");
writer.write("Credits: " + credits + "\n");
writer.write("Semester: " + semester + "\n\n");
writer.write("Instructor: ");
writer.write(instructor != null ? instructor.getName() : "Not assigned");
writer.write("\n\n");
writer.write("Enrolled Students:\n");
for (Student student : enrolledStudents) {
writer.write("- " + student.getName() + " (ID: " + student.getId() + ")\n");
}
writer.write("\nGrade Distribution:\n");
List<Map.Entry<String, Integer>> gradeList = new ArrayList<>(getGradeDistribution().entrySet());
Collections.sort(gradeList, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> entry1, Map.Entry<String, Integer> entry2) {
return entry1.getKey().compareTo(entry2.getKey());
}
});
for (Map.Entry<String, Integer> entry : gradeList) {
writer.write(entry.getKey() + ": " + entry.getValue() + "\n");
}
writer.write("\nAverage Grade: " + String.format(Locale.ENGLISH, "%.2f", calculateAverageGrade()) + "\n");
return writer.toString();
}
// Getters
public String getCode() {
return code;
}
public String getName() {
return name;
}
public String getDepartment() {
return department;
}
public int getCredits() {
return credits;
}
public String getSemester() {
return semester;
}
}