 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
patrice brassard Guest
|
Posted: Fri Jul 29, 2005 1:11 am Post subject: Affichage Liste Chaînée (Question de Newbie) |
|
|
Bonjour,
Je dois remettre un travail sous peu et voici mon problème avec ce prog de
Liste Chaînée.
Le prog affiche les données d'un fichier .txt .
Je voudrais mofifier le prog pour que les données affichées à l'écran
proviennent du code et non du fichier.
Voici le code du prog.
Merci de votre collaboration !
Patrice
******************* Code du prog ***************************************
// Fichier ListePers.cpp
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <conio>
using namespace std;
const int LONG_NP = 30; // 30 caractères pour nom et prénom
class Personne {
private:
string nomPre;
char sexe;
double taille, poids;
int numero;
public:
Personne(string nomPre, char sexe, double taille, double poids, int
numero) {
this->nomPre = nomPre;
this->sexe = sexe;
this->taille = taille;
this->poids = poids;
this->numero = numero;
}
Personne() {
}
string getNomPre() { return nomPre; }
char getSexe() { return sexe ; }
void setSexe(char nouvSexe) {
sexe = nouvSexe;
}
void setTaille(double nouvTaille) {
taille = nouvTaille;
}
void afficher() {
/* afficher le point de décimal */
cout.setf(ios::showpoint);
/* afficher la partie de décimale avec format fixe */
cout.setf(ios::floatfield, ios::fixed);
cout << setw(20) << nomPre
<< "t" << sexe
<< setw(10) << setprecision(2) << taille
<< setw( << setprecision(1) << poids
<< setw(7) << numero << endl;
}
};
struct Element {
Personne pers ;
Element * suivant;
};
typedef Element * Pointeur;
void ajouterAuDebut(Personne unePers, Pointeur & liste) {
Pointeur tempo = new Element;
tempo->pers = unePers;
tempo->suivant = NULL;
if (liste == NULL)
liste = tempo;
else
{
tempo->suivant = liste;
liste = tempo;
}
}
void lireCreer(char * nomFichier, Pointeur & liste)
{
liste = NULL;
ifstream aLire(nomFichier, ios::in); // ouvrir le fichier pour la
lecture
string ligne;
while( getline(aLire, ligne, 'n')){
string nomPre = ligne.substr(0, LONG_NP);
char sexe = ligne.at(LONG_NP);
double taille = atof((ligne.substr(36,5)).c_str()),
poids = atof((ligne.substr(50,6)).c_str());
int numero = atoi((ligne.substr(64,5)).c_str());
Personne unePers(nomPre, sexe, taille, poids, numero);
ajouterAuDebut(unePers, liste);
}
aLire.close();
}
void afficher(Pointeur liste, string message = "apres la lecture") {
cout << "Contenu de la liste lineaire chainee des personnes " << message
<< ":n";
if (liste == NULL)
cout << "Elle est VIDEn";
else
{
int rang = 0;
while (liste) {
cout << setw(2) << ++rang << ") ";
liste->pers.afficher();
liste = liste->suivant;
}
}
cout << endl ;
}
void chercher(string nomRecherche, Pointeur liste, Pointeur & avant,
Pointeur & cestLui) {
avant = NULL, cestLui = liste;
int longueur = nomRecherche.length();
while (cestLui && nomRecherche !=
cestLui->pers.getNomPre().substr(0, longueur))
{ avant = cestLui;
cestLui = cestLui->suivant;
}
if (!cestLui)
cout << "On ne trouve pas " << nomRecherche << endl ;
}
// démonstration "technique" de certaines suppressions et modifications de
cette liste
void demoSupMod(Pointeur & liste) {
// supprimer le premier élément de la liste
if (liste == NULL)
cout << "Rien a aupprimer, la liste est VIDEn";
else
{ Pointeur cestLui = liste;
liste = liste->suivant;
delete cestLui;
}
// supprimer le dernier élément de la liste
Pointeur avant = NULL, dernier = liste;
while (dernier && dernier->suivant)
{ avant = dernier;
dernier = dernier->suivant;
}
if (dernier == NULL)
cout << "La liste est viden";
else
{
if (avant == NULL)
liste = NULL;
else
avant->suivant = NULL;
delete dernier;
}
afficher(liste, "apres ces 2 suppressions");
// modifier le sexe de Bedard Marc-Andre ('M' au lieu de 'F')
Pointeur cestLui;
chercher("BEDARD MARC-ANDRE", liste, avant, cestLui);
if (cestLui)
{ cestLui->pers.afficher();
cestLui->pers.setSexe('M');
}
// modifier la taille de ROBITAILLE DENISE, 1.72 metre au lieu de
1.27 mètre
chercher("ROBITAILLE DENISE", liste, avant, cestLui);
if (cestLui)
{ cestLui->pers.afficher();
cestLui->pers.setTaille(1.72);
}
afficher(liste, "apres ces deux modifications");
}
void main() {
Pointeur liste;
lireCreer("C:\met_e05.txt", liste);
afficher(liste);
demoSupMod(liste);
getch();
}
/* Exécution :
Contenu de la liste lineaire chainee des personnes apres la lecture:
1) ROBITAILLE JOCELYNE F 1.58 60.2 4119
2) TREMBLAY SYLVAIN M 1.83 86.2 1538
3) TREMBLAY MARC M 1.70 64.9 3529
4) DESMARAIS DENISE F 1.75 58.7 3215
5) FILLION ERIC M 1.78 75.7 2630
6) DUMITRU PIERRE M 1.92 99.4 3629
7) ROBITAILLE NICOLE F 1.48 61.5 4371
BEGIN MARIE-LUCE F 1.60 49.0 4101
9) RICHER AGATHE F 1.65 53.1 3563
10) MICHAUD NORMAND M 1.73 103.7 3428
11) RIVERIN HELENE F 1.70 60.8 2340
12) LABELLE LISE F 1.79 68.0 1512
13) ROBITAILLE DENISE F 1.27 65.4 2325
14) DUBE FRANCOISE F 1.36 67.5 4612
15) JALBERT LYNE F 1.63 52.6 2168
16) MONAST STEPHANE M 1.65 61.7 1750
17) BEDARD MARC-ANDRE F 1.43 80.5 2636
1 MOLAISON CLAUDE M 1.57 62.2 1848
19) ROY CHANTAL F 1.63 54.9 2754
Contenu de la liste lineaire chainee des personnes apres ces 2 suppressions:
1) TREMBLAY SYLVAIN M 1.83 86.2 1538
2) TREMBLAY MARC M 1.70 64.9 3529
3) DESMARAIS DENISE F 1.75 58.7 3215
4) FILLION ERIC M 1.78 75.7 2630
5) DUMITRU PIERRE M 1.92 99.4 3629
6) ROBITAILLE NICOLE F 1.48 61.5 4371
7) BEGIN MARIE-LUCE F 1.60 49.0 4101
RICHER AGATHE F 1.65 53.1 3563
9) MICHAUD NORMAND M 1.73 103.7 3428
10) RIVERIN HELENE F 1.70 60.8 2340
11) LABELLE LISE F 1.79 68.0 1512
12) ROBITAILLE DENISE F 1.27 65.4 2325
13) DUBE FRANCOISE F 1.36 67.5 4612
14) JALBERT LYNE F 1.63 52.6 2168
15) MONAST STEPHANE M 1.65 61.7 1750
16) BEDARD MARC-ANDRE F 1.43 80.5 2636
17) MOLAISON CLAUDE M 1.57 62.2 1848
BEDARD MARC-ANDRE F 1.43 80.5 2636
ROBITAILLE DENISE F 1.27 65.4 2325
Contenu de la liste lineaire chainee des personnes apres ces deux
modifications:
1) TREMBLAY SYLVAIN M 1.83 86.2 1538
2) TREMBLAY MARC M 1.70 64.9 3529
3) DESMARAIS DENISE F 1.75 58.7 3215
4) FILLION ERIC M 1.78 75.7 2630
5) DUMITRU PIERRE M 1.92 99.4 3629
6) ROBITAILLE NICOLE F 1.48 61.5 4371
7) BEGIN MARIE-LUCE F 1.60 49.0 4101
RICHER AGATHE F 1.65 53.1 3563
9) MICHAUD NORMAND M 1.73 103.7 3428
10) RIVERIN HELENE F 1.70 60.8 2340
11) LABELLE LISE F 1.79 68.0 1512
12) ROBITAILLE DENISE F 1.72 65.4 2325
13) DUBE FRANCOISE F 1.36 67.5 4612
14) JALBERT LYNE F 1.63 52.6 2168
15) MONAST STEPHANE M 1.65 61.7 1750
16) BEDARD MARC-ANDRE M 1.43 80.5 2636
17) MOLAISON CLAUDE M 1.57 62.2 1848
Press any key to continue
*/
************************************** Fin du code
****************************************************
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|