Rechercher : dans
Par :

Compte bancaire sous C/C++

Dernière réponse le 6 nov 2008 à 15:20:13 akanLG, le 4 nov 2008 à 11:01:46 
 Signaler ce message aux modérateurs

Bonjour,

Je suis étudiant en informatique de gestion. Je prépare un mémoire de fin de cycle BTS. Mon thème s’intitule Application Bancaire sous Langage C/C++. Le but est mettre au point une application de gestion de compte bancaire, mais je suis vraiment mal barré.
Voici les applications que je voudrai mettre dans le code :
-Ouverture de compte
-Clôture de compte
-Consultation(demande de loggin et password)
-Opérations : dépôt, retrait et virement intra bancaire.
J’ai commencé à élaborer un code mais ça ne donne pas gran chose . Il manque pas mal de chose surtout concernant les opérations(dépôt, virement, retrait).
----------------------------------------------
Help me.

#include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct
{
char titulaire[10];
char numero[5];

}
bank; /*création de type bank*/


void ouvrir_compte(FILE*compte,char titulaire[10])
{
bank fiche;
char numero[5];
clrscr();
printf("\n--------Ouverture d\'un compte-------\n");
compte=fopen("C:\\comptes.dat","w+");
puts("Donner le nom du titulaire:"); gets(titulaire);
puts("Lui attribuer un numero de compte:"); scanf("%s",&numero[5]);
flushall();
fwrite(&fiche,sizeof(bank),1,compte);
fclose(compte);

}

void consulter_compte(FILE*compte)
{

bank fiche;
char trouve=0,num[5];
clrscr();
puts("-------Consultation de compte------\n");
flushall();
compte=fopen("C:\\comptes","r");
printf("Entrer le numero de compte:"); scanf("%s",&num[5]);
flushall();
while((fread(&fiche,sizeof(bank),1,compte))!=0&&(trouve==0))
{
if(strcmp(fiche.numero,num)==0)
{
trouve=1;
printf("Compte trouve !\n");
printf(" Nom:%s\nNumero de compte:",fiche.titulaire,fiche.numero);
}
}
if(trouve=0) printf("Compte inexistant!\n");
fclose(compte);
getch();
}

void cloturer_compte(void)
{
char numero[5];
char choix;
printf(" Entrez le numero du compte a supprimer \n");
gets(numero);
if(numero==NULL)
{
puts("Desole,ce compte n'existe pas");
}
if(numero!=NULL)
{
puts("Etes-vous sûr de vouloir supprimer ce compte?(O/n)");
scanf("%c",&choix);
if(choix=='O'||'o')
{
remove(numero);
printf("le compte numero %s a ete supprime avec succes\n",numero);
}

if(choix=='N'||'n')
{
printf("le compte numero %s n'a pas ete supprime\n",numero);
}
}

void main()
{

char choix;
do
{
clrscr();
printf("Ouvrir un compte -->1\n ");
printf("Consulter un compte-->2\n");
printf("Cloturer un compte-->3\n");
choix=(char)getchar();
fushall();
{
switch(choix)
{
case'1':ouvrir_compte(compte,numero);break;
case'2':consulter_compte(compte,numero);break;
case'3': cloturer_compte();break;
}
}
}
while(choix!='S');
return 0;

}

Configuration: Windows XP
Internet Explorer 8.0

1

Char Snipeur, le 4 nov 2008 à 13:59:50

Salut.
déjà à ta place, je ferais plus du C++ en utilisant les string.
Dans un premier temps, utilise le papier, voi comment aranger les différents éléments entre eux.
moi, je ferai une classe compte, avec les action, dépot et retrait, la méthode consultation.
Ensuite, je ferai une classe utilisateur contenant login + mdp, avec un conteneur pouvant contenir plusieurs compte.
Il faudrait alors les fonctions ouverture, fermeture, virement, consultation du compte untel. Ensuite, il ne restera plus qu'a interfacer avec l'utilisateur. Salutation !
Char Snipeur

Répondre à Char Snipeur

2

akanLG, le 6 nov 2008 à 13:42:51

Oui,on me dit à chaque fois de programmer en C++,mais le probléme j'ai pas étudié C++.Pour le moment je n'ai fait que langage C.
Penses tu que c'est impossible avce le Langage C?

Répondre à akanLG

3

Char Snipeur, le 6 nov 2008 à 14:21:41

C'est possible en C, bien sur. Mais dans le titre tu met C++, et avec des objets c'est plus simple pour ce genre de problème je trouve, surtout qu'il y a pas mal de conteneurs qui permettent de ne pas s'occuper de la mémoire, type string et vector.
Du coup ça allège pas mal la programmation.

Je viens de jeter un oeil à ton programme, tu fais n'importe quoi en plus. Exemple :

void ouvrir_compte(FILE*compte,char titulaire[10])//utilisation de compte sans aucun intéret !
{
bank fiche;                  //creation d'une fichier qui n'est pas modifié!
char numero[5];
clrscr();
printf("\n--------Ouverture d\'un compte-------\n");
compte=fopen("C:\\comptes.dat","w+");
puts("Donner le nom du titulaire:"); gets(titulaire);      
puts("Lui attribuer un numero de compte:"); scanf("%s",&numero[5]); // modification de la chaine de caratère locale, en commençant par une casse en dehors du tableau : bonjour l'erreur mémoire. De plus, variable utilisé nulle par et détruite à la fin de la fonction
flushall();
fwrite(&fiche,sizeof(bank),1,compte);        //ecriture d'une fiche vide sur le fichier...
fclose(compte);

}

Bref, tu as tout intéret à tout revoir. à titre d'exemple, voici ce que ça donnerai en C++:
void bank::ouvrir_compte()
{
clrscr();
printf("\n--------Ouverture d\'un compte-------\n");
compte=fopen("C:\\comptes.dat","w+");
puts("Donner le nom du titulaire:"); gets(titulaire);      
puts("Lui attribuer un numero de compte:"); scanf("%s",numero); 
flushall();
fwrite(this,sizeof(bank),1,compte);        
fclose(compte);
}

Ce n'est pas 100% C++, mais c'est au moins objet. Salutation !
Char Snipeur

Répondre à Char Snipeur

4

akanLG, le 6 nov 2008 à 14:36:26
  • +1

Bon là j'ai essayé de corriger les erreurs.Sa me donne ceci:


#include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct
{
char titulaire[10];
char numero[5];

}
bank; /*création de type bank*/


void ouvrir_compte(void)
{ FILE*compte;
char titulaire[10];
bank fiche;
char numero[5];
clrscr();
printf("\n--------Ouverture d\'un compte-------\n");
compte=fopen("C:\\comptes.dat","w+");
puts("Donner le nom du titulaire:"); gets(titulaire);
puts("Lui attribuer un numero de compte:"); scanf("%s",&numero[5]);
flushall();
fwrite(&fiche,sizeof(bank),1,compte);
fclose(compte);

}

void consulter_compte()
{
FILE*compte;
bank fiche;
char trouve=0,num[5];
clrscr();
puts("-------Consultation de compte------\n");
flushall();
compte=fopen("C:\\comptes","r");
printf("Entrer le numero de compte:"); scanf("%s",&num[5]);
flushall();
while((fread(&fiche,sizeof(bank),1,compte))!=0&&(trouve==0))
{
if(strcmp(fiche.numero,num)==0)
{
trouve=1;
printf("Compte trouve !\n");
printf(" Nom:%s\nNumero de compte:",fiche.titulaire,fiche.numero);
}
}
if(trouve=0) printf("Compte inexistant!\n");
fclose(compte);
getch();
}

void cloturer_compte(void)
{
char numero[5];
char choix;
printf(" Entrez le numero du compte a supprimer \n");
gets(numero);
if(numero==NULL)
{
puts("Desole,ce compte n'existe pas");
}
if(numero!=NULL)
{
puts("Etes-vous sûr de vouloir supprimer ce compte?(O/n)");
scanf("%c",&choix);
if(choix=='O'||'o')
{
remove(numero);
printf("le compte numero %s a ete supprime avec succes\n",numero);
}

if(choix=='N'||'n')
{
printf("le compte numero %s n'a pas ete supprime\n",numero);
}
}
}
main()
{

char choix;
do
{
clrscr();
printf("Ouvrir un compte -->1\n ");
printf("Consulter un compte-->2\n");
printf("Cloturer un compte-->3\n");
scanf("%c",&choix);
flushall();
{
switch(choix)
{
case'1':ouvrir_compte();break;
case'2':consulter_compte();break;
case'3': cloturer_compte();break;
}
}
}
while(choix!='S');

getch();
}

Répondre à akanLG

5

 Char Snipeur, le 6 nov 2008 à 15:20:13

Pour la fonction que je t'ai commenté, c'est pas mieux !
Tu n'as pas tenu compte des commentaires.
tu crées des variables que tu modifie mais que tu ne sauve pas. ET :
scanf("%s",&numero[5]);
C'est vraiment n'importe quoi !!!! C'est pour ça que je te dis d'utiliser le C++ tu n'auras pas à gérer la mémoire que visiblement tu ne maitrise pas.
&numero[5] est équivalent à &(numero[5]) c'est à dire que tu lui passe l'adresse du sixième caractère (un tableau commence à 0) sur 5, donc en dehors de la zone allouée. Bref, c'est comme écrire à coté de la feuille.
En C++, tu fais :
std::string numero;
std::cin>>numero;
Et hop ! pas de souci, les numéros sont dans la boite.

Attention aussi à ne pas confondre = et ==. À un moment, tu fais if(trouve=0) qui sera toujours faux, sauf si l'affectation foire. (surement une erreur d'inattention) Salutation !
Char Snipeur

Répondre à Char Snipeur