Pages

jeudi 27 octobre 2011

mini projet en langage c++ : la gestion des vols



La gestion des vols , c'est le suivi en temps réel le déroulement des services offert par une  compagnie aérienne. Elle offre une vision globale sur l'organisation  et la qualité des services  .
On a essayé de concevoir une application qui se rapproche le plus possible des outils de gestion de vol qu’on trouve chez les compagnies aériennes en utilisant un langage qui contient la notion d'orienté objet comme le langage c++.


1. Partie Analyse : 

1.1. schema :              
Pour commencer notre analyse il faut d'abord trouver tous les relation interieur et exterieur d'une compagnie aérienne :


 
les passagers :
un passager est identifier par les champs suivants :
-         nom
-          prenom
-         Age
-         Titre(M,Mlle ou Mme)
-          N° passport

  •  Un passager peut réserver une seul billet ou plusieurs pour un groupe.
  • Un passager peut réserver une vol son confirmation.
  •  Un passager peut confirmer son réservation.
Les vols :
Une vol est identifier par les champs suivants :
-         N° vol
-         Nombre de place maximal
-         Destination
-         Date
-         Prix
Les operation effectuent sur les vols sont :
-         Ajout d' une vol
-         Affichage de  la liste des vols
-         Annullation d'une vol
-         Modification

La date :
La date est composée de deux champs principal :
-         Date ( jour / mois / annee)
-         Heure (heure : minute)
La destination :
la destination est composée de deux champs :
-         Ville de depart
-         Ville d'arrivee

2.Partie pratique:
Dans  la partie pratique on va essayer de traduire les resultats d'analyse a un programme orientée objet a l'aide du langage c++.
notre projet va comporter 4 classes soient :

Class date :
-         les attributs:
           jour, mois, annne, heur,min :entiers.
-         Les méthodes:
  constructeur par défaut.
 constructeur avec 5 paramètres.
  Methode amj() pour lire la date.
  Methode heurs() pour lire l'heurs.
 Methode contrôle_date() avec 5 parametres sert a Comparer Le temps donner par l'utilisateur et celle de système.
 Methode lire_fichier() sert a initialiser tous attributs a partir d'un fichier (.txt).
 Methode ecrire_fichier() dert a enregistrer les valeurs des attribus dans un fichier avant de quitter le programme.
Methode afficher() qui recoit la date et l'heure comme des entier et les transformer a une chaine de caractere.
on va separer la declaration et les definition de main() :
date.h:
#ifndef DATE_H_INCLUDED
#define DATE_H_INCLUDED
class date
public:
  date();
  date(int j,int m,int a,int h,int mi);
  void amj();
  void heurs();
  std::string afficher();
  bool controle_date(int a,int m,int j,int h,int mi);
  void ecrire_fichier(std::ofstream &fichier);
  void lire_fichier(std::ifstream &fichier);
private:
  int jour,mois,annee,heur,min;
};
#endif // DATE_H_INCLUDED

-         date.cpp :

#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<string>
#include"date.h"
using namespace std;

date::date()
     {
     }

date::date(int j,int m,int a,int h,int mi)
    {
    jour=j;
    mois=m;
    annee=a;
    heur=h;
    min=mi;
    }


void date::amj()
     {
      cout<< " ******* la date  jj/mm/aaaa  hh:mm ******** "<<endl;
     cout<<"entrez le jour (jj) :";
     cin>>jour;
     while(jour<1 || jour>31)
     {  cout<<" erreur !!!!! \a\a\nreentrez le jour (jj) :";
      cin>>jour;
      }

    cout<<"entrez le mois (mm) :";
    cin>>mois;
    while(mois<1 || mois>12)
    {cout<<" erreur !!!!! \a\a \nreentrez le mois (mm) :";
    cin>>mois;
    }
    cout<<"entrez l'annee (aaaa) :";
    cin>>annee;
    while(annee<2010 || jour>2030)
    {cout<<" erreur !!!!! \a\a \nreentrez l'annee (aaaa) :";
    cin>>annee;
    }
  }

     void date::heurs()
   {
    cout<<"entre l'heur (hh)    : ";
    cin>>heur;
    while(heur<0 || jour>23)
    {
       cout<<" erreur !!!!! \a\a reentrez l'heur (hh) :";
       cin>>heur;
    }
    cout<<"entre les minites (mm)    : ";
    cin>>min;
    while(min<0 || min>59)
    {cout<<" erreur !!!!! \a\a reentrez les minute (mm) :";
    cin>>min;
    }
}

