2012-12-04 2 views
-2

제 프로그램에는 studentId를 저장하는 마크와 사전 목록이 있습니다. 사용자가 studentId를 입력하고 해당 ID에 따라 마크 목록을 가리 키기를 원합니다. 나는 그것을 잘못 구현한다고 생각한다. 누군가 그것을 구현하는데 나를 도울 수 있습니까? 감사합니다사전에 목록 추가

public class Student() { 
     private string name; 
     private string surname; 
     private string dob; 
     private string address; 
     private int id; 

     public Student() 
     { 
     } 
     public Student(string year,string name, string surname, string dob, string address) 
     { 
      this.name = name; 
      this.surname = surname; 
      this.dob = dob; 
      this.address = address; 
      this.year = year; 
     } 


     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 

     public string Surname 
     { 
      get { return surname; } 
      set { surname = value; } 

     } 

     public string DOB 
     { 
      get { return dob; } 
      set { dob = value; } 
     } 

     public string Addr 
     { 
      get { return address; } 
      set { address = value; } 

     } 
     public int Id 
     { 
      get { return id; } 
      set { id = value; } 
     } 


     private string year; 

     public string Year 
     { 
      get { return year; } 
      set { year = value; } 

     } 
     public Student(string s) 
     { 
      string[] splitted = s.Split(','); 
      name = splitted[0]; 
      surname = splitted[1]; 
      dob = splitted[2]; 
      address = splitted[3]; 
      // id = splitted[4];   
     } 
     public Dictionary<int,List<Marks>> dictionary= new Dictionary<int,List<Marks>>(); 
     public List<Marks> Mathematics = new List<Marks>(); 
     public List<Marks> English = new List<Marks>(); 
     public List<Marks> Maltese = new List<Marks>(); 
     public List<Marks> ReligiousStudies = new List<Marks>(); 
     public List<Marks> SocialStudies = new List<Marks>(); 
     public Dictionary<int, List<Marks>> dictionar = new Dictionary<int, List<Marks>>(); 


     public void AddMarks(int hyexam, int anexam) 
     { 
      { 
       Console.WriteLine("enter id of student to input marks to:"); 
       string id = Console.ReadLine(); 
       if (dictionar.ContainsKey(Id).Equals(id)) 
       { 
        Mathematics.Add(new Marks(hyexam, anexam)); 
        English.Add(new Marks(hyexam, anexam)); 
        Maltese.Add(new Marks(hyexam, anexam)); 
        ReligiousStudies.Add(new Marks(hyexam, anexam)); 
        SocialStudies.Add(new Marks(hyexam, anexam)); 
        dictionar.Add(id, (Mathematics)); //dont know how to implement it 
       } 
       else 
       { 
        Console.WriteLine("id not found"); 
       } 

      } 
     } 

    public class Marks 
    { 
     private int hyexam; 
     private int anexam; 
     private string id; 
     public int HYEXAM 
     { 
      get { return hyexam; } 
      set { hyexam = value; } 
     } 

     public int ANEXAM 
     { 
      get { return anexam; } 
      set { anexam = value; } 
     } 

     public string Id 
     { 
      get { return id; } 
      set { id = value; } 
     } 

     public Marks(int hyexam, int anexam) 
     {   
      this.hyexam = hyexam; 
      this.anexam = anexam; 
     } 
     public Marks(string id) 
     { 
      this.id = id; 
     } 

     public double OverallExam() 
     { 
      return (0.4 * hyexam) + (0.6 * anexam); 
     } 

    } 
} 
+2

우선은 참고 : 당신이 * 자동으로 구현 된 속성 *에 보일 것입니다 - 그들은 크게 코드의 상반기 보일러 플레이트의 양을 줄일 것입니다. –

+0

무엇이 문제입니까? 정확히 어디서 붙어 있니? – Spontifixus

+1

모든 마크 또는 마크 하나만 추가해야합니까? 데이터 구조를 선택하면 내 머리를 긁을 수 있습니다. 각 주제별 목록 대신 Marks, wit h subject ID 여야합니다. (주제 당 여러 표가없는 한) – Tilak

답변

4

나는 주요 문제는 모델링이다라고 말하고 싶지만. 을 Student 번지로 포함 시켰습니다. 즉, Student 개체에 사전이 있습니다. 그건 의미가 없습니다 - 왜냐하면 사전의 핵심은 학생 ID가되는 것이니까요, 그렇죠?

Student은 현재 사용자가 가지고있는 마크 목록 (예 : 공개 입력란이 아닌 경우)에 해당합니다. 이 정보를 감안할 때 Dictionary 마크가 필요하십니까? (?를 Student 클래스 하지 - 어쩌면 School 클래스) Dictionary<int, Student> 곳이 깔끔하지 않을 것 Student에 각 학생의 ID를 매핑, 당신은 Student에서 점수를받을 수 있나요?

달성하려는 목표와 데이터가 실제로 어디에 속해 있는지 생각해보십시오. 내 경험에 비추어 볼 때, 데이터 모델링이 올바르다면 코드는 일반적으로 깨끗한 방식으로 진행됩니다.

(I는 모두 이름과 디자인의 관점에서. 이러한 속성이 나타내는 의미가 무엇입니까, 당신의 Marks 클래스를 질문 거라고?이 시험에서 단일 마크가 정말 아닌가? 아마도 ExamResult 명확 것?을합니까 정말 변경 가능합니다)

+0

당 여러 마크가 있어야합니다 그들에게 단 한 개의 수업이 있어야합니까? 또는 아마도 반년 단위 표식과 연간 표식이 있어야합니다. –

+0

@MariaAttard이 있어야 될뿐만 아니라 일마르크 –

+2

+1하여 모델을 다시 생각해보십시오. 모델을 구현하기 위해 자신이 싸우고 있다면, 모델이 좋지 않기 때문일 수 있습니다. –

0

내 제안 :

귀하의 "마크"클래스 (주제라는 열거하거나, 문자열, 또는의 ID를 가진 INT 될 수있는 주제를 식별하는 무언가가 있어야합니다 데이터베이스에 저장되어있는 경우 제목)

그런 다음 가질 수 있습니다 :

Console.WriteLine("enter id of student to input marks to:"); 
string id = Console.ReadLine(); 

var marks = new Dictionary<int, List<Mark>>(); 

if (UserExists(id)) 
{ 
    Console.WriteLine("mark for subject1:");   
    string s1 = Console.ReadLine(); 
    Console.WriteLine("mark for subject2:");   
    string s2 = Console.ReadLine(); 

    var list = new List<Mark>(); 
    list.Add(new Mark { Subject = SubjectEnum.Subject1, Value = Convert.ToDecimal(s1), }); 
    list.Add(new Mark { Subject = SubjectEnum.Subject2, Value = Convert.ToDecimal(s2), }); 

    marks.Add(Convert.ToInt32(id), list) 
} 
else 
{ 
    Console.WriteLine("id not found"); 
} 

희망이 있습니다.

1

나는 이것이 확실히 모델링 문제 (OP의 다른 게시물을 기반으로 함) 인 Jon과 동의합니다. 객체 지향 프로그래밍을 처음 사용하는 경우 가장 먼저해야 할 일은 문제 해결에 필요한 객체를 결정하는 것입니다.

학생이란 무엇입니까? 학생은 이름, ID, dob, 학년 등이 있습니다. 학생이 가진 모든 속성에 대해 필드 나 속성을 설정해야합니다.

public class Student 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public DateTime DoB { get; set; } 
    ... etc ... 
} 

마크 (Mark)는 무엇입니까? 설명을 통해 Mark에게는 과목, 중간 시험 점수 및 연간 시험 점수가 있습니다.

public class Mark 
{ 
    public string Subject { get; set; } 
    public int MidScore { get; set; } 
    public int FinalScore { get; set; } 
} 

학생과 마크의 관계는 무엇입니까? 학생은 그들과 관련된 마크의 목록을 가지고 있습니다. 이것은 List <> 개체로 가장 잘 설명됩니다.

public class Student() // continued 
{ 
    public List<Mark> Marks { get; set; } 
} 

당신이 당신의 객체에 대해 설정 한 기본이 있으면, 당신이 필요하지 않은 것을 필터링, 그리고 훨씬 쉽게 귀하의 질문에 대답 할 수 있도록 쉬울 것이다. :)