Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <time.h>
- #define MAXNOM 15
- #define MAXADD 20
- typedef struct date {
- int jour;
- int mois;
- int annee;
- } DATE;
- typedef struct adherent {
- int numero_cpt;
- char nom[MAXNOM];
- char adresse[MAXADD];
- char cat[2];
- DATE date;
- DATE modif
- } ADHERENT;
- void getDate(DATE *d) {
- time_t nsec;
- struct tm *temps;
- nsec = time(NULL);
- temps = localtime(&nsec);
- d->jour = temps->tm_mday;
- d->mois = temps->tm_mon + 1;
- d->annee = temps->tm_year + 1900;
- }
- void ouvrir(FILE **f, char nomfich[]) {
- *f = fopen(nomfich, "r+");
- if (*f == NULL) {
- *f = fopen(nomfich, "w+");
- if (*f == NULL) {
- perror("Erreur d'ouverture du fichier");
- exit(EXIT_FAILURE);
- }
- }
- }
- void fermer(FILE *fich) {
- if (fich != NULL) {
- fclose(fich);
- }
- }
- int chercher_nom(FILE *fich, char *nom) {
- ADHERENT client;
- int trouve = 0, ret;
- rewind(fich);
- while (! trouve) {
- ret = fread(&client, sizeof(ADHERENT), 1, fich);
- if (ret == 0) break;
- if (strcmp(client.nom, nom) == 0) {
- fseek(fich, -1l * sizeof(ADHERENT), SEEK_CUR);
- return 1;
- }
- }
- return 0;
- }
- int chercher_compte(FILE *fich, int cpt) {
- ADHERENT client;
- int trouve = 0, ret;
- rewind(fich);
- while (! trouve) {
- ret = fread(&client, sizeof(ADHERENT), 1, fich);
- if (ret == 0) break;
- if (client.numero_cpt == cpt) {
- fseek(fich, -1l * sizeof(ADHERENT), SEEK_CUR);
- return 1;
- }
- }
- return 0;
- }
- int ajout(FILE *fich) {
- int ret;
- char *pc;
- ADHERENT client;
- printf("Ajout d'un client\n");
- printf("\tNumero de compte : ");
- scanf("%d", &client.numero_cpt);
- if (chercher_compte(fich, client.numero_cpt)) {
- fprintf(stderr, "Compte existant\n");
- return 0;
- }
- getchar();
- printf("\tNom et prenom : ");
- fgets(client.nom, MAXNOM, stdin); pc = strchr(client.nom, '\n'); *pc = 0;
- if (chercher_nom(fich, client.nom)) {
- fprintf(stderr, "Deja existant\n");
- return 0;
- }
- printf("\tAdresse : ");
- fgets(client.adresse, MAXADD, stdin); pc = strchr(client.adresse, '\n'); *pc = 0;
- printf("\tCategorie (Adulte (A), Enfant (E), Adolescent (AD)");
- fgets(client.cat, MAXADD, stdin); pc = strchr(client.cat, '\n'); *pc = 0;
- getDate(&client.date);
- fseek(fich, 0, SEEK_END);
- ret = fwrite(&client, sizeof(ADHERENT), 1, fich);
- return ret;
- }
- void affiche(FILE *fich) {
- ADHERENT cli;
- char nom[MAXNOM];
- int cpt, ret;
- char choix;
- printf(" - Consultation par Nom ou par Numero\n");
- printf("Numero du compte : ");
- scanf("%d", &cpt);
- ret = chercher_compte(fich, cpt);
- if (ret == 0) {
- printf("Compte ou nom inexistant...\n");
- }
- else {
- fread(&cli, sizeof(ADHERENT), 1, fich);
- printf("\n - Numero d'adherent : %d\n - Nom : %s\n - Adresse : %s\n - Categorie : %s\n - Date d'inscription : %d/%d/%d\n", cli.numero_cpt,cli.nom, cli.adresse, cli.cat, cli.date.jour, cli.date.mois, cli.date.annee);
- }
- }
- void lister(FILE *fich) {
- ADHERENT cli;
- rewind(fich);
- printf("Listage du contenu du fichier.\n");
- printf("Num adhesion \tNom \tAdresse \tCategorie \tDate d'inscription\n");
- while (fread(&cli, sizeof(ADHERENT), 1, fich) == 1) {
- printf(" %d \t%s \t%s \t%s \t%d/%d/%d\n", cli.numero_cpt,cli.nom,
- cli.adresse, cli.cat, cli.date.jour,
- cli.date.mois, cli.date.annee);
- }
- printf("\n");
- }
- void changernom(FILE *fich,char nom[])
- {
- int records=0;
- ADHERENT cli;
- while(fread(&cli,sizeof(ADHERENT),1,fich)==1)
- {
- if(strcmp(nom,cli.nom)==0)
- {
- printf("Nouveau nom : ");
- scanf("%s",cli.nom);
- fseek(fich,sizeof(ADHERENT)*records,SEEK_SET);
- fwrite(&cli,sizeof(ADHERENT),1,fich);
- }
- records++;
- }
- printf("Effectue ! \n\n");
- }
- void changercat(FILE *fich,char catg)
- {
- int records=0;
- ADHERENT cli;
- while(fread(&cli,sizeof(ADHERENT),1,fich)==1)
- {
- if(strcmp(catg,cli.nom)==0)
- {
- printf("Nouvelle categorie : ");
- scanf("%s",cli.cat);
- fseek(fich,sizeof(ADHERENT)*records,SEEK_SET);
- fwrite(&cli,sizeof(ADHERENT),1,fich);
- }
- records++;
- }
- printf("Effectue ! \n\n");
- }
- void changeradresse(FILE *fich,char street[])
- {
- int records=0;
- ADHERENT cli;
- while(fread(&cli,sizeof(ADHERENT),1,fich)==1)
- {
- if(strcmp(street,cli.adresse)==0)
- {
- printf("Nouvelle adresse : ");
- scanf("%s",cli.adresse);
- fseek(fich,sizeof(ADHERENT)*records,SEEK_SET);
- fwrite(&cli,sizeof(ADHERENT),1,fich);
- }
- records++;
- }
- printf("Effectue ! \n\n");
- }
- void menuprincipal(FILE *fic);
- void menuadmin(FILE *fic);
- void menuadmin(FILE *fic) {
- int choix2=0, choix3=0;
- ADHERENT cli;
- do {
- printf("\t \t Menu :\n");
- printf(" - Ajouter un nouvel adherent : 1\n");
- printf(" - Consulter un adherent : 2\n");
- printf(" - Lister toute la base de donnees adherents : 3\n");
- printf(" - Modifier le nom d'un adherent : 4\n");
- printf("- Modifier l'adresse d'un adherent : 5\n");
- printf("- Modifier la categorie d'un adherent : 6\n");
- printf("- Retour au menu principal : 7\n");
- printf("- Quitter le programme : 0\n");
- printf("= Veuillez effectuer votre choix : ");
- scanf("%d", &choix2);
- printf("\n");
- switch(choix2) {
- case 1: { ajout(fic); break; }
- case 2: { affiche(fic); break; }
- case 3: { lister(fic); break; }
- case 4: {
- printf("Veuillez entrer le numero d'adherent : ");
- scanf("%d", &choix3);
- if (chercher_compte(fic, choix3)){
- int choix2=0;
- fread(&cli, sizeof(ADHERENT), 1, fic);
- printf("Desirez vous changer le nom de (%s) ? \n", cli.nom);
- printf("Si vous etes sur, veuillez recopier le nom : ");
- scanf("%s", cli.nom);
- if(chercher_nom(fic, cli.nom))
- changernom(fic, cli.nom);
- } break;
- }
- case 5: {
- printf("Veuillez entrer le numero d'adherent : ");
- scanf("%d", &choix3);
- if (chercher_compte(fic, choix3)){
- int choix2=0;
- fread(&cli, sizeof(ADHERENT), 1, fic);
- printf("Desirez vous changer la categorie de (%s) ? \n", cli.nom);
- printf("Si vous etes sur, veuillez recopier le nom : ");
- scanf("%s", cli.nom);
- if(chercher_nom(fic, cli.nom))
- changercat(fic, cli.cat); break;
- }
- }
- case 6: {
- printf("Veuillez entrer le numero d'adherent : ");
- scanf("%d", &choix3);
- if (chercher_compte(fic, choix3)){
- int choix2=0;
- fread(&cli, sizeof(ADHERENT), 1, fic);
- printf("Desirez vous changer l'adresse de (%s) ? \n", cli.nom);
- printf("Si vous etes sur, veuillez recopier le nom : ");
- scanf("%s", cli.nom);
- if(chercher_nom(fic, cli.nom))
- changeradresse(fic, cli.adresse); break;
- }
- }
- case 7: { menuprincipal(fic); }
- case 0: exit(EXIT_SUCCESS);
- default:
- printf("Erreur de saisie, recommencez...\n");
- break;
- }
- }
- while (choix2!=0);
- }
- void menuprincipal(FILE *fic) {
- int choix;
- do {
- printf("\t \t Menu :\n");
- printf(" - Menu Administration : 1\n");
- printf(" - Mwnu Films : 2\n");
- printf(" - Menu Emprunts : 3\n");
- printf("- Quitter le programme : 4\n");
- printf("= Veuillez effectuer votre choix : ");
- scanf("%d", &choix);
- switch(choix) {
- case 1: { menuadmin(fic); break; }
- case 2: { affiche(fic); break; }
- case 3: { lister(fic); break; }
- case 4: { break; }
- default:
- printf("Erreur de saisie, recommencez...\n");
- break;
- }
- }
- while (choix!=4);
- }
- int main() {
- FILE *fich;
- ouvrir(&fich, "adherents.txt");
- menuprincipal(fich);
- fermer(fich);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement