Convertisseur euro/franc

Soyez le premier à donner votre avis sur cette source.

Vue 5 490 fois - Téléchargée 193 fois

Description

Ce programme a été créé sous DEV C++ ( Compilateur WMing) en utilisant l'API de Windows.
J'ai donc décidé d'afficher son code souce à titre d'ewemple pour les débutants en C++.
J'espère que ce dernier comblera vos attentes.
Bonne Programmation à tous.

Source / Exemple :


// euro.cpp
 // Copyright (C) 2001 GrandMother
 //
 // This library is free software; you can redistribute it and/or modify
 // it under the terms of the GNU Lesser General Public License as published
 // by the Free Software Foundation; either version 2.1 of the License, or
 // (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU Lesser General Public License for more details.
 //
 // You should have received a copy of the GNU Lesser General Public License
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA //

#include <windows.h>   // Fichiers d'en-tête  appelés pour
#include <string.h>    // les besoins du programme //
#include <stdlib.h>

#define IDC_MAIN_TEXT 1001   // Définition de l'identificateur IDC_MAIN_TEXT //

typedef struct buttons {  // Définition de la structure des boutons poussoirs//
   int style;
   TCHAR *text;
   }; 
typedef struct edit {     // Définition de la structure de l'éditeur //
   DWORD style;
   TCHAR *text;
       };
edit label = { ES_CENTER, TEXT("") };   // Définition de l'éditeur //
buttons bouton[] = {
   BS_PUSHBUTTON, TEXT("Francs"),       // Définition des boutons //
   BS_PUSHBUTTON, TEXT("Euros"), 
   BS_PUSHBUTTON, TEXT("Clear") };
void calcul(HWND edit, BOOL option) {  // Définition de la fonction calcul //
 DWORD nbchar;            // Définition des variables //
 char buffer[40];
 int str ='.', compte, i, j ;
 size_t nbchartotal, nbcharstr;
 LPSTR liste, buf, liste_one;
 double chiffre;
  nbchar = GetWindowTextLength(edit)+1;   //Taille du texte //
  buf = LPSTR(GlobalAlloc(GPTR, nbchar)); // Allouer la mémoire selon celle-ci //
    if (GetWindowText(edit, buf, nbchar)) { // Si texte il y a, le renvoyer //
     if (option) {
      chiffre =  atof(buf)*6.55957;    // String -> Double //
     } else {
      chiffre =  atof(buf)/6.55957;    // String -> Double //
        }
      liste = _gcvt(chiffre, 15, buffer);    // Double -> String //
      liste_one = strrchr(liste, str);       // Chaîne dérivée de 'liste' à partir de "." //
      nbchartotal = strlen(liste);           // Nbre de caractère de la chaîne //
      nbcharstr = strlen(liste_one);         // Nbre de caractère de la chaîne //
      compte = (nbchartotal+4)-nbcharstr;    // Nbre de caractère à prendre en compte //
      char result[nbchartotal];              // Recopier les caractères à prendre en compte //
        for (j=0; j<nbchartotal; j++) {
         if (j<compte) {
          result[j] = liste[j];
         } else {
          result[j] = NULL;
               }
            }
     SetWindowText(edit, result);
          }
  GlobalFree(buf);
     };
// Déclarer la procédure Windows //
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
// Mettre le nom de la classe dans la variable globale //
static TCHAR szClassName[ ] = "ConvertFrsEuros";
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{
    HWND hwnd;               // Handle (identificateur) de la fenêtre //
    MSG messages;            // Ici, les messages de l'application sont sauvées //
    WNDCLASSEX wincl;        // Structure de données de la classe Windows //

   // Structure de Windows //
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      // Fonction appelée par Windows //
    wincl.style = CS_DBLCLKS;                 // Attraper le double click //
    wincl.cbSize = sizeof(WNDCLASSEX);

    // Utiliser l'icône par défaut et le pointeur de la souris //
    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; // Pas de Menu //
    wincl.cbClsExtra = 0;   // Pas d' extrabytes pour la structure ou l'instance de Windows //
    wincl.cbWndExtra = 0;
    // Utiliser le gris clair comme couleur de fond pour la fenêtre //
   // Vous pouvez aussi remplacer "wincl.hbrBackground = static_cast<HBRUSH> //
 //  (GetStockObjet(LTGRAY_BRUSH))" par "wincl.hbrBackground = (HBRUSH)     //
// COLOR_WINDOW" si cela ne marche pas avec le premier. L'effet sera le même et le //
// code plus stable.                      //
    wincl.hbrBackground = static_cast<HBRUSH> (GetStockObject(LTGRAY_BRUSH));

    // Registre de la classe Windows. Si echec, quitter le programme //
    if(!RegisterClassEx(&wincl)) return 0;

    // Succès : commencer le programme //
    hwnd = CreateWindowEx(
           0,                   // Possibilités d'extension //
           szClassName,         // Nom de la classe //
           "Convertisseur Francs/Euros",         // Intitulé de la fenêtre //
           WS_OVERLAPPEDWINDOW, // Style de la fenêtre //
           CW_USEDEFAULT,       // Windows décide de la position sur l'écran //
           CW_USEDEFAULT,
           310,                 // Longueur de la fenêtre en pixels //
           300,                 // Largeur de la fenêtre en pixels //
           HWND_DESKTOP,        // La fenêtre est une fenêtre-enfant du bureau //
           NULL,                // Pas de menus //
           hThisInstance,       // Handle (identificateur) de l'instance du programme //
           NULL                 // Pas de création de données pour Windows //
           );

    // Rendre la fenêtre visible à l'écran //
    ShowWindow(hwnd, nFunsterStil);
    // Démarrer le message loop.  Cela est fait sauf si GetMessage() retourne 0 //
    while(GetMessage(&messages, NULL, 0, 0))
    {
         // Messages-clé virtuels -> Messages sous forme de caractères //
           TranslateMessage(&messages);
           // Renvoyer les messages à la procédure de Windows //
           DispatchMessage(&messages);
    }

    // La valeur renvoyée par le programme est zéro //
    return messages.wParam;
}

// Cette fonction est appelée par la fonction de Windows DispatchMessages() //
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndbutton[3], hwndedit;
    static HINSTANCE hinstance;
    int static xbutton, ybutton;
    int i;
    switch (message)                  // Handle(identificateur) des messages //
    {      case WM_CREATE:            // Créer les fenêtres //
           xbutton = LOWORD(GetDialogBaseUnits());  // Abscisse de la fenêtre principale //
           ybutton = HIWORD(GetDialogBaseUnits());  // Ordonnée de la fenêtre principale //
           hwndedit = CreateWindow(TEXT("Edit"),label.text , WS_CHILD|WS_VISIBLE|WS_BORDER|label.style, xbutton+65, ybutton+10, 20*xbutton, 7*ybutton/4, hwnd, (HMENU)IDC_MAIN_TEXT, ((LPCREATESTRUCT)lParam)->hInstance, NULL); // Créer l'éditeur pour taper les chiffres (Nom, style, taille, position, handle(identificateur) , etc..) //
           SetCaretBlinkTime(200);    // Timer sur le caret (ou '|') //
           for (i=0; i<3; i++) {      // Créer les différents boutons (Nom, style, taille, position, handle(identificateur), etc...) //
           hwndbutton[i] = CreateWindow(TEXT("Button"), bouton[i].text, WS_CHILD|WS_VISIBLE|bouton[i].style,xbutton+65, ybutton+60*(i+1), 20*xbutton, 7*ybutton/4, hwnd,(HMENU)i, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
              }
           return 0;
           break;
           case WM_SETFOCUS: // Si fenêtre fille //
             SetFocus(GetDlgItem(hwndedit, IDC_MAIN_TEXT));
           break;
           case WM_COMMAND:  // Fonction de commande //
             switch(LOWORD (wParam)) {  // Si wParam est vrai //
               case 0:    // Hanble du bouton "Francs" //
                 calcul(hwndedit, true);       // Appel fonction calcul //
                break;
               case 1:    // Hanble du bouton "Euro" //
                  calcul(hwndedit, false);     // Appel fonction calcul //
                break;
               case 2:    // Hanble du bouton "Clear" //
                  SetWindowText(hwndedit, ""); // Appel fonction calcul //
                break;
                 }
           break;
           case WM_DESTROY:
           PostQuitMessage(0);        // envoyer un WN_QUIT dans le message de queue //
           break;
           default:
                          // Pour les messages par défaut //
           return DefWindowProc(hwnd, message, wParam, lParam);
         }
    return 0;
      }

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
199
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
28 février 2008

Moi j ai plus simple lol :


#include
#include <stdlib.h>

int main()
{
double SommeEuros, Francs;
cout<<" =>Bienvenue dans le convertisseur Euros/Francs<="<<endl;
cout<<" By Guillaume Touron "<<endl<<endl<<endl<<endl;
cout<<"Saisissez une valeur en Euros puis pressez ENTER pour valider la conversion :"<<endl;
cin>>SommeEuros;

Francs=SommeEuros*6.55957;
cout<<"C'est egal a : "<<Francs<<" Francs"<<endl;


char fin;
cin>>fin;
}
Messages postés
24
Date d'inscription
dimanche 17 novembre 2002
Statut
Membre
Dernière intervention
31 mai 2003

oué klr goldeneye mais si tu veu faire des ptit app sympa sans te casser le cul tu fais du c++ builder ! la ta de l'interface et c simple comme bonjours!
Messages postés
527
Date d'inscription
vendredi 14 septembre 2001
Statut
Membre
Dernière intervention
6 octobre 2008
3
Sympa le prog. Je suis impressionné par le bordel que représente la prog Windows. Ca ne me donne pas envie de regarder de plus près. Je reste avec Allegro...
Messages postés
77
Date d'inscription
lundi 15 avril 2002
Statut
Membre
Dernière intervention
16 juin 2004

C'est un prog sympa pour les débutants mais c qui est dommage c'est quand tu fais l'arrondi -> Si tu tapes 56Euros -> 367.335Fr -> 55.999Euros -> 367.329 Fr....
Bon c'est vrai c'est que dâle mais ça serait un peu mieux....
Pis il y a le cas du zéro qui n'est pas traité....
Sinon ton prog est nickel....C'est cool.
Haldwin.
Messages postés
77
Date d'inscription
lundi 15 avril 2002
Statut
Membre
Dernière intervention
16 juin 2004

C'est un prog sympa pour les débutants mais c qui est dommage c'est quand tu fais l'arrondi -> Si tu tapes 56Euros -> 367.335Fr -> 55.999Euros -> 367.329 Fr....
Bon c'est vrai c'est que dâle mais ça serait un peu mieux....
Sinon ton prog est nickel....C'est cool.
Haldwin.
Afficher les 7 commentaires

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.