ex3.cpp 4.64 KB
Newer Older
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
1
#include <iostream>
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
2
#include <string> //permet l'utilisation du type string.
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
3
using namespace std;
Benoit AUGER--DUBOIS's avatar
moddif    
Benoit AUGER--DUBOIS committed
4
5
6
/*
Auger-Dubois Benoit et Attala Fadia groupe 385K
*/
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
7

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
8
9
10
/* Nous allons utilisé le type string plutôt que le tableau de caractères
pour pouvoir utiliser la fonction getline, 
et ainsi pouvoir utiliser des espaces lors d'une saisie */
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
11
12

struct T_date {
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
13
14
15
16
17
    // structure représentant une date sous la forme JJ/MM:AAAA.
    // les type string sont plus simple que les entiers pour l'affichage.
    string jour; 
    string mois;
    string annee; 
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
18
19
20
};

struct T_personne {
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
21
22
23
24
25
26
    // structure qui représente une personne
    string nom; 
    string prenom;
    T_date naiss; // date de naissance de la forme T_date définie au dessus.
    string age; // les type string sont plus simple que les entiers pour l'affichage.
    string adresse; // adresse de la personne
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
27
28
};

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
29
30
/* Permet l'affichage des informations d'une structure T_personne 
en utilisant un pointeur de type t_personne en entrée. */
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
31
32
33
34
35
36
37
38
void affPers2(T_personne* pers){
    cout << "nom,prenom : " << pers->nom << " " << pers->prenom << endl 
    << "date de naissance : " << pers->naiss.jour << "/" 
    << pers->naiss.mois << "/" << pers->naiss.annee << endl
    << "age : " << pers->age << endl
    << "adresse : " << pers->adresse << endl;
}

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
39
40
41
42
43
44
45

/* Procédure de saisie d'un T_personne.
Avantage par rapport a une fonction : moins long, pas besoin de crée une nouvelle variable,
pas besoin de cloné les données car pers est en modification.
Donc on as moins de coût mémoirs et de temps d'éxécution. 
Désaventage : efface les valeurs précedemment stocké dans le T_personne. */

Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
46
47
void saisieP (T_personne &pers){
    cout << "entre le nom de la personne : ";
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
48
    getline (cin,pers.nom); // getline permet d'utiliser des espaces lors d'une saisie
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
49
    cout << "entre le prenom de la personne : ";
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
50
    getline (cin,pers.prenom);
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
51
    cout << "entrer l'adresse de la personne : ";
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
52
    getline (cin,pers.adresse);
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
53
    cout << "entrer l'age de la personne : ";
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
54
    getline (cin,pers.age);
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
55
    cout << "entrer l'année de naissance : ";
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
56
    getline (cin,pers.naiss.annee);
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
57
    cout << "entrer le mois de naissance : ";
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
58
    getline (cin,pers.naiss.mois);
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
59
    cout << "entrer le jour de naissance : ";
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
60
    getline (cin,pers.naiss.jour);
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
61
62
}

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
63

Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
64
65
/* 
Le pointeur vers un T_personne est utile si il faut changer de binome pour ne pas avoir a réecrire
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
66
67
toutes les champs du T_personne.
Le T_personne est moins ergonomique si les binomes change au cours du temps pour la raison cités plus haut.
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
68
69
70
*/
struct T_binome
{
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
71
    // structure définissant un binôme composé de 2 T_personne
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
72
73
    T_personne* etu1;
    T_personne* etu2;
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
74
    bool isBinome; /* si les deux pointeurs sont affectés a des addresses différentes
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
75
76
77
78
79
80
    isBinome est vrai sinon il est faux. */
};


/* les différents scenario sont pris en compte en amont lors 
de l'affectation du booleen isBinome comme préciser dans le T_binome*/
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
81
82
83
84

/*
Cette procédure affiche succinctement les 2 personnes d'un binome.
*/
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
85
86
87
88
89
void affBSuccinct(T_binome b){
    if (b.isBinome){
        cout << b.etu1->nom << " " << b.etu1->prenom << " est en binome avec : " << 
        b.etu2->nom << " " << b.etu2->prenom << endl; 
    }else{
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
90
        cout << "Le binome est incorrect"; // cas d'erreur.
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
91
92
93
    }
}

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
94
95
96
/*
Cette procédure affiche les 2 personnes d'un binome avec toutes leurs informations.
*/
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
97
98
99
100
101
102
void affBComplet(T_binome b){
    if (b.isBinome){
        affPers2(b.etu1);
        cout << endl << "est en binome avec : " << endl;
        affPers2(b.etu2);
    }else{
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
103
        cout << "Le binome est incorrect"; // cas d'erreur.
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
104
105
106
    }
}

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
107
108
109
110
111
112
113

/*
Cette procédure crée un binôme avec 2 personne en entrée.
P1 et P2 en modification pour économiser de la mémoirs et 
éviter tous conflits.
*/
void addB(T_personne &P1, T_personne &P2,T_binome &B){
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
114
115
116
117
118
    B.etu1 = &P1;
    B.etu2 = &P2;
    if (&P1 != &P2){
    B.isBinome = true;
    } else {
Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
119
        cout << "Entrer différents étudiants"; //cas d'erreur.
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
120
121
122
    }
}

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
123
124
125
126
/*
Cette fonction retourne un binome en fonction des 2 pointeurs
T_personne en entrée
*/
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
127
128
129
130
131
132
133
134
135
136
137
138
T_binome addB2(T_personne* P1, T_personne* P2){
    T_binome B;
    B.etu1 = P1;
    B.etu2 = P2;
    if (P1 != P2){
    B.isBinome = true;
    } else {
        cout << "Entrer différents étudiants";
    }
    return B;
}

Benoit AUGER--DUBOIS's avatar
modif    
Benoit AUGER--DUBOIS committed
139
140
141
142
143
/*
Crée un T_binome et 2 T_personne puis demande a l'utilisateur de saisir les champs
des T_personne a l'aide de la procédure SaisieP(), crée le binome a l'aide de la fonction addB2()
puis l'affiche avec la procédure affBsuccinct()
*/
Benoit AUGER--DUBOIS's avatar
Benoit AUGER--DUBOIS committed
144
145
146
147
148
149
150
int main () {
    T_binome B;
    T_personne etu1,etu2;
    saisieP(etu1),saisieP(etu2);
    B = addB2(&etu1,&etu2); // addB(etu1,etu2,B); alternative
    affBSuccinct(B); // affBcomplet(B); alternative
}