string date::afficher()
{
    char ch[6],chaine[20];
    itoa(jour,ch,10);
    strcpy(chaine,ch);
    strcat(chaine,"/");

     itoa(mois,ch,10);
    strcat(chaine,ch);
    strcat(chaine,"/");

     itoa(annee,ch,10);
    strcat(chaine,ch);
    strcat(chaine," ");

     itoa(heur,ch,10);
    strcat(chaine,ch);
    strcat(chaine,":");

     itoa(min,ch,10);
    strcat(chaine,ch);

 return chaine;
}

bool date::controle_date(int a,int m,int j,int h,int mi)
{
    if(annee<1900+a||( annee==1900+a && mois<m) || (annee==1900+a && mois==m && jour<j)||(annee==1900+a && mois==m && jour==j && heur<h) ||(annee==1900+a && mois==m && jour==j && heur==h && min<mi))
    return false;
    else
    return true;
}


void date::ecrire_fichier(ofstream &fichier)
{
    fichier<<jour<<" "<<mois<<" "<<annee<<" "<<heur<<" "<<min<<endl;
}

void date::lire_fichier(ifstream &fichier)
{
    fichier>>jour>>mois>>annee>>heur>>min;
}


Class voyageur :

-         les attributs:
nom ,prenom,titre,N°passport : type char[] (string) .
Age :int.
Confirme : bool.
-         Les methodes:
§  constructeur par défaut.
§  constructeur avec 5 paramètres.
§  Methode confirmation() pour confirmer une reservation.
§  Methode reservation() pour reserver dans une vol.
§  Methode affiche() pour affichier les informations d'un passager.
§  Methode get_npass() un acceceur pour extrire le N° de passport .
§  Methode lire_fichier() sert a initialiser tous attributs a partir d'un fichier (.txt).
§  Methode ecrire_fichier() dert a enregistrer les valeurs des attribus dans un fichier avant de quitter le programme.
On separe la declaration et les definitions:
voyageur.h:
#ifndef VOYAGEUR_H_INCLUDED
#define VOYAGEUR_H_INCLUDED
class voyageur
{
    private :
    std::string npassport;
    bool confirme;
    int age;
    std::string nom;
    std::string prenom;
    std::string titre;

    public :

    voyageur();
    voyageur(std::string n,std::string p,std::string t, int     age,std::string npass);
    void confirmation();
    void reservation();
    void affiche();
    std::string get_npass();
    void ecrire_fichier(std::ofstream &fichier);
    void lire_fichier(std::ifstream &fichier);
};
#endif // VOYAGEUR_H_INCLUDED
voyageur.cpp:
#include<iostream>
#include<fstream>
#include<string>
#include "voyageur.h"
using namespace std;
    voyageur::voyageur
    {
    }
voyageur::voyageur(string n,string p,string t, int ag,string npass)
       {
        nom=n;
        prenom=p;
        titre=t;
        age=ag;
        npassport=npass;
        }
void voyageur::reservation()
     {
      string rep;

       cout<<"entrez votre nom    : ";
       cin>>nom;
       cout<<"entrez votre prenom : ";
       cin>>prenom;
       cout<<"entrez votre age    : ";
       cin>>age;
       cout<<"entrez votre titre   :";
       cin>>titre;
       cout<<"entrez votre numero de passport   :";
       cin>>npassport;
       cout<<"est ce que vous voulez confirmer (oui/non) :";
       cin>>rep;
       If(rep=="oui")
       confirme=true;
       else
     confirme=false;
     }

void voyageur::confirmation()
      {
        string rep;
         cout<<"est ce que vous voulez vraiment confirmer votre reservation (oui/non)";
          cin>>rep;
          if(rep=="oui")
          confirme=true;
    }


void voyageur::affiche()
     {
      cout<<"nom       : "<<nom<<endl;
      cout<<"prenom    : "<<prenom<<endl;
      cout<<"age       : "<<age<<endl;
      cout<<"titre      : "<<titre<<endl;
      if(confirme==true)
      cout<<"avec confirmation"<<endl;
      else
     cout<<"sans confirmation"<<endl;
    }

