Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/03/2020, à 09:40

chris7522

Recuperation entier dans fichier.txt et assignation a une variable

bonjour ,
    J'ai fais ce truc , il fonctionne correctement  . Avant de quitter , il enregistre mon solde ccp et livretA  dans un fichier.txt .
    C'est apres que j'ai un soucis . Au moment de la réouverture de mon programme , je voudrai récupérer les 2 entiers de mon fichier.txt et les réaffecter a ccp.solde et livretA.solde .
   Voici le code :
header

#ifndef COMPTE_H_
#define COMPTE_H_

class Compte
{
 private :
	int solde,rib;

 public :
	Compte(int a);
	int getsolde()const;
	void setsolde(int b);
	void saisir(int s);
	void deposer(int montant);
        bool retirer(int montant);
        void afficher();

};
#endif /* COMPTE_H_ */

compte.cpp :

#include "compte.h"
#include <iostream>
#include <string>
using namespace std;

Compte :: Compte(int a):solde(0),rib(a){}

int Compte::getsolde()const
{
	return solde;
}
void Compte :: setsolde(int b)
{
	solde = b;
}
void Compte :: deposer(int montant)
{
	solde += montant;
}
bool Compte ::retirer(int montant)
{
    if(solde >= montant)
    {
    	solde -= montant;
    	cout <<"votre retrait a bien été éffectué sur votre compte" << endl;
    	return true;
    }else
    	cout <<"solde insuffisant , operation refusée" << endl;
    	return false;
}
void Compte :: afficher()
{
    cout << "Le solde de votre compte : " << rib <<" est de : " << solde <<" euros" << endl;
}
void Compte :: saisir(int s)
{
	solde = s;
}

Puis le main.cpp:

#include "compte.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

int main()
{
 Compte ccp (12348), livretA(987654);
 int a(0);
 
 do {
 cout << "Quelle operation souhaitez vous faire ?" << endl;

 cout << "1 : Afficher le solde de votre compte CCP: " << endl;
 cout << "2 : Afficher le solde de votre livret A : " << endl;
 cout << "3 : Saisir votre nouveau solde CCP : " << endl;
 cout << "4 : Saisir votre nouveau solde livret A : " << endl;
 cout << "5 : Faire un depot sur votre compte CCP : " << endl;
 cout << "6 : Faire un depot sur votre livret A : " << endl;
 cout << "7 : Faire un retrait sur votre compte CCP : " << endl;
 cout << "8 : Faire un retrait sur votre livret A : " << endl;
 cout << "9 : Faire un virement sur votre compte CCP : " << endl;
 cout << "10 : Faire un virement sur votre livret A : " << endl;
 cout << "11 : Quitter le programme " << endl;
 cin >> a;
 cin.ignore();
 switch(a)
 {
  case 1 :
	  ccp.afficher();
	  break;
  case 2 :
	  livretA.afficher();
	  break;
  case 3 :
     {
      int s(0);
      cout << "Entrez votre solde : " << endl;
      cin >> s;
      ccp.saisir(s);
     }
	  break;
  case 4 :
     {
      int s(0);
      cout << "Entrez votre solde : " << endl;
      cin >> s;
      livretA.saisir(s);
     }
     break;
  case 5 :
     {
	  int s(0);
	  cout << " Quel est le montant de votre depot : " << endl;
	  cin >> s ;
	  ccp.deposer(s);
     }
     break;
  case 6 :
     {
  	  int s(0);
  	  cout << " Quel est le montant de votre depot : " << endl;
  	  cin >> s ;
  	  livretA.deposer(s);
     }
     break;
  case 7 :
     {
      int s(0);
      cout << " Quel est le montant de votre retrait : " << endl;
      cin >> s ;
      ccp.retirer(s);
     }
     break;
  case 8 :
     {
      int s(0);
      cout << " Quel est le montant de votre retrait : " << endl;
      cin >> s ;
      livretA.retirer(s);
     }
     break;
  case 11 :
	 {
	  fstream file("sauvegarde.txt",ios::out);
	  if(file.is_open())
	  {
		  file << ccp.getsolde()<< endl;
          file << livretA.getsolde()<<endl;
		  file.close();
		  cout << "solde enregistré avec succès" << endl;
	  }else{
		  cout << "solde non enregistré"<< endl;
	  }
	  cout << "Aurevoir" << endl;
	 }
	  break;
  default :
	  cout << "Mauvais choix " << endl;
	  break;
 }
}while( a != 11);

 return 0;
}

Merci de votre aide

Dernière modification par chris7522 (Le 13/03/2020, à 18:33)

Hors ligne

#2 Le 14/03/2020, à 09:41

NicoApi73

Re : Recuperation entier dans fichier.txt et assignation a une variable

Salut,

J'ai moins de temps en ce moment. Regarde ici pour voir si tu ne trouves pas une méthode appropriée : http://www.cplusplus.com/reference/fstream/fstream/

Il y a probablement plusieurs solutions. (Perso, j'utilise Qt, et donc je connais mal la librairie standard). Une qui devrait fonctionner est l’utilisation de get, en stockant les caractères un par un dans un string, jusqu'à endl, ou en ajoutant un séparateur (par exemple ';'), puis convertir le string en int

Hors ligne

#3 Le 14/03/2020, à 17:42

NicoApi73

Re : Recuperation entier dans fichier.txt et assignation a une variable

	 {
	  fstream file("sauvegarde.txt",ios::in);
	  
	  if(file.is_open())
	  {
	       int input;
		    
	       file >> input;
	       ccp.setsolde(input);
	       file >> input;
	       livretA.setsolde(input);
	       file.close();
	       cout << "solde lu avec succès" << endl; 
	  }else{
		  cout << "solde non lu"<< endl;
	  }

	 }

En utilisant effectivement fstream. Attention, il n'y a pas de contrôle d'erreur dans le code ci-dessus

Structure ton code différemment :
- créer une classe pour la gestion de la sauvegarde
- créer une vue (une classe pour l'affichage)
- créer un contrôleur pour la gestion des commandes.
Ne mets pas tout dans main, ça va vite devenir incompréhensible et ingérable...
Tu peux à la limite grouper la vue et le contrôleur

Hors ligne

#4 Le 14/03/2020, à 20:05

chris7522

Re : Recuperation entier dans fichier.txt et assignation a une variable

Merci d'avoir pris le temps de repondre malgres tout .
  Je vais me renseigner pour le controleur car je ne sais pas du tout comment cela fonctionne .

Hors ligne

#5 Le 14/03/2020, à 20:11

NicoApi73

Re : Recuperation entier dans fichier.txt et assignation a une variable

Regarde les architecture modèle-vue-controleur

Hors ligne

#6 Le 15/03/2020, à 16:09

chris7522

Re : Recuperation entier dans fichier.txt et assignation a une variable

Dans une de tes reponses , tu me conseilles d'utiliser plusieurs classes qui interagissent entre elles .
     Je n'en suis encore qu'au debut de mon apprentissage en ce qui concerne les classes et je cherche a comprendre comment faire communiquer ces différentes classes .
    Je trouve peu de contenu sur internet , surtout des initiations a la POO . Pourrai tu m'indiquer , un site , un livre etc , pour bien comprendre tout ca .
   Par exemple , si j'ai 2 classes avec leur méthodes respective, est ce que je peux dans le main utiliser les methodes de l'une et l'autre lors du deroulement de mon programme et de quelle facon?
    Sur mes 2 classes , il y en t il une qui sera en quelque sorte la classe mere ? Ou alors , je fais ce qui me plait .
     Je ne suis pas sur de m'etre exprimé clairement .
    Merci

Dernière modification par chris7522 (Le 15/03/2020, à 18:44)

Hors ligne

#7 Le 16/03/2020, à 06:21

NicoApi73

Re : Recuperation entier dans fichier.txt et assignation a une variable

Bonjour,

Une classe est une définition. Tu y définis un ensemble de données (les attributs) et de procédures (les méthodes) pour manipuler ces données. Ensuite, tu crées des objets à partir ce cette classe (tu instancies la classe). Ce sont ces objets que tu manipules, pas la classe.

Pour moi, tu n'as pas encore compris cette notion de définition et d'instanciation. Par exemple, dans l'exemple ci-dessus, tu définis une classe compte, que tu instancies 2 fois : ccp et livretA. En fait ccp et livretA sont des valeurs d'un attribut du compte, que tu n'as pas identifié dans ta classe : le nom du compte...

De plus, la fonction main n'est que le point de départ de ton programme, permettant d'initialiser ce qui est nécessaire pour démarrer. Voici un exemple de main d'une application graphique (développée sous Qt) :

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    w.show();

    return a.exec();
}

Certains programmes ont besoin d'initialiser quelques données supplémentaires au démarrage, mais ça reste toujours concis.

Personnellement, j'aime bien cet auteur et ce livre : https://www.eyrolles.com/Informatique/L … 212678956/ Voir quelques commentaires ici :./viewtopic.php?pid=22120809#p22120809

En Programmation Orientée Objet, beaucoup de choses sont possibles. Tu peux passer des objets en argument, tu peux retourner des objets, tu peux définir des objets comme attribut...

Ce qui est ci-dessus est du ressort de la syntaxe. Il faut ensuite structurer le code. Regarde un peu sur le net la notion de modèle-vue-controleur (model-view-controller si tu peux regarder les publications en anglais)

Dernière modification par NicoApi73 (Le 16/03/2020, à 06:23)

Hors ligne

#8 Le 20/03/2020, à 19:57

chris7522

Re : Recuperation entier dans fichier.txt et assignation a une variable

Tu as raison , pour le moment je ne comprend pas grand chose . Lorsque j'ai une seule classe et le main , j'ai compris comment les faire interagir . Par contre lorsqu'il y a plus d'une classe , je suis completement paumé . Lorsque que j'aurai compris , se sera bon je pense mais pour le moment ...
   Tu m'as dit de faire une classe pour la sauvegarde . J'ai tenté un truc mais je ne sais pas trop comment m'y prendre et aussi au niveau des include ,comment faire .

#ifndef SAUVEGARDE_H_
#define SAUVEGARDE_H_
#include<iostream>

class Sauvegarde
{
 public:
	void sauvegarde();
	void restitution();

};

#endif
#include "sauvegarde.h"
#include "compte.h"
using namespace std;

void Sauvegarde::sauvegarde()
{
	fstream file("sauvegarde.txt",ios::out);
		  if(file.is_open())
		  {
			  file << ccp.getsolde()<< endl;
	                  file << livretA.getsolde()<<endl;
			  file.close();
			  cout << "solde enregistré avec succès" << endl;
		  }else{
			  cout << "solde non enregistré"<< endl;
		  }
		          cout << "Aurevoir" << endl;
}
void restitution()
{
	fstream file("sauvegarde.txt",ios::in);

	 	  if(file.is_open())
	 	  {
	 	       int input;

	 	       file >> input;
	 	       ccp.setsolde(input);
	 	       file >> input;
	 	       livretA.setsolde(input);
	 	       file.close();
	 	       cout << "solde lu avec succès" << endl;
	 	  }else{
	 		  cout << "solde non lu"<< endl;
	 	  }
}

Hors ligne

#9 Le 21/03/2020, à 09:15

NicoApi73

Re : Recuperation entier dans fichier.txt et assignation a une variable

Bonjour,

Hormis en déclarant ccp et livretA comme variables globales, ça ne fonctionne pas. Et utiliser des variables globales est très fortement déconseillé. Il faut donc que tu passes tes objets de type Compte en argument à sauvegarde et restitution.

En partant de la création de 2 objets dans ton mai, ça va être difficile et la moindre modification va engendrer beaucoup de code. ccp et livretA sont 2 comptes différents, donc modifie ta classe compte et ajoute y un attribut nom de type string. Ne gère pas 2 objets indépendants, mais une liste ou un vecteur de compte

Hors ligne

#10 Le 21/03/2020, à 13:29

chris7522

Re : Recuperation entier dans fichier.txt et assignation a une variable

Merci de ta réponse .
Desolé de te "prendre la tete" une nouvelle fois , mais concretement , ca donnerai quoi ?

Hors ligne

#11 Le 21/03/2020, à 16:26

NicoApi73

Re : Recuperation entier dans fichier.txt et assignation a une variable

Je vais essayer de faire quelque chose, mais difficile de faire simple... Il me faudra un peu de temps.

En terme de livre, j'ai toujours utilisé les livres de Claude Delannoy. Le dernier est "Programmer en C++ moderne". Tu peux peut être essayer avec celui-ci.

Fais quelques recherches sur ce livre : certains décrient l'auteur (souvent c'est la même source et de plus ils n'ont pas lu le livre...). Je ne partage pas les critiques qui sont faites. Cet auteur a le mérite de décrire sa pédagogie et de s'y tenir. Il existe un add-on, auparavant intégré dans le livre, maintenant disponible au format informatique, portant sur les design patterns. Un peu léger à mon goût...

Tu peux regarder également quelques cours en ligne. Il y a toujours à apprendre, mais personnellement je préfère les livres.

Hors ligne

#12 Le 21/03/2020, à 20:34

chris7522

Re : Recuperation entier dans fichier.txt et assignation a une variable

Merci . Surtout prend tout ton temps , il n'y a absolument aucune urgence !
  Pour le livre , je vais devoir attendre un peu que la biblio municipale réouvre ses portes .

Hors ligne

#13 Le 18/04/2020, à 23:27

NicoApi73

Re : Recuperation entier dans fichier.txt et assignation a une variable

Bonsoir,

Ca peut donner quelque chose de ce type :
4 classes :
Compte
controleur
vue
database

La classe Compte ne gère que les opérations sur le compte. Elle n'affiche rien, elle ne sauvegarde rien
La classe database ne gère que le stockage des données. Elle sait juste ce qu'elle reçoit et sait les ressortir. Elle est indépendante de la class Compte
La classe vue affiche et permet également la saisie
La classe controleur fait le lien entre les différentes classes

Que tu stockes dans un fichier ou une base de données, seule la classe database évolue
Si tu changes la manière d'afficher, en passant par une interface graphique par exemple, le plus gros des changements sera fait dans la classe vue (il est possible que tu doives également intervenir sur la classe controleur)

La fonction main ne contient que l'initialisation du controleur.

Je te contacte par MP pour t'envoyer le code, car c'est assez long, surtout avec les commentaires.

Hors ligne