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<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.
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimersvp j'ai besoin d'une partie main qui teste généralement tt ce code et merci d'avance
RépondreSupprimermois aussi j'ais pas trouvé la partie main .qlq un peut m'aider.c'est urgent.
Supprimerj'ai ajouté le main ;)
SupprimerBonjour; voila dans le lien suivant vous allez trouver le code source du projet :
RépondreSupprimerhttp://uploading.com/files/9eacb5da/agence%2Bde%2Bvoyage.rar/
merci.
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimeril ne faut pas utiliser IDM
SupprimerCe commentaire a été supprimé par l'auteur.
RépondreSupprimerbonjour 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épondreSupprimerBonjour,
RépondreSupprimerj'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 ?
Bonjour,
RépondreSupprimeril manque le fichier contact.h
merci de ton aide svp?
Bonjour qlq a reussi à trouver le fichier contact.h.
RépondreSupprimerMerci
Bonjour je ne trouve pas le lien pour télécharger le code source
RépondreSupprimer