Accueil > > > GESTION DE COMPTE(PRIMITIF)
GESTION DE COMPTE(PRIMITIF)
Information sur la source
Description
C'est en gros mon premier programme que je peux utiliser.(je débute en c++)Il cree des fichier .bank dans lesquels on peut saisir ses lignes de compte,et calcule automatiquement le nouveau solde a partir des operations effectuées.Il utilise surtout les entrees/sorties sur disque dur, et les moyens pas tres esthétiques que g inventés pr trier et recupérer des informations dans des fichiers puis les afficher a l'ecran.Persuader de la faiblesse de mon code je le soumet a vos critiques dans l'espoir de progresser.J'amerai notemment pouvoir supprimer des lignes dans un fichier, et trouver un moyen de formater autrement les données que je rentre.
Source
- #include <iostream>
- #include <iomanip>
- #include <stdio.h>
- #include <fstream>
- #include <string.h>
- #include <sstream>
- using namespace std;
-
- void menu_1(void);
- void menu_2(void);
- void recup_ligne(void);
- void cut_ligne(const string &,BOOL);
- void modification_compte(void);
- void quit(int);
- float recup_solde(void);
- float trans_str(const string &); //transforme une chaine de caractere en un float
- void creer_nouv_compte (void );
- void acces_compte(void);
- int appel_erreur (int);
- float recup;
- string nom_compte_courant;
-
-
-
-
- int main()
- {
- menu_1();
- quit(1);
- return 0;
- }
-
- void menu_1()
- {
- int choix;
- cout << "MENU : \n";
- cout << "1-Creer nouveau compte \n";
- cout << "2-Acces compte existant \n";
- cout << "3-Quit \n";
- cout << "CHOIX : "; cin >> choix;
- switch(choix)
- {
- case 1 :
- creer_nouv_compte();
- case 2 :
- acces_compte();
- case 3 :
- quit(1);
- default: quit(1);
- }
- }
-
-
-
- void menu_2()
- {
- int choix;
- cout << "MENU : \n";
- cout << "1-Consultation de solde \n";
- cout << "2-Modifications \n";
- cout << "3-Retour \n";
- cout << "4-Quit\n";
- cout << "CHOIX : "; cin >> choix;
-
- switch(choix)
- {
- case 1 :
- recup_ligne();
- case 2 :
- modification_compte();
- case 3 :
- cout << "\n";
- menu_1();
- case 4 :
- quit(2);
- default: quit(2);
- }
-
-
- }
-
- void creer_nouv_compte()
- {
- string ch1, ch2 (".bank"), nom, separator = "*"; //l'extension ".bank" est rajoutee au nom
- cout << "nom du compte : "; cin >> ch1;
- nom = ch1 + ch2;
-
- ofstream fichier (nom.c_str(), ios_base::app);
- if (fichier)
- {
- cout << "Compte cree!!! \n";
- fichier.close();
-
- ofstream fichier ("INDEX.bank", ios_base::app); //ouvre un fichier index ou st stockes les noms des comptes existants
- if (fichier)
- {
- fichier << nom << separator;
- fichier.close();
- }
- else
- {
- appel_erreur (1);
- cout << "\n";
- menu_1();
- }
- cout << "\n";
- menu_1();
- }
- else
- {
- appel_erreur (1);
- cout << "\n";
- menu_1();
- }
- }
-
- void acces_compte() //liste les comptes crees et permet d'y acceder.
- {
- int no_line = 0, choix;
- string tbl_line[10], line;
- ifstream fichier ("INDEX.bank");
- if (fichier)
- {
- cout << "\n";
- while ( getline ( fichier, line, '*') ) //cut tous les '*' et stock danss line
- {
- tbl_line [no_line] = line; no_line++;
- cout << no_line << "->" << line << endl;
- }
-
- cout << "No du compte a consulter?: ";
- if (cin >> choix)
- {
- if (choix <= no_line)
- {
- nom_compte_courant = tbl_line[ choix - 1]; //recupere le nom du compte a ouvrir "choix - 1 " car les tableaux commencent a 0 et la liste affichee a 1.
- fichier.close();
- cout << "\n";
- menu_2();
- }
- else
- {
- cout << "\n";
- cout << "ERREUR: COMPTE INEXISTANT\n" ;
- cout << "\n";
- menu_1();
- }
- }
- else
- {
- appel_erreur (2);
- cout << "\n";
- menu_2();
- }
-
- }
- else
- {
- appel_erreur (1);
- cout << "\n";
- menu_1();
- }
- }
-
-
-
- int appel_erreur(int erreur)
- {
- if (erreur == 1)
- {
- cerr << "ERREUR: ACCES FICHIER IMPOSSIBLE";
- }
- if (erreur == 2)
- {
- cerr << "ERREUR: SAISIE INCORECTE";
- }
- }
-
-
-
- void recup_ligne() //recupere les lignes de compte et les affiche
- {
- string ligne;
- ifstream fichier( nom_compte_courant.c_str() ); //le nom du fichier a lire doit etre de type const *char
-
- if ( fichier )
- {
- cout << "DATE" << setw(19) << "CREDIT" << setw(13) << "DEBIT" << setw(13) << "SOLDE" << setw(25) << "COMMENTAIRE" << endl;
- while ( getline( fichier, ligne, '%' ) )
- {
- cut_ligne(ligne,0); //coupe la chaine ligne et l'affiche par morceaux
- }
- fichier.close();
- }
- // cette boucle s'arrête dès qu'une erreur de lecture survient
- else
- {
- appel_erreur (1);
- quit(2);
- }
- cout << endl;
- menu_2();
- }
-
-
- void modification_compte() //permet de creer des nouvelles lignes de compte
- {
- float solde;
- string separator = "*",fl = "%", date, credit, debit, commentaire;
- cout << "\n\n" << "DATE? ( / / ) : ";cin >> date;
- cout << "credit? : ";cin >> credit;
- cout << "debit? : "; cin >> debit;
- cout << "commentaire?: (Pas plus de 20!)"; cin >> commentaire;
- solde = recup_solde(); //recuper l'ancien solde et calcule le nouveau avec le debit et le credit
-
- solde = solde +trans_str(credit);
- solde = solde - trans_str(debit);
-
-
-
- ofstream file (nom_compte_courant.c_str() , ios_base::app);
- if (file)
- {
- file << date << separator << credit << separator << debit << separator << solde << separator << commentaire << fl;
- file.close();
- }
- else
- {
- appel_erreur (1);
- quit(2);
- }
- cout << "\n";
- menu_2();
- }
-
-
- float recup_solde()
- {
- string ligne;
- string tbl_ligne[2];
- float solde;
- int compteur = 0, i = 0;
-
- ifstream fichier (nom_compte_courant.c_str() );
- if ( fichier )
- {
- while ( getline( fichier, ligne, '%' ) ) {tbl_ligne[i] = ligne; i++; compteur++; cout << "\n"; } //recupere la derniere ligne du fichier
- fichier.close();
- }
- else
- {
- appel_erreur (1);
- quit(2);
- }
-
- if ((ligne == "") && (compteur == 0)) //si rien ds fichier requete du solde initial
- {
- cout << "Solde initial?: "; cin >> solde;
- return solde;
- }
- else
- {
- cut_ligne(tbl_ligne[i-1], 1); //coupe la chaine et extrait le solde (BOOL = 1)
- return recup;
- }
- }
-
- float trans_str( const string & str) //transforme une string en float
- {
- istringstream iss( str );
- float nombre;
- iss >> nombre;
- return nombre;
- }
-
- void cut_ligne(const string & str, BOOL B) //cut str
- {
- string tbl_mot[10], mot;
- int i = 0;
-
- istringstream iss( str );
- while (getline( iss, mot, '*' ) ) //coupe la chaine tous les * et stock les coupes ds tbl_mot
- {
- tbl_mot[i] = mot;
- i++ ;
- }
-
- if (B == 0)
- {
- cout << tbl_mot[0] << setw(15) << tbl_mot[1] << setw(13) << tbl_mot[2] << setw(13) << tbl_mot[3] << setw(25) << tbl_mot[4] << endl;
- }
- if (B == 1)
- {
- recup = trans_str(tbl_mot[3]); //la fonction recup_solde retourne recup qui est une variable locale
- }
- }
-
-
-
- void quit(int param)
- {
- string reponse;
- cerr << "\n" << "Quitter? O/N :\n"; cin >> reponse;
- if (reponse == "o" || reponse == "O") {
- exit(0); }
- if (reponse == "n" || reponse == "N")
- {
- cout << endl;
- if (param == 1)
- {
- menu_1();
- }
- else
- {
- menu_2();
- }
- }
-
- }
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <fstream>
#include <string.h>
#include <sstream>
using namespace std;
void menu_1(void);
void menu_2(void);
void recup_ligne(void);
void cut_ligne(const string &,BOOL);
void modification_compte(void);
void quit(int);
float recup_solde(void);
float trans_str(const string &); //transforme une chaine de caractere en un float
void creer_nouv_compte (void );
void acces_compte(void);
int appel_erreur (int);
float recup;
string nom_compte_courant;
int main()
{
menu_1();
quit(1);
return 0;
}
void menu_1()
{
int choix;
cout << "MENU : \n";
cout << "1-Creer nouveau compte \n";
cout << "2-Acces compte existant \n";
cout << "3-Quit \n";
cout << "CHOIX : "; cin >> choix;
switch(choix)
{
case 1 :
creer_nouv_compte();
case 2 :
acces_compte();
case 3 :
quit(1);
default: quit(1);
}
}
void menu_2()
{
int choix;
cout << "MENU : \n";
cout << "1-Consultation de solde \n";
cout << "2-Modifications \n";
cout << "3-Retour \n";
cout << "4-Quit\n";
cout << "CHOIX : "; cin >> choix;
switch(choix)
{
case 1 :
recup_ligne();
case 2 :
modification_compte();
case 3 :
cout << "\n";
menu_1();
case 4 :
quit(2);
default: quit(2);
}
}
void creer_nouv_compte()
{
string ch1, ch2 (".bank"), nom, separator = "*"; //l'extension ".bank" est rajoutee au nom
cout << "nom du compte : "; cin >> ch1;
nom = ch1 + ch2;
ofstream fichier (nom.c_str(), ios_base::app);
if (fichier)
{
cout << "Compte cree!!! \n";
fichier.close();
ofstream fichier ("INDEX.bank", ios_base::app); //ouvre un fichier index ou st stockes les noms des comptes existants
if (fichier)
{
fichier << nom << separator;
fichier.close();
}
else
{
appel_erreur (1);
cout << "\n";
menu_1();
}
cout << "\n";
menu_1();
}
else
{
appel_erreur (1);
cout << "\n";
menu_1();
}
}
void acces_compte() //liste les comptes crees et permet d'y acceder.
{
int no_line = 0, choix;
string tbl_line[10], line;
ifstream fichier ("INDEX.bank");
if (fichier)
{
cout << "\n";
while ( getline ( fichier, line, '*') ) //cut tous les '*' et stock danss line
{
tbl_line [no_line] = line; no_line++;
cout << no_line << "->" << line << endl;
}
cout << "No du compte a consulter?: ";
if (cin >> choix)
{
if (choix <= no_line)
{
nom_compte_courant = tbl_line[ choix - 1]; //recupere le nom du compte a ouvrir "choix - 1 " car les tableaux commencent a 0 et la liste affichee a 1.
fichier.close();
cout << "\n";
menu_2();
}
else
{
cout << "\n";
cout << "ERREUR: COMPTE INEXISTANT\n" ;
cout << "\n";
menu_1();
}
}
else
{
appel_erreur (2);
cout << "\n";
menu_2();
}
}
else
{
appel_erreur (1);
cout << "\n";
menu_1();
}
}
int appel_erreur(int erreur)
{
if (erreur == 1)
{
cerr << "ERREUR: ACCES FICHIER IMPOSSIBLE";
}
if (erreur == 2)
{
cerr << "ERREUR: SAISIE INCORECTE";
}
}
void recup_ligne() //recupere les lignes de compte et les affiche
{
string ligne;
ifstream fichier( nom_compte_courant.c_str() ); //le nom du fichier a lire doit etre de type const *char
if ( fichier )
{
cout << "DATE" << setw(19) << "CREDIT" << setw(13) << "DEBIT" << setw(13) << "SOLDE" << setw(25) << "COMMENTAIRE" << endl;
while ( getline( fichier, ligne, '%' ) )
{
cut_ligne(ligne,0); //coupe la chaine ligne et l'affiche par morceaux
}
fichier.close();
}
// cette boucle s'arrête dès qu'une erreur de lecture survient
else
{
appel_erreur (1);
quit(2);
}
cout << endl;
menu_2();
}
void modification_compte() //permet de creer des nouvelles lignes de compte
{
float solde;
string separator = "*",fl = "%", date, credit, debit, commentaire;
cout << "\n\n" << "DATE? ( / / ) : ";cin >> date;
cout << "credit? : ";cin >> credit;
cout << "debit? : "; cin >> debit;
cout << "commentaire?: (Pas plus de 20!)"; cin >> commentaire;
solde = recup_solde(); //recuper l'ancien solde et calcule le nouveau avec le debit et le credit
solde = solde +trans_str(credit);
solde = solde - trans_str(debit);
ofstream file (nom_compte_courant.c_str() , ios_base::app);
if (file)
{
file << date << separator << credit << separator << debit << separator << solde << separator << commentaire << fl;
file.close();
}
else
{
appel_erreur (1);
quit(2);
}
cout << "\n";
menu_2();
}
float recup_solde()
{
string ligne;
string tbl_ligne[2];
float solde;
int compteur = 0, i = 0;
ifstream fichier (nom_compte_courant.c_str() );
if ( fichier )
{
while ( getline( fichier, ligne, '%' ) ) {tbl_ligne[i] = ligne; i++; compteur++; cout << "\n"; } //recupere la derniere ligne du fichier
fichier.close();
}
else
{
appel_erreur (1);
quit(2);
}
if ((ligne == "") && (compteur == 0)) //si rien ds fichier requete du solde initial
{
cout << "Solde initial?: "; cin >> solde;
return solde;
}
else
{
cut_ligne(tbl_ligne[i-1], 1); //coupe la chaine et extrait le solde (BOOL = 1)
return recup;
}
}
float trans_str( const string & str) //transforme une string en float
{
istringstream iss( str );
float nombre;
iss >> nombre;
return nombre;
}
void cut_ligne(const string & str, BOOL B) //cut str
{
string tbl_mot[10], mot;
int i = 0;
istringstream iss( str );
while (getline( iss, mot, '*' ) ) //coupe la chaine tous les * et stock les coupes ds tbl_mot
{
tbl_mot[i] = mot;
i++ ;
}
if (B == 0)
{
cout << tbl_mot[0] << setw(15) << tbl_mot[1] << setw(13) << tbl_mot[2] << setw(13) << tbl_mot[3] << setw(25) << tbl_mot[4] << endl;
}
if (B == 1)
{
recup = trans_str(tbl_mot[3]); //la fonction recup_solde retourne recup qui est une variable locale
}
}
void quit(int param)
{
string reponse;
cerr << "\n" << "Quitter? O/N :\n"; cin >> reponse;
if (reponse == "o" || reponse == "O") {
exit(0); }
if (reponse == "n" || reponse == "N")
{
cout << endl;
if (param == 1)
{
menu_1();
}
else
{
menu_2();
}
}
}
Historique
- 31 janvier 2006 23:14:34 :
- petite correction d'orthographe.Sorry
- 31 janvier 2006 23:21:44 :
- re correction d'orthographe (decidément jsuis mauvais!)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
gestion de compte bancaire [ par fantadjene ]
slt! j ai un projet de gestion de comptes bancaires en c et ce qui me bloque c est qu il faut prelever une certaine somme dans tous les comptes ou
Aide sur les classes [ par mouadsa ]
Bonsoir, J'ai un programmes en c++ où je dois créer une classe compte et puis créer n comptes (tableau dynamique), les afficher tous et saisir leurs p
Quel langage pour gestion de données, Tri, présentation [ par zonette ]
gestion des taches [ par aatabjamila ]
bonsoir, je cherche un projet ou des liens pouvant m'aider à concevoir le processus de gestion des taches d'une entreprise (je dois realiser une appli
MyOS : Free and OpenSource OS [ par SamyPesse ]
Bonjour à tous, je viens vous presenter mon projet de systéme d'exploitation, cela fait 8 mois que je bosse sur ce projet, durant ces vacances j'ai pu
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|