bjipowa
Messages postés47Date d'inscriptionmercredi 18 août 2004StatutMembreDernière intervention29 mars 2007
-
30 mai 2005 à 14:12
Alcantornet
Messages postés89Date d'inscriptionmardi 8 février 2005StatutMembreDernière intervention14 novembre 2007
-
31 mai 2005 à 15:06
Bonjour,
voila je suis une noob en c++ mais je dois faire un prog pour mon BTS dans ce language, et je dois pour cela utiliser les fichiers.
J'ai donc créer un rpog pour la gestion des articles de journal ou de site internet (je c le sujet un peu bateau).
void article::saisir()
{
system("cls");
cin.ignore();
cout<<"\n Entrez un titre : ";
cin.getline(this->titre,50,'\n');
cout<<"\n\n Entrez un auteur : ";
cin.getline(this->auteur,50,'\n');
cout<<"\n\n Entrez un type : ";
cin.getline(this->type,50,'\n');
cout<<"\n\n Entrez un nom de fichier : ";
cin.getline(this->nom_fichier,50,'\n');
cout<<"\n\n Entrez un nombre de pages : ";
cin>>this->nb_pages;
cout<<"\n\n Entrez un nombre de mots cles: ";
cin>>this->nb_mots_cles;
for (
int i=0; // pour i allant de 0
i<this->nb_mots_cles; i++) // au nbre de mot cle entré
// faire :
{
cout<<"\n\n Entrer le mot cle numero "<< i+1 <<" : ";
cin.getline(this->mot_cles[i],50,'\n');
}
}
void article::modifier()
{
int choix;
do // boucle
{
system("cls");
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"°°° °°°\n";
cout<<"°°° 1 - modifier le titre °°°\n";
cout<<"°°° 2 - modifier l'auteur °°°\n";
cout<<"°°° 3 - modifier le nombre de page °°°\n";
cout<<"°°° 4 - modifier le type °°°\n";
cout<<"°°° 5 - modifier le nom fichier °°°\n";
cout<<"°°° °°°\n";
cout<<"°°° 0 - Quitter °°°\n";
cout<<"°°° °°°\n";
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<" Choix : ";
cin>>choix;
switch (choix)
{
case 1 : // choix = modifier le titre
system("cls"); //efface l'écran actuel
cout<<"Entrez le nouveau titre : ";
cin.getline(this->titre,50,'\n');
break;
case 2 : // choix = modifier l'auteur
system("cls"); //efface l'écran actuel
cout<<"Entrez le nouvel auteur : ";
cin.getline(this->auteur,50,'\n');
break;
case 3 : // choix = modifier le nbre de pages
system("cls"); //efface l'écran actuel
cout<<"Entrez le nouveau nombre de pages : ";
cin>>this->nb_pages;
break;
case 4 : // choix = modifier le type
system("cls"); //efface l'écran actuel
cout<<"Entrez le nouveau type : ";
cin>>this->type;
break;
case 5 : // choix = modifier le nom du fichier
system("cls"); //efface l'écran actuel
cout<<"Entrez le nouveau nom de fichier : ";
cin.getline(this->nom_fichier,50,'\n');
break;
default : // choix par defaut (si choix différent de 0,1,2,3,4,5)
system("cls"); //efface l'écran actuel
cout<<" . : : Erreur de saisi : : . ";
break;
}
} // fin de la boucle
while (choix!=0); // condition pour la fin de la boucle
}
void article::afficher()
{
system("cls");
cout<<"\n\t . : : VISUALISATION DE L'ARTICLE : : . \t\n\n";
cout<<"\n Titre de l'article : "<<this->titre;
cout<<"\n\n Auteur de l'article : "<<this->auteur;
cout<<"\n\n Type de l'article : "<<this->type;
cout<<"\n\n Nombre de pages :"<<this->nb_pages;
cout<<"\n\n Nom du fichier :"<<this->nom_fichier;
cout<<"\n\n Nombre de mots cles :"<<this->nb_mots_cles;
for(int i=0;i<this->nb_mots_cles; i++)
{
cout<<"\n\n Le mot cles "<< i+1 <<" : "<<this->mot_cles[i];
}
}
void article::visualiser()
{
chaine chemin;
chaine commande;
system("cls");
cout<<"\n\n Le nom du fichier est : ";
cout<<this->nom_fichier;
cout<<"\n\n Completer le chemin SVP : ";
cin>>chemin;
strset(commande, '\0');
strcpy(commande, "start winword");
strcat(commande, "\");
strcat(commande, this->nom_fichier);
system(commande);
}
////////////////////////////////////////////////////////////////////////////////
//////////////////// Classe Article Journal //////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void art_site::saisir()
{
this->article::saisir();
cout<<"\n Entrez le nom : ";
cin.getline(this->nom,50,'\n');
cout<<"\n Entrez saisir le type : ";
cin.getline(this->type,50,'\n');
cout<<"\n Entrez le sufixe du site : ";
cin.getline(this->sufixe,50,'\n');
}
void art_site::afficher()
{
this->article::afficher();
cout<<"\n Nom de l'article : "<<this->nom;
cout<<"\n Type de l'article : "<<this->type;
cout<<"\n Sufixe de l'article : "<<this->sufixe;
}
void art_site::modifier()
{
int choix;
do
{
system("cls");
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"°°° °°°\n";
cout<<"°°° 1 - modifier les donnees de l'article °°°\n";
cout<<"°°° 2 - modifier le nom °°°\n";
cout<<"°°° 3 - modifier le type °°°\n";
cout<<"°°° 4 - modifier le sufixe °°°\n";
cout<<"°°° °°°\n";
cout<<"°°° 0 - Quitter °°°\n";
cout<<"°°° °°°\n";
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<" Choix : ";
cin>>choix;
switch (choix)
{
case 1 : system("cls");
this->article::modifier();
break;
case 2 : system("cls");
cout<<"\n Entrez le nouveau nom : ";
cin.getline(this->nom,50,'\n');
break;
case 3 : system("cls");
cout<<"\n Entrez le nouveau type : ";
cin.getline(this->type,50,'\n');
break;
case 4 : system("cls");
cout<<"\n Entrez le nouveau sufixe : ";
cin.getline(this->sufixe,50,'\n');
break;
template <class T>
void liste<T>::consulter()
{
chaine rech;
bool trouve;
T * p;
system("cls");
cout<<"\n Quel article voulez vous consulter (titre) : ";
cin.getline(rech,50,'\n');
p = this->tete;
trouve=false;
while (p && trouve==false)
{
if (strcmp(p->retour_titre(),rech)==0)
trouve=true;
else
p=p->retour_suiv();
}
if (trouve==true)
p->afficher();
else
cout<<"\n Article non trouve";
}
template <class T>
void liste<T>::afficher_tout()
{
T *p = this->tete;
system("cls");
cout<<"\n Il y a "<<this->nb_elements<<" article(s)";
while (p!=NULL)
{
p->afficher();
p=p->retour_suiv();
}
}
template <class T>
void liste<T>::modifier()
{
chaine rech;
bool trouve;
T * p;
cout<<"Quel article voulez vous modifier (titre) : ";
cin.getline(rech,50,'\n');
p = this->tete;
trouve=false;
while (p && !trouve)
{
if (strcmp(p->retour_titre(),rech)==0)
trouve=true;
else
p=p->retour_suiv();
}
if (trouve)
p->modifier();
else
cout<<"article non trouve";
}
template <class T>
void liste<T>::supprimer()
{
chaine rech;
bool trouve;
T * p, *q;
cout<<"Quel article voulez vous supprimer (titre) : ";
cin.getline(rech,50,'\n');
p = this->tete;
q = p;
trouve=false;
while (p && !trouve)
{
if (strcmp(p->retour_titre(),rech)==0)
trouve=true;
else
{
q=p;
p=p->retour_suiv();
}
}
if (!trouve)
{
cout<<"article non trouve";
}
else
{
p->afficher();
cout<<" La suppression a reussie";
this->nb_elements--;
if (p==this->tete)
{
// suppression à la tete
this->tete=this->tete->retour_suiv();
}
else if(p->retour_suiv()==NULL)
{
//suppression à la fin de la liste
q->modif_suiv(NULL);
}
else
{
// suppresion au milieu de la liste
q->modif_suiv(p->retour_suiv());
}
delete p;
}
}
template <class T>
void liste<T>::lister_critere(char * rech)
{
T * p;
p = this->tete;
int cpt = 0;
while (p)
{
if (strcmp(p->retour_nom(),rech)==0)
{
cpt++;
p->afficher();
}
p=p->retour_suiv();
}
if (cpt==0)
cout<<"aucun article";
else
cout<<cpt<<"article(s) trouve(s)s";
}
////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Classe Base /////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class Base
{
private :
liste liste_journal;
liste liste_site;
chaine nom;
public :
Base();
void initialiser();
void finaliser();
void ajouter();
void afficher();
void consulter();
void modifier();
void supprimer();
void consulter_journal();
void consulter_site();
void menu();
void moteur_recherche();
};
default : cout<<" . : : Erreur de saisi : : .";
break;
}
}while (choix != 0);
}
void Base::moteur_recherche()
{
int i,nb;
chaine mot[10];
system("cls");
cout<<"\n Donner le nombre de mot (de 1 à 10) : ";
cin>>nb;
for (i=0;i<nb;i++)
{
cin>>mot[i];
}
}
cout<<"\n\n Entrez le nom de la base (20 caracteres max): ";
cin.getline(this->nom,50,'\n');
cout<<"La base "<<this->nom <<" a t-elle été sauvegardée dans un fichier :(o/n) >> ";
cin>>choix;
do
{
// si le fichier a déja été sauvegardé if (choix 'O' || choix 'o')
{
cout<<"Entrer le nom (logique) du fichier : ";
cin>>fichier;
////////////////////////////////////////////////////////////////////////////////
//////////////////// programme principal /////////////////////////
////////////////////////////////////////////////////////////////////////////////
void main()
{
Base mabase;
// initialisation de la base
mabase.initialiser();
// affiche le menu
mabase.menu();
mabase.finaliser();
}
<Fin code>
Dans ma procedure void Base::initialiser(), je voudrais que le prog me demande si un fichier de sauvegarde existe deja. Si non, alors il commence tout de suite a executer le prog, si Oui, il ouvre le fichier et récupère les infos contenu à l'interieur :
cout<<"\n\n Entrez le nom de la base (20 caracteres max): ";
cin.getline(this->nom,50,'\n');
cout<<"La base "<<this->nom <<" a t-elle été sauvegardée dans un fichier :(o/n) >> ";
cin>>choix;
do
{
// si le fichier a déja été sauvegardé if (choix 'O' || choix 'o')
{
cout<<"Entrer le nom (logique) du fichier : ";
cin>>fichier;
/* CHARGEMENT DES ELEMENTS DU FICHIERS */
}
Dans ma procedure void Base::finaliser(), j'aimerais que le programme me demande si je veux enregistrer les informations entrées dans un fichier txt.
- Si je dis Non, il ferme le prog.
- Si Oui, il me demande dans quel nom de fichier (je donne le nom de fichier sans l'extension .txt, et lui m'enregistre les infos dans le fichier <nom_fichier.txt>
<debut code> void Base::finaliser()
{
FILE*fichier;
char nomF;
system("cls");
cout<<"\t°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"\t°° °°\n";
cout<<"\t°° SAUVEGARDE DE LA BASE °°\n";
cout<<"\t°° °°\n";
cout<<"\t°°°°°°°°°°°°°°°°°°°°°°°°°°°\n";
cout<<"nom du fichier a creer: ";
cin>>nomF;
/* INSERTIONS DES DONNEES DANS LE FICHIER */
}
<fin code>
KKun pourrait il m'aider pour la creation et le chargement de ces fichiers SVP car g déja tenter d'aller voir des tutos ou des exemples mais je ne comprend pas et n'arrive pas a les integrer dans mon prog
Alcantornet
Messages postés89Date d'inscriptionmardi 8 février 2005StatutMembreDernière intervention14 novembre 2007 30 mai 2005 à 21:35
Salut alors voilà si tu veut enregistré dans un fichier sait un peu comme si tu veut les infos à l'écran.
Imagine une fonction pour enregistrer seulement les article. (Si j'ai bien compris ton prog )
void article::afficher()
{
FILE * p_File;
fopen("ouptut.txt","w"); // le w signife write (écrire) tu peux rajouté un b pour écrire en binaire
char * temp;
sprintf(&temp,"\n\t . : : VISUALISATION DE
L'ARTICLE : : . \t\n\n\n Titre de l'article : %s\n\n Auteur de
l'article : %s\n\n Type
de l'article :%s \n\n Nombre de pages : %s \n\n Nom du fichier :
%s\n\n Nombre de mots cles
:%i",this->titre,this->auteur,this->type,this->nb_pages,this->nom_fichier,this->nb_mots_cles);
fwrite(&temp,1,strlen(temp),p_File);
for(int i=0;i<this->nb_mots_cles; i++)
{
sprintf(&temp,"\n\n Le
mot cles %i : %s",i+1,this->mot_cles[i]);
fwrite(&temp,1,strlen(temp),p_File);
}
fclose(p_File);
}
J'ai pas testé le code mais j'espère que ça pourra te donner des idées
bjipowa
Messages postés47Date d'inscriptionmercredi 18 août 2004StatutMembreDernière intervention29 mars 2007 31 mai 2005 à 09:21
Ok, c'est exactement sa que je voulais faire, mais en fait, mon prog est en C++ et ce n'est donc pas FILE mais ofstream ou un truc comme sa il me semble. Enfin, je vais regarder sa et tenter de le modifier :)
Alcantornet
Messages postés89Date d'inscriptionmardi 8 février 2005StatutMembreDernière intervention14 novembre 2007 31 mai 2005 à 15:06
Me revoilà, je t'ai fais un simple code (compiler sous Dev-cpp 4.9.9.2 en C++) que j'ai testé. Car l'idée d'en comporte une erreur au moins ( p_File=fopen("ouptut.txt","w"); )
alors voila un petit code complet qui FONCTIONNE (rien avoir avec ton code mais c'est un exemple).
Pour exemple pour écrire un ficher :
#include <stdio.h>
int main(){
FILE * essai; // Pointeur
essai=fopen("Test.txt","w"); // ouverture du fichier
char text[]="Ca fonctionne"; // Le test
fwrite(text,1,sizeof(text),essai); // On écrit
fclose(essai); //Termine les opérations sur le fichier
}
Et un autre exemple pour le lire :
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE * essai; // Pointeur
if(!(essai=fopen("Test.txt","r"))){ // ouverture du fichier
printf("Impossible d'ouvrir le fichier\n");
}else{
char text[15]; // Le test
fread(&text,1,15,essai); // On lit 15 caractères
printf("%s\n\n",text);
fclose(essai); //Termine les opérations sur le fichier
}
system("pause");
}