MAD_DIM | Voila ma source complète.
J'ai mit des commentaire, j'espère qu'il y en a assez
Code :
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<ctype.h>
- #include<conio.h>
- #include<windows.h>
- void Creation_fichier(struct MEMBRE *);
- void Listage_fichier(struct INDEX *, struct MEMBRE *);
- struct INDEX* Recherche_fichier(struct INDEX *, char *);
- void Creation_index(struct MEMBRE *, struct INDEX *);
- void Ajout_fichier(struct MEMBRE *, struct INDEX *, char *);
- void Supprimer_fichier(struct MEMBRE *, struct INDEX *, char *);
- void Modif_fichier(struct MEMBRE *, struct INDEX *, char *);
- struct DATTE { int jour;
- int mois;
- int annee;
- };
- struct MEMBRE { int numlicense;
- char nom[20];
- char prenom[20];
- char sexe;
- struct DATTE nais;
- };
- struct INDEX { int numlicense;
- char nom[20];
- int position;
- };
- void main()
- {
- FILE *fp;
- struct MEMBRE *mbr; /* Pointeur de la structure MEMBRE */
- struct MEMBRE membre[100]; /* Taille de la structure MEMBRE */
- struct INDEX *ind; /* Pointeur de la structure INDEX */
- struct INDEX index[100]; /* Taille de la structure INDEX */
- int choix, i;
- char mot[20], *pt; /* pt reçoit soit une chaîne vide ou un nom */
- char login[] = {"admin"}; /* Mot de passe pour écraser le fichier */
- char pass[] = {"1234"};
- char log[20], password[20];
- bool fin, admin;
- mbr = &membre[0];
- ind = &index[0];
- fp = fopen("membre.dat", "r+b" );
- /* Vérifie si un fichier existe ou non */
- if(fp == NULL)
- {
- printf("Creation du fichier\n" );
- getch();
- /* Si non on crée le fichier et son index */
- Creation_fichier(mbr);
- Creation_index(mbr, ind);
- }
- else
- {
- /* On crée l'index à chaque lancement de programme */
- Creation_index(mbr, ind);
- }
- do
- {
- fin = false;
- admin = false;
- system("cls" );
- printf("\n MENU\n" );
- printf(" ----\n\n" );
- printf(" 1. Afficher membres\n" );
- printf(" 2. Ajouter un membre\n" );
- printf(" 3. Modifier une fiche\n" );
- printf(" 4. Supprimer un membre\n" );
- printf(" 5. Option\n" );
- printf(" 6. Quitter\n" );
- printf("\n Choix : " );
- fflush(stdin);
- scanf("%d", &choix);
- switch(choix)
- {
- case 1:
- /* Affiche les membres */
- Listage_fichier(ind, mbr);
- break;
- case 2:
- /* Ajouter un nouveau membre */
- system("cls" );
- pt = " ";
- Ajout_fichier(mbr, ind, pt);
- break;
- case 3:
- /* Permet d'apporter des changememnts à une fiche */
- system("cls" );
- printf("\n MODIFICATION DE MEMBRES\n" );
- printf(" ----------------------\n\n" );
- printf("Entrez le nom du membre a modifier : " );
- fflush(stdin);
- gets(mot);
- pt = mot;
- Modif_fichier(mbr, ind, pt);
- break;
- case 4:
- /* Supprimer un membre */
- system("cls" );
- printf("\n SUPPRESSION DE MEMBRES\n" );
- printf(" ----------------------\n\n" );
- printf("Entrez le nom du membre a effacer : " );
- fflush(stdin);
- gets(mot);
- pt = mot;
- Supprimer_fichier(mbr, ind, pt);
- break;
- case 5:
- /* Permet de créer un nouveau fichier (écrase l'ancien) */
- i=0;
- do
- {
- system("cls" );
- printf("\n\n VEUILLEZ VOUS IDENTIFIER !!!\n\n\n" );
- printf(" * LOGIN : " );
- fflush(stdin);
- gets(log);
- printf("\n * PASSWORD : " );
- fflush(stdin);
- gets(password);
- if((strcmp(log, login) == 0) && (strcmp(password, pass) == 0))
- {
- admin = true;
- printf("Creation d un nouveau fichier\n" );
- Creation_fichier(mbr);
- Creation_index(mbr, ind);
- }
- else
- {
- printf("\n\n ERREUR D AUTENTIFICATION !!!" );
- Sleep(1000);
- }
- i++;
- }while(admin == false && i<3);
- break;
- default:
- fin = true;
- break;
- }
- }while(fin != true);
- }
- /******************************************************************/
- /* FONCTION QUI REMPLIT LE FICHIER */
- /******************************************************************/
- void Creation_fichier(struct MEMBRE *mbr)
- {
- FILE *fp;
- system("cls" );
- fp = fopen("membre.dat", "w+b" );
- if(fp == NULL)
- {
- printf("Erreur\n" );
- }
- else
- {
- /* Bidonnage du fichier */
- mbr->numlicense = -1;
- strcpy(mbr->nom, " " );
- strcpy(mbr->prenom, " " );
- mbr->sexe = ' ';
- mbr->nais.jour = 0;
- mbr->nais.mois = 0;
- mbr->nais.annee = 0;
- /* On copie la structure 100 fois dans le fichier */
- fwrite(mbr, sizeof(struct MEMBRE), 100, fp);
- }
- fclose(fp);
- }
- /****************************************************************/
- /* FONCTION QUI AFFICHE LE CONTENU DU FICHIER */
- /****************************************************************/
- void Listage_fichier(struct INDEX *ind, struct MEMBRE *mbr)
- {
- FILE *fp;
- int nbenreg = 0;
- system("cls" );
- fp = fopen("membre.dat", "r+b" );
- if(fp == NULL)
- {
- printf("ERREUR\n" );
- }
- else
- {
- /* Transfert le contenu du fichier dans "mbr" */
- fread(mbr, sizeof(struct MEMBRE), 100, fp);
- printf("\n LISTE DES MEMBRES\n" );
- printf(" -----------------\n\n" );
- do
- {
- /* Vérifie si l'index contient un nom */
- if(strcmp(ind->nom, " " ) != 0)
- {
- /* Si oui on affiche */
- printf("%d %s %s %d/%d/%d\n", ind->numlicense, mbr->nom, mbr->prenom, mbr->nais.jour, mbr->nais.mois, mbr->nais.annee, mbr->sexe);
- }
- mbr++;
- ind++;
- nbenreg++;
- }while(nbenreg < 100);
- }
- fclose(fp);
- printf("\nAppuyer sur une touche pour continuer..." );
- getch();
- }
- /***********************************************************************************/
- /* FONCTION QUI PERMET DE RECHERCHER UN EMPLACEMENT VIDE OU UN NOM */
- /***********************************************************************************/
- struct INDEX* Recherche_fichier(struct INDEX *ind, char *pt)
- {
- int i;
- bool trouve = false;
- i = 0;
- while(i<100 && trouve != true)
- {
- if(strcmp(ind->nom, pt) == 0)
- {
- trouve = true;
- }
- else
- {
- i++;
- ind++;
- }
- }
- /* Retourne le pointeur de la structure index */
- return(ind);
- }
- /************************************************************/
- /* FONCTION QUI REMPLIT L INDEX */
- /************************************************************/
- void Creation_index(struct MEMBRE *mbr, struct INDEX *ind)
- {
- FILE *fp;
- int i;
- fp = fopen("membre.dat", "r+b" );
- fread(mbr, sizeof(struct MEMBRE), 100, fp);
- for(i=0;i<100;i++)
- {
- /* Copie les différents champs du fichier dans la structure index */
- strcpy(ind->nom, mbr->nom);
- ind->numlicense = mbr->numlicense;
- ind->position = i;
- ind ++;
- mbr++;
- }
- fclose(fp);
- }
- /**************************************************************/
- /* FONCTION AJOUTER UN MEMBRE */
- /**************************************************************/
- void Ajout_fichier(struct MEMBRE *mbr, struct INDEX *ind, char *pt)
- {
- FILE *fp;
- /* Retourne la position du premier emplacement vide */
- ind = Recherche_fichier(ind, pt);
- fp = fopen("membre.dat", "r+b" );
- /* On se déplace dans le fichier a la position voulue */
- fseek(fp, (ind->position) * (sizeof(struct MEMBRE)), SEEK_SET);
- printf("\n AJOUT DE MEMBRES\n" );
- printf(" ----------------\n\n" );
- printf(" * Entrez le numero de license :" );
- fflush(stdin);
- scanf("%d", &mbr->numlicense);
- ind->numlicense = mbr->numlicense;
- printf(" * Entrez le nom :" );
- fflush(stdin);
- gets(mbr->nom);
- strcpy(ind->nom, mbr->nom);
- printf(" * Entrez le prenom :" );
- fflush(stdin);
- gets(mbr->prenom);
- printf(" * Entrez le jour :" );
- fflush(stdin);
- scanf("%d", &mbr->nais.jour);
- printf(" * Entrez le mois :" );
- fflush(stdin);
- scanf("%d", &mbr->nais.mois);
- printf(" * Entrez l annee :" );
- fflush(stdin);
- scanf("%d", &mbr->nais.annee);
- printf(" * Entrez le sexe du membre :" );
- fflush(stdin);
- scanf("%c", &mbr->sexe);
- /* Ecriture dans le fichier */
- fwrite(mbr, sizeof(struct MEMBRE), 1, fp);
- fclose(fp);
- }
- /*****************************************************************/
- /* FONCTION SUPPRIMER UN MEMBRE */
- /*****************************************************************/
- void Supprimer_fichier(struct MEMBRE *mbr, struct INDEX *ind, char *pt)
- {
- FILE *fp;
- /* Retourne la position du nom du membre à effacer */
- ind = Recherche_fichier(ind, pt);
- fp = fopen("membre.dat", "r+b" );
- /* On se déplace dans le fichier à l'endroit voulut */
- fseek(fp, (ind->position) * (sizeof(struct MEMBRE)), SEEK_SET);
- /* Lit le fichier pour afficher le membre que l'on va supprimer */
- fread(mbr, sizeof(struct MEMBRE), 1, fp);
- printf("%d %s %s %d/%d/%d\n", ind->numlicense, mbr->nom, mbr->prenom, mbr->nais.jour, mbr->nais.mois, mbr->nais.annee, mbr->sexe);
- printf("Appuyer sur une touche pour supprimer cette element ..." );
- getch();
- /* On remet tout à null */
- strcpy(mbr->nom, " " );
- strcpy(ind->nom, mbr->nom);
- strcpy(mbr->prenom, " " );
- mbr->sexe = ' ';
- mbr->nais.jour = 0;
- mbr->nais.mois = 0;
- mbr->nais.annee = 0;
- fclose(fp);
- fopen("membre.dat", "r+b" );
- /* On se repositionne pour écrire dans le fichier */
- fseek(fp, (ind->position) * (sizeof(struct MEMBRE)), SEEK_SET);
- fwrite(mbr, sizeof(struct MEMBRE), 1, fp);
- fclose(fp);
- }
- /*******************************************************************/
- /* FONCTION MODIFIER UNE FICHE */
- /*******************************************************************/
- void Modif_fichier(struct MEMBRE *mbr, struct INDEX *ind, char *pt)
- {
- FILE *fp;
- /* Retourne la position du nom du membre à modifier */
- ind = Recherche_fichier(ind, pt);
- printf("\n MODIFICATION\n" );
- printf(" ------------\n\n" );
- fp = fopen("membre.dat", "r+b" );
- /* On se place à l'endroit voulut dans le fichier */
- fseek(fp, (ind->position)*(sizeof(struct MEMBRE)), SEEK_SET);
- fread(mbr, sizeof(struct MEMBRE), 1, fp);
- printf("%d %s %s %d/%d/%d\n", mbr->numlicense, mbr->nom, mbr->prenom, mbr->nais.jour, mbr->nais.mois, mbr->nais.annee, mbr->sexe);
- printf(" * Entrez le numero de license :" );
- fflush(stdin);
- scanf("%d", &mbr->numlicense);
- printf(" * Entrez le nom :" );
- fflush(stdin);
- gets(mbr->nom);
- printf(" * Entrez le prenom :" );
- fflush(stdin);
- gets(mbr->prenom);
- printf(" * Entrez le jour :" );
- fflush(stdin);
- scanf("%d", &mbr->nais.jour);
- printf(" * Entrez le mois :" );
- fflush(stdin);
- scanf("%d", &mbr->nais.mois);
- printf(" * Entrez l annee :" );
- fflush(stdin);
- scanf("%d", &mbr->nais.annee);
- printf(" * Entrez le sexe du membre :" );
- fflush(stdin);
- scanf("%c", &mbr->sexe);
- fclose(fp);
- fp = fopen("membre.dat", "r+b" );
- fseek(fp, (ind->position)*(sizeof(struct MEMBRE)), SEEK_SET);
- /* Ecriture dans le fichier de la fiche modifier */
- fwrite(mbr, sizeof(struct MEMBRE), 1, fp);
- fclose(fp);
- }
|
|