2017-02-17 23 views
-1

Во-первых, извините, если код неаккуратный или неправильный. Мне сложно работать с C++.Создание объекта и сохранение элементов из вектора

Я пытаюсь создать клиента из файла и сохранить каждого клиента в качестве клиента объекта и сохранить каждую переменную.

Я успешно смог открыть и прочитать файл, чтобы сохранить слова в вектор. Теперь мне нужно создать клиента и сохранить информацию.

Мой вопрос: теперь у меня есть вектор со всей информацией о том, как создать нового клиента и сохранить первый элемент в векторе как fName, второй как lName, а третий - как acctNumber. Четвертый элемент в векторе будет новым клиентом, сохраняющим их имя fName и т. Д.

Ниже приведен пример текстового файла, который я использую.
Майкл Джексон 1
George Jones 2
Brittany Spears 3

Цель: Выше файл будет создать экземпляр 3 клиентов и установить каждый из их Fname, LName и acctNumber для последующего использования.

class CustomerType { 
public: 
    CustomerType(string f, string l, int a); 
    string fName; 
    string lName; 
    int acctNumber; 
    videoType chkdOut; 
private: 
}; 

CustomerType::CustomerType(string f, string l, int a) { 
    fName = f; 
    lName = l; 
    acctNumber = a; 
} 

void createCustomer() { 
    vector<string> myVector; 
    ifstream myfile; 
    myfile.open("custDat.txt"); 
    if (myfile.is_open()) 
    { 
     while (!myfile.eof()) 
     { 
      string tempString; 
      getline(myfile, tempString); 
      istringstream iss(tempString); 
      string word; 

      while (iss >> word) { 
       myVector.push_back(word); 
      } 
     } 
     myfile.close(); 
    } 
    else 
     cout << "Can't open file" << endl; 
} 
+1

Если бы я был моим проектом, я бы написал 'operator >>' и '<<' для чтения и записи структуры в файл. – NathanOliver

+0

Я думаю, что мне нужен конструктор, прежде чем я смогу создать новый объект customerType, а затем использовать геттеры и сеттеры для сохранения переменных. Если кто-то может помочь мне начать, я думаю, что могу продолжить. – Asuu

+0

_ @ Asuu_ Пойдите с советом @ Натана. И определение конструктора было бы хорошей идеей. Предоставьте один из параметров для инициализации всех ваших переменных-членов. –

ответ

0

Во-первых, добавить конструктор к классу клиента, который будет принимать информацию, необходимую:

class customerType { 
public: 
    customerType(string firstName, string lastName, int accountNumber); 
    string fName; 
    string lName; 
    int acctNumber; 
    videoType chkdOut; 
private: 
}; 

Конструктор будет определен таким образом:

customerType(string firstName, string lastName, int accountNumber) 
{ 
    fName = firstName; 
    lName = lastName; 
    acctNumber = accountNumber; 
} 

Вы должны создайте метод разделения строки с символом, чтобы получить различную информацию из каждой строки:

vector<string> split(string line, char c) 
{ 
    const char *str = line.c_str(); 

    vector<string> result; 

    do 
    { 
     const char *begin = str; 

     while (*str != c && *str) 
      str++; 

     result.push_back(string(begin, str)); 
    } 
    while (0 != *str++); 

    return result; 
} 

Затем в методе создания клиента, вы можете создать новый объект с помощью этого конструктора, а затем вернуть вектор с клиентами:

vector<customerType> createCustomer() { 

    // create a vector of customers: 
    vector<customerType> customers; 

    vector<string> myVector; 
    ifstream myfile; 
    myfile.open("custDat.txt"); 
    if (myfile.is_open()) 
    { 
     while (!myfile.eof()) 
     { 
      string tempString; 
      getline(myfile, tempString); 

      // Here you get a vector with each work in the line 
      vector<string> splittedString = split(tempString, ' '); 

      //Finally here you create a new customer 
      customers.push_back(customerType(splittedString[0], splittedString[1], stoi(splittedString[2]))); 
     } 
     myfile.close(); 
    } 
    else 
     cout << "Can't open file" << endl; 

    return customers; 
} 

К сожалению, я изменил то, как вы храните слова.

Функция stoi преобразует строку в целое число.

+0

Это именно то, что я ищу! @Simon Barbieri – Asuu

+0

@Simone Вы можете начать здесь: ['while (! Myfile.eof())'] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition -знание-неправильное) –

+1

@ πάνταῥεῖ да, есть, но я только что отредактировал функцию, которую опубликовал op, чтобы ответить на его вопрос! –

 Смежные вопросы

  • Нет связанных вопросов^_^