61295b44
Vincent Benoist
Tp7Fin
|
1
2
|
#include <stdio.h>
#include <string.h>
|
b8af5d95
Vincent Benoist
Le C c de l'o
|
3
|
#include <stdlib.h>
|
61295b44
Vincent Benoist
Tp7Fin
|
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
|
#define ContigueLength 512
#define NbChar 32
typedef struct{
int jour, mois,annee;
}Date;
typedef struct{
char nom[NbChar], prenom[NbChar], tel[NbChar];
Date date;
}Personne;
typedef struct{
Personne listePers[ContigueLength];
int dernier;
}Annuaire;
void lireDate(Date *date){
scanf("%d%d%d",&date->jour,&date->mois, &date->annee);
}
void afficheDate(Date date){
printf("Jour: %d | Mois: %d | Annee: %d\n",date.jour, date.mois, date.annee);
}
int lirePersonne(Personne *pers){
if(scanf("%s",pers->nom)!=EOF){
scanf("%s",pers->prenom);
lireDate(&pers->date);
scanf("%s",pers->tel);
return 1;
}else {
return 0;
}
//if(scanf("%s")==EOF);
}
void affichePers(Personne p){
printf("Nom: %s | Prenom: %s | Tel: %s\n",p.nom, p.prenom, p.tel);
afficheDate(p.date);
}
void creerAnnuaire(Annuaire *annuaire){
annuaire->dernier=-1;
//tq lecture d'une nouvelle personne est possible -> ajoute pers et +1 à annuaire.dernier
while((annuaire->dernier < ContigueLength) && (lirePersonne(&annuaire->listePers[(annuaire->dernier)+1])!=0)){
annuaire->dernier+=1;
}
}
void afficheAnnuaire(Annuaire annuaire){
int i;
for(i = 0; i <= annuaire.dernier; i++){
affichePers(annuaire.listePers[i]);
}
}
int compareDate(Date d1, Date d2){
if(d1.annee == d2.annee){
if(d1.mois == d2.mois){
if(d1.jour == d2.jour){
return 0;
}else if(d1.jour < d2.jour){
return -1;
}
}else if(d1.mois < d2.mois){
return -1;
}
}else if(d1.annee < d2.annee){
return -1;
}
return 1;
}
|
9937b044
Vincent Benoist
vf tp
|
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
int rechDicho(char nomPers[], Annuaire annuaire){
int debut, fin, milieu, trouve,ind;
fin = annuaire.dernier;
debut = 0;
trouve = 0;
ind=-1;
while ( fin >= debut && trouve == 0){
milieu = (debut+fin)/2;
if(strcmp(nomPers, annuaire.listePers[milieu].nom)==0){
trouve=1;
ind=milieu;
}else if (strcmp(nomPers, annuaire.listePers[milieu].nom)<0){
fin=milieu-1;
}else{
debut=milieu+1;
}
}
|
aa904462
Vincent Benoist
finDuTp
|
105
|
|
9937b044
Vincent Benoist
vf tp
|
106
|
return ind;
|
aa904462
Vincent Benoist
finDuTp
|
107
108
|
}
|
9937b044
Vincent Benoist
vf tp
|
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
void modifTel(char nomPers[], Annuaire* annuaire, char tel[]){
int res = rechDicho(nomPers,*annuaire);
if(res != -1){
strcpy(annuaire->listePers[res].tel,tel);
}
}
void deletePers(char nomPers[], Annuaire* annuaire){
int res = rechDicho(nomPers,*annuaire);
if(res != -1){
int i;
for(i=res; i <= annuaire->dernier; i++){
annuaire->listePers[i]=annuaire->listePers[i+1];
}
annuaire->dernier -= 1;
}
}
|
b8af5d95
Vincent Benoist
Le C c de l'o
|
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
void ajoutPers(Personne p, Annuaire* annuaire){
int i=annuaire->dernier;
annuaire->dernier+=1;
int trouve = 0;
while(i>=0 && trouve ==0){
if((strcmp(p.nom, annuaire->listePers[i].nom)<0)){
annuaire->listePers[i+1]=annuaire->listePers[i];
} else if((strcmp(p.nom, annuaire->listePers[i].nom)>=0)){
trouve =1;
annuaire->listePers[i+1]=p;
}
i--;
}
}
|
9937b044
Vincent Benoist
vf tp
|
144
|
|
61295b44
Vincent Benoist
Tp7Fin
|
145
|
|
c12646b9
Vincent Benoist
tp fini
|
146
|
int main(int argc, char *argv[]){
|
61295b44
Vincent Benoist
Tp7Fin
|
147
148
149
150
151
152
153
154
155
156
157
|
/* Date d;
lireDate( &d);
afficheDate(d);
Personne p;
lirePersonne(&p);
affichePers(p);*/
Annuaire annuaire;
creerAnnuaire(&annuaire);
afficheAnnuaire(annuaire);
|
9937b044
Vincent Benoist
vf tp
|
158
|
|
c12646b9
Vincent Benoist
tp fini
|
159
|
|
9937b044
Vincent Benoist
vf tp
|
160
161
|
//printf("%d,%d,%d",rechDicho("Benoist",annuaire),rechDicho("Feuille",annuaire),rechDicho("Perreira",annuaire));
|
c12646b9
Vincent Benoist
tp fini
|
162
163
164
165
166
167
168
169
170
171
172
|
//modifTel("Benoist",&annuaire,"0320198746");
//deletePers("Cuvelier",&annuaire);
//afficheAnnuaire(annuaire);
if(argc == 3 && strcmp(argv[1],"rechercher")==0 ){
printf("%s existe (indice:%d)\n",argv[2], rechDicho(argv[2],annuaire));
} else if (argc == 4 && strcmp(argv[1],"modifier")==0){
modifTel(argv[2],&annuaire,argv[3]);
printf("Le nouveau numero de %s sera: %s\n",argv[2], argv[3]);
} else if ( argc == 3 && strcmp(argv[1],"supprimer")==0 ){
deletePers(argv[2],&annuaire);
|
b8af5d95
Vincent Benoist
Le C c de l'o
|
173
174
175
176
177
178
179
180
181
182
183
|
} else if ( argc != 7 && strcmp(argv[1],"ajouter")==0 ){
///annuaire ajouter Dupont 01 01 2011 0328753542
Personne p;
strcpy(p.nom,argv[2]);
strcpy(p.prenom,argv[3]);
p.date.jour=atoi(argv[4]);
p.date.mois=atoi(argv[5]);
p.date.annee=atoi(argv[6]);
strcpy(p.tel,argv[7]);
ajoutPers(p,&annuaire);
|
c12646b9
Vincent Benoist
tp fini
|
184
185
|
}
|
9937b044
Vincent Benoist
vf tp
|
186
|
afficheAnnuaire(annuaire);
|
61295b44
Vincent Benoist
Tp7Fin
|
187
188
|
return 1;
}
|