C++, Créer, lire un fichier txt structuré, supprimer une ligne.

Nous allons apprendre dans cette comment créer, lire un fichier txt en C++ et comment supprimer une ligne de ce fichier. 
 Nous allons créer un projet de gestion des vols, chaque vol a (une ville de départ, une ville d'arrivée, une heure de départ et une heure d'arrivée).

On va créer : 
  • Une type structure 'Horaire' pour gérer les vols,
  •  Une procédure 'AjouterVol' permettant d'ajouter un vol au fichier des vols, 
  • Une procédure 'affiche_vol' qui permettant de lire de le fichier des vols et afficher touts les vols, 
  • Une procédure 'supprimer_vol' permettant de supprimer un vol. 

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

using namespace std;
int nbVol();

//Type Structure Horaire:
struct Horaire
{
       string villeDepart;
       string villeArrive;
       string heureDepart;
       string heureArrive;
      
};

//procedure ajouterVol:
void AjouterVol(Horaire h){
    
     char path[]="vols.txt";
     ofstream fichier;
     fichier.open(path,ios::out|ios::app);
     fichier << h.villeDepart<<"\t"<< h.villeArrive<<"\t"<< h.heureDepart<<"\t" << h.heureArrive <<endl ;
     fichier.close();
     }
//procedure affiche_vol:
void affiche_vol(){
     char path[]="vols.txt";
     string data;
     ifstream fichier;
     fichier.open(path);
     while(! fichier.eof()){
             getline(fichier,data);
             cout<<data<< endl;
             }
             fichier.close();
     }
//procedure supprimer_vol:
void supprimer_vol(string villeDepart,string villeArrive,string heureDepart,string heureArrive){
     int nb=nbVol();
     Horaire vol[nb];
     string villeD,villeA,heureD,heureA;
     fstream fichier("vols.txt");
     //charger les vols dans un tableau de type Horaire
     int i=0;
     while(fichier >> villeD >> villeA >> heureD >> heureA){
             vol[i].villeDepart=villeD;
             vol[i].villeArrive=villeA;
             vol[i].heureDepart=heureD;
             vol[i].heureArrive=heureA;
             i++;
     }
     fichier.close();
     ofstream file;
     //vider le fichier des vols :
     char path[]="vols.txt";
     file.open(path);
     file <<"";
     file.close();
     //remplir le fichier par des vols sauf la vol que je veut la supprimer :
     file.open(path,ios::app);
     for(int j=0; j<nb;j++){
             Horaire h;
             h.villeDepart=vol[j].villeDepart;
             h.villeArrive=vol[j].villeArrive;
             h.heureDepart=vol[j].heureDepart;
             h.heureArrive=vol[j].heureArrive;
     if(h.villeDepart!=villeDepart or h.villeArrive!=villeArrive or h.heureDepart!=heureDepart or h.heureArrive!=heureArrive) 
     {
     file << h.villeDepart<<"\t"<<h.villeArrive<<"\t"<<h.heureDepart<<"\t"<<h.heureArrive<<endl;
     }
     }
     file.close();
  
//main :
int main(int argc, char *argv[])
{
    cout <<"Entrer la ville de départ, ville d'arrivée, heure de départ(hh:mn) et l'heure d'arrivée(hh:mn)"<<endl;
    cout<<"Cliquer Ctrl+z+Enter pour terminer"<<endl;
    string vd,va,hd,ha;
    while(cin>>vd>>va>>hd>>ha){
            Horaire h;
            h.villeDepart=vd;
            h.villeArrive=va;
            h.heureDepart=hd;
            h.heureArrive=ha;
            AjouterVol(h);
            }
    affiche_vol();
    supprimer_vol("Paris","Dubai","15:00","20:00");
    system("PAUSE");
    return EXIT_SUCCESS;
}
//fonction qui retourne le nombre total des vols dans mon fichier texte,
//j'ai la besoin dans la procedure supprimer_vol et trie_vol

int nbVol(){
     int  nb=0;
     char path[]="vols.txt";
     string data;
     ifstream fichier;
     fichier.open(path);
     while(! fichier.eof()){
     getline(fichier,data);
            nb++;
             }
             fichier.close();
             return nb;
}

 

Comments