Convertisseur de monnaies (56 devises) [dev-c++]

Description

Convertisseur de monnaie avec 56 devises ! Tout est en mode texte sous dos mais j'ai beaucoup soigne le graphisme. J'ai aussi mis une source qui explique le systeme de menu que j'ai utilise ici. Je pense avoir assez bien optimise le code puisqu'une fois compile chez moi il ne fait que 11 KB. Le code est tres long parce qu'il y a beaucoup de devises mais il n'est pas tres complique.

Source / Exemple :


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

/*DEFINITION DES FONCTIONS*/
void  dessine(void);  //DESSINE L'INTERFACE
void  devise(int numero); //ECRIS LA DEVISE CORRESPONDANTE A NUMERO
float conversion(int numero);  //POUR CONVERTIR

/*-----------------------------------------------------------------------------------------------*/

/*FONCTION PRINCIPALE*/
void main()
{
  /*DEFINITION DES VARIABLES*/
  int   increment;
  int   choix=0;
  int   sortie=0;
  int   monnaie1=-1;
  float somme;
  float resultat;
  float change;
  int   action=0;
  int   colonne=4;
  int   ligne=3;
  char  touche;

  while (sortie==0)
  {
    /*CREATION DE L'INTERFACE*/
    dessine();
    gotoxy(3,23);
    printf("                                                                            ");
    gotoxy(3,23);
    textcolor(11);
    if (monnaie1==-1) printf("  Choisissez la monnaie %c convertir avec les fl%cches de direction et ENTER",-123,-118);
    else
    {
      for (increment=1 ; increment <= 76 ; increment++) printf(" ");
      gotoxy(3,23);
      printf("Vous avez choisi ");
      textcolor(10);
      devise(monnaie1);
      textcolor(11);
      printf(", choisissez une seconde monnaie");
    }

    /*CREATION DU MENU*/
    for (increment=0 ; increment <= 56 ; increment++)
    {
      gotoxy(colonne,ligne);
      if (choix==increment) textcolor(12);
      else textcolor(14);
      devise(increment);
      if (increment==18)
      {
        colonne=29;
        ligne=2;
      }
      if (increment==37)
      {
        colonne=59;
        ligne=3;
      }
      else ligne++;
    }
    gotoxy(1,1);
    colonne=4;
    ligne=3;

    /*GESTION DU CLAVIER*/
    touche=getch();
    if (touche==72) //HAUT
    {
      choix--;
      switch (choix)
      {
        case -1: choix=18;
                 break;
        case 18: choix=37;
                 break;
        case 37: choix=56;
                 break;
      }

    }
    if (touche==80) //BAS
    {
      choix++;
      switch (choix)
      {
        case 19: choix=0;
                 break;
        case 38: choix=19;
                 break;
        case 57: choix=38;
                 break;
      }
    }
    if (touche==75) //GAUCHE
    {
      choix=choix-19;
      if (choix<0) choix=choix+57;
    }
    if (touche==77) //DROITE
    {
      choix=choix+19;
      if (choix>57) choix=choix-57;
    }
    if (touche==13) //ENTER
    {
      /*PREMIER CHOIX*/
      if (action==0)
      {
        monnaie1=choix;
        action=1;
      }
      /*DEUXIEME CHOIX => CONVERSION*/
      else while (action==1)
      {
        clrscr();      //EFFACE L'ECRAN
        dessine();     //REDESSINE L'INTERFACE
        textcolor(11); //TEXTE BLEU CLAIR
        gotoxy(3,23);
        printf("---------------------------------CONVERSION---------------------------------");
        textcolor(14); //TEXTE JAUNE
        gotoxy(5,4);
        printf("Entrez la somme %c convertir :",-123);
        gotoxy(5,5);
        scanf("%f",&somme); //L'UTILISATEUR ENTRE LA SOMME A CONVERTIR
        gotoxy(5,4);
        printf("                             ");    //POUR EFFACER UNE LIGNE
        gotoxy(5,5);
        printf("                                                                    "); //POUR EFFACER UNE LIGNE
        change=conversion(monnaie1); //PREND LA VALEUR DE CHANGE VERS L'EURO (1ERE DEVISE)
        resultat=somme*change; //CHANGE LA SOMME DE L'UTILISATEUR EN EURO
        change=conversion(choix); //PREND LA VALEUR DE CHANGE VERS L'EURO (2EME DEVISE)
        resultat=resultat*(1/change); //CHANGE LA SOMME (MAINTENANT EN EURO) EN LA DEVISE CHOISIE
        gotoxy(5,4);
        printf("%10.4f ",somme); //ECRIS LA VALEUR DANS LA PREMIERE DEVISE
        devise(monnaie1);
        gotoxy(5,5);
        printf("%10.4f ",resultat); //ECRIS LA VALEUR DANS LA DEUXIEME DEVISE
        devise(choix);
        gotoxy(5,8);
        printf("Faites 1 pour entrer une autre somme,");
        gotoxy(5,9);
        printf("2 pour revenir au debut et 3 pour quitter");
        touche=getch();
        if (touche=='1') action=1;
        if (touche=='2')
        {
          action=0;
          monnaie1=-1;
          choix=0;
          gotoxy(5,4);
          printf("                                                                          ");
          gotoxy(5,5);
          printf("                                                                          ");
          gotoxy(5,8);
          printf("                                                                          ");
          gotoxy(5,9);
          printf("                                                                          ");
        }
        if (touche=='3')
        {
          sortie=1;
          action=0;
        }
      }
    }
  } //SORTIE
}

/*-----------------------------------------------------------------------------------------------*/

/*POUR DESSINER L'INTERFACE*/
void dessine(void)
{
  int increment;
  textcolor(13);
  gotoxy(2,2);
  printf("\xDA");
  for (increment=1 ; increment <= 76 ; increment++) printf("\xC4");
  printf("\xBF  \xB3");
  for (increment=3 ; increment <= 23 ; increment++)
  {
    gotoxy(79,increment);
    printf("\xB3  \xB3");
  }
  gotoxy(2,22);
  printf("\xC3");
  for (increment=1 ; increment <= 76 ; increment++) printf("\xC4");
  printf("\xB4");
  gotoxy(2,24);
  printf("\xC0");
  for (increment=1 ; increment <= 76 ; increment++) printf("\xC4");
  printf("\xD9");
}

/*-----------------------------------------------------------------------------------------------*/

/*AFFICHE LE NOM DE LA DEVISE CORRESPONDANTE AU NUMERO*/
void devise(int numero)
{
  switch (numero)
  {
    case 0 :  printf("Dollar US");
              break;
    case 1 :  printf("Dollar australien");
              break;
    case 2 :  printf("Euro");
              break;
    case 3 :  printf("Franc fran%cais",-121);
              break;
    case 4 :  printf("Franc belge");
              break;
    case 5 :  printf("Franc suisse");
              break;
    case 6 :  printf("Livre anglaise");
              break;
    case 7 :  printf("Mark allemand");
              break;
    case 8 :  printf("Mark finlandais");
              break;
    case 9 :  printf("Lire italienne");
              break;
    case 10:  printf("Baht tha%clandais",-117);
              break;
    case 11:  printf("Birr %cthiopien",-126);
              break;
    case 12:  printf("Bol%cvar v%cn%czu%clien",-95,-126,-126,-126);
              break;
    case 13:  printf("Boliviano bolivien");
              break;
    case 14:  printf("Cedi ghan%cen",-126);
              break;
    case 15:  printf("Col%cn costaricain",-94);
              break;
    case 16:  printf("Col%cn salvadorien",-94);
              break;
    case 17:  printf("Cordoba nicaragayen");
              break;
    case 18:  printf("Dalasi gambien");
              break;
    case 19:  printf("Dollar baham%cen",-126);
              break;
    case 20:  printf("Dollar canadien");
              break;
    case 21:  printf("Dollar de Belize");
              break;
    case 22:  printf("Dollar de Brunei");
              break;
    case 23:  printf("Dollar de Guyana");
              break;
    case 24:  printf("Dollar de la Barbade");
              break;
    case 25:  printf("Dollar des Bermudes");
              break;
    case 26:  printf("Dollar des Cara%cbes",-117);
              break;
    case 27:  printf("Dollar de Singapour");
              break;
    case 28:  printf("Dollar fidjien");
              break;
    case 29:  printf("Dollar honk-kongais");
              break;
    case 30:  printf("Dollar jama%ccain",-117);
              break;
    case 31:  printf("Dollar n%co-z%clandais",-126,-126);
              break;
    case 32:  printf("Dollar ta%cwanais",-117);
              break;
    case 33:  printf("Dollar zimbabw%cen",-126);
              break;
    case 34:  printf("Drachme grecque");
              break;
    case 35:  printf("Escudo portugais");
              break;
    case 36:  printf("Florin n%cerlandais",-126);
              break;
    case 37:  printf("Forint hongrois");
              break;
    case 38:  printf("Couronne danoise");
              break;
    case 39:  printf("Couronne estonienne");
              break;
    case 40:  printf("Couronne islandaise");
              break;
    case 41:  printf("Couronne norv%cgienne",-126);
              break;
    case 42:  printf("Couronne slovaque");
              break;
    case 43:  printf("Couronne su%cdoise",-126);
              break;
    case 44:  printf("Couronne tch%cque",-118);
              break;
    case 45:  printf("Sol p%cruvien",-126);
              break;
    case 46:  printf("Sucre %cquatorien",-126);
              break;
    case 47:  printf("Tugrik mongol");
              break;
    case 48:  printf("Yen japonais");
              break;
    case 49:  printf("Won sud-cor%cen",-126);
              break;
    case 50:  printf("Vatu");
              break;
    case 51:  printf("Peseta espagnole");
              break;
    case 52:  printf("Peso argentin");
              break;
    case 53:  printf("Peso chilien");
              break;
    case 54:  printf("Peso colombien");
              break;
    case 55:  printf("Peso cubain");
              break;
    case 56:  printf("Rouble russe");
              break;
  }
}

