补全以下代码private String cid;// Course id, e.g., CS110. private String name;// Course name, e.g., Introduce to Java Programming. private Integer credit;// Credit of this course private GradingSchema gradingSchema; //Grading schema of this course // enum GradingSchema{FIVE_LEVEL, PASS_FAIL} private Integer capacity;// Course capacity. private Integer leftCapacity;// Course capacity left. You should update the left capacity when enrolling students. private Set<Timeslot> timeslots;// One course may have one or more timeslots. e.g., a lecture in Monday's 10:20-12:10, and a lab in Tuesday's 14:00-15:50. public Course(String cid, String name, Integer credit, GradingSchema gradingSchema, Integer capacity) // constructor public void addTimeslot(Timeslot timeslot) //Record a timeslot for this course private Integer id;// A unique student id, should be an 8-digit integer: Undergraduates' ids should start with 1; Postgraduates' ids should start with 3. e.g., 12213199. private String name;// Student’s name private Map<Course, Grade> courses;// Enrolled courses, using Map structure to store course and its grade as a pair. Grade is an enum type enum Grade{PASS,FAIL,A,B,C,D,F}with an attribute: Double gradePoint protected Student(Integer id, String name) // constructor public abstract boolean canGraduate() // Checks if this student satisfies all the graduating conditions. Hint: you are allowed to change this abstract method into non-abstract to check if the student satisfies the common graduation conditions. public void enroll(Course course) // Tries to enroll the course, do some checks before enrolling. public void recordGrade(Course course, Grade grade)// Records the grade of a course that is current learning. public double getGpa() // Calculates the GPA for this student. public UndergraduateStudent(Integer id, String name)// constructor public boolean canGraduate() //Additional graduating conditions for undergraduate students public PostgraduateStudent(Integer id, String name)// constructor public boolean canGraduate() //Additional graduating conditions for postgraduate students
时间: 2024-02-28 20:53:32 浏览: 85
完整代码如下:
```java
import java.util.*;
public class Course {
private String cid;// Course id, e.g., CS110.
private String name;// Course name, e.g., Introduce to Java Programming.
private Integer credit;// Credit of this course
private GradingSchema gradingSchema; //Grading schema of this course // enum GradingSchema{FIVE_LEVEL, PASS_FAIL}
private Integer capacity;// Course capacity.
private Integer leftCapacity;// Course capacity left. You should update the left capacity when enrolling students.
private Set<Timeslot> timeslots;// One course may have one or more timeslots. e.g., a lecture in Monday's 10:20-12:10, and a lab in Tuesday's 14:00-15:50.
public Course(String cid, String name, Integer credit, GradingSchema gradingSchema, Integer capacity) {
this.cid = cid;
this.name = name;
this.credit = credit;
this.gradingSchema = gradingSchema;
this.capacity = capacity;
this.leftCapacity = capacity;
this.timeslots = new HashSet<>();
}
public void addTimeslot(Timeslot timeslot) {
this.timeslots.add(timeslot);
}
}
class Student {
private Integer id;// A unique student id, should be an 8-digit integer: Undergraduates' ids should start with 1; Postgraduates' ids should start with 3. e.g., 12213199.
private String name;// Student’s name
private Map<Course, Grade> courses;// Enrolled courses, using Map structure to store course and its grade as a pair. Grade is an enum type enum Grade{PASS,FAIL,A,B,C,D,F}with an attribute: Double gradePoint
public Student(Integer id, String name) {
this.id = id;
this.name = name;
this.courses = new HashMap<>();
}
public abstract boolean canGraduate(); // Checks if this student satisfies all the graduating conditions. Hint: you are allowed to change this abstract method into non-abstract to check if the student satisfies the common graduation conditions.
public void enroll(Course course) {
if (course.leftCapacity > 0) {
this.courses.put(course, null);
course.leftCapacity--;
}
}
public void recordGrade(Course course, Grade grade) {
if (this.courses.containsKey(course)) {
this.courses.put(course, grade);
}
}
public double getGpa() {
double points = 0.0;
int credits = 0;
for (Map.Entry<Course, Grade> entry : this.courses.entrySet()) {
Course course = entry.getKey();
Grade grade = entry.getValue();
if (grade != null) {
double gradePoint = grade.gradePoint;
int credit = course.credit;
points += gradePoint * credit;
credits += credit;
}
}
return credits == 0 ? 0 : points / credits;
}
}
class UndergraduateStudent extends Student {
public UndergraduateStudent(Integer id, String name) {
super(id, name);
}
public boolean canGraduate() {
double gpa = this.getGpa();
int credits = 0;
for (Map.Entry<Course, Grade> entry : this.courses.entrySet()) {
Course course = entry.getKey();
int credit = course.credit;
credits += credit;
}
return gpa >= 2.0 && credits >= 120;
}
}
class PostgraduateStudent extends Student {
public PostgraduateStudent(Integer id, String name) {
super(id, name);
}
public boolean canGraduate() {
double gpa = this.getGpa();
int credits = 0;
for (Map.Entry<Course, Grade> entry : this.courses.entrySet()) {
Course course = entry.getKey();
int credit = course.credit;
credits += credit;
}
return gpa >= 3.0 && credits >= 30;
}
}
class Timeslot {
private String day;// Day of the week, e.g., Monday, Tuesday, etc.
private String startTime;// Start time of the timeslot, e.g., 10:20.
private String endTime;// End time of the timeslot, e.g., 12:10.
public Timeslot(String day, String startTime, String endTime) {
this.day = day;
this.startTime = startTime;
this.endTime = endTime;
}
}
enum Grade {
PASS("Pass", 4.0),
FAIL("Fail", 0.0),
A("A", 4.0),
B("B", 3.0),
C("C", 2.0),
D("D", 1.0),
F("F", 0.0);
public String name;
public double gradePoint;
Grade(String name, double gradePoint) {
this.name = name;
this.gradePoint = gradePoint;
}
}
enum GradingSchema {
FIVE_LEVEL,
PASS_FAIL
}
```
阅读全文