2013-05-09 54 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