string voyageur::get_npass()
     {
      return npassport;
     }

void voyageur::ecrire_fichier(ofstream &fichier)
    {
    fichier<<nom<<"\t"<<prenom<<"\t"<<age<<"\t"<<titre<<"\t"<<npassport<<endl;
    }

void voyageur::lire_fichier(ifstream &fichier)
     {
          fichier>>nom>>prenom>>age>>titre>>npassport;
          }

Ø Class destination :

-         les attributs:
depart,arrivee : char (string)
-         Les methodes:
·       constructeur par défaut.
·       constructeur avec 2 paramètres.
·       Methode get_depart() qui renvoit la ville de depart.
·       Methode get_arrivee() qui renvoit la ville d'arrivee.
·       Methode dest() pour initialiser les villes  d'arrivee et de depart.
·       Methode afficher() pour affichier les villes de depart et d'arrivee.
·       Methode lire_fichier() sert a initialiser tous attributs a partir d'un fichier (.txt).

      Qui dit nouvelle classe dit 2 nouveaux fichiers :
  • Destination.h : contient la définition de la classe
  • Destination.cpp : contient l'implémentation des méthodes de la classe.
destination.h:
#ifndef DESTINATION_H_INCLUDED
#define DESTINATION_H_INCLUDED
class destination
{
    std::string depart,arrivee;

    public :
    destination();
    destination(std::string dep,std::string arv);
    std::string get_depart();
    std::string get_arrivee();
    void dest();
    void afficher();
    void lire_fichier(std::ifstream &fichier);
};

#endif // DESTINATION_H_INCLUDED
destination.cpp:
#include<iostream>
#include<fstream>
#include<string>
#include"destination.h"
using namespace std;

destination::destination()
      {
       }
destination::destination(string dep,string arv)
       {
        depart=dep;
         arrivee=arv;
        }
string destination::get_depart()
       {
         return depart;
        }
string destination::get_arrivee()
       {
            return arrivee;
           }
void destination::dest()
        {
        cout<<"entrez la ville de depart :";
         cin>>depart;
         cout<<"entrez la ville d'arrivée :";
         cin>>arrivee;
          }
void destination::afficher()
       {
        cout<<"  \t"<<depart;
         cout<<"\t"<<arrivee;
       }
void destination::lire_fichier(ifstream &fichier)
       {
       fichier>>depart>>arrivee;
        }

Ø Class prix :

-         les attributs:
pr  : float
-         Les methodes:
·       constructeur par défaut.
·       constructeur avec un seul paramètres.
·       Methode prixv() pour remplir le prix unitaire d'une vol.
·       Methode afficher() pour affichier le prix unitaire.
·       Methode get_prix() un acceceur pour extrire le N° de passport .
·       Methode lire_fichier() sert a initialiser tous attributs a partir d'un fichier (.txt).
·       Methode ecrire_fichier() dert a enregistrer les valeurs des attribus dans un fichier avant de quitter le programme.
      Qui dit nouvelle classe dit 2 nouveaux fichiers :
  • prix.h : contient la définition de la classe
  • prix.cpp : contient l'implémentation des méthodes de la classe.
prix.h:
#ifndef PRIX_H_INCLUDED
#define PRIX_H_INCLUDED
class prix
{
    public :
    prix();
    prix(float p);
    void prixv();
    void afficher();
    float get_prix();
    void lire_fichier(std::ifstream &fichier);
    private :
    float pr;
};
#endif // PRIX_H_INCLUDED
prix.cpp:
#include<iostream>
#include<fstream>
#include"prix.h"
using namespace std;
prix::prix()
{
}
prix::prix(float p)
{
    pr=p;
}

void prix::prixv()
{
    cout<<"entrez le prix de vol :";
    cin>>pr;
}
void prix::afficher()
{
    cout<<pr<<endl;
}
float prix::get_prix()
{
    return pr;
}
void prix::lire_fichier(ifstream &fichier)
{
   fichier>>pr;
}
 Class vol :
