Donnée enregistrés dans un fichier et dans un tableau pour traitement

Résolu
MrKoala69 Messages postés 9 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 3 février 2013 - 31 janv. 2012 à 21:34
MrKoala69 Messages postés 9 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 3 février 2013 - 1 févr. 2012 à 19:28
Bonjour à tous,
(j'espère ne pas m'être trompé pour la catégorie).
Je suis étudiant en informatique et j'étudie le C ++.

Actuellement je planche sur un programme de banque virtuelle. Et ce programme doit me permettre (entre autre) de gérer mes comptes à travers un fichier.txt.

Tout cela est bon, sauf que pour pouvoir modifier les données de chaque compte de manière différente (exemple: augmenter le solde du compte numéro n), je dois pouvoir accéder aux informations du fichier.txt depuis un tableau.

Pour l'instant je peux : enregistrer des données dans le fichier et les afficher.
Mais impossible de faire en sorte que mes données du fichier sois aussi enregistrer dans le tableau afin d e pouvoir les gérer individuellement.

Je cherche donc un peu d'aide, et une méthode pour faire ça car je n'y arrive pas trop =/.

A savoir que j'ai fais deux procédures : une pour écrire dans mon fichier et une autre pour lire mon fichier.

Les voici :
void fichier()
{
        ofstream fichier("Comptes.txt", ios::out);
 
        if(fichier)
        {
int n=1;
int i;
banque.numcpte=1;
cout<<"\n Combien de comptes souhaitez vous entrer? ";
cin>>i;
while (n<=i)
{
cout<<"\n Entrez un nombre pour le premier compte (implement de 1 automatique) : ";
cin>>banque.numcpte;
while (n<=i) 
{
cout<<"Entrez le solde du compte numero ";
cout<>banque.ssolde;
fichier<> banque.numcpte >> banque.ssolde;
while(!fichier.eof())
{
cout << banque.numcpte <<"\t" <> banque.numcpte>> banque.ssolde;
}
fichier.close();
}


Voilà en espérant que quelqu'un pourra m'éclairer. Merci d'avance.

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
1 févr. 2012 à 12:51
Bonjour.

Quelques conseils avant tout:
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Les std::cout se cumulent, donc tu peux directment écrire:
std::cout << "Entrez le solde du compte numero "<< banque.numcpte << " : ";
- std::ofstream fichier("Comptes.txt", ios::out); => pas besoin de ios::out, puisque c'est un ofstream ! (C'est déjà un ios::out).

Ton problème, c'est que tu fais deux actions dans une seule fonction. Une action par fonction est préférable (si tu as deux actions, séparent les en deux fonctions). Ton souci est conceptuel, c'est-à-dire que tu as mal pensé ton application (ce que tu sais déjà, puisque tu demandes de l'aide sur ce point précis). Il te faut manipuler une liste de comptes en banque en mémoire, et ne les écrire ou charger d'un fichier qu'à la fin, d'un seul coup.

Voici un exemple, qui reprend ton code et corrige quelques parties maladroites:
#include 
#include <vector>
#include <fstream>

namespace
{
  struct Compte
  {
    int _num;
    int _solde;
  };
  typedef std::vector<Compte>::const_iterator iter;

  void displayCompte(const std::vector<Compte>& comptes)
  {
    for (iter it = comptes.begin(); it != comptes.end(); ++it)
      std::cout << "Num: " << it->_num << ", solde: " << it->_solde << std::endl;
  }

  bool writeCompte(const std::string& filename, const std::vector<Compte>& comptes)
  {
    std::ofstream file(filename.c_str());
    if (!file)
      return false;

    for (iter it = comptes.begin(); it != comptes.end(); ++it)
      file << it->_num << "\t" << it->_solde << std::endl;

    return true;
  }

  bool readCompte(const std::string& filename, std::vector<Compte>& comptes)
  {
    std::ifstream file(filename.c_str());
    if (!file)
      return false;

    while (file)
    {
      Compte compte;
      file >> compte._num >> compte._solde;
      comptes.push_back(compte);
    }

    return true;
  }

} // namespace
int main()
{
  std::vector<Compte> comptes;

  int i = 0;
  int nb = 0;
  std::cout << "\n Combien de comptes souhaitez vous entrer? ";
  std::cin >> nb;
  while (i < nb)
  {
    Compte compte;
    std::cout << "\n Entrez un nombre pour le compte " << i << ": ";
    std::cin >> compte._num;
    std::cout << "Entrez le solde du compte numero " << compte._num << ": ";
    std::cin >> compte._solde;
    comptes.push_back(compte);
    ++i;
  }

  displayCompte(comptes);
  writeCompte("Comptes.txt", comptes);

  std::vector<Compte> test;
  readCompte("Comptes.txt", test);
  displayCompte(test);

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
MrKoala69 Messages postés 9 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 3 février 2013
1 févr. 2012 à 19:28
Très bien, je pense avoir compris ce que tu m'as expliqué. Merci à toi pour la réponse très complète

Je vais étudier le code que tu m'a fournis et essayer de me l'approprier. Je vais essayer de le refaire avec ce que je connais déjà, car là même si j'ai (presque tout) compris le langage dépasse un peu le niveau qui m'est enseigné pour l'instant, je ne suis qu'en première année

En tout cas encore merci à toi
0
Rejoignez-nous