|
|
|
|
Bonjour,
je suis en train de realiser un programme de "gestion des comptes bancaires" en langage C;
Dans le programme, j'ai une structure compte declarée comme une variable globale:
struct compte
{
char numeroCpte [11]; //numero du compte
char typeCompte [7]; //type du compte: cheque ou epargne
char nomClient [50]; //nom du client
char prenomClient [50]; //prenom(s) du client
char statutClient [12]; //statut social du client: salarie ou non salarie
char categorieCompte [13]; //categorie du compte: particulier ou professionnel
char numeroClient [11]; //numero du client
char dateCreation [10]; //date de creation du compte
};
struct compte cpt; // declaration d'une variable cpt de type compte
void EnregDansFichier ()
{
char nomFichier [26]; //nom du fichier dans lequel il faut sauvegarder
int erreur;
int i;
FILE *sortie;
printf("Entrez le nom du fichier: ");
scanf("%s",&nomFichier);
sortie=fopen(nomFichier,"at");
if (sortie == NULL)
{
printf("Un probleme est survenue lors de la tentative d'enregistrement de vos donnees dans le fichier %s\n",nomFichier);
}
else
{
fprintf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", cpt.numeroCpte, cpt.typeCompte, cpt.nomClient, cpt.prenomClient, cpt.statutClient, cpt.categorieCompte, cpt.numeroClient, cpt.dateCreation);
}
fclose(sortie);
}
void RechercheCpte ()
{
char numeroCpte [11];
char nomClient [50];
char nomFichier [26];
int trouve1, trouve2=0;
FILE *sortie;
printf ("Entrez le nom du fichier: "); scanf ("%s", nomFichier);
sortie=fopen(nomFichier, "rt");
printf ("\n\n\nEntrez le nom du client, ou le numero de compte que vous cherchez");
printf ("\n\n\nNumero compte: "); scanf ("%s", numeroCpte);
printf ("\n\n\nNom client: "); scanf ("%s", nomClient);
while (!EOF) // tant que la fin du fichier n'est pas atteint
{
if (numeroCpte) // si un numero de compte a ete saisi
{
if (nomClient) // si un numero de compte et un nom de client ont ete saisi
{
trouve1=(strcmp(nomClient, cpt.nomClient));
}
else // si un numero de compte a ete saisi, mais pas de nom client
{
trouve2=(strcmp(numeroCpte, cpt.numeroCpte));
}
}
else // si aucun numero de compte n'a ete saisi
{
if (nomClient) // si aucun numero de compte n'a ete saisi, mais qu'un numero de client a ete saisie
{
trouve1=(strcmp(nomClient, cpt.nomClient));
}
}
} // fin du while
if (trouve1)
{
fscanf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
}
system ("pause");
}
1 - Tu ne lis pas dans le fichier quand tu fais tes comparaisons
while ((!EOF) || (!trouve1) || (!trouve2))
{
...
}
3 - meme si tu trouves ce que tu veux dans le fichier, ton fscanf ne va pas lire les bonnes valeurs dans ton fichier car ton pointeur de fichier se trouvera a la fin du champ (numero de compte ou nomClient) que tu viendra de trouver. Et la j'ai pas le temps de t'aider plus, dsl, je repasserais Moi je dis ça...je dis rien ^^ |
Finalement j'ai un peu de temps ...
fprintf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",...); le mieux pour résoudre les problemes 1 et 3 c'est de déclarer un compte : cpt compt; Et que tu lises ton fichier compte par compte, c'est a dire que dans ton while tu auras : fscanf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", &compt.numeroCpte, &compt.typeCompte, &compt.nomClient, &compt.prenomClient, &compt.statutClient, &compt.categorieCompte, &compt.numeroClient, &compt.dateCreation); Comme ça tu n'a plus de problème avec le placement du pointeur dans ton fichier et ta structure est deja remplie quand tu sors de la boucle :) Moi je dis ça...je dis rien ^^ |
Merci Kiruasam pour ton aide.
void RechercheCpte ()
{
char numeroCpte [11];
char nomClient [50];
char nomFichier [26];
int trouve1, trouve2=0;
FILE *sortie;
printf ("Entrez le nom du fichier: "); scanf ("%s", nomFichier);
sortie=fopen(nomFichier, "rt");
printf ("\n\n\nEntrez le nom du client, ou le numero de compte que vous cherchez");
printf ("\n\n\nNumero compte: "); scanf ("%s", numeroCpte);
printf ("\n\n\nNom client: "); scanf ("%s", nomClient);
while (!EOF || !trouve1 || !trouve2) // tant que la fin du fichier n'est pas atteint
{
if (numeroCpte) // si un numero de compte a ete saisi
{
if (nomClient) // si un numero de compte et un nom de client ont ete saisi
{
trouve1=(strcmp(nomClient, cpt.nomClient));
}
else // si un numero de compte a ete saisi, mais pas de nom client
{
trouve2=(strcmp(numeroCpte, cpt.numeroCpte));
}
}
else // si aucun numero de compte n'a ete saisi
{
if (nomClient) // si aucun numero de compte n'a ete saisi, mais qu'un numero de client a ete saisie
{
trouve1=(strcmp(nomClient, cpt.nomClient));
}
} // fin du if
fscanf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
} // fin du while
fscanf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
system ("pause");
}
Il n'ya pas d'erreurs C, mais le programme ne marche toujours pas; lorsque j'entre le nom que je cherche, et le numero du compte, le programme se plante; j'appuie sur la touche "entrée", mais il ne sort pas du while apparemment. J'ai vraiment besoin, car ça fait plusieurs jours déjà que je suis bloqué à ce niveau. |
Je te conseillerais un autre mode pour la saisie de l'utilisateur parce que la avec le scanf il est dans tout les cas obligé de renseigner un numero de compte et un nom (tapez entrée tout seul ce n'est pas possible).
int RechercheCpte ()
{
char numeroCpte [11];
char nomClient [50];
char nomFichier [26];
int trouve1=1, trouve2=1;
FILE *sortie;
printf ("Entrez le nom du fichier: ");
scanf ("%s", nomFichier);
sortie=fopen(nomFichier, "rt");
printf ("\n\n\nEntrez le nom du client, ou le numero de compte que vous cherchez");
printf ("\n\n\nNumero compte: "); scanf ("%s", numeroCpte);
printf ("\n\n\nNom client: "); scanf ("%s", nomClient);
while (fscanf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation)!=EOF) // tant que la fin du fichier n'est pas atteint
{
if (numeroCpte) // si un numero de compte a ete saisi
{
trouve2=(strcmp(numeroCpte, cpt.numeroCpte));
}
if (trouve2!=0) // si compte pas trouver avec le numero de compte
if (nomClient) // si aucun numero de compte n'a ete saisi, mais qu'un numero de client a ete saisie
{
trouve1=(strcmp(nomClient, cpt.nomClient));
}
// si on a trouve on sort du while
if (trouve1==0 || trouve2==0) break;
} // fin du while
system ("pause");
if (trouve1==0 || trouve2==0) return 0;
else return 1;
}
int main() {
if ( RechercheCpte() == 0)
printf("Resultat :\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
else
printf("Erreur de recherche : le compte n'existe pas ou erreur de saisie");
return 0;
}
Moi je dis ça...je dis rien ^^ |
Salutations,
bool RechercheCpte ( char *pNomFichier, char *pNomClient, char *pNumeroCpte )
{
bool bTrouve = false;
FILE *sortie = 0;
// Ouverture du fichier
sortie = fopen(nomFichier, "rt");
// test de l'ouverture
if ( sortie == 0 )
return false;
// On se débarrasse des pointeur nuls ici pour alléger le reste plus loin...
if ( pNomClient == 0 )
pNomClient = "";
if ( pNumeroClient == 0 )
pNumeroClient = "";
// Recherche
while ( fread( &cpt, sizeof( struct compte ), 1, sortie ) )
{
if ( ( strcmp( pNomClient, cpt.nomClient ) == 0 ) ||
( strcmp( pNuméroClient, cpt.numeroClient ) == 0 ) )
{
bTrouve = true;
break;
}
}
// fermeture du fichier
fclose( sortie );
// Réponse
return bTrouve;
}
J'ai pas de compilo sous la main mais ça me parait bien comme cela... On pourra pour une sortie plus détaillée mettre un code de retour plutôt qu'un simple booléen. M. Edit.: J'ai aussi supposé que les compte enregistré dans le fichier avait leur numéro et nom de client différents de "". Whoops, j'avais pas que que ce sujet était de l'an dernier ^^"
|
Bonjour,
|
Bonjour tt le monde
|
Bonjour,
|