如何让用户添加和删除数组中的“插槽”?

时间:2017-10-03 14:34:32

标签: c++ visual-studio-2015

我的C ++课程中有一个项目 - 我们应该创建一个“简单的学生管理系统”,包括学生属性变量的类,以及一个带有分支语句的主函数,让用户输入名称和学生的ID。我知道我需要使用数组为学生制作“插槽”,并且我的分支语句需要让用户在这些插槽中输入值,但我不确定如何操作。这是我到目前为止的代码。

#include <string>
#include <iostream>
#include <utility>

using std::string;
using std::cin;
using std::cout;
using std::endl;

struct Student {
private:
    int id;
    string name;
    int birthday;
public:
    Student()
    {
        id = 0;
        birthday = 0;
    }
    Student(int id, string name, int birthday)
    {
        //set your parameters to the class variables
        this->id = id;
        this->name = name;
        this->birthday = birthday;
    }
    void setID(int id)
    {
        this->id = id;
    }
    int getID() {
        return id;
    }
    void setName(string name)
    {
        this->name = name;
    }
    string getName()
    {
        return name;
    }
    void setBirthday(int birthday)
    {
        this->birthday = birthday;
    }
    int getBirthday()
    {
        return birthday;
    }
    void output() {
        cout << id << name << birthday << endl;
    }
};

int main() {
    Student arr[50];
    cout << "Student Management System" << endl;
    cout << "Press 'a' to add a student" << endl;
    char a = 1;
    int y = 1;
    while (a == 'a') {
        switch (y)
        {
            cout << "Input Student ID:";
            cin >> id;
        }
    }
}

我最关注的是从底部开始的第四行。我被告知我需要使用我的setter,所以我说我希望我的用户输入被视为我在类中设置的ID变量的值。但是,当我写出来时,我被给了一个错误。有人能告诉我这是什么问题吗?

2 个答案:

答案 0 :(得分:0)

您应该尝试让switch语句正常工作。要使用类设置器,您可以将用户输入存储到临时变量中,然后从您可以调用成员函数的一个学生中存储。即在你的情况下:
arr[index].setID(tempInputVariable);

答案 1 :(得分:0)

id函数中没有main或全局变量。

我建议你重载operator >>让你的结构从数据流中提取其成员:

struct Student
{
 //...
  public:
    friend std::istream& operator>>(std::istream& input, Student& s);
};

std::istream& operator>>(std::istream& input, Student& s)
{
  input >> s.id;
  input >> s.name;
  input >> s.birthday;
  return input;
}

虽然上面的代码不使用setter,但它是输入数据的首选方法。

可以修改重载以使用setter(一种过度杀伤):

std::istream& operator>>(std::istream& input, Student& s)
{
  int id;
  input >> id;
  s.setID(id);

  std::string name;
  input >> name;
  s.setName(name);

  int birthday;
  input >> birthday;
  s.setBirthday(birthday);
  return input;
}

如果您不喜欢过载,可以执行main功能中的步骤:

//...
Student new_student;
//...
{
  int student_id;
  std::cout << "Input Student ID:";
  std::cin >> student_id;
  new_student.setID(student_id);

  std::string student_name;
  std::cout << "Input Student Name: ";
  std::cin >> student_name;
  new_student.setName(student_name);

  int student_birthday;
  std::cout << "Input Student Birthday: ";
  std::cin >> student_birthday;
  new_student.setBirthday(student_birthday);
}

编辑1:数据库
您可能需要存储或记住学生。使用上面的第一种方法很容易:

std::vector<Student> database;
Student s;
std::cout << "Enter student information (ID, Name and birthday, separated by spaces:\n";
std::cin >> s;
// Append to the database
database.push_back(s);

如果您还没有学习std::vector,可以尝试使用数组:

const size_t MAXIMUM_STUDENTS = 16;
Student database[MAXIMUM_STUDENTS];
size_t database_index = 0;
//...
Student s;
std::cout << "Enter student information (ID, Name and birthday, separated by spaces:\n";
std::cin >> s;
// Append to database
database[database_index] = s;
++database_index;