簡體   English   中英

C#:糟糕的類設計(第一個OOP)

[英]C#: Bad design of class (first OOP)

這是功課! 請不要將此解釋為我要求有人為我編碼。

我的計划: 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));

我的問題[S]:我應該保留成績單課程,還是丟棄它? 使用創建新課程的當前功能,是否可以在使用UI時保持這種方式,或者我是否需要返回粉筆板並重新配置?

希望這是連貫的,而不是太寬泛。 如果需要澄清,請詢問,我將非常樂意提供更多詳細信息。

我會考慮以下組合

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

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

您只需要一個transcript類的實例。 這將使您能夠為每季度n個課程的n個季度(多年)建模。

在輸入循環中,您可以添加新的課程/季度以響應用戶輸入

有很多方法來模擬這個問題,我認為你有一個成績單課程是正確的,但我不會認為四分之一有一套課程,我會建議提供哪個課程的課程屬性是課程。 例如:

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
}

你可以試試這個

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());
        }
    }

你可以添加關於成績和其他東西的額外邏輯....祝福

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM