2011-04-06 5 views
0

다음과 같은 몇 가지 문제가 있습니다. 새 사용자를 추가하면 올바르게 작동하지만 두 번째 사용자를 추가하면 첫 번째 사용자는 잊어 버리게됩니다. 이전에 추가 된 이전 사용자를 잊어 버리는 것을 계속합니다.사용자가 ID 이름 등을 입력하는 일종의 데이터베이스를 수행하면 사용자가 id를 입력하면 해당 사용자에게 코스를 추가 할 수 있습니다.

static List<Students> stud = new List<Students>(); 
    static Courses regcor = new Courses(0,""); 
    static void Main(string[] args) 
    { 
     Students regstud = new Students("", "", "", 0); 
     string idselec = ""; 
     string selec = ""; 
     do 
     { 


      Console.WriteLine("1.Register new student."); 
      Console.WriteLine("2.Add course."); 
      Console.WriteLine("3.All information."); 
      Console.WriteLine("4.Exit."); 
      selec = Console.ReadLine(); 
      if (selec == "1") 
      { 
       do 
       { 
        Console.Clear(); 
        Console.WriteLine("Enter ID"); 
        idselec = Console.ReadLine(); 
        if (checkid(idselec)) 
        { 
         Console.WriteLine("Id already excsists"); 
         Console.ReadLine(); 
        } 

       } 
       while (checkid(idselec)); 
       regstud.ID = idselec; 
       Console.WriteLine("Enter Name"); 
       regstud.name = Console.ReadLine(); 
       Console.WriteLine("Enter Surname"); 
       regstud.surname = Console.ReadLine(); 
       Console.WriteLine("Enter Age"); 
       regstud.age = Convert.ToInt32(Console.ReadLine()); 
       stud.Add(regstud); 
      } 
      else if (selec == "2") 
      { 
       Console.WriteLine("Enter ID"); 
       idselec = Console.ReadLine(); 
       check(idselec); 

      } 
      else if (selec == "3") 
      { 
       Console.Clear(); 
       writeall(); 
      } 

     } 
     while (selec != "4"); 


    } 
    static bool checkid(string id) 
    { 

     return stud.Any(u => u.ID == id); 
    } 

    static void check(string ID) 
    { 
     int i = 0; 
     bool found = false; 
     do 
     { 
      if (stud[i].ID == ID) 
      { 

       Console.WriteLine("Hello " + stud[i].name+" "+ stud[i].surname) ; 
       Console.WriteLine("Enter code"); 
       int code =Convert.ToInt32(Console.ReadLine()); 
       Console.WriteLine("Enter Name"); 
       string name = Console.ReadLine(); 

       regcor.CourID = code; 
       regcor.courname = name; 
       stud[i].cour(regcor); 

       found = true; 


      } 

      i++; 
     } 
     while ((i < stud.Count) && !(found)); 




    } 
    static void writeall() 
    { 
     int i = 0, y=0, sub=0,sub3=0; 
     string sub2=""; 
     do 
     { 
      Console.WriteLine(stud[i].ID); 
      Console.WriteLine(stud[i].name); 
      Console.WriteLine(stud[i].surname); 
      Console.WriteLine(stud[i].age); 
      sub3 = stud[i].cour3(); 
      do 
      { 
       sub = stud[i].cour1(y); 
       sub2 = stud[i].cour2(y); 
       Console.WriteLine(sub); 
       Console.WriteLine(sub2); 

       y++; 


      } 
      while (y < sub3); 
      i++; 
     } 
     while (i < stud.Count); 
    } 
} 

}이 클래스 코스입니다

: 다음은 코드이 클래스의 학생입니다

public int CourID = 0; 
    public string courname = ""; 
    public Courses(int corID, string corname) 
    { 
     this.CourID = corID; 
     this.courname = corname; 

    } 
} 

}

는; 당신이 실제로 새로운 학생을 만들려면 DO 루프에

Students regstud = new Students("", "", "", 0); 

:

public int age = 0; 
    public string name = "", surname = "", ID = ""; 
    List<Courses> cours = new List<Courses>(); 
    public Students(string name, string surname,string ID, int age) 
    { 
     this.ID = ID; 
     this.surname = surname; 
     this.age = age; 
     this.name = name; 
    } 
    public void cour(Courses c) 
    { 
     cours.Add(c); 
    } 
    public int cour1(int i) 
    { 
     return cours[i].CourID; 

    } 
    public string cour2(int i) 
    { 
     return cours[i].courname; 
    } 
    public int cour3() 
    { 
     return cours.Count; 
    } 

} 

}

+0

여기서는 데이터베이스 태그가 유용할지 모르겠습니다. 너는 기억 속의 모든 것을하고있다, 안 그래? 데이터베이스 태그를 사용하면 이러한 유형의 질문에 대답 할 수있는 사람들이 생기고 이것이 어떻게 보이는지는 알 수 없습니다. – MJB

답변

2

당신은 하나 명의 학생을 만드는, 그의 속성

이동이 덮어 쓰기 :

if (selec == "1") 
{ 
    Students regstud = new Students("", "", "", 0); 
    ... 
} 
당신이 구식 루프 구조를 사용하여이 코드가 나에게 석기 시대와 퓨처 라마의 조합처럼 보이는 게다가

if (selec == "1") 
{ 
    ... 
    Console.WriteLine("Enter Name"); 
    string name = Console.ReadLine(); 
    Console.WriteLine("Enter Surname"); 
    string surname = Console.ReadLine(); 
    Console.WriteLine("Enter Age"); 
    int age = Convert.ToInt32(Console.ReadLine()); 

    Students regstud = new Students(name, surename, id, age); 
    ... 
} 

: 당신이 준비가 자신의 모든 속성을 가지고하면 더 좋은 63,210

만 학생 개체를 만드는 것 한편으로는 인덱스 변수를 분리하고, 다른 한편으로는 제네릭과 LINQ를 사용하십시오. 가능한 한 높은 추상화를 고수하십시오. ForEach() 등을 사용하면 대부분의 루프 변수를 피할 수 있습니다. 이렇게하면 코드를 훨씬 명확하고 읽기 쉽게 만들 수 있습니다.

+0

ohh ok thx와 나는 방금 3 개월 전 나는 16 세이다. :) – owenattard

+0

@owenattard : 좋은 일, 계속해라! – BrokenGlass

+0

당신의 도움을 위해 thx 많이 – owenattard

관련 문제