Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* Structure pour les clients. La structure est une sorte de "mode d'emploi"
  5.  * pour la création de variable. Ainsi je peu créé une structure de type
  6.  * Personne (et non une structure personne) que je nommerai ListeClient.
  7.  * La variabel ListeClient (qui a été créé selon la description ci dessous donc)
  8.  * contient un char nom, un char prenom, une char telephone et un pointeur
  9.  * vers la personne suivante dans la liste. C'est grace a cette dernière
  10.  * variable de type pointeur de structure personne que l'on pourra rajouter
  11.  * de manière "infinie" des clients dans la liste. Le principe est :
  12.  * Le client 1 a un NPT (nom, prenom, tel) + l'adresse mémoire du client 2
  13.  * Le client 2 a un NPT + l'adresse mémoire du client 3
  14.  * Le client 3 a un NPT + l'adresse mémoire du client 4
  15.  * et ainsi de suite. Ce qui se trouve a la fin de la structure après le };
  16.  * me permet d'initialiser directment une variable Personne de type Personne
  17.  * (comme pour la variable ListeClient en fait) ainsi que une variable de type
  18.  * pointeur sur la structure personne. L'avantage est que ces deux variables
  19.  * peuvent être utilisé n'importe ou dans le code (elles ne sont donc pas
  20.  * limité a la portée de leurs portions)*/
  21. typedef struct Personne
  22. {
  23.         char* nom;
  24.         char* prenom;
  25.         char* telephone;
  26.         // Notre pointeur pour le client suivant
  27.         struct Personne* suivant;
  28.         // Notre variable Personne et le pointeur de structure
  29. }Personne, *PersonnePtr;
  30.  
  31. /* J'ecris ici les protorypes de mes fonctions. Les protoypes de fonctions
  32.  * permettent basiquement d'appeler dans main des fonctions dont le code
  33.  * est ecrit APRES main. Elles correspondent respectivement a l'etape
  34.  * 1, 2 et 3 décrite par Cailleuw*/
  35. int NombreDeClients();
  36. PersonnePtr AjoutClient(int);
  37. void AffichageClient(PersonnePtr);
  38.  
  39. int main()
  40. {
  41.         // nombreClient et le nombre rentré par le user
  42.         int NombreClient;
  43.         /* On crée une "liste". en fait on créé un pointeur. Un pointeur
  44.          * référence un addresse. Et a cette addresse la on reserve un espace
  45.          * mémoire qui esra "controlé" (référencé) par le pointeur. La taille
  46.          * de cette espace est egale a la taille de la structure "basiquement
  47.          * 3 char* et un Personne*)*/
  48.         PersonnePtr ListeClient = (PersonnePtr)malloc(sizeof(Personne));
  49.        
  50.         // ETAPE 1 : On demande a l'utilisateur le nombre de clients en appelant la fonction NombreDeClients()
  51.         NombreClient = NombreDeClients();
  52.         // ETAPE 2 : L'utilisateur saisis les clients et on les rajoute à la liste.
  53.         ListeClient = AjoutClient(NombreClient);
  54.         // ETAPE 3 : On affiche la liste des clients
  55.         AffichageClient(ListeClient);
  56.                
  57.         return 0;
  58. }
  59.  
  60. // Version raccroucie du main
  61. // int main()
  62. // {
  63. //      AffichageClient(AjoutClient(NombreDeClients()));
  64. //      return 0;
  65. // }
  66.  
  67. PersonnePtr AjoutClient(int nombreClient)
  68. {
  69.         // Création d'un nouveau pointeur de structure et allocation de la
  70.         // mémoire a l'emplacement pointé comme au debut de main()
  71.         PersonnePtr Client = (PersonnePtr)malloc(sizeof(Personne));
  72.        
  73.         // On récupère les informations Nom, Prenom et n° de TEL
  74.         // Et on les stocke dans la structure pointé par Client
  75.         printf("Saisie du nom : ", nombreClient);
  76.         scanf("%s", &Client->nom);
  77.         printf("Saisie du Prenom : ", nombreClient);
  78.         scanf("%s", &Client->prenom);
  79.         printf("Saisie du Telephone : ", nombreClient);
  80.         scanf("%s", &Client->telephone);
  81.        
  82.         // Si il y a encore des clients a rajouté, on rappel cette fonction
  83.         // et on stocke le pointeur de structure qu'elle retourne dans
  84.         // suivant. (Fonction récursive)
  85.         if (nombreClient-- >= 2 ) {
  86.             Client->suivant = AjoutClient(nombreClient);
  87.         }
  88.        
  89.         // Si tout les clients sont rajoutés, on renvoi la première structure
  90.         return Client;
  91. }
  92.  
  93. // Pas besoin d'explication pour cette fonction je pense
  94. int NombreDeClients()
  95. {
  96.         int nombreClient;
  97.         printf("Combien de clients souhaitez-vous saisir ? \n");
  98.         scanf("%d", &nombreClient);
  99.         return nombreClient;
  100. }
  101.  
  102. /* Allé, encore un peu de récursif
  103.  * La fonction prend en argument un Pointeur de Personne. En fait,
  104.  * on lui donne a manger l'addresse a laquel se trouve l'élément à afficher.
  105.  * (un pointeur représentant une adresse). Et vu que tous les clients on
  106.  * l'adresse ou se trouve le client suivant, il suffit d'envoyer "suivant"
  107.  * de la structure a la fonction jusqu'a ce que suivant soit egal a NULL et donc
  108.  * qu'il n'y plus de client a afficher.*/
  109. void AffichageClient(PersonnePtr ListeClient)
  110. {
  111.         // On affiche les infos
  112.         // Le "&" est nécéssaire car ListeClient est un pointeur.
  113.         // "&" permet d'obtenir la structure pointé par Listeclient et donc
  114.         // les valeurs contenue pas la structure référencé
  115.         printf("--------------------------------\n");
  116.         printf("Nom : %s\n", &ListeClient->nom);
  117.         printf("Prenom : %s\n", &ListeClient->prenom);
  118.         printf("Telephone : %s\n", &ListeClient->telephone);
  119.        
  120.         // Si le pointeur vers le client suivant référence (pointe) quelque chose
  121.         // alors on réappel cette fonction avec en argument l'adresse du client
  122.         // suivant.
  123.         if(ListeClient->suivant != NULL){
  124.             AffichageClient(ListeClient->suivant);
  125.         }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement