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
|
/* programme
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
/*** Définition de constantes ***/
#define OUI 1
#define NON 0
#define REC_LENGTH 54
/*** Définition de variables ***/
struct record
{ char fname[15+1]; /* prénom terminé par NULL*/
char lname[20+1]; /* nom propre terminé par NULL */
char mname[10+1]; /* second prénom */
char phone[9+1]; /* numéro de téléphone terminé par NULL */
} rec;
int main(int argc, char *argv[]);
void display_usage (char *filename);
int display_menu(void);
void get_data(FILE *fp, char *progname, char *filename);
void display_report(FILE *fp);
int continue_function(void);
int look_up(FILE *fp);
/* --- début du programme ---*/
int main(int argc, char *argv[])
{ FILE *fp;
int cont = OUI;
if(argc < 2)
{ display_usage("SEMAINE3");
exit(EXIT_FAILURE);
} /* ouverture du fichier */
if ((fp = fopen(argv[1], "a+")) == NULL)
{ fprintf(stderr, "%s(%d)--Erreur à louverture du fichier \%s", argv[0],__LINE__, argv[1]);
exit(EXIT_FAILURE);
}
while(cont == OUI)
{ switch(display_menu())
{ case 1: get_data(fp, argv[0], argv[1]);
break;
case 2: display_report(fp);
break;
case 3: look_up(fp);
break;
case 4: printf("\n\nMerci davoir utilisé ce programme.\n");
cont = NON;
break;
default: printf("\n\nChoix incorrect. Choisissez de 1 à 4.");
break;
}
}
fclose(fp); /* refermer le fichier */
exit(EXIT_SUCCESS);
}
/**************************************************
* display_menu() *
**************************************************/
int display_menu(void)
{ char ch, buf[20];
printf("\n");
printf("\n MENU");
printf("\n ========\n");
printf("\n1. Entrée de noms");
printf("\n2. Affichage liste");
printf("\n3. Recherche numéro");
printf("\n4. Quitter");
printf("\n\nTapez votre choix ==> ");
lire_clavier(buf, sizeof(buf));
ch = *buf;
return(ch);
}
/****************************************************
* get_data() *
****************************************************/
void get_data(FILE *fp, char *progname, char *filename)
{ int cont = OUI;
while(cont == OUI)
{ printf("\n\nIndiquez ci-après les renseignements :");
printf("\n\nPrénom : ");
lire_clavier(rec.fname, sizeof(rec.fname));
printf("\nSecond prénom : ");
lire_clavier(rec.mname, sizeof(rec.mname));
printf("\nNom de famille : ");
lire_clavier(rec.lname, sizeof(rec.lname));
printf("\nNuméro de téléphone sous la forme 11 22 33 44 : ");
lire_clavier(rec.phone, sizeof(rec.phone));
if (fseek(fp, 0, SEEK_END) == 0)
if(fwrite(&rec, 1, sizeof(rec), fp) != sizeof(rec))
{ fprintf(stderr, "%s(%d) Erreur en écriture sur le \fichier %s", progname, __LINE__, filename);
exit(EXIT_FAILURE);
}
cont = continue_function();
}
}
/*******************************************************
* display_report() - Affiche les entrées du fichier *
*******************************************************/
void display_report(FILE *fp)
{ time_t rtime;
int num_of_recs = 0;
time(&rtime);
fprintf(stdout, "\n\nHeure actuelle : %s", ctime(&rtime));
fprintf(stdout, "\nAnnuaire téléphonique\n");
if(fseek(fp, 0, SEEK_SET) == 0)
{ fread(&rec, 1, sizeof(rec), fp);
while(!feof(fp))
{ fprintf(stdout,"\n\t%s, %s %c %s", rec.lname,
rec.fname, rec.mname[0],rec.phone);
num_of_recs++;
fread(&rec, 1, sizeof(rec), fp);
}
fprintf(stdout,"\n\nNombre total denregistrements : %d",num_of_recs);
fprintf(stdout, "\n\n* * * Affichage terminé * * *\n");
}
else
fprintf(stderr, "\n\n*** ERREUR AU COURS DE LAFFICHAGE ***\n");
}
/*********************************************************
* continue_function() *
**********************************************************/
int continue_function(void)
{ char ch;
do
{ printf("\n\nVoulez-vous en saisir un autre ? (0)ui/(N)on ");
lire_clavier(buf, sizeof(buf));
ch = *buf;
} while(strchr("NnOo", ch) == NULL);
if(ch == n || ch == N) return(NON);
else return(OUI);
}
/*****************************************************
* display_usage() *
*****************************************************/
void display_usage(char *filename)
{ printf("\n\nUSAGE : %s nom de fichier", filename);
printf("\n\n où \"nom de fichier\" est le nom du fichier \annuaire\n"); }
/******************************************************
* look_up() *
******************************************************/
int look_up(FILE *fp)
{ char tmp_lname[20+1];
int ctr = 0;
fprintf(stdout, "\n\nIndiquez le nom propre à rechercher : ");
lire_clavier(tmp_lname, sizeof(tmp_lname));
if(strlen(tmp_lname) != 0)
{ if (fseek(fp, 0, SEEK_SET) == 0)
{ fread(&rec, 1, sizeof(rec), fp);
while(! feof(fp))
{if (strcmp(rec.lname, tmp_lname) == 0) /* si correspondance*/
{ fprintf(stdout, "\n%s %s %s %s", rec.fname,
rec.lname,rec.phone);
ctr++;
}
fread(&rec, 1, sizeof(rec), fp);
}
}
fprintf(stdout, "\n\n%d correspondance(s).", ctr);
}
else
fprintf(stdout, "\nVous navez pas indiqué de nom.");
return ctr;
} |
Partager