2013-05-09 60 views
0

我遇到了一些麻烦,我的moviedatabase,我的搜索功能不工作。 我是一个初学者,已经获得了网络的搜索功能,但它不会搜索。需要帮助我的moviedatabase的搜索功能C++

这是我的代码。

#include <iostream> 
#include <vector> 
#include <sstream> // För att kunna använda sig av getline() 
#include <string> // För att kunna använda sig av getline() 
#include <algorithm> 

using namespace std; 

class Film 
{ 
public: 
    string Titel; 
    string Typ; 

// FUNKTION: Skriver ut filmens titel och typ 
    void skrivUtFilm() 
    { 
     cout << endl; 
     cout << "Titel: " << Titel << endl; // Skriver ut filmens titel 
     cout << "Typ: " << Typ << endl; // Skriver ut filmens typ 
    } 
}; 

int main() 
{ 
    vector<Film> Databas;    // Skapa en vektor av typen Film 

    Film nyFilm;     // För att kunna skapa en film behöver vi kunna spara den 

    while (true) 
    { 
     // Skriver ut menyn: 
     cout << " === FILMDATABAS === " << endl; 
     cout << "1: Registera en ny film" << endl; 
     cout << "2: S\x94k efter en film" << endl; 
     cout << "3: Skriv ut filmlistan" << endl; 
     cout << "0: Avsluta" << endl; 
     cout << "Ange ditt val: "; 

     char menySelection; // Användarens val 
     cin >> menySelection; 


     if (menySelection == '1') // Registerar nya filmer 
     { 
      cin.get(); 
      cout << "\n\n1: Registrera en ny film\n"; 
      cout << "Vad \x84r filmens Titel: "; 
      getline(cin, nyFilm.Titel); 

      cout << "\x8er filmen p\x86 DVD eller BluRay? "; 
      getline(cin, nyFilm.Typ); 
      cout << endl; 

      // Vi lägger vårt filmobjekt i vektorn 
      Databas.push_back(nyFilm); 
     } 
     else if (menySelection == '2') // Söker efter filmer som användaren har lagt till 
     { 
      cin.get(); 
      cout << "\nS\x94k efter filmer i databasen: \n\n"; 
      string objekt; 
      getline(cin, objekt); 
      cout << endl; 

      vector<Film>::iterator it; 

      it = find_if(Databas.begin(), Databas.end(),[&] (const Film &f) 
      { 
       return (f.Titel == objekt); 
      }); 
     } 
     else if (menySelection == '3') // Skrivet ut alla filmer i Filmarkivet 
     { 
      cout << "\n=========\n"; 
      cout << "Filmlistan\n"; 
      for(int i=0; i<Databas.size(); i++) 
      { 
       Databas[i].skrivUtFilm(); // Skriver ut dem med hjälp av skrivUtFilm(); 
      } 
      cout << "\n=========\n"; 
      cout << "\n\nTryck p\x86 ENTER f\x94r att \x86terv\x84nda till menyn.\n\n"; 
      cin.get(); 
     } 
     else if (menySelection == '0') // Avslutar programmet 
     { 
      break; 
     } 
     else 
     { 
      cout << "Ogiltigt val!\n." << endl; 
     } 
    } 
    cin.get(); 
    return 0; 
} 
+0

什么不起作用?你不检查从find_if返回的迭代器,所以它可能正常工作,你不知道它。线性搜索只是遍历矢量并与标题进行比较。不难。 – 2013-05-09 06:15:59

+0

不工作的事情是我注册了选项1的电影后,我想在选项2中进行搜索,但是当我写入类型或标题并按下回车键后,它就会返回再次显示菜单,而不返回关于电影/类型的任何信息。我不知道我是否使用了错误的代码来执行我想要的操作。 – Giriko 2013-05-09 06:29:52

+0

就像我说的,你没有对你从搜索中获得的数据做任何事情。你需要以某种方式使用'find_if'返回的迭代器。 – 2013-05-09 06:51:15

回答

0

当你找到这部电影时,你不用做任何事情。

搜索功能后,你应该增加类似:

if (it != Databas.end()) { 
    it->skrivUtFilm(); 

} else { 
    cout << "No film found" << endl; 

} 

打印有关,你已经找到了电影,或者没有发现薄膜留言信息。

+0

非常感谢帮助LPCs,它现在按预期工作,我非常感谢您花时间帮助我:) – Giriko 2013-05-10 20:01:23

+0

@Giriko不客气。 – LPCs 2013-05-16 11:40:04