salut tout le monde g un programme qui gere des RDV en C++ et j aimerai rajouter des fonctions pour annuler ou supprimer un RDV, et une fonction qui m indique que le jour du RDV est ferrié.
Si quelqu'un peut m'aider ça serai Super.
merci d'avance.
#include <iostream.h>
#include <fstream.h> // pour declarer les 2 classes ostream et istream
#include <string.h>
#include <stdio.h>
class RDV
{
protected:
char Nom[10+1];
char Prenom[10+1];
char Date[10+1];
char Heure[10+1];
public:
RDV(char*No="", char*Pre="", char *Dat="", char *Heu="");
virtual void Affiche(); //definition de fonctions virtuelles
virtual void Saisir();
RDV*pSuivant; // pointeur vers l'objet suivant
// redefinition des operateurs de flux en liaison avec la librairie iostream
// déclarée en friend pour acceder a tous les membres de la classe Eleve grace a un
// pointeur de la classe Eleve*
friend ostream& operator<<(ostream& out,RDV*v); // objet de type ostream pour ecrire
//dans un fichier
friend istream& operator>>(istream& in,RDV*v);// objet de type istream pour lire un
// fichier
};
// la classe Ecole gere une liste d'objet Eleve
class Liste
{
private :
RDV*pPremier;
RDV*pCourant;
public :
Liste();
virtual ~Liste();
void Ajouter(RDV *pEle);
void AfficheTout();
void Enregistrer();
void Recuperer();
};
// définition d'un constructeur pour la classe Eleve
RDV::RDV(char *No, char *Pre, char *Dat, char *Heu)
{
// initialisation des chaines
strcpy(Nom, No);
strcpy(Prenom, Pre);
strcpy(Date, Dat);
strcpy(Heure, Heu);
pSuivant = NULL;
}
// fonction qui affiche a l'ecran toutes les donnees membres
void RDV::Affiche()
{
// affiche le contenu avec alignement a gauche
cout.setf(ios::left, ios::adjustfield);
cout<< " Nom : ";
// width permet de definir le nombre de caractere maxi
cout.width(10);
cout<<Nom;
cout<< " Prenom : ";
cout.width(10);
cout<<Prenom;
cout<< " Date du RDV : ";
cout.width(10);
cout<<Date;
cout<< " A ";
cout.width(10);
cout<<Heure;
cout<<endl;
}
void RDV::Saisir()
{
cout<< " Nom : ";
// getline() permet de saisir des chaines de caracteres avec des espaces
// sizeof(Nom) correspond a la taille de la chaine (Nom[10+1])
cin.getline(Nom, sizeof(Nom) );
cout<< " Prenom : ";
cin.getline(Prenom, sizeof(Prenom) );
cout<< " Date du RDV : ";
cin.getline(Date, sizeof(Date) );
cout<< " Heure du RDV : ";
cin.getline(Heure, sizeof(Heure) );
}
// objet de type ostream pour ecrire dans un fichier
// l'operateur << redéfini au niveau de la classe Eleve est utilise pour sauvegarder les
// données membres de chaque objet en séparant chaque valeur par un ';'
ostream& operator << (ostream& out, RDV* v)
{
out<< v->Nom << ';';
out<< v->Prenom << ';';
out<< v->Date << ';';
out<< v->Heure << ';';
return out;
}
// objet de type istream pour lire un fichier
// redefinition de l'operateur de flux >> pour la recuperation de donnees
istream& operator >> (istream& in, RDV* v)
{
//récuperation des donnees du Fichier (voir fonction Recuperer()) jusqu'au caractere ';'
in.getline( v->Nom, sizeof(v->Nom),';' );
in.getline( v->Prenom, sizeof(v->Prenom),';' );
in.getline( v->Date, sizeof(v->Date),';' );
in.getline( v->Heure, sizeof(v->Heure),';' );
return in;
}
// définition d'un constructeur pour la classe Ecole
Liste::Liste()
{
pPremier=NULL;
pCourant=NULL;
Recuperer();
}
// fonction appelee par le destructeur de la classe Ecole
void Liste::Enregistrer()
{
//destrcution du fichier ECOLE.TXT
remove("LISTE.TXT");
// ouverture en ecriture grace a la creation de l'objet ofstream
ofstream Fichier("LISTE.TXT");
// test d'ouverture du fichier
if (!Fichier) return;
RDV*pTemp;// pointeur vers l'objet Eleve
pTemp=pPremier;
// boucle qui permet de parcourir la liste chainee afin de sauvegarder chaque objet
//de cette liste
while(pTemp)
{
Fichier<< pTemp ;
pTemp=pTemp->pSuivant;
}
}
// fonction pour lire le fichier Liste rdv.TXT qui sera cree.
void Liste::Recuperer()
{
//creation de l'objet ifstream pourlire le fichier
ifstream Fichier("LISTE.TXT");
// test pour savoir si l'ouverture du fichier a reussi sinon on quitte la fonction
if (!Fichier) return;
RDV *pTemp; //pointeur vers l'objet pTemp
// boucle qui permet de balayer le fichier jusqu'a la fin (!Fichier.eof())
while (!Fichier.eof())
{
pTemp = new RDV;// creation d'un objet de type Eleve
Ajouter(pTemp);// puis ajouter a Ecole grace a la fonction Ajouter()
Fichier>> pTemp;//initialisation de l'objet pTemp par le flux Fichier
Fichier>> ws; // enlever les espaces eventuels
}
}
// fonction Ajouter avec objet de type Eleve
void Liste::Ajouter(RDV *pEle)
{
// condition si pointeur est sans valeur
if (pPremier==NULL)
{
//initialisation des pointeurs grace a l'objet
pPremier = pEle;
pCourant = pEle;
}
else
{
pCourant->pSuivant = pEle;
pCourant = pCourant->pSuivant;
}
}
// fonction qui permet d'afficher la totalite du fichier
void Liste::AfficheTout()
{
RDV *pTemp;
pTemp=pPremier;
// boucle qui appelle la fonction Affiche() pour afficher chaque objet du fichier a
// la fois
while(pTemp)
{
pTemp->Affiche();
pTemp=pTemp->pSuivant;
}
}
// destructeur de la classe Ecole
Liste::~Liste()
{
// appel de la fonction Enregistrer avant appel du destructeur
Enregistrer();
if (pPremier)
delete pPremier;
}
// fonction main()
int main()
{
// création d'un objet Cours de type Ecole
Liste Cours;
// initialistion des pointeurs
RDV *pEle=NULL;
int Option = 0;
// boucle pour le choix des options
while (1)
{
cout<< "\nChoisissez une option de menu :\n";
cout<< " 1-Saisir un RDV\n 2-Afficher La Liste des RDV\n 3-Heure du RDV\n 0-Pour quitter): ";
//recuperation de votre choix
cin>>Option;
//annule le \n
cin.ignore();
switch(Option)
{
case 1 : pEle = new RDV;
pEle->Saisir();
Cours.Ajouter(pEle);
break;
case 2 : Cours.AfficheTout();
break;
case 0 : return 0;
default : cout<< "\nChoix invalide\a\n";
continue;
}
}
}