1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| /*
Concevez la classe Personne comportant
1. des champs privés sexe, age, taille ;
2. d'une fonction privée pour convertir en mètre une taille en nombre de pieds et de pouces en sachant que 1 pied = 0.3048 mètre et 1 pied = 12 pouces
3. de quelques constructeurs dont au moins un avec la définition reportée
4. de quelques méthodes jugées appropriées . . .
5. d afficher un tableau de personne
6. d'afficher le contenu de ce tableau . . . etc ...
*/
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream> // pour les fichiers
#include <float.h>
using namespace std;
#define LONG_NP 30
class Personne {
private :
char sexe ;
int numero;
float taille ;
float poids;
// on ne veut pas fournir cette méthode à l'usager => l'accès est privé
float metre(int nbPieds, int nbPouces) {
const float PIED_EN_METRE = 0.3048; // 1 pied = 0.3048 mètre = 12 pouces
return (nbPieds + nbPouces / 12.0) * PIED_EN_METRE;
}
float kilo(int nbLivres)
{
const float LIVRE_EN_KG = 0.454;
return (nbLivres * LIVRE_EN_KG);
}
public :
// modèle d'une méthode dont la définition est reportée
void afficher(string);
// methode d'acces
int getNumero()
{
return numero;
}
char getSexe()
{
return sexe;
}
float getTaille()
{
return taille;
}
float getPoids()
{
return poids;
}
// methode de modification
void setTaille(double nouvTaille)
{
taille = nouvTaille;
}
void setPoids(double nouvPoids)
{
poids = nouvPoids;
}
bool plusPetite(Personne autre)
{
return taille < autre.taille;
}
};
/*
Personne::Personne(char s,int n, int nbPieds, int nbPouces, int nbLivres)
{
sexe = s ;
numero = n;
taille = metre(nbPieds, nbPouces) ;
poids = kilo(nbLivres);
}*/
void Personne::afficher(string message) {
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout << message
<< setw(11)<< ( toupper(sexe) == 'F' ? "feminin" : "masculin")
<< setw(5) << numero
<< setw(7) << setprecision(2) << taille
<< setw(7) << setprecision(2) << poids
<< endl ;
}
/* fin de la classe Personne */
void continuer()
{
cout << endl << endl << "Appuyez sur une lettre suivie de Entree " ;
char lettre;
cin >> lettre ;
cout << endl << endl;
}
void afficher(Personne pers[], int nbPers, string mess = "au debut") {
cout << "\nContenu du tableau des personnes " << mess << " :\n";
for (int i = 0 ; i < nbPers ; i++)
pers[i].afficher("");
cout << endl;
}
void lireRemplir(const char nomALire[], Personne pers[], int & n)
{
const float PIED_EN_METRE = 0.3048,
LIVRE_EN_KG = 0.454;
int nbPieds, nbPouces, nbLivres;
float taille, poids;
char sexe;int numero;
ifstream aLire (nomALire, ios::in); // localiser et ouvrir pour la lecture
n = 0; // initialiser le compteur
//FILE * aLire = fopen(nomFichier, "r"); /* for reading */
// while ( !feof(aLire) )
while (aLire>> sexe >> numero >> nbPieds >>nbPouces>> nbLivres)
{
pers[n].getSexe();
pers[n].getNumero();
pers[n].getTaille()==(nbPieds + nbPouces /12.0) * PIED_EN_METRE;
pers[n].getPoids()==(nbLivres * LIVRE_EN_KG) ;
//Personne unePers(sexe, numero, taille, poids);
n++;
}
aLire.close();
}
int main() {
const int MAX_Pers = 25;
Personne pers[MAX_Pers];
//Personne[] pers = new Personne[MAX_Pers];
int numero[MAX_Pers];
char sexe[MAX_Pers];
float taille[MAX_Pers], poids[MAX_Pers];
int nbPers=sizeof(sexe) / sizeof(int) ;
lireRemplir("toto.txt", pers, nbPers);
printf("On vient de lire les informations de %d personnes\n\n", nbPers);
afficher(pers, nbPers, " Tableau avant le tri");
continuer();
return 0;
} |
Partager