La classe vol  c'est la classe patron qui va rassembler toutes les autres classe.
-         les attributs:
      nb_p,nb_res  : unsigned.
       n_vol              : char (string).
      m_date           : objet de la classe date.
      m_prix             : objet de la classe prix.
      m_destination: objet de la classe destination.
      vector<voyageur> passager :tableau dynamique des objet de type
        voyageur.                                                                                                                                            

-         Les methodes:
·        Constructeur par defaut    vol().
·         Constructeur avec un seul parametre vol(std::string num).
·         Methode  recherche(const std::vector<vol> &vols) pour traiter l'existance d'une vol.
·         Methode  ajout_vol(std::string num,unsigned nb)  pour ajouter une vol.
·         methode recherche(const std::vector<vol> &vols,int &pos) pour traiter l'existance d'une vol et renvoit sa position s'il existe.
·         methode recherche_pass(std::string nn,int &pos) pour traiter l'existance d'une reservation et renvoit sa position s'il existe.
·         methode confirmer(int pos) pour confirmer une reservation.
·         Methode void annuller_reservation(int pos) pour annuler une vol.
·         Methode reserver() pour reserver une vol.
·         Methode modifier_date() pour modifier la date d'une vol.
·         Methode modifier_heur() pour modifier l'heure d'une vol.
·         Methode  afficher() pour afficher la liste des vols.
·         Methode afficher_pass() pour afficher la liste des passager qui ont reserver dans une vol.
·         Methode controle_date(int a,int m,int j,int h,int m) pour eviter de organiser une vol dans un date qui déjà passer.
·         Methode ecrire_fichier(std::ofstream &fichier) pour stocker toutes les  données dans un fichier (.txt).
·         Methode  lire_fichier(std::ifstream &fichier) pour charger toutes les données a partir un fichier (.txt).
      Qui dit nouvelle classe dit 2 nouveaux fichiers :
  • vol.h : contient la définition de la classe
  • vol.cpp : contient l'implémentation des méthodes de la classe
vol.h:
#ifndef VOL_H_INCLUDED
#define VOL_H_INCLUDED
#include"destination.h"
#include"prix.h"
#include"date.h"
#include"voyageur.h"
class vol
{
    unsigned nb_p,nb_res;
    std::string n_vol;
    date m_date;
    prix m_prix;
    destination m_destination;
    std::vector<voyageur> passager;

    public :
    vol();
    vol(std::string num);
    bool recherche(const std::vector<vol> &vols);
    void ajout_vol(std::string num,unsigned nb);
    bool recherche(const std::vector<vol> &vols,int &pos);
    bool recherche_pass(std::string nn,int &pos);
    void confirmer(int pos);
    void annuller_reservation(int pos);
    void reserver();
    void modifier_date();
    void modifier_heur();
    void afficher();
    void afficher_pass();
    bool controle_date(int a,int m,int j,int h,int m);
    void ecrire_fichier(std::ofstream &fichier);
    void lire_fichier(std::ifstream &fichier);
};
#endif // VOL_H_INCLUDED
vol.cpp:
#include<string>
#include<iostream>
#include<fstream>
#include<vector>
#include<time.h>
#include"date.h"
#include"prix.h"
#include"vol.h"
#include"destination.h"
#include"voyageur.h"
using namespace std;
vol::vol()
       {
    nb_res=0;
      }
vol::vol(string num)
            {
    n_vol=num;
        }
void vol::confirmer(int pos)
         {
           passager[pos].confirmation();
          }
void vol::annuller_reservation(int pos)
       {
          passager[pos]=passager[passager.size()-1];
           passager.pop_back();
       }
 bool vol::recherche(const vector<vol> &vols)
        {
           unsigned i=0;
            unsigned trouve=false;
         while(i<vols.size() && trouve==false)
           {
               if(vols[i].n_vol==n_vol)
                trouve=true;
                  else
                 i++;
            }
         return trouve;
     }
bool vol::recherche(const vector<vol> &vols,int &pos)
          {unsigned i=0;
           unsigned trouve=false;
           while(i<vols.size() && trouve==false)
           {
             if(vols[i].n_vol==n_vol)
            {
               trouve=true;
                pos=i;
               }
              else
                 i++;
             }
          return trouve;
}
bool vol::recherche_pass(string nn,int &pos)
      {unsigned i=0;
         unsigned trouve=false;
           while(i<passager.size() && trouve==false)
           {
             if(passager[i].get_npass()==nn)
             {
             trouve=true;
             pos=i;
         }
               else
                 i++;
              }
          return trouve;
}
void vol::ajout_vol(string num,unsigned nb)
         {
           time_t temps;
            struct tm * t;
              nb_p=nb;
               n_vol=num;
               m_date.amj();
               m_date.heurs();
               temps=time(NULL);
                 t = localtime(&temps);
               while(!controle_date(t->tm_year,t->tm_mon,t->tm_mday,t->tm_hour,
                   t->tm_min))
                 {
                  cout<<" erreur !!!\a\a ce date est deja depasser !!!!"<<endl;
                  m_date.amj();
                 m_date.heurs();
                  temps=time(NULL);
                    t = localtime(&temps);
                   }
            m_prix.prixv();
                 m_destination.dest();
          }
void vol::modifier_date()
               {
              m_date.amj();
               }
void vol::modifier_heur()
            {
             m_date.heurs();
            }
void vol::afficher()
       { cout<<"  "<<n_vol<<"\t\t"<<m_destination.get_depart()        <<"\t\t"<<m_destination.get_arrive e()<<"\t\t"<<m_date.afficher() <<"\t\t"<<m_prix.get_prix()<<endl;
       }
void vol::afficher_pass()
            {
             cout<<"numero de vol est :"<<n_vol<<endl;
              if(passager.empty())  // Si le tableau est vide.
                {
                  cout<<" aucun reservation !!!!!"<<endl;
                }
                else
                {
                 for(unsigned i=0;i<passager.size();i++)
                 passager[i].affiche();
                  }
       }
void vol::reserver()
       {
    voyageur xxx;
                    if(passager.size()==nb_p)
                        cout<<"vous ne pouvez pas reserver la vol est pleinne !!!!!!"<<endl;
                    else
                    {
                     passager.push_back(xxx);
                    passager[passager.size()-1].reservation();
                    }
                    nb_res=passager.size();
       }
void vol::ecrire_fichier(ofstream &fichier)
         {
   fichier <<n_vol<<"\t"<<m_destination.get_depart()<<"\t"<<             m_destination.get_arrivee()<<"\t"<<m_prix.get_prix()<<"\t";
        m_date.ecrire_fichier(fichier);
       fichier<<nb_res<<endl;
       for(unsigned i=0;i<passager.size();i++)
       passager[i].ecrire_fichier(fichier);
        }
void vol::lire_fichier(ifstream &fichier)
        {
    voyageur vvv;
  fichier >>n_vol;
  m_destination.lire_fichier(fichier);
  m_prix.lire_fichier(fichier);
  m_date.lire_fichier(fichier);
  fichier>>nb_res;
  for(unsigned i=0;i<nb_res;i++)
  {
      passager.push_back(vvv);
      passager[i].lire_fichier(fichier);
  }
}
bool vol::controle_date(int a,int m,int j,int h,int mi)
       {
             return m_date.controle_date(a,m,j,h,m);
         }

Main.cpp :
Dans le main on va declarer un tableau dynamique de vol et avec des menus on va gerer toutes les données.Le programme est contient un fichier "vol.txt" et a la fin de chaque execution du programme on demande a l'utilisateur est ce qu'il veut enregistrer les modifications.

#include <iostream>
#include<vector>
#include<string>
#include"contact.h"

using namespace std;
int main()
{
     int choix;
      unsigned i=0;
    vector<contact> liste;
    contact c;
    using namespace std;

      while(1)
    {

        system("cls");
    cout<<"                ___________________     M E N U      _________________________"<<endl;
    cout<<"               |                                                              |"<<endl;
    cout<<"               |  1  ------------   Liste du contact   ---------------------  |"<<endl;
    cout<<"               |  2  ------------   rechercher un contact  -----------------  |"<<endl;
    cout<<"               |  3  ------------- Enregistrer un contact ------------------  |"<<endl;
    cout<<"               |  4  ------------   Modifier un contact   ------------------  |"<<endl;
    cout<<"               |  5  ------------   Supprimer un contact    ----------------  |"<<endl;
    cout<<"               |  6  ------------  Envoyer un message  ---------------------  |"<<endl;
    cout<<"               |  7  ------------   Messages envoyés   ---------------------  |"<<endl;
    cout<<"               |  8  ------------        QUITTER       ---------------------  |"<<endl;
    cout<<"               |______________________________________________________________|"<<endl;

    cout<<"\nentrez votre choix :";
    cin>>choix;
    while(choix<1 || choix>8)
    {
        cout<<"\nvotre choix est eronne \a\a !!!!!!"<<endl;
        cout<<"reentrez votre choix :";
        cin>>choix;
    }
    switch(choix)
    {
        case 1 :if(liste.empty())
                     cout<<"il n'y a aucune contact dans le repertoire !!!!"<<endl;

                else
                {
                 system("cls");
                 cout<<"                     ***********  Repertoire  ************\n\n\n";
                 for(i=0;i<liste.size();i++)
                 {
                     liste[i].afficher_contact();
                 }
                 }
                 cout<<"\n\n";
                 system("pause");break;
        case 2 :
                  if(liste.empty())
                     cout<<"\n\nil n'y a aucune contact dans le repertoire !!!!"<<endl;

                else
                {
                    string nm;
                    cout<<"entrez le nom que vous voulez chercher : ";
                    cin>>nm;
                 system("cls");
                 int i=c.rechercher(liste,nm);
                 if(i==-1)
                 cout<<"\n\nce contact n'existe pas dans la liste\n";
                 else
                  liste[i].afficher_contact();

                 }
                 cout<<"\n\n";
                 system("pause");break;
        case 3 :
                 c.enregistrer(liste);
                 system("pause");
                 system("cli"); break;

        case 4 :  if(liste.empty())
                     cout<<"\n\nil n'y a aucune contact dans le repertoire !!!!"<<endl;

                else
                {
                    string nm,tel;
                    cout<<"entrez le nom du contact que vous voulez modifier : ";
                    cin>>nm;
                 system("cls");
                 int i=c.rechercher(liste,nm);
                 if(i==-1)
                 cout<<"\n\nce contact n'existe pas dans la liste\n";
                 else
                 {
                    cout<<"entrez le nouveau numero de telephone : ";
                    cin>>tel;
                  liste[i].modifier(tel);

                 }

                 }
                 cout<<"\n\n";
                 system("pause");break;
        case 5: exit(-1);
    }
    }
    return 0;
}

Resumé :       

               
    
3. Conclusion:
Dans ce mini projet on a traiter la plupart des cas possibles,mais on peut améliorer notre programme  en utilisant par exemple un interface graphique  a l'aide des bibliothèques graphique comme (QT , win32 …..) pour facilité l'utilisation du programme.
                                            


13 commentaires:

  1. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  2. svp j'ai besoin d'une partie main qui teste généralement tt ce code et merci d'avance

    RépondreSupprimer
    Réponses
    1. mois aussi j'ais pas trouvé la partie main .qlq un peut m'aider.c'est urgent.

      Supprimer
  3. Bonjour; voila dans le lien suivant vous allez trouver le code source du projet :
    http://uploading.com/files/9eacb5da/agence%2Bde%2Bvoyage.rar/
    merci.

    RépondreSupprimer
  4. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  5. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  6. bonjour a tous stp j'ai pas trouver le lien exacte pour telecharger le code sources complet qlq peut me aider et merci davance voila mon gmail :hamza.ejjahel@gmail.com

    RépondreSupprimer
  7. Bonjour,
    j'ai essayé de reprendre le projet mais il manque le fichier contact.h dans le main, quelqu'un peut le rajouter s'il vous plait ?

    RépondreSupprimer
  8. Bonjour,
    il manque le fichier contact.h

    merci de ton aide svp?

    RépondreSupprimer
  9. Bonjour qlq a reussi à trouver le fichier contact.h.
    Merci

    RépondreSupprimer
  10. Bonjour je ne trouve pas le lien pour télécharger le code source

    RépondreSupprimer

Partenaires

Computers Blogs
Ajoutez votre site

Contactez-nous

Nom

E-mail *

Message *

Tous droits resérvés-www.exercices-corriges.com Seo Blogger Templates