Créer une BD en C++

Fermé
Fabio ZZ Messages postés 5 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 8 août 2007 - 27 nov. 2006 à 13:31
 Bernard - 31 oct. 2007 à 12:43
Bonjour
Je suis carrement un novice en C++ et j'utilise Dev-C++ pour mon apprentissage. jusque là ça allait mais j'ai un pb avec les fichiers. Je veux créer un fichier et y ajouter des enregistrements. Il y a plusieurs champs par enregistrement (Numero, nom, population etc...). Je ne sais pas comment m'y prendre.
Merci de bien vouloir me donner un coup de main

4 réponses

mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
27 nov. 2006 à 15:18
Soit tu écris un champ par ligne dans ton fichier, soit tu couples ton programme avec une base de donnée (si les volumes de datas sont importants). Si tu passes par la solution fichier, il faudra charger le fichier au démarrage de l'appli et le resauver à la fin de l'appli.

Pour écrire ton fichier tu peux faire un truc de ce genre :
#include <list>
#include <fstream>

struct info_t{
  unsigned int numero;
  std::string nom;
  unsigned int population;
};

typedef std::list<info_t> infos_t;

void write_infos(std::ofstream & fout,const infos_t & infos){
  infos_t::const_iterator
    lit (infos.begin()),
    lend(infos.end());
  for(;lit!=lend;++lit){
    const info_t & info_cur = *lit;
    fout << info.numero << '\t' << info.nom << '\t' << info.population << std::endl;
  }
}

Si tu préfères travailler avec une BDD
https://codes-sources.commentcamarche.net/

Bonne chance
0
Fabio ZZ Messages postés 5 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 8 août 2007
27 nov. 2006 à 15:59
Merci pour ton aide mais je voudrais te presenter ce j'ai essayé de faire avant ton aide:

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

struct Ville
{
int num_ville;
char nom_ville[10];
int pop_ville;
char cand_ville[25];
int dep;
};
//Déclaration de l'entité ville
class departement
{
int nbville;
Ville cand[256];
public:
void saisie_ville(void);
}

void departement::saisie_ville(void)
{
FILE *P_CAND;
char fich_ville[30];

int i;
cout<<"Entrer le nom du fichier à créer: ";
cin>>fich_ville;
P_CAND=fopen(fich_ville,"w");
cout<<"Combien d'enregistrements voulez-vous effectuer?: ";
cin>>nbville;
cout<<"\n";
for (i=0;i<nbville;i++)
{
cout<<"Saisir le numero de la ville "<<i+1<<": ";
cin>>cand[i].nom_ville;
fprintf(P_CAND,"%s\n",cand[i].num_ville);
cout<<"Saisir le nom de la ville: ";
cin>>cand[i].nom_ville;
fprintf(P_CAND,"%s\n",cand[i].nom_ville);
cout<<"Saisir la population de la ville: ";
cin>>cand[i].pop_ville;
fprintf(P_CAND,"%s\n",cand[i].pop_ville);
cout<<"Saisir le nom du candidat de la ville: ";
cin>>cand[i].cand_ville;
fprintf(P_CAND,"%s\n",cand[i].pop_ville);
cout<<"Saisir le numero du departement de la ville: ";
cin>>cand[i].dep;
fprintf(P_CAND,"%s\n",cand[i].dep);
cout<<"\n";
}
}

int main(void)
{

departement dv;
dv.saisie_ville();
return 0
}


Voici exactement ce ke j'ai fait mais ça ne marche pas j'aimerais ke tu jettes un coup d'oeil pour voir ce qui ne va pas

Merci pour tout
0
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
28 nov. 2006 à 09:16
Quelques remarques :
- j'ai converti toutes les instuctions C en C++ pour que ce soit plus propre. Notamment ça évite les soucis de dimensionnement (qui ici étaient tous statique).
- Avec ce que j'ai écrit tes structures sont de taille dynamique et de taille virtuellement illimitée, et n'occupent en mémoire que ce qu'elles utilisent vraiment (inutile d'allouer 256 villes si on n'en a que 4 à saisir !)
- Attention à ne pas oublier le std:: devant les objetx de la STL (std::cout, std::vector etc...). On peut les omettre si on met un "using namespace std;" en début de fichier mais je te le déconseille. En particulier les using namespace ne doivent en aucun cas figurer dans un .hpp (ou .h)
- les headers de la STL ne prennent pas de .h (c'est juste les headers C), là tu utilisais des headers obsolètes. C'est d'ailleurs pour ça que le compilateur ne disait rien quand tu écrivais "cout" au lieu de std::cout
- évite les majuscules en C++ (on n'est pas en java et c'est chiant à taper :p)
- type de manière aussi précise que possible tes variables. Par exemple précise le "unsigned" si l'entier est positif ca évitera certains problèmes et c'est plus propre et plus lisible.

#include <iostream> // les headers C++ de la STL n'ont plus de .h (syntaxe obsolète)
#include <vector>
#include <fstream>
#include <string>
// on va se passer des headers C et tout faire en C++
//#include <string.h>
//#include <stdio.h>

struct ville // éviter les majuscules en C++
{
    unsigned int num_ville; // sois plus précis sur tes types !
    std::string nom_ville; // chaine de taille virtuellement illimitée
    unsigned int pop_ville;
    std::string cand_ville;
    unsigned short int dep;
};

//Déclaration de l'entité ville
class departement
{
    unsigned int nbville;
//  ville cand[256];
    std::vector<ville> vcand; // on n'est plus limité à 256 villes !
    public:
    departement(){} // il faut un constructeur, même s'il ne fait rien !
    bool saisie_ville(void); // return true si ok, false sinon
}; // ne pas oublier le ; en fin de classe c'est comme pour les struct !!!

bool departement::saisie_ville(void)
{
//  FILE *P_CAND; // on va remplacer le FILE * par un std::ofstream
//  char fich_ville[30];
//  int i; // en C++ on n'est pas obligé de déclarer en début de fonction, on
//  ne déclare la variable que dans l'horizon {...} où elle intervient

    std::cout << "Entrer le nom du fichier à créer: "; // toujours écrire std::cout, std::cin...
    // on peut omettre les std:: si on met en début de fichier "using
    // namespace std;" mais c'est interdit dans un .hpp donc autant prendre
    // des bonnes habitudes
    std::string fiche_ville;
    std::cin >> fiche_ville;

    //  P_CAND=fopen(fich_ville,"w");
    std::ofstream P_CAND(fiche_ville.c_str());

    if (!P_CAND){
        std::cerr << "Impossible d'écrire dans " << fiche_ville << std::endl;
        return false;
    }
    std::cout << "Combien d'enregistrements voulez-vous effectuer?: ";
    std::cin >> nbville;
    std::cout << std::endl; // en C++ \n => std::endl;
    for (unsigned int i=0;i<nbville;++i){
        struct ville cand;

        std::cout << "Saisir le numero de la ville "<<i+1<<": ";
        std::cin >> cand.num_ville;
//      fprintf(P_CAND,"%s\n",cand[i].num_ville); // syntaxe C, en C++ ca donne :
        P_CAND << cand.num_ville << std::endl;

        std::cout << "Saisir le nom de la ville: ";
        std::cin >> cand.nom_ville;
//      fprintf(P_CAND,"%s\n",cand[i].nom_ville);
        P_CAND << cand.nom_ville << std::endl;

        std::cout << "Saisir la population de la ville: ";
        std::cin >> cand.pop_ville;
//      fprintf(P_CAND,"%s\n",cand[i].pop_ville);
        P_CAND << cand.pop_ville << std::endl;

        std::cout << "Saisir le nom du candidat de la ville: ";
        std::cin >> cand.cand_ville;
//      fprintf(P_CAND,"%s\n",cand[i].pop_ville);
        P_CAND << cand.cand_ville << std::endl;

        std::cout << "Saisir le numero du departement de la ville: ";
        std::cin >> cand.dep;
//      fprintf(P_CAND,"%s\n",cand[i].dep);
        P_CAND << cand.dep << std::endl;

//      std::cout << "\n";
        std::cout << std::endl;
        vcand.push_back(cand);
    }
    return true;
}

int main(void)
{

    departement dv;
    dv.saisie_ville();
//  return 0
    return 0; // hey faudrait regarder les messages d'erreur un peu :p
}

Bonne chance
0
Bonjour, je suis étudiant en BTS IG 1er Année

J'ai du mal à comprendre lorsque mon prof explique les différents cour, alors j'aimerais savoir si quelqu'un pourrais m'aidé à mieux comprendre car je suis toujours bloquer sur le faite de pouvoir faire la différence entrela déclaration des variables et l'affichage des resultat
Par exemple qu'elle sont les langages qu'il faut emplyés dans C++ (si je veut dir saisir,afficher,pour, les instructions)
Alors si quelqu'un connais une bonne documentation déçu svp veillez me les envoyer via mon mail ronherbers@yahoo.fr
Merci a tous ceux qui m'aiderons
0
Bonjour,

Docs pour le C++ : https://cpp.developpez.com/cours/

Pour les questions, la F.A.Q C++ : https://cpp.developpez.com/faq/
0