“class student”类型的c ++数组

时间:2014-03-18 16:22:19

标签: c++ arrays

我有这个c ++任务....并且我有一点问题,因为我使用了更多的c# 我创建了一个班级学生,以便创建一个包含不同元素的数组...问题是如何在类部分的函数中看到数组...以便用学生的详细信息填充它并显示它。代码:

#include <iostream>
#include <string>
#include <array>
#include <iomanip>

using namespace std;

class student{
private:
    int id, age;
        string fname, lname, cob;
        char s;
        int stdcount;
public:

    void addstd();
    void searchstd(int n);
    void displayinfo();
    void deletestd(int n);
    void displayrange();
    void modifyinfo(int n);
};

void student::addstd()
{
    cout<<"Enter ID Number"<<endl;
    cin>>id;
    cout<<"Enter First Name"<<endl;
    cin>>fname;
    cout<<"Enter last Name"<<endl;
    cin>>lname;
    cout<<"Enter age"<<endl;
    cin>>age;
    cout<<"Enter student's Sex(F or M) "<<endl;
    cin>>s;
    cout<<"Enter Country of birth"<<endl;
    cin>>cob;
}
void student::displayinfo()
{
    for(int i=0;i<100;i++)
    {
        cout<<ar[i];
    }
}
void student::searchstd(int m)
{
}


void main()
{
    student s;
    student std[100];
    int choice;
    do{

    cout << "-----------Menu------------" << endl;
        cout << "  1. Add a student " << endl;
        cout << "  2. Search for student by ID " << endl;
        cout << "  3. Display all students information   " << endl;
        cout << "  4. Remove a students  " << endl;
        cout << "  5. Display students aged between 34 - 50  " << endl;
        cout << "  6. Modify a student's information         " << endl;
        cout << "  7. Exit         " << endl;
        cout << "  Enter your choice 1, 2, 3, 4 ,5,6,7   " << endl;
    cin>>choice;
    switch(choice) {
        case 1:
            for(int i=0;i<3;i++)
            {
                std[i].addstd();
            }
           break;
        case 2:
            int numid;
            cout <<"enter id "<<endl;
            cin>>numid;
            s.searchstd(numid);
           break;
        case 3:
           break;
        case 4:
            break;
        case 5:
           break;
        case 6:
           break;
        default:
           cout << "Please enter 1, 2, 3, 4, 5, 6 or 7 : " << endl << endl;
    }

    }while(choice!=7);

}

2 个答案:

答案 0 :(得分:0)

您的问题与C ++关系不大,而且与正确的设计有关。即使您使用了C#,如果有任何理由来创建学生对象,也就像C ++一样。

首先,正如其他人所提到的,学生应该只了解自己(名字,姓氏)。跟踪其他学生不是学生的责任。一个非常粗略的设计看起来像这样:

#include <string>
 class student {
  private:
     int id, age;
     std::string fname, lname, cob;
     char s;

  public:
     student() {}
     void setId(int n) { id = n; }
     void setFirstName(const std::string& s) { fname = s; }
     void setLastName(const std::string& s) { lname = s; }
     //etc..

     int getId() const { return id; }
     std::string getFirstName() const { return fname; }
     std::string getLastName() const  { return lname; }
    // etc...
};

这就是学生应该拥​​有的一切。设置和获取学生的信息。没有更多,没有更少。你可以通过添加一个构造函数来修饰它,以便在一次调用中轻松创建一个完整的学生(如果你想这样做)。但这是学生班级应该是什么样子的基本要点。

现在您创建了这些学生的数组:

typedef std::array<student, 100> StudentList;  // creates an array of 100 students.

或优选地,载体&lt;学生&gt;,以便更容易处理:

#include <vector>
//..
typedef std::vector<student> StudentList;

然后使用StudentList作为学生的数组/向量。

在展示学生时,它变得微不足道 - 只需逐个浏览阵列并显示学生信息。

答案 1 :(得分:-1)

修改您的displayInfo功能以获取输入

void student::displayInfo(student ar[], int numStudents)
{
    for(int i=0;i<numStudents;i++)
    {
        cout<<ar[i]; // if you have << operator defined
    }
}

然后在main你可以说:

student std[100];
displayInfo (std, 100); // this is passing your array in (you need to populate it though)