void Cbiblio :: ajout(char * nom)
{ofstream f_sortie;
CJeu j;
cout<<" nouveau jeu :"<<endl;
// ouverture du fichier en ajout
f_sortie.open(nom,ios :: app);
// saisie du jeu
cin >> j; // surcharge sur istream
// ecriture du fichier
f_sortie << j; // surcharge sur ofstream
// fermeture
f_sortie.close();
}
void Cbiblio :: recherche_mot_cle(void)
{ifstream f_entre;
CJeu j;
char chaine[max],ch[max];
int test=0;
cout<<"donner le mot clé a chercher : ";
cin>> chaine;
cout<<endl;
f_entre.open (nom_fichier , ios :: in);
while (!f_entre.eof() && !test)
{ f_entre >> j; // surcharge sur ifstream
if (strcmp(chaine,j.get_mot_cle(ch))==0) test=1;
}
f_entre.close();
if (test)
{cout<<" le jeu a ete effectifvement trouver"<<endl;
cout << j; // surcharge sur ostream
}
else
{cout<<" le jeu n'existe pas dans la bibliotheque"<<endl;}
}
void Cbiblio :: recherche_titre (void)
{ifstream f_entre;
CJeu j;
char chaine[max],ch[max];
int test=0;
cout<<"donner le titre a chercher : ";
cin>> chaine;
cout<<endl;
f_entre.open (nom_fichier , ios :: in);
while (!f_entre.eof() && !test)
{ f_entre >> j; // surcharge sur ifstream
if (strcmp(chaine,j.get_titre(ch))==0) test=1;
}
f_entre.close();
if (test)
{cout<<" le jeu a ete effectivement trouver"<<endl;
cout << j; // surcharge sur ostream
}
else
{cout<<" le jeu n'existe pas dans la bibliotheque"<<endl;}
}
int copiefichier (char * dest , char * srce)
// copie de fichier srce dans dest
// renvoi 1 si ok, 0 sinon
{
ifstream fi(srce, ios::in|ios::binary);
if (!fi) return 0; // source impossible a lire
ofstream fo (dest, ios::out|ios::binary);
if (!fo) return 0;
char tampon;
while ( fo && fi.get(tampon))
fo.put(tampon);
return fo.good() && fi.eof();
}
void Cbiblio :: suppression (void)
{Cbiblio temporaire("temp.txt");
ifstream f_entre;
ofstream f_sortie;
CJeu j;
int test=0,boucle=0,ok=0;
char chaine[max],ch[max];
cout<<" donner le titre du jeu a suprimer ";
cin >> chaine;
cout<<endl;
f_sortie.open("temp.txt",ios :: app);
f_entre.open ("bibliotheque.txt" , ios :: in);
while (!f_entre.eof())
{
f_entre >> j; // surcharge sur ifstream
if (strcmp(chaine,j.get_titre(ch))) f_sortie << j;
}
f_entre.close();
f_sortie.close();
ok=copiefichier ("bibliotheque.txt" , "temp.txt");
if (ok) cout<<"supression effectuer"<<endl;
else cout<<"po marcher"<<endl;
}
/***********************************************************************/
int menu(void)
{int ch;
cout<<endl<<endl;
cout<<" 0.quitter"<<endl;
cout<<" 1.insertion d'un nouveau jeu"<<endl;
cout<<" 2.suppression d'un jeu"<<endl;
cout<<" 3.affichage"<<endl;
cout<<" 4.recherche d'un jeu par son titre"<<endl;
cout<<" 5.recherche d'un jeu par son mot cle"<<endl;
//cout<<" 6.supprimer le fichier jeu"<<endl;
cout<<" donner votre choix : ";
cin>>ch;
return ch;
}
void main()
{int choix;
Cbiblio fichier("bibliotheque.txt");
cout<<endl;
do
{choix=menu();
switch(choix)
{case 1 : fichier.ajout("bibliotheque.txt");
break;
case 2 : fichier.suppression();
break;
case 3 : fichier.affiche("bibliotheque.txt");
break;
case 4 : fichier.recherche_titre();
break;
case 5 : fichier.recherche_mot_cle();
break;
}
}
while (choix !=0);
}
cs_panini21
Messages postés11Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention31 janvier 2007 30 déc. 2003 à 17:57
en effet la boucle while( !f_entre.eof()){...}
est mieu approprier , mais le probleme reste le meme !!
a l'affichage le dernier element est toujours affiché 2 fois
:(((
pour faire le test rapidement :
lancer l'appli...
taper : '1' (ajout )
taper le titre : 'aaa' ('aaa' convien parfaitement , lol)
taper le type : 'aaa'
taper le prix : '123' (metre un int sinon ca bug)
taper le mot clef : 'aaa'
taper : '3' (affichage)
et la , a mon grand malheur , ca affiche 2 fois des 'aaa' et des '123' : le dernier element a ete recopier 2 fois :(
pour le constructeur ,
"ton constructeur CJeu::Cjeu n'en est pas un (case sensitive)"
je ne connais pas le terme le terme "case sensitive"
pouvez vous brievement me m'expliquer ?
D1m3x
Messages postés402Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention21 juillet 20051 1 janv. 2004 à 14:32
taper le prix : '123' (metre un int sinon ca bug)
ca ne peux pas bugger! alors soit tu dois gérer une exveptio (C++), soit tu vérifie si c'est bien un int, je suis pas sur mais je crois que la fonction isalnum( ) le permet je suis plus sur sinon va voir sur la MSDN.