2016-05-31 38 views
1

我正在研究这个程序,它可以帮助管理DVD租赁商店。我需要做的是采取包含有关DVD等信息的文本:文件到结构的阵列

贱女孩;喜剧; PG; 2009年;里贾纳乔治;二〇一五年十二月七日;

The Conjuring;恐怖; R等2013;萨拉约翰逊; 2016年5月16日;

宠物小精灵2000;儿童; G; 2000; Ash Katchem; 2016年4月15日; 等。

然后采取这一信息,然后读取到一个数组中,并从那里阵列读入结构,然后显示在正确的顺序如下所示: 名称:贱女孩 类型:喜剧 评级:PG

等等

这是到目前为止我的代码:

#include <iostream> 
#include <string> 
#include <fstream> 
#include <vector> 
using namespace std; 

struct dvd{ 
     string name; 
     string genre; 
     string rating; 
     string released; 
     string renter; 
     string rentday; 

     void print(); 
     bool read(ifstream & file); 

}; 

void dvd::print(){ 
     cout <<"Title: " << name << endl; 
     cout <<"Genre: " << genre << endl; 
     cout << "Rating: " << rating << endl; 
     cout << "Release date: " << released << endl; 
     cout << "Name of renter: " << renter << endl; 
     cout << "Date rented: " << rentday << endl; 
    } 
bool dvd::read(ifstream & file) 
{ 
    getline(file, name, ';'); 
    getline(file, genre, ';'); 
    getline(file, rating,';'); 
    getline(file, released, ';'); 
    getline(file, renter, ';'); 
    getline(file, rentday, ';'); 
    return file.good(); 
} 
int main() { 
    vector<dvd> dvds; 
    dvd   dvd1; 
    ifstream file("DVD.txt"); 

    if(! file.is_open()){ 
     cout << "Failed to find input file" << endl; 
     return 1; 
    } 
    while(dvd1.read(file)) 
    { dvds.push_back(dvd1); 
    } 

    dvd1.print(); 


return 0; 

} 

所以我想要做的是什么已经阅读文本文件导入数组并从那里读取数组到结构中。因此,而不是文本文件读入矢量,我需要它读入数组,然后从那里读取数组的第一行(dvdArray [1])到结构dvd中,然后使用print函数打印出这些信息,然后循环直到dvdArray [10]被读入struct dvd!

非常感谢您的帮助! :)

回答

1

变化

bool dvd::read(ifstream & file) 

bool dvd::read(istream & file) 

需要它的内容没有其他变化。

然后,取每条线并将其放入std::istringstream,然后将其传递到dvd::read

你应该能够自己找出其余的。

+0

好了,所以我已经得到了文本文件读入数组,但我似乎无法弄清楚如何阅读本进入DVD ::阅读时,打印出每个DVD信息 –

+0

就像我写道:构建一个'std :: istringstream'从给定的行,然后只是通过它。 –

0

对于简单的读取和写入文件,我建议为您的结构类重载<<>>,以使代码易于以可读的方式进行序列化和反序列化。

friend std::ostream& operator<< (std::ostream& stream, const dvd& dvdObj) 
{ 
    // your output stuff 
    // stream <<"Title: " << dvdObj.name << endl; 
    // ... 
    return stream; 
} 

friend std::istream& operator>> (std::istream& stream, dvd& dvdObj) 
{ 
    // your output stuff 
    // getline(stream, dvdObj.name, ';'); 
    // ... 
    return stream; 
} 

然后,

// look for std::copy for reading directly into vector ... else 
while(file >> dvd1) 
{ 
    dvds.push_back(dvd1); 
} 

而且,

for(const auto& dvd1: dvds) 
{ 
    std::cout << dvd1 ; 
}