6

これは宿題です!!! これを、私が誰かにコードを書いてほしいと頼んでいると解釈しないでください。

私のプログラム: http://pastebin.com/SZP2dS8D

これは私の最初の OOP です。プログラムはユーザー入力 (UI) がなくても問題なく動作しますが、それを実装すると、設計が部分的に無効になります。割り当ての制限により、List コレクションは使用していません。私の主な目標は、すべてを Transcript クラスから実行することです。ここに私が遭遇しているいくつかの問題があります:

  • Transcript の新しいインスタンスを
    毎回作成することなく、ユーザーが新しいコースを追加できるようにする
  • 特定の四半期に追加されたコースを関連付ける

これは、私が達成しようとしていることを示すための疑似コードです。私はそれを実験してきましたが、まだ成功していません。

Please enter the quarter: (user input)
Would you like to add a course? 

while (true)

Enter Course/Credits/Grade

//new Course information populated with user input 
transcript.AddCourse.to specific Quarter((Fall 2013) new Course("Math 238", 5, 3.9));
transcript.AddCourse.to specific Quarter((Fall 2013) new Course("Phys 223", 5, 3.8));
transcript.AddCourse.to specific Quarter((Fall 2013) new Course("Chem 162", 5, 3.8));

MY QUESTION[S]: Transcript クラスを保持する必要がありますか、それとも破棄する必要がありますか? 新しいコースを作成する現在の機能では、UI を使用している間、この方法を維持することは可能ですか? それとも、チョーク ボードに戻って再構成する必要がありますか?

うまくいけば、これは一貫性があり、広すぎません。明確化が必要な場合は、お問い合わせください。詳細を提供させていただきます。

4

3 に答える 3

6

私は次の構成を検討します

public class Transcript
{
  public Quarter[] Quarters{get;set;}
}

public class Quarter
{
  public Course[] Courses{get;set;}
}

トランスクリプト クラスのインスタンスは 1 つだけ必要です。これにより、四半期ごとに n コースで n 四半期 (複数年) をモデル化できます。

入力ループでは、ユーザー入力に応じて新しいコース/学区を追加できます

于 2013-06-09T02:18:37.550 に答える
3

この問題をモデル化するには多くの方法があり、成績証明書クラスを作成するのは正しいと思いますが、クォーターに一連のコースがあると考えるのではなく、どのクォーターのコースが提供されるかはそのコースのプロパティであると提案しますコース。例えば:

public class Transcript
{
    private List<Course> courses_ = new List<Course>();

    public IEnumerable<Course> Courses {get { return courses_; }

    public IEnumerable<Course> GetCoursesFor(int year, int quarter)
    {
        return courses_.Where(course => course.Year == year && course.Quarter == quarter);
    }

    public void AddCourse(Course course)
    {
        courses_.Add(course);
    }
}


public class Course
{
    public int Year {get; private set;}
    public int Quarter {get; private set;}
    // ... other members
}
于 2013-06-09T02:43:55.300 に答える
2

あなたはこれを試すことができます

public enum Quarters
    {
        First,
        Second,
        Third,
        Fourth
    }
    class Courses
    {
        private Quarters ThisQuarter { get; private set; }
        private List<Tuple<Quarters, List<Courses>>> SchoolProgram = new List<Tuple<Quarters, List<Courses>>>();

        public int year { get; private set; }
        public string name { get; private set; }

        private Courses()
        {
            //load list from database or xml
            //each tuple has one quarters and a list
            // of associated courses
            //SchoolProgram.Add(new Tuple<Quarters, List<Courses>>(Quarters.First, new List<Courses>(){new Courses(2010,"Math",Quarters.First),
            //                                                                                       new Courses(2010,"English",Quarters.First),
            //                                                                                       new Courses(2010,"Physics",Quarters.First)}));
        }

        public Courses(int year,string name,Quarters q)
        {
            this.year = year;
            this.name = name;
            ThisQuarter = q;

        }

        public Courses GetCourse()
        {
            return SchoolProgram.Find(q => q.Item1 == ThisQuarter).Item2.Single(c => (c.year == this.year && c.name == this.name));
        }
    }

    public class Transcript
    {
        private List<Courses> SchoolProgram = new List<Courses>();

        public Transcript()
        {
            //maybe aditional logic here
        }

        public void AddCourse(int year,string name,Quarters q)
        {
            Courses c = new Courses(year, name, q);
            SchoolProgram.Add(c.GetCourse());
        }
    }

成績やその他のものに関する追加のロジックを追加できます....よろしくお願いします

于 2013-06-09T03:38:20.917 に答える