您将如何解决这个问题?老式学生/课程/学校代码。这是我的方法:

How would you go about solving this? Old-Fashion Student/Course/School Code. Here's my approach:

本文关键字:课程 学校 代码 方法 我的 何解决 解决 问题      更新时间:2023-10-16

我只是好奇我的思维方式是否不正确。我的思维方式有效吗?还是我的代码中需要指针/引用?你会如何处理这个问题?在这一点上,我只是粗略地画了草图。看看我的评论,了解我的担忧。主要是好奇我是否应该使用指针,以及如何在我的Student类中引用类。

简化示例问题:制作一个程序,让您: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
};

通常,在设计面向对象的东西时,我会尝试从简单的类开始,并让其他类像木偶一样对它们进行操作(尽管为学生建模,但没有phun意图)。

在这种情况下,这是一项直接的工作,Student是一个简单的类,课程包含Students,Scool包含课程(可能还有学生)。

唯一复杂的是打印学生所学的课程。我想说,从概念上讲,它不应该在Student类中,因为它需要比简单对象所能提供的更多的信息。

在实现它时,您可以循环使用现有数据,也可以维护额外的信息。如果执行后者,请确保额外信息在正常系统中是一致的。

Ps。查找如何在C++中使用迭代器编写循环。