我的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变量的值。但是,当我写出来时,我被给了一个错误。有人能告诉我这是什么问题吗?
答案 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;