Elektronique - Cours d'électronique

Programme d'un distributeur de boisson payante (langage C)

icône imprimante Imprimer cette page

Introduction du distributeur de boisson payante

Difficulté: etoile pleine

icone café

Ce programme permet de réaliser une application d'un distributeur de boisson payant. Pour réaliser ce programme il faut avoir lu la première partie qui consiste à réaliser un programme de distributeur de boisson gratuite.

Les améliorations qui sont apporté avec ce tutorial c'est qu'il faut pouvoir compter l'argent utilisé par le client, et si celui-ci met trop, il faut pouvoir lui rendre la monnaie. Ca va donc être plus compliqué que le programme précédent. Mais vous allez tout de même vous en sortir car on va juste améliorer le programme déjà vu.

Plan du tutorial

retour en haut

Cahier des charges

Dans un premier temps, pour réaliser ce programme, il faut que l'on se pose des questions. Notamment, il faut que l'ont sache quel seront les grandes étapes du programme. Heureusement, je pense que tout le monde à déjà du voir le fonctionnement d'un distributeur de boison. Il nous sera ainsi plus facil d'en décrire les grandes parties. Ainsi, je pense que l'ont peut résumer ces étapes par:

  1. Le programme affiche un menu avec le choix des différentes boissons proposées. Et il attend qu'un choix soit fait.
  2. Lorsqu'un choix à été fait, il faut que le programme demande l'argent à l'utilisateur, en fonction de la boisson choisit.
  3. Une fois la boisson payée, le programme peut enfin afficher que la boisson est distribué.
  4. Le programme retourne au menu principal.

Pour simuler les pièces de monnaie, nous allons utiliser des touches du clavier.
Lorsque l'ont aura finit ce mini-programme, nous allons avoir quelque chose qui ressemble à ceci:

exemple du programme calcul d'une note moyenne en langage c

N'oubliez pas que si vous avez suivis le premier tutorial pour réaliser le distributeur de boisson gratuite, une partie du travail est déjà faites, et qu'il nous reste à adapter le programme existant.

Allez courage, ce ne va pas être si dur que ça. smiley

retour en haut

Pratique

Voici le programme que nous avons obtenu dans la première partit. C'est à partir de ce programme qu'on va démarer cette nouvelle étape:

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

int main(void)
{
char i;

while (i!='q')
{
printf("DISTRIBUTEUR DE BOISSONS\n");
printf("Faites votre choix et validez ...\n");
printf("\nCAFE NOIR <N>");
printf("\nCAFE AU LAIT <L>");
printf("\nTHE NATURE <T>");
printf("\nCHOCOLAT au LAIT <C>");
printf("\nSODA <S>");
printf("\nBIERE sans alcool <B>\n");
i=getche();

switch (i)
{
case'N':
case'n': printf("\nVeuillez prendre votre CAFE NOIR !\n\n");
break;
case'L':
case'l': printf("\nVeuillez prendre votre CAFE AU LAIT !\n\n");
break;
case'T':
case't': printf("\nVeuillez prendre votre THE NATURE !\n\n");
break;
case'C':
case'c': printf("\nVeuillez prendre votre CHOCOLAT au LAIT !\n\n");
break;
case'S':
case's': printf("\nVeuillez prendre votre SODA !\n\n");
break;
case'B':
case'b': printf("\nVeuillez prendre votre BIERE sans alcool !\n\n");
break;
}
}

system ("pause");
return 0;
}
Il y a des choses qui vont changer par rapport à ce premier programme.
Avant lorsque l'ont payait on obtenait la boisson directement. Mais là, il va falloir indiquer au client "Veuillez payer votre boisson", et prendre en compte combien l'utilisateur donne.

Nous allons donc, rajouter deux autres variables:

  1. prix: Correspond à une variable de type int, qui va contenir tout ce que l'utilisateur paye.
  2. rendu: Cette variable est aussi de type int, et elle contient la somme à rendre à l'utilisateur.

Maintenant, il faut penser au reste du programme!

