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

我的问题[S]:我应该保留 Transcript 课程,还是丢弃它?使用当前创建新课程的功能,是否可以在使用 UI 时保持这种方式,还是我需要回到粉笔板并重新配置?

希望这是连贯的,不要太宽泛。如果需要澄清,请询问,我将非常乐意提供更多详细信息。

4

3 回答 3

6

我会考虑以下组合

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

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

您只需要一个成绩单类的实例。这将使您能够模拟 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 回答