2013-03-18 49 views
0

我完成了另一次调试,现在我又一次陷入了困境。C++中的数据库程序问题

问题是当我打开程序并按下任何按钮时,它总是把我带到整个电影数据库显示中,即使它在第二个菜单中。

我很抱歉打扰你愚蠢的功课问题,我甚至还有一个。如何从文件中显示出前5个电影(5行)进行编程。)如何打印前5行(txt前5行失败),然后再打印前5个行?

我比较可怜的尝试列在下面。例子:起初你有Memento,教父。你打印下五个教父二,肖申克救赎,莱昂,苦乐参半的生活,Se7en.Now前5:纪念品,教父,教父二,肖申克救赎,莱昂。

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

void sisend(); /*input*/ 
string valik(); /*choice*/ 
void kogukuvand(); /* the whole display of the database */ 
void valjumine(); /* program quit*/ 
void sisendvoivaljumine(); /*quiting with output to file or not*/ 
void viisjuurde(); /* input further 5 lines from the file */ 
void viismaha(); /* input previous 5 lines from the file*/ 





int main() 
{ 




     system ("title Filmide andmebaas"); /*Movie database*/ 
     system ("cls"); 
     char valik; 
     cout << "Vajuta klahv 'j',kui tahad naha jargmist 5 kirjet."<< endl; /* j to get extra 5*/ 
     cout << "Vajuta klahv 'e',kui tahad naha eelmist 5 kirjet."<< endl; /* e for previous 5 lines */ 
     cout << "Vajuta klahv 'v',kui tahad lopetada programmi taitumist."<< endl; /* v for the output */ 
    cin >> valik; 



      if(valik=='j') 
       { 
        viisjuurde(); 

       } 

      else if(valik=='e') 
       { 
        viisjuurde(); 

       } 
      else if(valik=='v') 

       sisendvoivaljumine(); 


} 
void viisjuurde() 
{ 
     ifstream filmike("andmebaas.txt"); 
     int n, 
     sum = 5; 
     string film; 
     string vaadatud; 
    int aasta; 
    long int hinne; 
     system ("CLS"); 
     cout << "Kogu filmide andmebaas"<<endl; 
    cout << "Film" << " " << "Aasta" << " " <<"Hinne"<< " " << "Vaadatud" << endl; 
     cout << "------------------------------" << endl; 
     while (filmike>> film >> aasta >> hinne >> vaadatud) 
    { 
    sum += n; 
     cout << film << " " << aasta << " " << hinne << " " << vaadatud << endl; 
    } { 
     system ("pause"); 
     cin.get(); 
     main(); 

} 
} 
    void viismaha() 
{ 
     ifstream filmike("andmebaas.txt"); 
     int n, sum = -5; 
    while (filmike >> n) { 
     sum += n; 
    } 
     string film; 
     string vaadatud; 
    int aasta; 
    long int hinne; 
     system ("CLS"); 
     cout << "Kogu filmide andmebaas"<<endl; 
    cout << "Film" << " " << "Aasta" << " " <<"Hinne"<< " " << "Vaadatud" << endl; 
     cout << "------------------------------" << endl; 
     while (filmike>> film >> aasta >> hinne >> vaadatud) 
    { 
     cout << film << " " << aasta << " " << hinne << " " << vaadatud << endl; 
    } 
     system ("pause"); 
     cin.get(); 
     main(); 

    } 
void sisend() /* user input */ 
{ 
    string nimi; 
    int aasta; 
    long int hinne; 
    string vaadatud; 
    ofstream lisafilm("andmebaas.txt", ios::app); 
    cout <<"Sisestage filmi nimi." << endl; /*Enter film's name */ 
    cin >> nimi; 
    string film; 

    cout << "Sisestage filmi ilmumisaasta." << endl; /* Enter film's year */ 
    cin >> aasta;  

    cout << "Sisestage filmi hinne." << endl; /* Enter film's rating */ 
    cin >> hinne; 

    cout << "Kas olete filmi juba vaadanud?" << endl; /* Has the user seen the movie already*/ 
    cout << "Vastake 'Jah' voi 'Ei'" << endl; 
    cin >> vaadatud; 
cout << film << " " << aasta << " " << hinne << " " << vaadatud << endl; 

lisafilm<< nimi << " " << aasta << " " << hinne<< " " << vaadatud << endl; 
lisafilm.close(); 
main(); 

cout << "Aitah kasutamast andmebaasi." << endl; 
system("pause"); 
cin.get(); 
} 



void valjumine() /*quiting without output */ 
{ 
system("CLS"); 
cout << "Aitah kasutamast andmebaasi." << endl; 
system("pause"); 
cin.get(); 
    } 
void kogukuvand() /* the whole movie database*/ 
{ 
     ifstream filmike("andmebaas.txt"); 
     string film; 
     string vaadatud; 
    int aasta; 
    long int hinne; 
     system ("CLS"); 
     cout << "Kogu filmide andmebaas"<<endl; 
    cout << "Film" << " " << "Aasta" << " " <<"Hinne"<< " " << "Vaadatud" << endl; 
     cout << "------------------------------" << endl; 
     while (filmike>> film >> aasta >> hinne >> vaadatud) 
    { 
     cout << film << " " << aasta << " " << hinne << " " << vaadatud << endl; 
    } 
     system ("pause"); 
     cin.get(); 
     main(); 

    } 
void sisendvoivaljumine() 
{ 
    char valik2; 
    system ("CLS"); 
    cout << "Vajuta klahv 'j',kui tahad salvestada kirje ja v2ljuda programmist." << endl; /* output new movie to file and quit*/ 
    cout << "Vajuta klahv 'e',kui ei taha salvestada kirje ja v2ljuda programmist." << endl; /*just quit, without any output to file*/ 
    cout << "Vajuta klahv 'k',kui tahad naha kogu filmide andmebaasi." << endl; /* display the whole movie database*/ 
    cin >> valik2; 


    if(valik2=='j') 
       { 
        sisend(); 

       } 

      else if(valik2=='e') 
       { 
        valjumine(); 

       } 
      else if(valik2=='k') 

       kogukuvand(); 




} 
+0

修正了约翰指出的愚蠢错误,问题仍然是一样的。此外,有人可以帮我解决第二个问题。 – Imsorryneedhelp 2013-03-18 08:35:20

回答

2

棘手,因为我不看你的语言,但这是错误的

valik2应该char

if(valik='j')应该是if(valik=='j')if(valik2='j')应该是if(valik2=='j')。这是一个常见的错误,与所有其他人一样。

void sisendvoivaljumine() 
{ 
    char valik2; 
    system ("CLS"); 
    cout << "Vajuta klahv 'j',kui tahad salvestada kirje ja v2ljuda programmist." << endl; /* output new movie to file and quit*/ 
    cout << "Vajuta klahv 'e',kui ei taha salvestada kirje ja v2ljuda programmist." << endl; /*just quit, without any output to file*/ 
    cout << "Vajuta klahv 'k',kui tahad naha kogu filmide andmebaasi." << endl; /* display the whole movie database*/ 
    cin >> valik2; 
    if(valik2=='j') 
      { 
       sisend(); 

      } 

     else if(valik2=='e') 
      { 
       valjumine(); 

      } 
     else if(valik2=='k') 

      kogukuvand();