N'oublions pas qu'en appuyant sur la touche "q" il faut pouvoir quitter le programme. Donc on va faire ça comme nouveauté:

  1. Propose les différentes boissons
  2. Si on appuye sur une touche ça nous propose de payer la boisson concerné
  3. ça indique le prix, et nous demande de payer
  4. tant qu'on à pas payé la somme entière, on peut payé avec diverses pièces de monnaie
  5. Si la somme payé par l'utilisateur est supérieur au prix de la boisson, alors on lui rend la monnaie
  6. Enfin on donne la boisson au client, et on retourne au début du programme en réaffichant le menu avec les différentes boissons.

Pour l'étape 3 à 6, il faut tout mettre dans une boucle if pour les passer si l'utilisateur veux quitter le programme (en appuyant sur la touche q).
Nous allons donc utiliser ce programme (avec les modifications apporté):

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

int main(void)
{
char i;
int prix = 0, rendu = 0;

while (i!='q')
{
printf("DISTRIBUTEUR DE BOISSONS\n");
printf("Faites votre choix et validez ...\n");
printf("\nCAFE NOIR <N>");
printf("\nCAFE AU LAIT <L>");
printf("\nTHE NATURE <T>");
printf("\nCHOCOLAT au LAIT <C>");
printf("\nSODA <S>");
printf("\nBIERE sans alcool <B>\n");
i=getche();

switch (i)
{
case'N':
case'n': printf("\nVeuillez payer votre CAFE NOIR !\n\n");
break;
case'L':
case'l': printf("\nVeuillez payer votre CAFE AU LAIT !\n\n");
break;
case'T':
case't': printf("\nVeuillez payer votre THE NATURE !\n\n");
break;
case'C':
case'c': printf("\nVeuillez payer votre CHOCOLAT au LAIT !\n\n");
break;
case'S':
case's': printf("\nVeuillez payer votre SODA !\n\n");
break;
case'B':
case'b': printf("\nVeuillez payer votre BIERE sans alcool !\n\n");
break;
}
if(i!='q')
{
//Cette partie contient le programme à compléter. Et plus particulièrement les étapes 3 à 6
}
}

printf("\nFin du programme\n");
system ("pause");
return 0;
}

A partir de maintenant, nous allons nous concentrer sur la partie manquante du programme ci-dessus.


La partie à compléter (à l'intérieur du if(i!='q')) est décomposé en 4 partie:

  1. On affiche le tarif (et la correspondance entre les pièces et les touches du clavier)
  2. Tant que la somme payé par l'utilisateur est inférieur à 1€, on ne fait rien.
  3. Si l'utilisateur à trop payé, il faut lui rendre sa monnaie
  4. On peut enfin proposer à l'utilisateur sa boisson

Voici donc les différentes étapes:

Etape 1

Pour cette étape, c'est super simple, on va juste afficher à l'écran ce que l'ont souhaite. Pour ma part, j'ai décidé de faire une correspondance entre les pièces et les touches du clavier de cette manière:

  • Pièce de 1€ = touche "e"
  • Pièce de 0.50€ = touche "s"
  • Pièce de 0.20€ = touche "z"
  • Pièce de 0.10€ = touche "i"

On obtient ainsi ce code (que vous pouvez modifier à votre guise):

printf("PRIX=1EURO ( 1e:[e] | 0.5e:[s] | 0.2e:[z] | 0.1e:[i] )\n");

Etape 2

Non seulement pour cette étape on va devoir faire une boucle "tant que" (c'est à dire la boucle while) en regardant si le prix est supérieur à 1€, mais on va aussi devoir regarder si la touche "q" à été appuyé.
La premère chose à regarder en rentrant dans cette boucle, c'est de voir si l'utilisateur presse une touche du clavier. Si il appuye sur une touche, on rentre donc dans une instruction "case".

L'instruction case, va permettre de calculer combien l'utilisateur paye. On va donc ajouter à la somme "prix" déjà existante, le prix de la pièce de monnaie correspondantes.

while((prix<10)&&(i!='q'))
{
i=getch();
switch (i)
{
case'e': prix=prix+10;
break;
case's': prix=prix+5;
break;
case'z': prix=prix+2;
break;
case'i': prix=prix+1;
}
}
Attention: pour simplifier, je multiplie tous les prix par 10, comme ça, nous n'avons pas de problème avec les virgules.
Le code "prix+10" correspont donc à "prix + 1€", et le code "prix+5" correspont ainsi à "prix + 0.50€", etc...

Etape 3

A partir de maintenant, c'est plus simple. Ce bout de code, n'est pas trop dur à comprendre. Si la somme "prix" est supérieur à 10 (c'est à dire si elle est supérieur à 1€), alors on rentre dans l'instruction if, et il faut alors calculer combien on doit rendre à l'utilisateur.

Etant donné que toutes les boissons sont à 1€ (c'est à dire à 10 dans le code source), cela signifit que pour obtenir la valeur à rendre il faut faire "rendu = prix-10".
Le code que l'ont obtient est alors:

if(prix>10)
{
rendu=prix-10;
printf("\nRendu O.%d0euro\n", rendu);
}

Etape 4

Et voilà, nous somme rendus à la dernière étape. L'étape qui consiste à récupérer sa boisson. La seule subtilité ici, c'est de penser à mettre la variable prix à 0 pour les prochains utilisateur du distributeur de boisson. Cela consiste donc à réinitialisé cette variable. Le code correspondant est:

if(i!='q')
{
prix=0;
printf("\nVeuillez prendre votre boisson!\n\n");
}
retour en haut

Programme final

Nous avons vu toutes les étapes à faire, alors je vais vous donner tout le programme (à copier/coller). J'espère que vous n'aurez pas de mal à comprendre cela, mais normlament il n'y a pas de soucis, tout à été vus précédemment.

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

int main(void)
{
char i;
int prix = 0, rendu = 0;

while (i!='q')
{
printf("DISTRIBUTEUR DE BOISSONS\n");
printf("Faites votre choix et validez ...\n");
printf("\nCAFE NOIR <N>");
printf("\nCAFE AU LAIT <L>");
printf("\nTHE NATURE <T>");
printf("\nCHOCOLAT au LAIT <C>");
printf("\nSODA <S>");
printf("\nBIERE sans alcool <B>\n");
i=getche();

switch (i)
{
case'N':
case'n': printf("\nVeuillez payer votre CAFE NOIR !\n\n");
break;
case'L':
case'l': printf("\nVeuillez payer votre CAFE AU LAIT !\n\n");
break;
case'T':
case't': printf("\nVeuillez payer votre THE NATURE !\n\n");
break;
case'C':
case'c': printf("\nVeuillez payer votre CHOCOLAT au LAIT !\n\n");
break;
case'S':
case's': printf("\nVeuillez payer votre SODA !\n\n");
break;
case'B':
case'b': printf("\nVeuillez payer votre BIERE sans alcool !\n\n");
break;
}
if(i!='q')
{
printf("PRIX=1EURO ( 1e:[e] | 0.5e:[s] | 0.2e:[z] | 0.1e:[i] )\n");

while((prix<10)&&(i!='q'))
{
i=getch();
switch (i)
{
case'e': prix=prix+10;
break;
case's': prix=prix+5;
break;
case'z': prix=prix+2;
break;
case'i': prix=prix+1;
}
}

if(prix>10)
{
rendu=prix-10;
printf("\nRendu O.%d0euro\n", rendu);
}

if(i!='q')
{
prix=0;
printf("\nVeuillez prendre votre boisson!\n\n");
}
}
}

printf("\nFin du programme\n");
system ("pause");
return 0;
}

Ce tutoriel sur le programme de distributeur de boisson payante est désormais finis. J'espère que cela vous à plus, et que vous avez tout compris.

retour en haut

Télécharger le programme

Voici un petit tableau où vous pouvez télécharger le programme complet et son code source.
Celui-ci est un peu différent de ce que je vous ai fournis dans ce tutorial, car le programme ci-dessous est amélioré par mes soins.

Nom Description exemple programme code en .c code en .txt Difficulté
Distributeur à boissons Simule le programme d'un distributeur de boisson
pour payer : [e] = 1euro ; [s]= 50centimes ; [z] = 20centimes ; [i] = 10centimes
exemple programme programme en .c programme en .txt etoile pleine
retour en haut