数据结构多对多(3way)关系

时间:2012-03-24 09:18:56

标签: c# data-structures

我坚持使用C#中的这个小项目,但基本上我的问题是: 我试图为考试统计数据创建一个数据结构...... 所以: 一个学生可以有很多科目 一个科目可以有很多学生 复杂的部分是,一个科目可以有多个考试(重考),因此一个学生将有一个科目的许多结果...... 我有点失去了如何规范这个。谁有人建议?这是我的第一个解决方案:

class StudentRec
{
    string name;
    string candidate_number;
    string student_id;
    List<Subject> modules;
}

class Subject_Record
{
    string subject_code;
    Exam_Record first_attempt;
    Exam_Record second_attempt;
    Exam_Record third_attempt;

}

class Exam_Record
{
   string year;
   int mark;
   char grade;
}
但是,如果我这样做,每个学生都会有相同主题的不同实例。

3 个答案:

答案 0 :(得分:2)

这样的东西
  • 学生
    • 名称等
  • 主题
    • 代码等
  • 报名/学生科目(多对多)
    • 学生参考
    • 主题参考
    • 报名日期等
  • 考试(入学一对多)
    • 报名参考
    • 考试日期
    • 标记/等级

所以学生在主题中招募 - &gt;注册。然后,对于注册,您可以有许多考试,每个考试一个,以处理重拍。

答案 1 :(得分:1)

基于Mike Q的回答。

class Student
{
    string name;
    string candidate_number;
    string student_id;

    // One to many
    List<Enrollment> modules;
}

class Enrollment
{
    Subject subject;

    // One to many
    List<Exam> exams;
}

class Subject
{
    string subject_code;
}

class Exam
{
    int attempt;
    string year;
    int mark;
    char grade;
}

答案 2 :(得分:0)

您可以将学科记录添加到学生中,因此学生可以列出他正在学习的科目,并且还列出了他已经完成的当前和过去科目的成绩列表。所以代码变成了:

  class StudentRec
  {
    string name;
    string candidate_number;
    string student_id;
    List<Subject> modules;
    List<Subject_Record> subject_results;
 }

 class Subject_Record
 {
    string subject_code;
    Exam_Record first_attempt;
    Exam_Record second_attempt;
    Exam_Record third_attempt;   
 }

 class Exam_Record
 {
   string year;
   int mark;
   char grade;
 }

如果您想将Subject_record和Exam_Record链接回学生,可以将学生ID添加到这些记录中。