1
#include <iostream> 
#include <string>
#include <math.h> 
#include <fstream>
using namespace std;

class Storage
{
public:
Storage();
string information[10][7];
void SetInformation(string,int);
void GetInformation(int);
};  

Storage::Storage(){cout<<"\nStorage Activated\n";}

void Storage::SetInformation(string,int i)
{//input
    i--;
    for (int j=0;j<7;j++)
    {
    switch(j+1)
    {case 1: cout << "\nFirst Name: "; break;
    case 2: cout << "\nLast Name: "; break;
    case 3: cout << "\nAge: "; break;
    case 4: cout << "\nEmail: "; break;
    case 5: cout << "\nDoor Number: "; break;
    case 6: cout << "\nRoad Name: "; break;
    case 7: cout << "\nPost Code: "; break;
    default:;}      
    cin >> information[i][j];}
    }

void Storage::GetInformation(int i){
// output
    i--;
    for (int j=0;j<7;j++)
    {   
    switch(j+1)
    {case 1: cout << "\nFirst Name: "; break;
    case 2: cout << "\nLast Name: "; break;
    case 3: cout << "\nAge: "; break;
    case 4: cout << "\nEmail: "; break;
    case 5: cout << "\nDoor Number: "; break;
    case 6: cout << "\nRoad Name: "; break;
    case 7: cout << "\nPost Code: "; break;
    default:;}      

    cout << information[i][j];}
}

int main()
{
    int x;
    Storage();
    Storage Someone;
    cin >> x;
    Someone.SetInformation(int);

return 0;
}

好的,这就是我现在所做的。但是我现在在激活课程时遇到问题?我的意思是我不能使用该类或其方法?我是否也以正确的方式创建了这些类?

4

3 回答 3

2

只需有一个包含成员firstName,lastName等的类。叫它Person什么的。然后将您的数组替换为std::vector<Person>.

创建从标准输入读取特定信息的成员方法(可能enum告诉方法要读取哪些信息)。

cout末尾的 替换为显示每个对象信息的方法。

于 2012-12-28T20:33:01.277 回答
0

简单的类和一些方法只是为了开始:这更像是一种“C”风格而不是 C++,但很容易理解。如果您了解更多可以(并且应该)升级的 OOP 规则

class Person
{
public:
    Person() { /*init with default values here if needed*/ isValid = false; }
    ~Person() { }

    /* add setters/getters if needed */
public:
    string firstName;
    string lastName;
    int age;
    string email;
    int doorNumber;
    string roadName;
    string postCode;
    bool isValid;   // is the data valid
};

'方法':

void inputPersonData(Person &person)
{
    cout << "\nFirst Name: ";
    cin >> person.firstName;

    cout << "\nLast Name: ";
    cin >> person.lastName;

    cout << "\nAge: ";
    cin >> person.age;

    cout << "\nEmail: ";
    cin >> person.email;

    cout << "\nDoor Number: ";
    cin >> person.doorNumber;

    cout << "\nRoad Name: ";
    cin >> person.roadName;

    cout << "\nPost Code: ";
    cin >> person.postCode;

    person.isValid = true; // now the data is valid
}

void outputPersonData(Person &person)
{
    // do not print not loaded person data...
    if (person.isValid == false) return;

    // use cout to print...
}

// us it that way:
// deletePerson(information, 10, index_to_delete)
void deletePerson(Person *peopleArray, int count, int toDelete)
{
    peopleArray[toDelete].isValid = false;
}

简单的按名称搜索函数,返回一个索引:

int searchPersonByName(Person *peopleArray, int count, const string &name)
{
    for (int i = 0; i < count; ++i)
    {
        if (peopleArray[i].firstName == name)
            return i;
    }
}

主要:

Person information[10];

// input
cout << "\nWhich Slot would you like to store the informaton in ?(1-10)";
cin >> i;
i--;
inputPersonData(information[i]);
outputPersonData(information[i]);

创建一个循环并在该循环中询问一个问题以填充数据或搜索

于 2012-12-28T21:22:35.250 回答
0

你不激活一个类,你创建它的一个实例..

在这里,我只是指出您的一些语法错误。您还应该按照上面其他答案中的建议为该人创建更合适的类定义。

在你的课上,

void Storage::SetInformation(string,int i) <--- Wrong.

方法的每个参数都需要有一个类型后跟名称,例如

void Storage::SetInformation(string name, int i)

在方法内部,格式化块的方式类似于,

for ( ... ) {
    switch ( ... ) {

    }
}

这将使阅读更容易..

在你的 switch() 语句中,

如果您的意图是从用户那里获取一些值,请在“名字”、“姓氏”等每个提示之后使用“cin”语句。

default:;}  <--- Error

将其更改为

    default: break;
} 

在你的主要,

Storage();  <--- Delete this line
Storage Someone; <--- This is creating an instance of your class.

您将在您的类的实例上调用一个方法,但是

Someone.SetInformation(int); <--- This is incorrect.

您需要将值传递给您的方法,而不是类型。“int”是一个类型说明符。将该方法称为,

Someone.SetInformation("some text", x);
于 2012-12-29T00:11:49.957 回答