我有这个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);
}
答案 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)