我正在创建一个基于Web的学者系统,供学生查询成绩,查看时间表等。但是,在构建此系统时遇到了问题,因为找不到适合的方法来关联数据。
有一个学生在(学校)班里。学生有一个计分板。 (学校)课程列出了每个科目的学生所拥有的“作业”列表,但仅包含名称,最高分,体重等信息。实际分数位于学生的记分板上。
许多学生在同一班上。
任何时候都只应存在一个作业实例,并且该实例应该存在于SchoolClass对象中,因为该作业随后被应用于整个班级而不是每个学生。
然后,学生应该只保留自己的分数,并从外部引用其余的作业数据。
我如何参考学生的具体作业?
这有点令人困惑。这是我目前拥有的:
class Student extends Person {
private SchoolClass schoolClass;
private Scorecard scorecard;
}
class Subject {
private String name; /// "Compilers II", "Data Structures", etc.
}
class SchoolClass {
private Course course; // "Computer Science", "Administration", etc.
private List<Assignment> assignments;
class Assignment {
private Subject subject;
private int maxScore;
private int weight;
private String name; // "Test about material resistance II"
}
}
class Scorecard {
// How to reference each assignment from each subject in this student's class cleanly?
}
我的设计是否朝着正确的方向发展?还是应该将其删除然后重新开始?谢谢!
最佳答案
这看起来不错,但是我想指出几点。Person
类是抽象的吗?如果是这样,那就做得好!如果不是,那可能是因为人是一个通用术语。有关何时进行类抽象的更多信息,请查看我对this问题的回答。
使用Assignment
作为嵌套类做得很好!它直接与SchoolClass
有关,因此应该嵌套,但是Subject
类呢?这似乎也直接与SchoolClass
连接,因此也使Subject
成为嵌套类并不是一个坏主意。
至于引用单个作业,则取决于您希望如何完成它。如果要按索引获取它,请使用吸气剂。为此,您可以简单地将此代码放在SchoolClass
中:
public Assignment getAssignment(int index)
{
return assignments.get(index);
}
但是,如果要使用名称引用,则比较棘手,但仍然非常棘手。您可以像这样在您的
Assignment
类中添加一个吸气剂:public String getName()
{
return name;
}
然后,您只需要为
SchoolClass
编写另一个getter,如下所示:public Assignment getAssignmentByName(String name)
{
for (Assignment assignment : assignments)
{
if (assignment.getName().equals(name))
return assignment;
}
System.out.println("No assignment found by the name of " + name);
return null;
}
希望有帮助!如果您有任何疑问,请随时提出!
编辑:
为了让您的分配对象描述自己,它们应该覆盖
Object.toString()
。以下代码应放在您的作业类中。// I noticed that you only have a maxScore variable, I think that a score variable is needed
private int score;
@Override
public String toString()
{
return "The score for this assignment is: " + score;
}