/*-----------------------------------------------------------------------------------------------*/

/*RENVOIE LA VALEUR DE CHANGE VERS L'EURO*/
float conversion(int numero)
{
  switch (numero)
  {
    case 0 :  return 1.1372;
              break;
    case 1 :  return 0.6036;
              break;
    case 2 :  return 1.0000;
              break;
    case 3 :  return 0.1524;
              break;
    case 4 :  return 0.0247;
              break;
    case 5 :  return 0.6820;
              break;
    case 6 :  return 1.6325;
              break;
    case 7 :  return 0.5112;
              break;
    case 8 :  return 0.1681;
              break;
    case 9 :  return 0.0005;
              break;
    case 10:  return 0.0261;
              break;
    case 11:  return 0.1360;
              break;
    case 12:  return 0.0012;
              break;
    case 13:  return 0.1611;
              break;
    case 14:  return 0.0001;
              break;
    case 15:  return 0.0032;
              break;
    case 16:  return 0.1300;
              break;
    case 17:  return 0.0810;
              break;
    case 18:  return 0.0608;
              break;
    case 19:  return 1.1372;
              break;
    case 20:  return 0.7153;
              break;
    case 21:  return 0.5772;
              break;
    case 22:  return 0.6194;
              break;
    case 23:  return 0.0063;
              break;
    case 24:  return 0.5714;
              break;
    case 25:  return 1.1487;
              break;
    case 26:  return 0.4259;
              break;
    case 27:  return 0.6194;
              break;
    case 28:  return 0.5088;
              break;
    case 29:  return 0.1458;
              break;
    case 30:  return 0.0239;
              break;
    case 31:  return 0.4984;
              break;
    case 32:  return 0.0325;
              break;
    case 33:  return 0.0203;
              break;
    case 34:  return 0.0029;
              break;
    case 35:  return 0.0049;
              break;
    case 36:  return 0.4537;
              break;
    case 37:  return 0.0041;
              break;
    case 38:  return 0.1344;
              break;
    case 39:  return 0.0639;
              break;
    case 40:  return 0.0114;
              break;
    case 41:  return 0.1306;
              break;
    case 42:  return 0.0239;
              break;
    case 43:  return 0.1107;
              break;
    case 44:  return 0.0324;
              break;
    case 45:  return 0.3300;
              break;
    case 46:  return 0.00004;
              break;
    case 47:  return 0.0010;
              break;
    case 48:  return 0.0086;
              break;
    case 49:  return 0.0008;
              break;
    case 50:  return 0.0079;
              break;
    case 51:  return 0.0060;
              break;
    case 52:  return 0.4181;
              break;
    case 53:  return 0.0017;
              break;
    case 54:  return 0.0005;
              break;
    case 55:  return 1.1371;
              break;
    case 56:  return 0.0364;
              break;
  }
}

/*-----------------------------------------------------------------------------------------------*/

Conclusion :


Voila ! Bon ici pour convertir je convertis d'abord la monnaie en euro, puis je reconvertis dans la devise que l'utilisateur a choisie. Cela m'evite de faire une enorme base de donnees pour chaque devise.
Bon j'espere que personne ne va se plaindre que j'ai oublie le zloty polonais ou la roupie nepalaise :-) !

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.