Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.77 KB | None | 0 0
  1. /******************************************************************************/
  2. /* Nom: Mathieu Dodge */
  3. /* Date: 16 février 2011 */
  4. /* Fichier: Mathieu.cpp */
  5. /* But: Calculer la facture de chaque client d'une compagnie de transport */
  6. /* et lui fournir un imprimé des étapes principales nous amenant */
  7. /* vers le montant total de son ou ses billets. */
  8. /******************************************************************************/
  9.  
  10. #include <stdio.h>
  11. #include <conio.h>
  12. #include <myconio.h>
  13. #include <string.h>
  14. #include <ctype.h>
  15.  
  16. #define FAUX 0 // Constante booléenne FAUX en C.
  17. #define VRAI !FAUX // Constante booléenne VRAI en C.
  18. #define METRO_BUS 'M' // Constante pour le type transport 'M'
  19. #define TRAINS_RAP 'R' // Constante pour le type de transport 'R'
  20. #define TRAINS_OMN 'O' // Constante pour le type de transport 'O'
  21. #define TRANS_INT 'I' // Constante pour le type de transport 'I'
  22. #define CARTEO 'C' // Constante pour le type de transport 'C'
  23. #define ZONE1 1 // Constante pour la zone de transport #1
  24. #define ZONE2 2 // Constante pour la zone de transport #2
  25. #define ZONE3 3 // Constante pour la zone de transport #3
  26. #define CLASSE1 1 // Constante pour la classe première
  27. #define CLASSE2 2 // Constante pour la classe secondaire
  28. #define REDUCM 1 // Constante pour la réduction pour une mère de famille nombreuse
  29. #define REDUCR 2 // Constante pour la réduction pour un retraité
  30. #define REDUCE 3 // Constante pour la réduction pour un écolier
  31. #define REDUCA 4 // Constante si la réduction n'est pas nécessaire
  32. #define PCTMERE 0.25 // Constante pour le pourcentage de réduction pour une mère
  33. #define PCTRET 0.25 // Constante pour le pourcentage de réduction pour un retraité
  34. #define PCTECO 0.50 // Constante pour le pourcentage de réduction pour un écolier
  35. #define REDUC10 10 // Constante pour la réduction pour un groupe de 10 personnes
  36. #define REDUC20 20 // Constante pour la réduction pour un groupe de 20 personnes
  37. #define REDUC30 30 // Constante pour la réduction pour un groupe de 30 personnes
  38. #define OUI 'O' // Constante pour la réponse de la réduction
  39. #define NON 'N' // Constante pour la réponse de la réduction
  40. #define FRAISLUXE 0.20 // Constante pour les frais de la classe de luxe
  41. #define TAXES 0.5 // Constante pour les taxes
  42.  
  43. void LireDonnees(int * ref_nbBillets, char * ref_Code, int * ref_Zone, int * ref_Classe, int * ref_Reduction);
  44. void LireNbBillets(int * ref_nbBillets);
  45. void LireCode(char * ref_Code);
  46. void LireZone(int * ref_Zone);
  47. void LireClasse(int * ref_Classe);
  48. void LireReduction(int * ref_Reduction);
  49. void CalculerMBase(char cCode, int iZone, int iClasse, int iNbBillets, float * ref_mBase);
  50. void CalculerMClasse(int iClasse, float * ref_mClasse, float fMBase);
  51. void CalculerMReductions(int iTypeReduction, float * ref_mReduction, float fMClasse);
  52. void CalculerMTaxes(float * ref_mTotal, float fMReduction, float * ref_mTaxes);
  53. void AfficherResultats();
  54.  
  55. int main(void)
  56. {
  57. int iNbBillets; // Variable pour le nombre de billets achetés
  58. int iZone; // Variable pour la zone de transport
  59. int iClasse; // Variable pour la classe de transport
  60. int iTypeReduction; // Variable pour la réduction si requise
  61. float fMBase; // Variable pour le montant avant classe, taxes et reductions
  62. float fMClasse; // Variable pour le montant apres frais de classe
  63. float fMReduction; // Variable pour le montant apres réductions
  64. float fMTaxes; // Variable pour le montant de taxes
  65. float fMTotal; // Variable pour le montant total
  66. char cCode; // Variable pour le type de transport
  67.  
  68. clrscr();
  69. puts("*** Entrez vos criteres de transport ***");
  70. LireDonnees(&iNbBillets, &cCode, &iZone, &iClasse, &iTypeReduction);
  71. CalculerMBase(cCode, iZone, iClasse, iNbBillets, &fMBase);
  72. CalculerMClasse(iClasse, &fMClasse, fMBase);
  73. CalculerMReductions(iTypeReduction, &fMReduction, fMClasse);
  74. CalculerMTaxes(&fMTotal, fMReduction, &fMTaxes);
  75.  
  76. AfficherResultats();
  77.  
  78. system("PAUSE");
  79. return EXIT_SUCCESS;
  80.  
  81. }
  82.  
  83. /**********************************************************/
  84. /* But : Lecture des données */
  85. /* Paramètres : Nombre de billet(s) acheté(s) et le */
  86. /* code du moyen de transport */
  87. /* Valeur de retour : Aucune */
  88. /**********************************************************/
  89.  
  90. void LireDonnees(int * ref_nbBillets, char * ref_Code, int * ref_Zone, int * ref_Classe, int * ref_Reduction)
  91. {
  92. LireNbBillets(ref_nbBillets);
  93. LireCode(ref_Code);
  94. LireZone(ref_Zone);
  95. LireReduction(ref_Reduction);
  96. }
  97.  
  98. /**********************************************************/
  99. /* But : Lecture du nombre de billet(s) acheté(s) */
  100. /* Paramètres : Nombre de billet(s) acheté(s) */
  101. /* Valeur de retour : Aucune */
  102. /**********************************************************/
  103.  
  104. void LireNbBillets(int * ref_nbBillets)
  105. {
  106. int iValide;
  107.  
  108. do{
  109. iValide = VRAI;
  110. printf("\nEntrez le nombre de billets que vous voulez acheter : \n");
  111. fflush(stdin);
  112. scanf("%d",ref_nbBillets);
  113.  
  114. if (*ref_nbBillets <= 0){
  115. iValide = FAUX;
  116. printf("\nErreur, vous devez répondre par un nombre positif. \n");
  117. }
  118. }while (!iValide);
  119. }
  120.  
  121. /**********************************************************/
  122. /* But : Lecture du code de moyen de transport */
  123. /* Paramètres: Code du moyen de transport */
  124. /* Valeur de retour : Aucune */
  125. /**********************************************************/
  126.  
  127. void LireCode(char * ref_Code)
  128. {
  129. int iValide;
  130.  
  131. do{
  132. iValide = VRAI;
  133. printf("\nEntrez le code de votre service de transport desire :\n");
  134. printf("Le systeme de metro/bus = %c. \n",METRO_BUS);
  135. printf("Les trains rapides = %c. \n",TRAINS_RAP);
  136. printf("Les trains omnibus = %c. \n",TRAINS_OMN);
  137. printf("Le transport intégré (Trains et Metro) = %c. \n",TRANS_INT);
  138. printf("Carte orange = %c. \n",CARTEO);
  139. printf("Votre choix : ");
  140. *ref_Code = toupper(getch());
  141.  
  142. if (*ref_Code != METRO_BUS && *ref_Code != TRAINS_RAP && *ref_Code != TRAINS_OMN && *ref_Code != TRANS_INT && *ref_Code != CARTEO){
  143. iValide = FAUX;
  144. 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);
  145. }
  146. }while(!iValide);
  147. }
  148.  
  149. /**********************************************************/
  150. /* But: Lecture de la zone de transport */
  151. /* Paramètres: Numéro de la zone de transport */
  152. /* Valeur de retour : Aucune */
  153. /**********************************************************/
  154.  
  155. void LireZone(int * ref_Zone)
  156. {
  157. int iValide;
  158.  
  159. do{
  160. iValide = VRAI;
  161. printf("Entrez le numero de votre zone de transport desiree :\n");
  162. printf("Zone #1 = %d. \n",ZONE1);
  163. printf("Zone #2 = %d. \n",ZONE2);
  164. printf("Zone #3 = %d. \n",ZONE3);
  165. printf("Votre choix : ");
  166. scanf("%d",ref_Zone);
  167.  
  168. if (*ref_Zone != ZONE1 && *ref_Zone != ZONE2 && *ref_Zone != ZONE3){
  169. iValide = FAUX;
  170. printf("\nErreur, vous devez répondre par le numero %d ou %d ou %d. \n",ZONE1, ZONE2, ZONE3);
  171. }
  172. }while(!iValide);
  173. }
  174.  
  175. /**********************************************************/
  176. /* But: Lecture de la classe de transport */
  177. /* Paramètres: Classe de transport */
  178. /* Valeur de retour : Aucune */
  179. /**********************************************************/
  180.  
  181. void LireClasse(int * ref_Classe)
  182. {
  183. int iValide;
  184.  
  185. do{
  186. iValide = VRAI;
  187. printf("Entrez votre classe de transport desiree :\n");
  188. printf("Classe de luxe = %d. \n",CLASSE1);
  189. printf("Classe populaire = %d. \n",CLASSE2);
  190. printf("Votre choix : ");
  191. scanf("%d",ref_Classe);
  192.  
  193. if (*ref_Classe != CLASSE1 && *ref_Classe != CLASSE2){
  194. printf("\nErreur, vous devez répondre par le numero %d ou %d. \n",CLASSE1, CLASSE2);
  195. }
  196. }while(!iValide);
  197. }
  198.  
  199. /**********************************************************/
  200. /* But: Demande une reduction a laquelle il a droit */
  201. /* Paramètres: Réduction si requise */
  202. /* Valeur de retour : Aucune */
  203. /**********************************************************/
  204.  
  205. void LireReduction(int * ref_Reduction)
  206. {
  207. int iValide;
  208. char cChoix;
  209.  
  210. do{
  211. iValide = VRAI;
  212. printf("Est-ce que vous disposez d'une carte de réduction [O/N]?");
  213. cChoix = toupper(getch());
  214.  
  215. if (cChoix != OUI && cChoix != NON){
  216. printf("\nErreur, vous devez répondre par %c ou %c. \n",OUI, NON);
  217. }
  218. }while(!iValide);
  219.  
  220. if (cChoix = OUI){
  221. printf("Entrez le type de réduction dont vous disposez : \n");
  222. printf("Mere de famille nombreuse (25%%) = %d. \n",REDUCM);
  223. printf("Retraité = %d. \n",REDUCR);
  224. printf("Ecolier = %d. \n",REDUCE);
  225. printf("Aucun de ces choix = %d. \n",REDUCA);
  226. printf("Votre choix : ");
  227. scanf("%d",ref_Reduction);
  228. }
  229. }
  230.  
  231. /**********************************************************/
  232. /* But: Calcul du montant de base */
  233. /* Paramètres: Code du moyen de transport, */
  234. /* Numéro de la zone de transport, */
  235. /* Nombre de billet(s) acheté(s), */
  236. /* Montant de base */
  237. /* Valeur de retour : Aucune */
  238. /**********************************************************/
  239.  
  240. void CalculerMBase(char cCode, int iZone, int iClasse, int iNbBillets, float * ref_mBase)
  241. {
  242. switch (cCode){
  243. case METRO_BUS:
  244. switch(iZone){
  245. case ZONE1:
  246. switch (iClasse){
  247. case CLASSE1: *ref_mBase = (iNbBillets * 2) + ((iNbBillets * 2) * FRAISLUXE); break;
  248. case CLASSE2: *ref_mBase = (iNbBillets * 2); break; break;
  249. }
  250.  
  251. case ZONE2:
  252. switch (iClasse){
  253. case CLASSE1: *ref_mBase = (iNbBillets * 3) + ((iNbBillets * 3) * FRAISLUXE); break;
  254. case CLASSE2: *ref_mBase = (iNbBillets * 3); break; break;
  255. }
  256. case ZONE3:
  257. switch (iClasse){
  258. case CLASSE1: *ref_mBase = (iNbBillets * 4) + ((iNbBillets * 4) * FRAISLUXE); break;
  259. case CLASSE2: *ref_mBase = (iNbBillets * 4); break; break; break;
  260. }
  261. }
  262.  
  263. case TRAINS_OMN:
  264. switch(iZone){
  265. case ZONE1:
  266. switch (iClasse){
  267. case CLASSE1: *ref_mBase = (iNbBillets * 2.50) + ((iNbBillets * 2.50) * FRAISLUXE); break;
  268. case CLASSE2: *ref_mBase = (iNbBillets * 2.50); break; break;
  269. }
  270. case ZONE2:
  271. switch (iClasse){
  272. case CLASSE1: *ref_mBase = (iNbBillets * 3.75) + ((iNbBillets * 3.75) * FRAISLUXE); break;
  273. case CLASSE2: *ref_mBase = (iNbBillets * 3.75); break; break;
  274. }
  275. case ZONE3:
  276. switch (iClasse){
  277. case CLASSE1: *ref_mBase = (iNbBillets * 5) + ((iNbBillets * 5) * FRAISLUXE); break;
  278. case CLASSE2: *ref_mBase = (iNbBillets * 5); break; break; break;
  279. }
  280. }
  281.  
  282. case TRAINS_RAP:
  283. switch(iZone){
  284. case ZONE1:
  285. switch (iClasse){
  286. case CLASSE1: *ref_mBase = (iNbBillets * 3) + ((iNbBillets * 3) * FRAISLUXE); break;
  287. case CLASSE2: *ref_mBase = (iNbBillets * 3); break; break;
  288. }
  289. case ZONE2:
  290. switch (iClasse){
  291. case CLASSE1: *ref_mBase = (iNbBillets * 4.50) + ((iNbBillets * 4.50) * FRAISLUXE); break;
  292. case CLASSE2: *ref_mBase = (iNbBillets * 4.50); break; break;
  293. }
  294. case ZONE3:
  295. switch (iClasse){
  296. case CLASSE1: *ref_mBase = (iNbBillets * 6) + ((iNbBillets * 6) * FRAISLUXE); break;
  297. case CLASSE2: *ref_mBase = (iNbBillets * 6); break; break; break;
  298. }
  299. }
  300.  
  301. case TRANS_INT:
  302. switch(iZone){
  303. case ZONE1:
  304. switch (iClasse){
  305. case CLASSE1: *ref_mBase = (iNbBillets * 4) + ((iNbBillets * 4) * FRAISLUXE); break;
  306. case CLASSE2: *ref_mBase = (iNbBillets * 4); break; break;
  307. }
  308. case ZONE2:
  309. switch (iClasse){
  310. case CLASSE1: *ref_mBase = (iNbBillets * 6) + ((iNbBillets * 6) * FRAISLUXE); break;
  311. case CLASSE2: *ref_mBase = (iNbBillets * 6); break; break;
  312. }
  313. case ZONE3:
  314. switch (iClasse){
  315. case CLASSE1: *ref_mBase = (iNbBillets * 8) + ((iNbBillets * 8) * FRAISLUXE); break;
  316. case CLASSE2: *ref_mBase = (iNbBillets * 8); break; break; break;
  317. }
  318. }
  319.  
  320. case CARTEO:
  321. switch (iClasse){
  322. case CLASSE1: *ref_mBase = 40 + (40 * FRAISLUXE); break;
  323. case CLASSE2: *ref_mBase = 40; break; break;
  324. }
  325. }
  326. }
  327.  
  328. /**********************************************************/
  329. /* But: Calcul du montant apres Classe */
  330. /* Paramètres: Type de classe, */
  331. /* Montant apres frais de classe, */
  332. /* Montant de base */
  333. /* Valeur de retour : Aucune */
  334. /**********************************************************/
  335.  
  336. void CalculerMClasse(int iClasse, float * ref_mClasse, float fMBase);
  337. {
  338. if (iClasse = CLASSE1)
  339. *ref_mClasse = fMBase + (fMBase * FRAISLUXE);
  340. else *ref_mClasse = fMBase;
  341. }
  342.  
  343. /**********************************************************/
  344. /* But: Calcul du montant apres Reductions */
  345. /* Paramètres: Type de réduction, */
  346. /* Montant apres réduction si requise, */
  347. /* Montant apres frais de classe */
  348. /* Valeur de retour : Aucune */
  349. /**********************************************************/
  350.  
  351. void CalculerMReductions(int iTypeReduction, float * ref_mReduction, float fMClasse);
  352. {
  353. switch (iTypeReduction){
  354. case REDUCM: *ref_mReduction = fMClasse - (fMClasse * PCTMERE); break;
  355. case REDUCR: *ref_mReduction = fMClasse - (fMClasse * PCTRET); break;
  356. case REDUCE: *ref_mReduction = fMClasse - (fMClasse * PCTECO); break;
  357. case REDUCA: *ref_mReduction = fMClasse; break;
  358. }
  359. }
  360.  
  361. /**********************************************************/
  362. /* But: Calcul du montant de taxes + montant apres taxes */
  363. /* Paramètres: Taxes sur montant de base */
  364. /* Valeur de retour : Aucune */
  365. /**********************************************************/
  366.  
  367. void CalculerMTaxes(float * ref_mTotal, float fMReduction, float * ref_mTaxes);
  368. {
  369. *ref_mTaxes = fMReduction * TAXES;
  370. *ref_mTotal = fMReduction + *ref_mTaxes;
  371. }
  372.  
  373. /**********************************************************/
  374. /* But: Affichage des résultats */
  375. /* Paramètres: */
  376. /* Valeur de retour : Aucune */
  377. /**********************************************************/
  378.  
  379. /*void AfficherResultats();
  380. {
  381.  
  382. } */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement