Blame view

Tp7_Struct/Tp7.c 4.54 KB
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;
  }