bonjour je suis débutante en programmation language c++ je suis un cours présentement et notre professeur nous a demander cela :
Objectifs du travail demandé
Le principal but de ce travail est de se familiariser avec les pointeurs et les classes dans le langage C++. Il
est donc demandé dans ce TP de concevoir un programme, écrit en C++, créant une liste chaînée en
mémoire à partir de données contenues dans un fichier texte FP. Ce dernier contient de l’information
concernant des dossiers de professeurs. Chaque dossier de professeur contient son nom, son prénom, une
liste de cours qu’il souhaite enseigner et une liste de noms d’étudiants qu’il souhaite diriger. Pour ce faire,
il est demandé de programmer une classe DossierProfesseur qui crée, à partir des données contenues dans
le fichier texte FP, une liste chaînée (dont la structure est décrite plus loin). Cette classe permettra
d’effectuer les opérations suivantes sur cette liste :
1. Supprimer un dossier professeur.
2. Afficher le nom de l’enseignant ayant le plus d’étudiants.
3. Afficher le cours le plus demandé.
4. Afficher le nombre des professeurs souhaitant enseigner un cours donné.
5. Recopier la liste chaînée mise à jour dans autre fichier Filename.2
Les informations contenues dans le fichier texte FP ont le format suivant :
nom
prenom
cours 1
cours 2
.
.
cours n
& // ici & sert à séparer les cours des étudiants
Etudiant 1
Etudiant 2
.
.
& //cette fois-ci & sert à passer au professeur suivant
Le nom et prenom sont des chaînes de caractères identifiant un professeur donné. Les de cours 1, cours 2,
... etc sont des chaînes de caractères identifiant des sigles de cours. Utiliser les sigles suivants: SIF100,
SIF101, SIF102, SIF103, …, etc. Les valeurs de Etudiant 1, Etudiant 2, …, etc sont des chaînes de
caractères identifiant le nom des étudiants que souhaite diriger le professeur en question. Le caractère &
sert la première fois à séparer les sigles de cours des noms des étudiants et la deuxième fois à séparer les
dossiers de professeurs.
Votre programme lira à partir d’un autre fichier texte FT, les transactions à effectuer par votre programme
dont le format est: op [param1]. Les opérations possibles sont comme ci-dessous.
- nom, prenom : supprimer un professeur de la liste chaînée.
# : afficher le nom du professeur ayant le plus d’étudiants dans la liste chaînée.
* : afficher le cours le plus demandé dans la liste chaînée.
% coursename: afficher le nombre de professeurs souhaitant enseigner le cours coursename.
$ : recopie la liste chaînée mise à jour dans le fichier FP.
Les structures de données à utiliser sont les suivantes :
struct Professeur{
char* nom;
char* prenom;
Cours* listecours;
Etudiants* listetudiants;
Professeur* suivant;
};
Graphiquement, cette structure est comme suit :
pointeur vers la pointeur vers la
structure Cours structure Etudiant
nom prenom
pointeur vers un autre
professeur 3
struct Cours{
char * sigle;
Cours * suivant;
};
Graphiquement, cette structure est comme suit :
struct Etudiant {
char* nom;
Etudiant* apres;
};
Graphiquement, la structure Etudiant est comme suit :
classe DossierProfesseur {
private:
Professeur * tete; // début de la liste chaînée
public:
Dossierprofesseur (char* FP); // Construit de la structure de la liste chaînée en mémoire à partir
// du fichier FP
~Dossierprofesseur ( ); // Détruit de la liste chaînée existant en mémoire.
void supprimer (char * nom, char * prenom ); // supprime de la liste chaînée un professeur donné
char* afficher leprofplusetudiant ( ) const; // affiche le nom du professeur ayant le plus d’étudiants
char* affichercoursplusdemande ( ) const; // affiche le cours le plus demandé de la liste
int affichernbreprofpouruncours (char* coursdonne) const; // affiche le nombre de professeurs pour le
// cours coursdonne recopie la liste chaînée
void recopier (char *FP); // dans le fichier FP
};
Alors voila vous connaissez maintenant la basse de mon programme voila ce que j'ai de fait:
Code:DossierProfesseur.H #pragma once #ifndef Def_Dossier #define Def_Dossier #include <string> #include "Struct.h" using namespace std; #define Taille_de_Liste 100 class DossierProfesseur { private: Professeur * tete; // Début de la liste chainée Professeur*courant; public: DossierProfesseur(string FP); // Constructeur ~DossierProfesseur(); // Destructeur void Supprimer(char*nom, char*prenom); // Supprime un professeur donnée char*afficherleprofplusetudiant()const; // Affiche le nom du professeur ayant le plus d'étudiant char*affichercoursleplusdemande()const; // Affiche le sigle du cours le plus demander int affichernbreprofpouruncours(char*coursdonne) const; // Affiche le nombre de professeur pour le coursdonne void Recopier(char*FP); //Recopie la liste chainée dans le fichier FP }; #endifCode:Struct.h struct Cours { char*sigle; Cours*suivant; }; struct Etudiants { char*nom; Etudiants*suivant; }; struct Professeur { char*nom; // Pointeur sur un caractère char*prenom; // Pointeur sur un caractère Cours*listecours; // Pointeur sur l'objet Cours Etudiants*listetudiants; // Pointeur sur l'objet Etudiants Professeur*suivant; // Pointeur sur l'objet Professeur suivant };Code:dossierProfesseur.cpp #include "DossierProfesseur.h" #include <cassert> #include<string> #include <fstream> #include <iostream> #include <list> using namespace std; int main() { DossierProfesseur* prof = new DossierProfesseur("C:\\Users\\Fred\\Desktop\\université\\8SIF109 programmation\\2ieme fois\\Devoir #1\\DossierProfesseur\\FichierFp.txt"); DossierProfesseur* Prof = new DossierProfesseur("C:\\Users\\Fred\\Desktop\\université\\8SIF109 programmation\\2ieme fois\\Devoir #1\\DossierProfesseur\\FichierFt.txt"); Lecture_Fichier_Ft(); system("PAUSE"); } DossierProfesseur::DossierProfesseur(string FP) { ifstream fichier(FP, ios::in); // on ouvre le fichier en lecture if (fichier) // si l'ouverture a réussi { cout << " Lefichier est ouvert! /n"; } else // sinon cerr << "Impossible d'ouvrir le fichier !" << endl; char Ligne[20]; int cpt = 0; while (fichier.eof()) // tant que c'est pas la fin du fichier { tete = new Professeur; // Créer un nouveau professeur fichier >> Ligne; // lire une ligne tete->nom=Ligne; //affecter ligne a la bonne variable(nom) fichier >> Ligne;//lire la ligne suivante tete->prenom= Ligne;//affecter ligne a la bonne variable(prenom) while (cpt < 2) // tant que cpt est plus petit que 2 { fichier >> Ligne;// lire une ligne du fichier if (Ligne == "&") // si Ligne est égale au symbole cpt++; // incrémenter cpt else if (cpt == 0) // sinon, si cpt est égale a 0 { tete->listecours = new Cours; // créer un nouveau cours tete->listecours->sigle = Ligne; // affecter la ligne a a la bonne variable (sigle) } else if (cpt == 1) // sinon,si cpt est égale a 1 { tete->listetudiants = new Etudiants; // créer un nouvel étudiant tete->listetudiants->nom = Ligne; // affecter la ligne a la bonne variable ( nom) } } cpt = 0; } fichier.close(); // fermer le fichier } DossierProfesseur::~DossierProfesseur() { while (tete != NULL) { courant = tete; tete = tete->suivant; delete courant; } } void DossierProfesseur::Supprimer(char*nom, char*prenom) // Supprimer un professeur donnée { Professeur*tmp = tete; if (tete == NULL) cout<<" La Liste est vide"; while (tete != NULL) { if ((tete->nom == nom) && (tete->prenom == prenom)) { delete tete; } else tete = tete->suivant; } } char*DossierProfesseur::afficherleprofplusetudiant() const // Affiche le nom du professeur ayant le plus d'étudiant { } char*DossierProfesseur::affichercoursleplusdemande() const // Affiche le sigle du cours le plus demander { } int DossierProfesseur::affichernbreprofpouruncours(char*coursdonne) const // Affiche le nombre de professeur pour le coursdonne { } void DossierProfesseur::Recopier(char*FP) //Recopie la liste chainée dans le fichier FP { } void Lecture_Fichier_Ft(string FT) { ifstream operation(FT,ios::in); if (operation) cout << "Le Fichier Ft est ouvert!\n"; else cerr << "Impossible d'ouvrire le fichier FT" << endl; char c; while (operation.eof()) { operation >> c; if (c == '-') void Supprimer(char*nom, char*prenom); else if (c == '#') prof.afficherleprofplusetudiant(); else if (c == '*') char*affichercoursleplusdemande() const; else if (c == '%') int affichernbreprofpouruncours(char*coursdonne) const; else if (c == '$') void Recopier(char*FP); } operation.close(); }
Mais je pense que je suis complètement de le champ pouvez-vous m'aider??????
Une Étudiante très très désespérer.
-----