需要帮助实现数组矢量函数暂时保存我的数据用于学生记录编程

时间:2015-11-07 17:55:17

标签: c++ arrays multidimensional-array vector

这是我的两个保存数据的类: 基类持有基本人物数据:

#ifndef H_personType
#define H_personType

#include <string>



using namespace std;

class person
{
public:

    //get functions
    string getName() const;
    string getId() const;
    string getAge() const;
    string getGender() const;
    string getPhone() const;
    string getEmPhone() const;
    string getAddress() const;
    string getEmail() const;
    string getEmContact() const;

    //set functions
    void setName(string, string, string);
    void setId(string);
    void setAge(string);
    void setGender(string);
    void setPhone(string);
    void setEmPhone(string);
    void setAddress(string, string);
    void setEmail(string);
    void setEmContact(string, string);

    //constructors
    person();
    person(string, string, string,
        string, string, string, string, 
        string, string, string, 
        string, string, string,
        string, string);


private:
    string firstName;
    string lastName;
    string middleName;
    string id;
    string age;
    string phone;
    string address;
    string streetNumber;
    string streetName;
    string gender;
    string email;
    string emergency_phone;
    string emergencyFirstName;
    string emergencyLastName;
    string emergency_contact;
};

派生班级学生,持有会员职能,以修改学生特有的数据和私人会员。

#ifndef H_studentType
#define H_studentType

#include "personType.h"
#include <vector>

using namespace std;

class student: public person
{
public:

    //void sortRecords();
    friend int checkSize();
    void addRecords();
    void input(istream&, int);
    void print(ostream&) const;
    void printRecords(ostream&);
    void loadData();
    void displayOnScreen();
    void searchID(string, int);
    student();
    student(string, string, string,
        string, string, string, string, string, string,
        string, string, string, string, string, string,
        string, string, string, string);

protected:
    vector<string> tempVec[11];

private:

    string gpa;
    string hobbies;
    string major;
    string honors;
    vector<student> students;
};



#endif

这两个类是我的数据。我使用输入函数来读取一个简单的文本输入文件,该文件为学生保存数据行,想想姓名,年龄等。输入函数填充学生类型的向量。

输入功能:

void student::input(istream& inF, int size)
{
    //local variables
    student stud;
    string first, middle, last, addressNum, addressStreet, 
        phone, gender, email, emContactFirst, emContactLast,
        ph, emPhone,ID, age;

    while (!inF.eof())
    {
        for (int index = 0; index < size; index++){
            inF >> first >> last >> middle;
            stud.setName(first, last, middle);
            inF >> ID;
            stud.setId(ID);
            inF >> age;
            stud.setAge(age);
            inF >> phone;
            stud.setPhone(phone);
            inF >> addressNum >> addressStreet;
            stud.setAddress(addressNum, addressStreet);
            inF >> gender;
            stud.setGender(gender);
            inF >> email;
            stud.setEmail(email);
            inF >> emPhone;
            stud.setEmPhone(emPhone);
            inF >> emContactFirst >> emContactLast;
            stud.setEmContact(emContactFirst, emContactLast);
            inF >> stud.gpa >> stud.hobbies >> stud.major;

            students.push_back(stud);
        }
    }
}

在此之后,我输入文件中的所有数据都存储在student类型的向量中,基本上是一个包含数据的类的向量。为了对这些数据进行操作(通过studentID搜索,按studentID删除记录,按学生ID修改记录),我想将它从类向量加载到字符串向量数组中。这是我的思绪融化的地方,我已经被困了很长时间。这是我的加载数据功能和displayOnScreen,它们根本没有合作。屏幕上的显示功能仅用于调试目的,因此我可以看到打印出的填充数组。

void student::loadData()
{

        int i = 0;
        for (vector<student>::iterator it = students.begin(); it != students.end(); it++)
        {
            for (i = 0; i < 11; i++)
            {

            cout << "ID = " << it->getId();
            tempVec[i].push_back(it->getName());
            tempVec[i].push_back(it->getId());
            tempVec[i].push_back(it->getAge());
            tempVec[i].push_back(it->getPhone());
            tempVec[i].push_back(it->getAddress());
            tempVec[i].push_back(it->getEmail());
            tempVec[i].push_back(it->getEmPhone());
            tempVec[i].push_back(it->getEmContact());
            tempVec[i].push_back(it->gpa);
            tempVec[i].push_back(it->honors);
            tempVec[i].push_back(it->major);
            }
            if (i = 10)
                break;
        }

}

void student::displayOnScreen()
{
        for (vector<string>::iterator it = tempVec[1].begin(); it != tempVec[1].end(); it++){
            for (int u = 0; u < 11; u++)
            {
                cout << tempVec[1].at(u) << " ";
            }
            cout << endl;
        }

}

拜托,我知道这是一个很大的问题,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这是一种反模式

while (!inF.eof())
{
}

请参阅:Why is iostream::eof inside a loop condition considered wrong?

这是一个错误:

        if (i = 10)  // Notice this sets i to 10 which is true
            break;   // So this breaks the first time.
                     // Use  == for testing (notice two of them)

您可以通过确保修复所有警告来阻止此错误。 在启用所有警告的情况下编译代码,并要求编译器将警告视为错误(因为它们是代码中的逻辑错误)。

如果你想显示学生的矢量,那么这样做更容易:

 for(auto const& s: students)
 {
    std::cout << s << std::endl;
 }

然后为学生定义输出操作符

 std::ostream& operator<<(std::ostream& str, student const& s)
 {
     str << s. getName() << ... etc ...;
     return str;
 }

您可能还应该为student定义输入操作符,这样您就可以将学生的阅读本地化为operator>>

PS:我想要一个code review,但只有一次工作。