Se connecter avec
S'enregistrer | Connectez-vous

probleme Objet C++

Dernière réponse : dans Programmation

salut j'ai un probleme de cpp j'ai confectionné un petit programme qui simule une banque.Mais je n'arrive pas a trouver les erreurs de deboguage. J'ai beau chercher je trouve pas !

voici le code :


  1. ///////////////////////////////////////////////////////////////////////////////////////////
  2. // BANQUE_DE_BERNARD.CPP - SIMULATION DE BANQUE PAR BERNARD
  3. //
  4. //
  5. //
  6. //
  7. //
  8. //
  9. ///////////////////////////////////////////////////////////////////////////////////////////
  10.  
  11.  
  12. #include <iostream.h>
  13. #include <stdlib.h>
  14. #include <ctype.h>
  15. #include <string.h>
  16.  
  17. class LinkedListObject
  18. {
  19. public:
  20. LinkedListObject()
  21. {
  22. // Ajoute l'ovjet courant à la fin de
  23. // la liste liée.
  24. addToEnd();
  25. }
  26.  
  27. // Manipulation de la liste de liens.
  28. static LinkedListObject* first()
  29. {
  30. return pFirst;
  31. }
  32. LinkedListObject* next()
  33. {
  34. return pNext;
  35. }
  36. void addToEnd();
  37.  
  38. protected:
  39. // Conserve les comptes dans une liste liée afin qu'il
  40. // n'y ait pas de limitatations à la liste des objets.
  41. static LinkedListObject* pFirst;
  42. LinkedListObject* pNext;
  43. };
  44.  
  45. // Allocation du pointeur statique au premier
  46. // objet de la liste liée.
  47. LinkedListObject* LinkedListObject: First = 0;
  48.  
  49. // Ajoute l'objet courant à la liste liée de :
  50. void LinkedListObject::addToEnd()
  51. {
  52.  
  53. // Ajoute ceci à la fin de la liste et le compte.
  54. if (pFirst == 0)
  55. {
  56. pFirst = this; // Liste vide ; à mettre en premier.
  57. }
  58. else
  59. {
  60. // Recherche du dernier élément de la liste.
  61. LinkedListObject* pA;
  62. for (pA = pFirst; pA->pNext; pA = pA->pNext)
  63. {
  64. }
  65. pA->pNext = this; // Accrochage à la fin.
  66. }
  67. pNext = 0; // Toujours le dernier.
  68. }
  69.  
  70.  
  71. // Account - Cette classe abstraite incorpore les propriétés
  72. // communes aux deux types de compte : Checking et
  73. // Savings. Il manque toutefois le concept de
  74. // withdrawal(), qui est différents de l'un à l'autre.
  75. class Account : public LinkedListObject
  76. {
  77. public:
  78. Account::Account(unsigned accNo,
  79. double initialBalance = 0.0)
  80. {
  81. // Initialisation des membres de données de l'objet.
  82. accountNumber = accNo;
  83. balance = initialBalance;
  84.  
  85. // Compteur.
  86. count++;
  87. }
  88.  
  89. // Fonctions d'accès.
  90. int accountNo()
  91. {
  92. return accountNumber;
  93. }
  94. double acntBalance()
  95. {
  96. return balance;
  97. }
  98. static int noAccounts()
  99. {
  100. return count;
  101. }
  102.  
  103. // Fonctions de liste liée produisant les promotions
  104. // correctes, évitant ainsi bien des misères par la suite.
  105. static Account* first()
  106. {
  107. return (Account*)LinkedListObject::first();
  108. }
  109. Account* next()
  110. {
  111. return (Account*)LinkedListObject::next();
  112. }
  113.  
  114. // Fonctions transactionnelles.
  115. void deposit(double amount)
  116. {
  117. balance += amount;
  118. }
  119. virtual void withdrawal(double amount) = 0;
  120.  
  121. // Fonction d'affichage 'cout'.
  122. void display()
  123. {
  124. cout << type()
  125. << " Compte " << Numéro de compte.
  126. << " = " << Solde.
  127. << "\n";
  128. }
  129. virtual char* type() = 0;
  130.  
  131. protected:
  132. static int count; // Nombre de comptes.
  133. unsigned accountNumber;
  134. double balance;
  135. };
  136.  
  137. // Allocation d'espace pour les fonctions statiques.
  138. int Account::count = 0;
  139.  
  140. // Checking - Cette classe contient les propriétés propres
  141. // aux comptes chèques. Elle a bien réduit, non ?
  142. class Checking : public Account
  143. {
  144. public:
  145. Checking::Checking(unsigned accNo,
  146. double initialBalance = 0.0) :
  147. Account(accNo, initialBalance)
  148. {
  149. }
  150.  
  151. // Surcharge des fonctions virtuelles pures.
  152. virtual void withdrawal(double amount);
  153. char* type()
  154. {
  155. return "Compte Chèque -";
  156. }
  157. };
  158.  
  159. // withdrawal - Surcharge de la fonction membre Account::withdrawal()
  160. // pour taxer 20 centimes par chèque si le solde
  161. // est inférieur à 500 dollars.
  162. void Checking::withdrawal(double amount)
  163. {
  164. if (balance < amount )
  165. {
  166. cout << "Fonds insuffisants : solde " << Montant
  167. << ", chèque " << du solde.
  168. << "\n";
  169. }
  170. else
  171. {
  172. balance -= amount;
  173.  
  174. // Si le solde est trop bas, taxation !
  175. if (balance < 500.00)
  176. {
  177. balance -= 0.20;
  178. }
  179. }
  180. }
  181.  
  182. // Savings - Pareil que pour Checking, sauf qu'il a
  183. // aussi un unique membre de données.
  184. class Savings : public Account
  185. {
  186. public:
  187.  
  188. Savings::Savings(unsigned accNo,
  189. double initialBalance = 0.0) :
  190. Account(accNo, initialBalance)
  191. {
  192. noWithdrawals = 0;
  193. }
  194.  
  195. // Fonctions transactionnelles.
  196. virtual void withdrawal(double amount);
  197. char* type()
  198. {
  199. return "Compte Epargne -";
  200. }
  201.  
  202. protected:
  203. int noWithdrawals;
  204. };
  205.  
  206. // withdrawal - Surcharge la fonction membre Account::withdrawal()
  207. // pour qu'elle prélève 5.00 dollars après le premier
  208. // retrait du mois.
  209. void Savings::withdrawal(double amount)
  210. {
  211. if (balance < amount)
  212. {
  213. cout << "Fonds insuffisants : solde " << Montant du
  214. << ", retrait " << solde
  215. << "\n";
  216. }
  217. else
  218. {
  219. if (++noWithdrawals > 1)
  220. {
  221. balance -= 5.00;
  222. }
  223. balance -= amount;
  224. }
  225. }
  226.  
  227. // Déclarations de prototypes.
  228. unsigned getAccntNo();
  229. void process(Account* pAccount);
  230. void getAccounts();
  231. void displayResults();
  232.  
  233.  
  234. // main - Cumul des totaux d'entrée et sorties initiaux.
  235. int main(int argcs, char* pArgs[])
  236. {
  237. // Lecture des comptes de l'utilisateur.
  238. getAccounts();
  239.  
  240. // Affichage de la liste liée des comptes.
  241. displayResults();
  242. return 0;
  243. }
  244.  
  245. // getAccounts - Chargement du tableau de comptes spécifié.
  246. void getAccounts()
  247. {
  248. Account* pA;
  249.  
  250. // Boucle jusqu'à une entrée de 'X' ou 'x'
  251. char accountType; // E ou C
  252. while (1)
  253. {
  254. cout << "Entrez E pour les comptes d'épargne, \n"
  255. << "C pour les comptes chèque, X pour quitter : ";
  256. cin >> accountType;
  257. switch (accountType)
  258. {
  259. case 'c':
  260. case 'C':
  261. pA = new Checking(getAccntNo());
  262. break;
  263.  
  264. case 'e':
  265. case 'E':
  266. pA = new Savings(getAccntNo());
  267. break;
  268.  
  269. case 'x':
  270. case 'X':
  271. return;
  272.  
  273. default:
  274. cout << "Je n'ai pas trouvé ça...\n";
  275. }
  276.  
  277. // Traitement de l'objet que nous venons de créer.
  278. process(pA);
  279. }
  280. }
  281.  
  282. // displayResults - Affichage des comptes trouvés dans
  283. // la liste liée Account.
  284. void displayResults()
  285. {
  286. // Présentation des totaux.
  287. double total = 0.0;
  288. cout << "Totaux des comptes : \n";
  289. for (Account* pA = Account::first(); pA; pA = pA->next())
  290. {
  291. pA->display();
  292. total += pA->acntBalance();
  293. }
  294. cout << "Total général = " << total << "\n";
  295. }
  296.  
  297. // getAccntNo - Retourne le numéro de compte entré.
  298. unsigned getAccntNo()
  299. {
  300. unsigned accntNo;
  301. cout << "Entrez le numéro de compte : ";
  302. cin >> accntNo;
  303. return accntNo;
  304. }
  305.  
  306. // process(Account) - Entrée des données d'un compte.
  307. void process(Account* pAccount)
  308. {
  309. cout << "Entrez un nombre positif pour les dépôts,\n"
  310. << "négatif pour les retraits, 0 pour terminer.\n";
  311. double transaction;
  312. do
  313. {
  314. cout << ":";
  315. cin >> transaction;
  316.  
  317. // Dépôts.
  318. if (transaction > 0)
  319. {
  320. pAccount->deposit(transaction);
  321. }
  322. // Retraits.
  323. if (transaction < 0) {
  324. pAccount->withdrawal(-transaction);
  325. }
  326. } while (transaction != 0);
  327. }

Autres pages sur : probleme objet

Lassé par la pub ? Créez un compte

tu te fout de notre gueule: si tu veux jouer au jeu des 7 erreurs, c'est pas la bonne cat :pfff: 

BTW


#include <iostream.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

:non: 

#include <iostream>
#include <cstdlib>
#include <cctype>
#include <string>

using namespace std;

vive STL (<list>)

t'es sur de maitriser le mot-cle static? pourquoi faire un pseudo-singleton

ton héritage n'a aucun sens, utilsie les templates

les fonctions memebres const tu connais?

je vois pas de destructeur virtuel, ni rien de ce genre

(Account*) :non:  utilise les cast C++ et pas le cast C

++Taz a écritmoi c'est surtout son héritage qui me choque, c'est tordu au pas possible, ça n'a aucun sens, ça reviens à ne pas faire de l'objet
ba en fait il fait du C avec du C++ quoi

FMR Hunter a écritn'empeche c triste de constater que c super courant comme spécimen, et c'est les memes qu'on voit lancer des

"machin suxor, c truc qui rox"

:pfff: 
clair j'hallucine en plus md'etre mauvais programmeur, c'est un mauvais trolleur

BERN4RD a écritsalut j'ai un probleme de cpp j'ai confectionné un petit programme qui simule une banque.Mais je n'arrive pas a trouver les erreurs de deboguage. J'ai beau chercher je trouve pas !

voici le code :



Je te conseille l'achat d'un livre sur le C++ pour résoudre ton problème :ouch: 

joce a écritclair quand j'ai vu ses structures je me suis dis STL :o 


Ouah ptain tu l'as trouvée ou ton image ?? Je veux la même !!
Tu peux me l'envoyer par mail stp ??
looool
je sais que ca n'a rien a voir avec le pb du mister mais bon !!
elle déchire tout je la veux !!
Lassé par la pub ? Créez un compte