Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************/
- /* Nom: Mathieu Dodge */
- /* Date: 16 février 2011 */
- /* Fichier: Mathieu.cpp */
- /* But: Calculer la facture de chaque client d'une compagnie de transport */
- /* et lui fournir un imprimé des étapes principales nous amenant */
- /* vers le montant total de son ou ses billets. */
- /******************************************************************************/
- #include <stdio.h>
- #include <conio.h>
- #include <myconio.h>
- #include <string.h>
- #include <ctype.h>
- #define FAUX 0 // Constante booléenne FAUX en C.
- #define VRAI !FAUX // Constante booléenne VRAI en C.
- #define METRO_BUS 'M' // Constante pour le type transport 'M'
- #define TRAINS_RAP 'R' // Constante pour le type de transport 'R'
- #define TRAINS_OMN 'O' // Constante pour le type de transport 'O'
- #define TRANS_INT 'I' // Constante pour le type de transport 'I'
- #define CARTEO 'C' // Constante pour le type de transport 'C'
- #define ZONE1 1 // Constante pour la zone de transport #1
- #define ZONE2 2 // Constante pour la zone de transport #2
- #define ZONE3 3 // Constante pour la zone de transport #3
- #define CLASSE1 1 // Constante pour la classe première
- #define CLASSE2 2 // Constante pour la classe secondaire
- #define REDUCM 1 // Constante pour la réduction pour une mère de famille nombreuse
- #define REDUCR 2 // Constante pour la réduction pour un retraité
- #define REDUCE 3 // Constante pour la réduction pour un écolier
- #define REDUCA 4 // Constante si la réduction n'est pas nécessaire
- #define PCTMERE 0.25 // Constante pour le pourcentage de réduction pour une mère
- #define PCTRET 0.25 // Constante pour le pourcentage de réduction pour un retraité
- #define PCTECO 0.50 // Constante pour le pourcentage de réduction pour un écolier
- #define REDUC10 10 // Constante pour la réduction pour un groupe de 10 personnes
- #define REDUC20 20 // Constante pour la réduction pour un groupe de 20 personnes
- #define REDUC30 30 // Constante pour la réduction pour un groupe de 30 personnes
- #define OUI 'O' // Constante pour la réponse de la réduction
- #define NON 'N' // Constante pour la réponse de la réduction
- #define FRAISLUXE 0.20 // Constante pour les frais de la classe de luxe
- #define TAXES 0.5 // Constante pour les taxes
- void LireDonnees(int * ref_nbBillets, char * ref_Code, int * ref_Zone, int * ref_Classe, int * ref_Reduction);
- void LireNbBillets(int * ref_nbBillets);
- void LireCode(char * ref_Code);
- void LireZone(int * ref_Zone);
- void LireClasse(int * ref_Classe);
- void LireReduction(int * ref_Reduction);
- void CalculerMBase(char cCode, int iZone, int iClasse, int iNbBillets, float * ref_mBase);
- void CalculerMClasse(int iClasse, float * ref_mClasse, float fMBase);
- void CalculerMReductions(int iTypeReduction, float * ref_mReduction, float fMClasse);
- void CalculerMTaxes(float * ref_mTotal, float fMReduction, float * ref_mTaxes);
- void AfficherResultats();
- int main(void)
- {
- int iNbBillets; // Variable pour le nombre de billets achetés
- int iZone; // Variable pour la zone de transport
- int iClasse; // Variable pour la classe de transport
- int iTypeReduction; // Variable pour la réduction si requise
- float fMBase; // Variable pour le montant avant classe, taxes et reductions
- float fMClasse; // Variable pour le montant apres frais de classe
- float fMReduction; // Variable pour le montant apres réductions
- float fMTaxes; // Variable pour le montant de taxes
- float fMTotal; // Variable pour le montant total
- char cCode; // Variable pour le type de transport
- clrscr();
- puts("*** Entrez vos criteres de transport ***");
- LireDonnees(&iNbBillets, &cCode, &iZone, &iClasse, &iTypeReduction);
- CalculerMBase(cCode, iZone, iClasse, iNbBillets, &fMBase);
- CalculerMClasse(iClasse, &fMClasse, fMBase);
- CalculerMReductions(iTypeReduction, &fMReduction, fMClasse);
- CalculerMTaxes(&fMTotal, fMReduction, &fMTaxes);
- AfficherResultats();
- system("PAUSE");
- return EXIT_SUCCESS;
- }
- /**********************************************************/
- /* But : Lecture des données */
- /* Paramètres : Nombre de billet(s) acheté(s) et le */
- /* code du moyen de transport */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void LireDonnees(int * ref_nbBillets, char * ref_Code, int * ref_Zone, int * ref_Classe, int * ref_Reduction)
- {
- LireNbBillets(ref_nbBillets);
- LireCode(ref_Code);
- LireZone(ref_Zone);
- LireReduction(ref_Reduction);
- }
- /**********************************************************/
- /* But : Lecture du nombre de billet(s) acheté(s) */
- /* Paramètres : Nombre de billet(s) acheté(s) */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void LireNbBillets(int * ref_nbBillets)
- {
- int iValide;
- do{
- iValide = VRAI;
- printf("\nEntrez le nombre de billets que vous voulez acheter : \n");
- fflush(stdin);
- scanf("%d",ref_nbBillets);
- if (*ref_nbBillets <= 0){
- iValide = FAUX;
- printf("\nErreur, vous devez répondre par un nombre positif. \n");
- }
- }while (!iValide);
- }
- /**********************************************************/
- /* But : Lecture du code de moyen de transport */
- /* Paramètres: Code du moyen de transport */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void LireCode(char * ref_Code)
- {
- int iValide;
- do{
- iValide = VRAI;
- printf("\nEntrez le code de votre service de transport desire :\n");
- printf("Le systeme de metro/bus = %c. \n",METRO_BUS);
- printf("Les trains rapides = %c. \n",TRAINS_RAP);
- printf("Les trains omnibus = %c. \n",TRAINS_OMN);
- printf("Le transport intégré (Trains et Metro) = %c. \n",TRANS_INT);
- printf("Carte orange = %c. \n",CARTEO);
- printf("Votre choix : ");
- *ref_Code = toupper(getch());
- if (*ref_Code != METRO_BUS && *ref_Code != TRAINS_RAP && *ref_Code != TRAINS_OMN && *ref_Code != TRANS_INT && *ref_Code != CARTEO){
- iValide = FAUX;
- printf("\nErreur, vous devez répondre par le caractère %c ou %c ou %c ou %c ou %c. \n",METRO_BUS, TRAINS_RAP, TRAINS_OMN, TRANS_INT, CARTEO);
- }
- }while(!iValide);
- }
- /**********************************************************/
- /* But: Lecture de la zone de transport */
- /* Paramètres: Numéro de la zone de transport */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void LireZone(int * ref_Zone)
- {
- int iValide;
- do{
- iValide = VRAI;
- printf("Entrez le numero de votre zone de transport desiree :\n");
- printf("Zone #1 = %d. \n",ZONE1);
- printf("Zone #2 = %d. \n",ZONE2);
- printf("Zone #3 = %d. \n",ZONE3);
- printf("Votre choix : ");
- scanf("%d",ref_Zone);
- if (*ref_Zone != ZONE1 && *ref_Zone != ZONE2 && *ref_Zone != ZONE3){
- iValide = FAUX;
- printf("\nErreur, vous devez répondre par le numero %d ou %d ou %d. \n",ZONE1, ZONE2, ZONE3);
- }
- }while(!iValide);
- }
- /**********************************************************/
- /* But: Lecture de la classe de transport */
- /* Paramètres: Classe de transport */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void LireClasse(int * ref_Classe)
- {
- int iValide;
- do{
- iValide = VRAI;
- printf("Entrez votre classe de transport desiree :\n");
- printf("Classe de luxe = %d. \n",CLASSE1);
- printf("Classe populaire = %d. \n",CLASSE2);
- printf("Votre choix : ");
- scanf("%d",ref_Classe);
- if (*ref_Classe != CLASSE1 && *ref_Classe != CLASSE2){
- printf("\nErreur, vous devez répondre par le numero %d ou %d. \n",CLASSE1, CLASSE2);
- }
- }while(!iValide);
- }
- /**********************************************************/
- /* But: Demande une reduction a laquelle il a droit */
- /* Paramètres: Réduction si requise */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void LireReduction(int * ref_Reduction)
- {
- int iValide;
- char cChoix;
- do{
- iValide = VRAI;
- printf("Est-ce que vous disposez d'une carte de réduction [O/N]?");
- cChoix = toupper(getch());
- if (cChoix != OUI && cChoix != NON){
- printf("\nErreur, vous devez répondre par %c ou %c. \n",OUI, NON);
- }
- }while(!iValide);
- if (cChoix = OUI){
- printf("Entrez le type de réduction dont vous disposez : \n");
- printf("Mere de famille nombreuse (25%%) = %d. \n",REDUCM);
- printf("Retraité = %d. \n",REDUCR);
- printf("Ecolier = %d. \n",REDUCE);
- printf("Aucun de ces choix = %d. \n",REDUCA);
- printf("Votre choix : ");
- scanf("%d",ref_Reduction);
- }
- }
- /**********************************************************/
- /* But: Calcul du montant de base */
- /* Paramètres: Code du moyen de transport, */
- /* Numéro de la zone de transport, */
- /* Nombre de billet(s) acheté(s), */
- /* Montant de base */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void CalculerMBase(char cCode, int iZone, int iClasse, int iNbBillets, float * ref_mBase)
- {
- switch (cCode){
- case METRO_BUS:
- switch(iZone){
- case ZONE1:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 2) + ((iNbBillets * 2) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 2); break; break;
- }
- case ZONE2:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 3) + ((iNbBillets * 3) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 3); break; break;
- }
- case ZONE3:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 4) + ((iNbBillets * 4) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 4); break; break; break;
- }
- }
- case TRAINS_OMN:
- switch(iZone){
- case ZONE1:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 2.50) + ((iNbBillets * 2.50) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 2.50); break; break;
- }
- case ZONE2:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 3.75) + ((iNbBillets * 3.75) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 3.75); break; break;
- }
- case ZONE3:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 5) + ((iNbBillets * 5) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 5); break; break; break;
- }
- }
- case TRAINS_RAP:
- switch(iZone){
- case ZONE1:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 3) + ((iNbBillets * 3) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 3); break; break;
- }
- case ZONE2:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 4.50) + ((iNbBillets * 4.50) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 4.50); break; break;
- }
- case ZONE3:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 6) + ((iNbBillets * 6) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 6); break; break; break;
- }
- }
- case TRANS_INT:
- switch(iZone){
- case ZONE1:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 4) + ((iNbBillets * 4) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 4); break; break;
- }
- case ZONE2:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 6) + ((iNbBillets * 6) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 6); break; break;
- }
- case ZONE3:
- switch (iClasse){
- case CLASSE1: *ref_mBase = (iNbBillets * 8) + ((iNbBillets * 8) * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = (iNbBillets * 8); break; break; break;
- }
- }
- case CARTEO:
- switch (iClasse){
- case CLASSE1: *ref_mBase = 40 + (40 * FRAISLUXE); break;
- case CLASSE2: *ref_mBase = 40; break; break;
- }
- }
- }
- /**********************************************************/
- /* But: Calcul du montant apres Classe */
- /* Paramètres: Type de classe, */
- /* Montant apres frais de classe, */
- /* Montant de base */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void CalculerMClasse(int iClasse, float * ref_mClasse, float fMBase);
- {
- if (iClasse = CLASSE1)
- *ref_mClasse = fMBase + (fMBase * FRAISLUXE);
- else *ref_mClasse = fMBase;
- }
- /**********************************************************/
- /* But: Calcul du montant apres Reductions */
- /* Paramètres: Type de réduction, */
- /* Montant apres réduction si requise, */
- /* Montant apres frais de classe */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void CalculerMReductions(int iTypeReduction, float * ref_mReduction, float fMClasse);
- {
- switch (iTypeReduction){
- case REDUCM: *ref_mReduction = fMClasse - (fMClasse * PCTMERE); break;
- case REDUCR: *ref_mReduction = fMClasse - (fMClasse * PCTRET); break;
- case REDUCE: *ref_mReduction = fMClasse - (fMClasse * PCTECO); break;
- case REDUCA: *ref_mReduction = fMClasse; break;
- }
- }
- /**********************************************************/
- /* But: Calcul du montant de taxes + montant apres taxes */
- /* Paramètres: Taxes sur montant de base */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- void CalculerMTaxes(float * ref_mTotal, float fMReduction, float * ref_mTaxes);
- {
- *ref_mTaxes = fMReduction * TAXES;
- *ref_mTotal = fMReduction + *ref_mTaxes;
- }
- /**********************************************************/
- /* But: Affichage des résultats */
- /* Paramètres: */
- /* Valeur de retour : Aucune */
- /**********************************************************/
- /*void AfficherResultats();
- {
- } */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement