Carnet d'adresse

Description

c'est mon premier code qui depasse 900 lignes, c'est un carnet d'adresse ecrit en langage C, outil de developpement Turbo c2.01 de Borland, sur une plate-form: windows 98 SE.

Source / Exemple :


#include <stdio.h>
 #include <conio.h>
 #include <string.h>

 #define max_nom 30
 #define max_adresse 50
 #define max_autre 20
 struct adresse
    {
     char nom [max_nom];
     char prn [max_nom];
     char adr1 [max_adresse];
     char adr2 [max_adresse];
     char tele [max_autre];
     char teleb [max_autre];
     char mob [max_autre];
     char email [max_nom];
    };
 struct adresse var_adresse[100], var_adresse_trier[1];
 FILE * fichier;
 void cadre (int x1, int y1, int x2, int y2);
 void cadre_prime (int x1, int y1, int x2, int y2);
 void position_ecriture (int x, int y, char mot [30]);
 void affiche_menu_general ();
 void affiche_sous_menu_general ();
 void interface_application ();
 void ajout_enregistrement_champ ();
 void ajout_enregistrement_champ_moin ();
 void affichages_des_tableaux ();
 void saisie ();
 void consulter ();
 void consulter_effacement_cadres ();
 void consulter_D_F_Bidirection (int x);
 void consulter_Rechercher ();
 void supprimer (int s);
 void liste ();
 void modifier ();
 void trier ();
 void effacement ();
 int  global_i = 1, j;
 char  nom [30];
 main()
 {
  fichier = fopen ("adresse.dat", "a");
  fclose (fichier);
  fichier = fopen ("adresse.dat", "r");
  while (! feof (fichier))
   {
    fscanf (fichier, "\t\n%s %s %s %s %s %s %s %s",
		      var_adresse[global_i].nom,
		      var_adresse[global_i].prn,
		      var_adresse[global_i].adr1,
		      var_adresse[global_i].adr2,
		      var_adresse[global_i].tele,
		      var_adresse[global_i].teleb,
		      var_adresse[global_i].mob,
		      var_adresse[global_i].email);
    global_i++;
   }
  fclose (fichier);
  textbackground (1);
  textcolor (7);
  interface_application ();
  affiche_menu_general ();
  return 0;
 }
   void cadre (int x1, int y1, int x2, int y2)
     {
      int i;
      for (i=x1; i<x2; i++)
       {
	gotoxy (i, y1);
	    printf ("%c", 205);
	    gotoxy (i, y2);
	    printf ("%c", 205);
       }
     for (i=y1; i<y2; i++)
      {
       gotoxy (x1, i);
       printf ("%c", 186);
       gotoxy (x2, i);
       printf ("%c", 186);
      }
       gotoxy (x1, y1);
       printf ("%c", 201);
       gotoxy (x1, y2);
       printf ("%c", 200);
       gotoxy (x2, y1);
       printf ("%c", 187);
       gotoxy (x2, y2);
       printf ("%c", 188);
    }

  void cadre_prime (int x1, int y1, int x2, int y2)
     {
      int i;
      for (i=x1; i<x2; i++)
       {
	gotoxy (i, y1);
	    printf ("%c", 196);
	    gotoxy (i, y2);
	    printf ("%c", 196);
       }
     for (i=y1; i<y2; i++)
      {
       gotoxy (x1, i);
       printf ("%c", 179);
       gotoxy (x2, i);
       printf ("%c", 179);
      }
       gotoxy (x1, y1);
       printf ("%c", 218);
       gotoxy (x1, y2);
       printf ("%c", 192);
       gotoxy (x2, y1);
       printf ("%c", 191);
       gotoxy (x2, y2);
       printf ("%c", 217);
    }

    void position_ecriture (int x, int y, char mot [30])
   {
	gotoxy (x, y);
	printf ("%s", mot);
   }

 void affiche_menu_general ()
  {
     char c = ' ';
     int i=1;

     affiche_sous_menu_general ();
  while (1)
   {
     if (i == 1)
      {
       cadre (2, 21, 8, 23); /* ajout */
       cadre_prime (57, 21, 65, 23);
       cadre_prime (9, 21,  18, 23);
      }
     if (i == 2)
      {
       cadre (9, 21, 18, 23); /* modifier */
       cadre_prime (2, 21, 8, 23);
       cadre_prime (19, 21, 29, 23);
      }
     if (i == 3)
      {
       cadre (19, 21, 29, 23); /* consulter */
       cadre_prime (9, 21,  18, 23);
       cadre_prime (30, 21, 36, 23);
      }
     if (i == 4)
      {
       cadre (30, 21, 36, 23); /* trier */
       cadre_prime (19, 21, 29, 23);
       cadre_prime (37, 21, 46, 23);
      }
     if (i == 5)
      {
       cadre (37, 21, 46, 23); /* imprimer */
       cadre_prime (30, 21, 36, 23);
       cadre_prime (47, 21, 56, 23);
      }
     if (i == 6)
      {
       cadre (47, 21, 56, 23); /* a propos */
       cadre_prime (37, 21, 46, 23);
       cadre_prime (57, 21, 65, 23);
      }
     if (i == 7)
      {

       cadre (57, 21, 65, 23); /* quitter */
       cadre_prime (47, 21, 56, 23);
       cadre_prime (2, 21, 8, 23);
      }
     c = getch();
     if ( i == 1 && c == 13 ) { saisie (); }
     if ( i == 2 && c == 13 ) { modifier (); }
     if ( i == 3 && c == 13 ) { consulter_effacement_cadres (); }
     if ( i == 4 && c == 13 ) { trier (); }
     if ( i == 5 && c == 13 )
	{
	  effacement ();
	  gotoxy (strlen ("E-mail: ") + 8, 18);
	  printf ("vide !");
	}
     if ( i == 6 && c == 13 )
	{
	  gotoxy (20, 10);
	  gotoxy (strlen ("E-mail: "), 18);
	  printf ("Serrat lyes, serrat_lyes@hotmail.com, www.geocities.com/amine808");
	}
     if ( i == 7 && c == 13 )
       {

	 fichier = fopen ("adresse.dat", "w");
	 for (j=1; j<global_i; j++)
	 {
	   if ((var_adresse[j].nom[0]=='.') ||
	       (var_adresse[j].prn[0]=='.') ||
	       (var_adresse[j].adr1[0]=='.') ||
	       (var_adresse[j].adr2[0]=='.') ||
	       (var_adresse[j].tele[0]=='.') ||
	       (var_adresse[j].teleb[0]=='.') ||
	       (var_adresse[j].mob[0]=='.') ||
	       (var_adresse[j].email[0]=='.')) continue;
	   fprintf (fichier, "\t\n%s %s %s %s %s %s %s %s",
			      var_adresse[j].nom,
			      var_adresse[j].prn,
			      var_adresse[j].adr1,
			      var_adresse[j].adr2,
			      var_adresse[j].tele,
			      var_adresse[j].teleb,
			      var_adresse[j].mob,
			      var_adresse[j].email);
	 }

	 fclose (fichier);
	 exit (1);
       }
     if ( c == 0 + 77 ) i++;
     if ( c == 0 + 75 ) i--;
     if ( i > 7 ) i = 1;
     if ( i < 1 ) i = 7;
    }

   }
   /* menu principal a afficher: */
  void interface_application ()
   {
    clrscr();
    cadre (1, 2, 80, 25); /* premier cadre */
    position_ecriture (3, 2, "Carnet d'adresses");
    cadre (3, 3, 78, 20); /* deuxième cadre */
    cadre (2, 21, 7, 23);
    /* donnees du carnet d'adresse a manipulés */
    /*position_ecriture (8, 7, "Numero: ");*/
    position_ecriture (8, 8, "Nom: ");
    position_ecriture (8, 9, "Prenom: ");
    position_ecriture (8, 10, "Adresse: ");
    position_ecriture (8, 12, "Tele: ");
    position_ecriture (8, 13, "Tele bureau: ");
    position_ecriture (8, 14, "Mobile: ");
    position_ecriture (8, 15, "E-mail: ");
    ajout_enregistrement_champ ();
    /* fin donnees du carnet d'adresse a manipulés */
   }
  void affiche_sous_menu_general ()
    {
     /* menu principal a afficher:

    • AJOUT MODIFIER SUPPREMER CONSULTER TRIER IMPRIMER A PROPOS QUITTER** */
position_ecriture (3, 22, "AJOUT"); position_ecriture (10, 22, "MODIFIER"); position_ecriture (20, 22, "CONSULTER"); position_ecriture (31, 22, "TRIER"); position_ecriture (38, 22, " "); position_ecriture (48, 22, "A PROPOS"); position_ecriture (58, 22, "QUITTER"); cadre_prime (2, 21, 8, 23); cadre_prime (9, 21, 18, 23); cadre_prime (19, 21, 29, 23); cadre_prime (30, 21, 36, 23); cadre_prime (37, 21, 46, 23); cadre_prime (47, 21, 56, 23); cadre_prime (57, 21, 65, 23); } void ajout_enregistrement_champ () { /* effacement des enciennes rubriques */ gotoxy (strlen ("Nom: ") + 8, 8); printf (".............................."); gotoxy (strlen ("Prenom: ") + 8, 9); printf (".............................."); gotoxy (strlen ("Adresse: ") + 8, 10); printf (".................................................."); gotoxy (strlen ("Adresse: ") + 8, 11); printf (".................................................."); gotoxy (strlen ("Tele: ") + 8, 12); printf ("...................."); gotoxy (strlen ("Tele bureau: ") + 8, 13); printf ("....................."); gotoxy (strlen ("Mobile: ") + 8, 14); printf ("....................."); gotoxy (strlen ("E-mail: ") + 8, 15); printf (".............................."); } void ajout_enregistrement_champ_moin () { /* effacement des enciennes rubriques */ gotoxy (strlen ("Nom: ") + 8, 8); printf (" "); gotoxy (strlen ("Prenom: ") + 8, 9); printf (" "); gotoxy (strlen ("Adresse: ") + 8, 10); printf (" "); gotoxy (strlen ("Adresse: ") + 8, 11); printf (" "); gotoxy (strlen ("Tele: ") + 8, 12); printf (" "); gotoxy (strlen ("Tele bureau: ") + 8, 13); printf (" "); gotoxy (strlen ("Mobile: ") + 8, 14); printf (" "); gotoxy (strlen ("E-mail: ") + 8, 15); printf (" "); } void saisie () { int i; if ( global_i > 100 ) printf (" "); else { ajout_enregistrement_champ (); cadre_prime (2, 21, 8, 23); gotoxy (strlen ("Nom: ") + 8, 8); gets (var_adresse[global_i].nom); for (i=0; i<=strlen (var_adresse[global_i].nom); i++) { if (var_adresse[global_i].nom[i]==' ') var_adresse[global_i].nom[i]= '.'; } if (strlen (var_adresse[global_i].nom) == 0) { var_adresse[global_i].nom[0]='/'; var_adresse[global_i].nom[1]='\0'; } gotoxy (strlen ("Prenom: ") + 8, 9); gets (var_adresse[global_i].prn); for (i=0; i<=strlen (var_adresse[global_i].prn); i++) { if (var_adresse[global_i].prn[i]==' ') var_adresse[global_i].prn[i]= '.'; } if (strlen (var_adresse[global_i].prn) == 0) { var_adresse[global_i].prn[0]='/'; var_adresse[global_i].prn[1]='\0'; } gotoxy (strlen ("Adresse: ") + 8, 10); gets (var_adresse[global_i].adr1); for (i=0; i<=strlen (var_adresse[global_i].adr1); i++) { if (var_adresse[global_i].adr1[i]==' ') var_adresse[global_i].adr1[i]= '.'; } if (strlen (var_adresse[global_i].adr1) == 0) { var_adresse[global_i].adr1[0]='/'; var_adresse[global_i].adr1[1]='\0'; } gotoxy (strlen ("Adresse: ") + 8, 11); gets (var_adresse[global_i].adr2); for (i=0; i<=strlen (var_adresse[global_i].adr2); i++) { if (var_adresse[global_i].adr2[i]==' ') var_adresse[global_i].adr2[i]= '.'; } if (strlen (var_adresse[global_i].adr2) == 0) { var_adresse[global_i].adr2[0]='/'; var_adresse[global_i].adr2[1]='\0'; } gotoxy (strlen ("Tele: ") + 8, 12); gets (var_adresse[global_i].tele); for (i=0; i<=strlen (var_adresse[global_i].tele); i++) { if (var_adresse[global_i].tele[i]==' ') var_adresse[global_i].tele[i]= '.'; } if (strlen (var_adresse[global_i].tele) == 0) { var_adresse[global_i].tele[0]='/'; var_adresse[global_i].tele[1]='\0'; } gotoxy (strlen ("Tele bureau: ") + 8, 13); gets (var_adresse[global_i].teleb); for (i=0; i<=strlen (var_adresse[global_i].teleb); i++) { if (var_adresse[global_i].teleb[i]==' ') var_adresse[global_i].teleb[i]= '.'; } if (strlen (var_adresse[global_i].teleb) == 0) { var_adresse[global_i].teleb[0]='/'; var_adresse[global_i].teleb[1]='\0'; } gotoxy (strlen ("Mobile: ") + 8, 14); gets (var_adresse[global_i].mob); for (i=0; i<=strlen (var_adresse[global_i].mob); i++) { if (var_adresse[global_i].mob[i]==' ') var_adresse[global_i].mob[i]= '.'; } if (strlen (var_adresse[global_i].mob) == 0) { var_adresse[global_i].mob[0]='/'; var_adresse[global_i].mob[1]='\0'; } gotoxy (strlen ("E-mail: ") + 8, 15); gets (var_adresse[global_i].email); for (i=0; i<=strlen (var_adresse[global_i].email); i++) { if (var_adresse[global_i].email[i]==' ') var_adresse[global_i].email[i]= '.'; } if (strlen (var_adresse[global_i].email) == 0) { var_adresse[global_i].email[0]='/'; var_adresse[global_i].email[1]='\0'; } global_i++; } } void consulter_effacement_cadres () { int i, j,k; char cmp, licte; for (i=21; i<=23; i++) for (j=2; j<=65; j++) { gotoxy (j,i); printf (" "); } position_ecriture (4, 21, "D"); position_ecriture (4, 22, "-"); position_ecriture (8, 21, "<-"); position_ecriture (12, 21, "->"); position_ecriture (16, 21, "F"); position_ecriture (16, 22, "-"); position_ecriture (20, 21, "Rechercher"); position_ecriture (20, 22, "-"); position_ecriture (33, 21, "Supprimer"); position_ecriture (33, 22, "-"); position_ecriture (45, 21, "Liste"); position_ecriture (45, 22, "-"); /*menu boucler ;*/ i=1; consulter_D_F_Bidirection (1); while (1) { cmp = getch(); if ( i < 1 ) { i = 1; consulter_D_F_Bidirection (i); } if ( i > global_i - 1 ) { i = global_i - 1; consulter_D_F_Bidirection (i); } if ( cmp == 27 ) break; if (( cmp == 68 ) || ( cmp == 100)) consulter_D_F_Bidirection (1); if (( cmp == 70 ) || ( cmp == 102)) consulter_D_F_Bidirection (global_i-1); if (( cmp == 82 ) || ( cmp == 114)) consulter_Rechercher (); if (( cmp == 83 ) || ( cmp == 115)) supprimer (i); if (( cmp == 76 ) || ( cmp == 108)) { while (1) { position_ecriture (45, 21, " "); position_ecriture (45, 22, " "); liste (); licte = getch(); if ( licte == 27 ) break; } position_ecriture (45, 21, "Liste"); position_ecriture (45, 22, "-"); for (k=5; k<=19; k++) for (j=5; j<=77; j++) { gotoxy (j,k); printf (" "); } position_ecriture (8, 8, "Nom: "); position_ecriture (8, 9, "Prenom: "); position_ecriture (8, 10, "Adresse: "); position_ecriture (8, 12, "Tele: "); position_ecriture (8, 13, "Tele bureau: "); position_ecriture (8, 14, "Mobile: "); position_ecriture (8, 15, "E-mail: "); ajout_enregistrement_champ (); consulter_D_F_Bidirection (1); } if ( cmp == 0 + 77 ) { i++; if ((var_adresse[i].nom[0]== '.') && (var_adresse[i].prn[0]== '.') && (var_adresse[i].adr1[0]== '.') && (var_adresse[i].adr2[0]== '.') && (var_adresse[i].tele[0]== '.') && (var_adresse[i].teleb[0]== '.') && (var_adresse[i].mob[0]== '.') && (var_adresse[i].email[0]= '.')) continue; consulter_D_F_Bidirection (i); } if ( cmp == 0 + 75 ) { i--; if ((var_adresse[i].nom[0]== '.') && (var_adresse[i].prn[0]== '.') && (var_adresse[i].adr1[0]== '.') && (var_adresse[i].adr2[0]== '.') && (var_adresse[i].tele[0]== '.') && (var_adresse[i].teleb[0]== '.') && (var_adresse[i].mob[0]== '.') && (var_adresse[i].email[0]= '.')) continue; consulter_D_F_Bidirection (i); } } affiche_sous_menu_general (); } void consulter_D_F_Bidirection (int i) { ajout_enregistrement_champ_moin (); gotoxy (strlen ("Nom: ") + 8, 8); puts (var_adresse[i].nom); gotoxy (strlen ("Prenom: ") + 8, 9); puts (var_adresse[i].prn); gotoxy (strlen ("Adresse: ") + 8, 10); puts (var_adresse[i].adr1); gotoxy (strlen ("Adresse: ") + 8, 11); puts (var_adresse[i].adr2); gotoxy (strlen ("Tele: ") + 8, 12); puts (var_adresse[i].tele); gotoxy (strlen ("Tele bureau: ") + 8, 13); puts (var_adresse[i].teleb); gotoxy (strlen ("Mobile: ") + 8, 14); puts (var_adresse[i].mob); gotoxy (strlen ("E-mail: ") + 8, 15); puts (var_adresse[i].email); } void consulter_Rechercher () { int i; effacement (); ajout_enregistrement_champ (); gotoxy (strlen ("Nom: ") + 8, 8); gets (nom); if (strlen (nom) == 0) { nom[0]='/'; nom[1]='\0'; } i=1; while (i<global_i) { if (strcmp (nom, var_adresse[i].nom) == NULL ) { consulter_D_F_Bidirection (i); gotoxy (strlen ("E-mail: ") + 8, 18); printf ("Appyer sur une touche pour continuer..."); getch(); } i++; } gotoxy (strlen ("E-mail: ") + 8, 18); printf ("Recherche terminer "); } void supprimer (int s) { effacement (); var_adresse[s].nom[0]= '.'; var_adresse[s].nom[1]= '\0'; var_adresse[s].prn[0]= '.'; var_adresse[s].prn[1]= '\0'; var_adresse[s].adr1[0]= '.'; var_adresse[s].adr1[1]= '\0'; var_adresse[s].adr2[0]= '.'; var_adresse[s].adr2[1]= '\0'; var_adresse[s].tele[0]= '.'; var_adresse[s].tele[1]= '\0'; var_adresse[s].teleb[0]= '.'; var_adresse[s].teleb[1]= '\0'; var_adresse[s].mob[0]= '.'; var_adresse[s].mob[1]= '\0'; var_adresse[s].email[0]= '.'; var_adresse[s].email[1]= '\0'; } void liste () { int i, j, k; char cmp = ' '; for (k=6; k<=19; k++) for (j=5; j<=77; j++) { gotoxy (j,k); printf (" "); } position_ecriture (5, 5, "NOM"); position_ecriture (30, 5, "PRENOM"); position_ecriture (51, 5, "E-MAIL"); j=1; for (i=1; i<global_i; i++) { gotoxy (5, 5+j); printf ("%s", var_adresse[i].nom); gotoxy (30, 5+j); printf ("%s", var_adresse[i].prn); gotoxy (51, 5+j); printf ("%s", var_adresse[i].email); j++; if (j > 14 ) { cmp = getch(); if ( cmp == 27 ) break; for (k=6; k<=19; k++) for (j=5; j<=77; j++) { gotoxy (j,k); printf (" "); } j=1; } } } void modifier () { int i, k; char c=' '; ajout_enregistrement_champ (); effacement (); gotoxy (strlen ("Nom: ") + 8, 8); gets (nom); if (strlen (nom) == 0) { nom[0]='/'; nom[1]='\0'; } i=1; while (i<global_i) { if (strcmp (nom, var_adresse[i].nom) == NULL ) { consulter_D_F_Bidirection (i); gotoxy (strlen ("E-mail: ") + 8, 18); printf ("Appuyer sur une touche pour modifier...ESC pour annuler"); if ((c = getch()) != 27 ) { effacement (); ajout_enregistrement_champ (); cadre_prime (2, 21, 8, 23); gotoxy (strlen ("Nom: ") + 8, 8); gets (var_adresse[i].nom); for (k=0; k<=strlen (var_adresse[i].nom); k++) { if (var_adresse[i].nom[k]==' ') var_adresse[i].nom[k]= '.'; } if (strlen (var_adresse[i].nom) == 0) { var_adresse[i].nom[0]='/'; var_adresse[i].nom[1]='\0'; } gotoxy (strlen ("Prenom: ") + 8, 9); gets (var_adresse[i].prn); for (k=0; k<=strlen (var_adresse[i].prn); k++) { if (var_adresse[i].prn[k]==' ') var_adresse[i].prn[k]= '.'; } if (strlen (var_adresse[i].prn) == 0) { var_adresse[i].prn[0]='/'; var_adresse[i].prn[1]='\0'; } gotoxy (strlen ("Adresse: ") + 8, 10); gets (var_adresse[i].adr1); for (k=0; k<=strlen (var_adresse[i].adr1); k++) { if (var_adresse[i].adr1[k]==' ') var_adresse[i].adr1[k]= '.'; } if (strlen (var_adresse[i].adr1) == 0) { var_adresse[i].adr1[0]='/'; var_adresse[i].adr1[1]='\0'; } gotoxy (strlen ("Adresse: ") + 8, 11); gets (var_adresse[i].adr2); for (k=0; k<=strlen (var_adresse[i].adr2); k++) { if (var_adresse[i].adr2[k]==' ') var_adresse[i].adr2[k]= '.'; } if (strlen (var_adresse[i].adr2) == 0) { var_adresse[i].adr2[0]='/'; var_adresse[i].adr2[1]='\0'; } gotoxy (strlen ("Tele: ") + 8, 12); gets (var_adresse[i].tele); for (k=0; k<=strlen (var_adresse[i].tele); k++) { if (var_adresse[i].tele[k]==' ') var_adresse[i].tele[k]= '.'; } if (strlen (var_adresse[i].tele) == 0) { var_adresse[i].tele[0]='/'; var_adresse[i].tele[1]='\0'; } gotoxy (strlen ("Tele bureau: ") + 8, 13); gets (var_adresse[i].teleb); for (k=0; k<=strlen (var_adresse[i].teleb); k++) { if (var_adresse[i].teleb[k]==' ') var_adresse[i].teleb[k]= '.'; } if (strlen (var_adresse[i].teleb) == 0) { var_adresse[i].teleb[0]='/'; var_adresse[i].teleb[1]='\0'; } gotoxy (strlen ("Mobile: ") + 8, 14); gets (var_adresse[i].mob); for (k=0; k<=strlen (var_adresse[i].mob); k++) { if (var_adresse[i].mob[k]==' ') var_adresse[i].mob[k]= '.'; } if (strlen (var_adresse[i].mob) == 0) { var_adresse[i].mob[0]='/'; var_adresse[i].mob[1]='\0'; } gotoxy (strlen ("E-mail: ") + 8, 15); gets (var_adresse[i].email); for (k=0; k<=strlen (var_adresse[i].email); k++) { if (var_adresse[i].email[k]==' ') var_adresse[i].email[k]= '.'; } if (strlen (var_adresse[i].email) == 0) { var_adresse[i].email[0]='/'; var_adresse[i].email[1]='\0'; } } effacement (); gotoxy (strlen ("E-mail: ") + 8, 18); printf ("Appyer sur une touche pour continuer..."); getch(); } i++; } gotoxy (strlen ("E-mail: ") + 8, 18); printf ("Recherche terminer "); } void trier () { int i, j; for (i=1; i<global_i; i++) { for (j=1; j<global_i; j++) { if (strcmp (var_adresse[i].nom, var_adresse[j].nom) < 0 ) { var_adresse_trier[1]=var_adresse[i]; var_adresse[i]=var_adresse[j]; var_adresse[j]=var_adresse_trier[1]; } } } } void effacement () { int i, j; for (i=17; i<=19; i++) for (j=4; j<=77; j++) { gotoxy (j,i); printf (" "); } } 

Conclusion :


carnet d'adresse que j réaliser pour apprendre le C, il sera reponser, réercrit dans la version 2.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_katib)