Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3044 connectés 

  FORUM HardWare.fr
  Programmation

  C++ : Ajout d'une verification dans une fonction ! J'y arrive paaaaaaa

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ : Ajout d'une verification dans une fonction ! J'y arrive paaaaaaa

n°40085
fabd
Posté le 15-06-2001 à 14:55:08  profilanswer
 

Voila, il s'agit d'un programme ki gere les emprunts dans un vidéo club (comme ca, ca le fait, mais le prog est a chier :D), enfin bon...
On peut ajouter des titres, mais il peuve avoir le meme numéro ! Je voudrais integrer une fonction dans la méthode ajout() qui verifie si le numéro est déja present, et si c le cas, lui dire de choisir un autre numéro...
VOila la source :
 
// bibliotheque
#include <iostream.h>
#include <string.h>
 
// structure str_film
struct str_film
{
 int id_film;   // numéro du film
 char title_film[25]; // titre du film
};
 
// classe emprunt
class emprunt
{
 str_film tab_film[100]; // tableau de structure des films enregistrés
 int nb_film;    // nombre de films enregistrés
 
public:
 
 emprunt();              // constructeur de la classe
 void affiche(void);            // methode affichage de la liste des films
 void ajout(int ajout_id_film, char ajout_title_film[25]);  // methode d'ajout d'un film
 void supprimer(int del_id_film);        // methode de supression d'un film
 void recherche(int num_film);         // methode de recherche n°1 (par n° film)
 void recherche2(char title[25]);        // methode de recherche n°2 (par titre)
 
};
 
//constructeur de la classe
emprunt::emprunt()
{
 nb_film = 0;
 
 // initialisation du tableau de structure
 for(int i=0 ; i<100 ; i++)
 {
  tab_film[i].id_film = 0;
 }
 
}
 
//affichage de tous les films de la liste
void emprunt::affiche(void)
{
 for(int i=0 ; i<nb_film ; i++)
 {
  cout<<"\nNumero du film: "<<tab_film[i].id_film<<" ";
  cout<<"Titre: "<<tab_film[i].title_film<<"\n";
 }
}
 
//ajout d'un film
void emprunt::ajout(int ajout_id_film, char ajout_title_film[25])
{
 int i=0;
 //comparaison du numero saisi et des numeros de la liste
 for(i=0 ; i<nb_film ; i++)
 {
  if(tab_film[i].id_film > ajout_id_film)
  {
   //on sort de la boucle lorsque le numero saisi est inférieur à au moins un des numeros de la liste
   break;
  }
 }
 //cas où le numero saisi est superieur à tout les numeros de la liste
 if(i == nb_film)
 {
  //insertion du numero et du titre à la dernière position de la liste
  tab_film[i].id_film = ajout_id_film;
  strcpy(tab_film[i].title_film,ajout_title_film);
 }
 else
 {
  //cas où le numero saisi est inferieur à au moins un des numeros de la liste
  for(int j=nb_film ; j>=i ; j--)
  {//décalage
   tab_film[j+1].id_film = tab_film[j].id_film;
   strcpy(tab_film[j+1].title_film,tab_film[j].title_film);
  }
  //ecrasement
  tab_film[i].id_film = ajout_id_film;
  strcpy(tab_film[i].title_film,ajout_title_film);
 }
 nb_film++;
}
 
//suppression d'un film
 void emprunt::supprimer(int del_id_film)
{
 int i=0;
 int k=0;
 
 for(i=0 ; i<=nb_film ; i++)
 {
  //si le numero saisi est dans la liste
  if(tab_film[i].id_film == del_id_film)  
  {
   //décalage
            for(k=(i+1) ; i<=nb_film ; i++)
             {
             tab_film[k-1].id_film = tab_film[k].id_film;
             strcpy(tab_film[k-1].title_film,tab_film[k].title_film);
             }
            //on supprime le dernier film de la liste (dernier film de la liste en double à cause du décalage)
            nb_film--;
   //on sort de la boucle
   break;
         }
 }
 
}
 
//recherche d'un film par le n°film dans la liste
void emprunt::recherche(int num_film)
{
 int test=0;
 
 for(int i=0 ; i<= nb_film ; i++)
 {
  //si le numero saisi est dans la liste
  if(num_film == tab_film[i].id_film)  
  {
   test=1;
   cout<<"\nVoici le titre du film cherche: "<<tab_film[i].title_film<<"\n";
   
  }
 }
 //si le numero saisi n'est pas dans la liste
 if (test==0)
 {
 cout<<"\nLe film n'est pas dans la liste\n";
 }
}
 
//recherche d'un film par le titre dans la liste
void emprunt::recherche2(char title[25])
{
 int test=0;
 for(int i=0 ; i< nb_film ; i++)
 {
  //si le titre saisi est dans la liste
  if(strcmp(tab_film[i].title_film,title) == 0)
  {
   test=1;
   cout<<"\nVoici le numero du film cherche: "<<tab_film[i].id_film<<"\n";
   
  }
 }
 //si le titre saisi n'est pas dans la liste
 if (test==0)
 {
 cout<<"\nLe film n'est pas dans la liste\n";
 }
}
 
 
int main()
{
    //instance de la classe emprunt
    emprunt a;
   
 int choix;
 int numero;
 char titre[25];
 
 do
 {
  //menu
  cout<<"\n1 - Ajout d'un film\n";
  cout<<"2 - Suppression d'un film\n";
  cout<<"3 - Recherche d'un film par numero \n";
  cout<<"4 - Recherche d'un film par titre\n";
  cout<<"5 - Affichage de la liste des films\n";
  cout<<"6 - Quitter\n";
  cout<<"Entrer le chiffre desire : ";
  cin>>choix;
 
  //ajout d'un film
  if (choix == 1)
  {
  cout<<"\nEntrer un numero:";
  cin>>numero;
  cout<<"\nEntrer le titre du film:";
  cin>>titre;
  a.ajout(numero,titre);
  }
   
  //suppression d'un film
  if (choix == 2)
  {
  cout<<"\nEntrer un numero:";
  cin>>numero;
  a.supprimer(numero);
  }
   
  //recherche d'un film par numero
  if (choix == 3)
  {
  cout<<"\nEntrer un numero:";
  cin>>numero;
  a.recherche(numero);
  }
   
  //recherche d'un film par titre
  if (choix == 4)
  {
  cout<<"\nEntrer un titre: ";
  cin>>titre;
  a.recherche2(titre);
  }
 
  //affichage de la liste des films
  if (choix == 5)
  {
  cout<<"\nVoici la liste des films:\n";
  a.affiche();
  }
 
 //quitter le programme  
 }while (choix != 6);
 
 return 0;
}

mood
Publicité
Posté le 15-06-2001 à 14:55:08  profilanswer
 

n°40124
fabd
Posté le 15-06-2001 à 15:45:08  profilanswer
 

:bounce:  :sweat:

n°40128
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 15:51:32  profilanswer
 

arf... :)... on va pas tout te faire non plus...

n°40135
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:00:36  profilanswer
 

et a propos y a une classe de la STL qui te permet de faire le boulot sans forcer... c'est map.
 
#include <map>
map<int,string> films;
 
En gros map<A,B> associe un B a chaque A de maniere unique. A est appelee cle, et B valeur.
 
Dans le cas present, tu peux associer un string (nom du film) a chaque int (film id), de maniere unique. C'est bien ce que tu veux faire non ?
Pour acceder a la valeur b associee a la cle a, pour la map 'tamap', tu fais simplement tamap[a], comme si c'etait un tableau.
 
Du coup ajouter c'est :
 
if (films[film_id]=="" ) // Si aucun film associe
  films[film_id]= nom_du_film;
else
  cout << "Id deja utilisee" << endl;
 
La fonction supprimer c'est :
 
films[film_id]= "";  
 
La fonction recherche par id c'est encore plus simple :
 
return films[film_id];
 
La fonction recherche par nom :
 
for (map<int,string>::const_iterator p= films.begin(); p!= films.end(); p++)
  if (p->second == nom_du_film) return p->first; // retourne l'id
return -1; // film non trouve
 
 
La fonction affichage :
 
for (map<int,string>::const_iterator p= films.begin(); p!= films.end(); p++)
  if (p->second != "" ) // elimine les noms vides
    cout << "Film " << p->first << " : " << p->second << endl;

 

[edit]--Message édité par tgrx--[/edit]

n°40198
janoscoder
Posté le 15-06-2001 à 17:42:15  profilanswer
 

tgrx, tu le sais, mais ça vaut la peine de le souligner pour les autres: ta soluce est stable, et si y'a des noms de plus de n caractères, ça plante pas et ça les coupe pas. Il peut y avoir plein de films, et la recherche se fait en temps logarithmique.
 
tgrx->il vaut mieux faire  
if(films.find(film_id)!=films.end())
au lieu de
if (films[film_id]=="" )  
car dans le deuxième cas, tu crées une entrée avec l'utilisation de l'opérateur [] à film_id, alors qu'il n'y a pas de film.
 
La fontion supprimer c'est
fims.erase(film_id);
 
ou films.erase(pos_film)
si t'as récupéré un itérateur avec find.
 
mais bon, c'est du chipotage

n°40199
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 17:45:42  profilanswer
 

ouep, mais je voulais pas mettre trop d'iterateurs, parce que c'est un concept un peu chaud au depart je trouve.

n°40202
janoscoder
Posté le 15-06-2001 à 18:03:18  profilanswer
 

vrai,
d'ailleurs si tu regardes inifileparser, l'op [] crée une entrée vide à chaque appel.

n°40207
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 18:15:15  profilanswer
 

janoscoder> je sais pour le parseur, mais en fait c'est bien pratique, vu que si jamais tu n'as pas de fichier .ini de cree, et bien le parseur te recree tous les champs par defaut (meme s'ils sont vides)... :)
 
Seul probleme : si jamais tu veux mettre des commentaires dans le .ini, le fait de charger/sauvegarder te les fout en l'air.
Peut-etre dans la version 2 ?? :)

n°40212
janoscoder
Posté le 15-06-2001 à 18:28:28  profilanswer
 

tiens, jette un oeil à:
http://www.dinkum.com/htm_cpl/valarray.html
c'est cool.
Avec ça tu peut genre accéder aux pixels d'une ligne dans un bitmap, ou accéder à une sous région d'un bitmaps comme si c'était un bitmap, etc...
J'ai pas encore eu le temps de le décortiquer, mais j'ai implémenté des trucs comme ça pour mon prog.
a+
 
pour ce qui est DB ça permet de masquer des valeurs ou de sélectionner par champ.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  C++ : Ajout d'une verification dans une fonction ! J'y arrive paaaaaaa

 

Sujets relatifs
(PHP) comment executer une fonction PHP stockee dans une variable?????Fonction Page Précédente
[PHP] Vérification de mail....[PHP] utlisation de la fonction preg_match
[ASP] une fonction exit( ) , ça existe ?Fonction bioskey(2)
Est-ce qu'il existe une fonction "boite de dialogue" en php ??Windev et la fonction Infoobjet !!!!!!
[delphi]fonction delay[Javascript] On unload= je cherche une fonction pour le faire attendre
Plus de sujets relatifs à : C++ : Ajout d'une verification dans une fonction ! J'y arrive paaaaaaa


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR