Как вы решите это?Старомодный студент / Курс / Школьный кодекс.Вот мой подход: - PullRequest
0 голосов
/ 25 января 2012

Мне просто любопытно, неверно ли мое мышление. Будет ли работать мой образ мышления или мне понадобятся указатели / ссылки в моем коде? Как бы вы подошли к этому? Я просто черновик на этом этапе. Посмотрите на мои комментарии для моих проблем. В основном любопытно, стоит ли мне использовать указатели и как ссылаться на классы в моем классе учеников.

Сокращенный пример Проблема: создайте программу, которая позволит вам: 1.) Создать / удалить ученика из школы 2.) Создать / удалить курс из школы 3.) Добавить / удалить студента из курса 4.) Распечатайте список студентов курса 5.) Распечатайте список курсов, в которых учится студент.

class Student
{
    public:
    string name;
    int id;
    Student(){};//Default Construct
    Student(int idin,string namein)
    {
        id=idin;
        name=namein;
    }
    void PrintClasses()
    {
        //Umm... I can't create a Class Vector yet because Class is declared under this.. Hmm... Not sure on this part.
    }
};


class Class
{
public:
    int id;
    string name;
    Student students_in_class; //Is this the right way to store students in the class?

    Class(){};//Default Constructor
    Class(int idin, string namein)
        {
        id=idin;
        name=namein;
        }
    void PrintStudents()
    {
        for (i=0;i<students_in_class.size();i++)
        {
            cout<<students_in_class.id<<'\n';
        }
    }
};

class School
{
public:
    Vector<Student> studentlist;
    Vector<Class> classlist;

    //This is where you do everything.
    void StudentAdd(int id,string name)
    {
        //Adds a student to the school
        Student mystudent=Student(id,name);
        studentlist.push_back(mystudent);
    }
    void StudentAdd2Course(int student_id,int course_id)
    {
        for (i=0;i<classlist.size();i++)
            {
                if(classlist[i].id==course_id)
                {
                    //Correct Class ID Found. Now find student Id
                    for (int j=0;j<studentlist.size();j++)
                        if(studentlist[j].id==student_id)
                            classlist[i].students_in_class.push_back(studentlist[j]);//Push Student in class list
                }
            }

    }
    void StudentRemoveFromCourse(int student_id,int course_id)
    {
        for (i=0;i<classlist.size();i++)
            {
                if(classlist[i].id==course_id)
                {
                    //Correct Class ID Found. Now find student Id
                    for (int j=0;j<studentlist.size();j++)
                        if(studentlist[j].id==student_id)
                            classlist[i].students_in_class.erase(studentlist[j]);//Push Student in class list
                }
            }

    }

    //Other functions like create class, delete class, etc

};

1 Ответ

2 голосов
/ 25 января 2012

Как правило, при разработке чего-то объектно-ориентированного я стараюсь начинать с простых классов, и пусть другие классы действуют на них как марионетки (не фанат, несмотря на то, что моделируют учеников).

В данном случае это простая работа: «Студент» - это простой класс, курс содержит «Студентов», а «Школа» содержит курсы (и, возможно, студентов).

Единственное осложнение - это печать курсов, которые посещает студент. Я бы сказал, что концептуально его не должно быть в классе Student, поскольку ему нужно больше информации, чем может предоставить простой объект.

Когда дело доходит до его реализации, вы можете либо перебирать существующие данные, либо хранить дополнительную информацию. Если вы делаете последнее, убедитесь, что дополнительная информация соответствует в нормальной системе.

Ps. Посмотрите, как вы пишете циклы с использованием итераторов в C ++.

...