0

I am attemping to read a text file in the format of (The # at end is just the number of classes they're in, but I dont save the course name with the fac/students class)

Course Biology
Faculty Taylor Nate 0
Student Doe John 3
Student Sean Big 0
Course Art
Faculty Leasure Dan 1

The first input should be a course, followed by the faculty and students of the specific course. The Course class should contain a collection of faculty members and a collection of students.

I have been able to put each course/student/faculty into their respective class, but I am having trouble visualizing a way to add the students/faculty to the course.

My current idea putting the data into their respective classes would be to keep the current index of the course- therefore I have it saved as

courses[currentCourse++]

so when I parse the next line, (being a faculty/student) I already know what the course index should be.

        using (StreamReader reader = new StreamReader(fileName))
        {
            while (!reader.EndOfStream)
            {
                lineCounter++;
                line = reader.ReadLine();
                string[] words = line.Split(' ');
                Console.WriteLine(words[0]);
                if (words[0] == "Course")
                    {
                        string nameOfCourse = words[1];
                        courses[currentCourse++] = new Course
                        {
                            Name = nameOfCourse
                        };
                    }
                    if (words[0] == "Faculty")
                    {
                        string firstName = words[1];
                        string lastName = words[2];
                        string numOfClasses = words[3];
                        faculty[currentFaculty++] = new Faculty
                        {
                            FirstName = firstName,
                            LastName = lastName,
                            NumOfClasses = numOfClasses,
                        };
                    }
                    if (words[0] == "Student")
                    {
                        string firstName = words[1];
                        string lastName = words[2];
                        string numOfClasses = words[3];
                        students[currentStudent++] = new Student
                        {
                            FirstName = firstName,
                            LastName = lastName,
                            NumOfClasses = numOfClasses,
                        };
                    }

I know the problem lies in the courses class itself- but i'm not sure the terminology to add a class to another class.

public class Course
{
    public override string ToString()
    {
        return $"{Name}";
    }
    public string Name { get; set; }

}

public class Student
{
    public override string ToString()
    {
        return $"{FirstName} {LastName} {NumOfClasses}";
    }
    public string FirstName { get; set; } = string.Empty;

    public string LastName { get; set; } = string.Empty;

    public string NumOfClasses { get; set; } = string.Empty;
}

Thanks for reading!

0

2 Answers 2

1

You want to add a collection of Student and Faculty to the course class, correct? You can do so like this by simply adding a List<T> to your Course class and then initializing it in a constructor.

public class Course
{
    public override string ToString()
    {
        return $"{Name}";
    }
    public string Name { get; set; }

    public List<Student> Students { get; set; }

    public List<Faculty> FacultyMems { get; set; }

    public Course()
    {
        Students = new List<Student>();
        FacultyMems = new List<Faculty>();
    }

}

And in your using block, you can add each student/faculty to the course as so:

if (words[0] == "Course")
{
   string nameOfCourse = words[1];
   currentCourse++;
   courses[currentCourse] = new Course
   {
      Name = nameOfCourse
   };
}
if (words[0] == "Faculty")
{
    string firstName = words[1];
    string lastName = words[2];
    string numOfClasses = words[3];
    courses[currentCourse].FacultyMems.Add(new Faculty
    {
        FirstName = firstName,
        LastName = lastName,
        NumOfClasses = numOfClasses,
    });
}
if (words[0] == "Student")
{
    string firstName = words[1];
    string lastName = words[2];
    string numOfClasses = words[3];
    courses[currentCourse].Students.Add(new Student
    {
        FirstName = firstName,
        LastName = lastName,
        NumOfClasses = numOfClasses,
    });
}

With this, each time you encounter "Course" your course list will add a new item and then you can append students/faculty/etc when those values occur.

This can be simplified even further but the concept is there for you to follow. Hope this helps.

Sign up to request clarification or add additional context in comments.

Comments

0

If I'm understanding you correctly, you want your courses to have a list of faculty and students?

public class Course

{
    public override string ToString()
    {
        return $"{Name}";
    }
    public string Name { get; set; }
    public List<Student> Students { get; set; }
    public List<Faculty> FacultyMembers {get; set;} 

}

Just be sure to initialize the Lists before trying to add things to them otherwise you'll get a null ref exception.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.