Repertoire v2

Soyez le premier à donner votre avis sur cette source.

Vue 6 779 fois - Téléchargée 196 fois

Description

La V 1.0 faisait pitié en fait lol
Interessant pour allouer la memoire dynamiquement

Source / Exemple :


#include <stdlib.h> //exit 
#include <fstream.h>    //fichier ouverture fermeture 
#include <iostream.h> //cout et cin 
#include <string.h>     //strcpy copie une chaine meme le caractere nul 
#include "biblio.h" 
#include "classlect.h" 
#include <windows.h>
#include <stdio.h>    // scanf 

#define tompon while (cin.get()!='\n'); 

////////////Fonction
void erreur(char *message); 
void saisie(); 
void charge(); 
void sortir(); 
void listefichiers();
void afficheetoile();

 
////////////Variables
int max=0; 
int globalbeta =0;
bool suivifichier = false ;
char fichier[30]; // nom du fichier 
char extention[]={'.','t','x','t','\0'}; 
char* nomfichierglobal = new char(10);

Personne lect; 

Personne::Personne() 
{ 

	for(int y=0;y<20;y++)
	{ 
		nom[y] = new char[10]; 
			prenom[y] = new char[10]; 
				commentaire[y] = new char[20]; 
						telephone[y] = new char[20];
	} 
} 

Personne::~Personne() 
{ 
	free(nom); 
	free(prenom); 
	free(commentaire); 
	free(telephone); 

} 

void main() 
{ 
   char reponse; 

       do 
       { 
        cout<<" ____________Projet Pti-Repertoire-MENU_______________"<<endl;
			  cout<<"|                                                     |"<<endl;
			  cout<<"|            "<<"(1) Creer fichier et saisir              |"<<endl; 
			  cout<<"|            "<<"(2) Lister                               |"<<endl;
			  cout<<"|            "<<"(3) Ajouter                              |"<<endl; 
			  cout<<"|            "<<"(4) Chercher                             |"<<endl; 
			  cout<<"|            "<<"(5) Supprimer                            |"<<endl; 
			  cout<<"|            "<<"(6) Changer de fichier                   |"<<endl;
			  cout<<"|            "<<"(7) Lister les fichiers                  |"<<endl;
			  cout<<"|            "<<"(8) Quitter le prog                      |"<<endl;			  
			  cout<<"|_____________________________________________________|"<<endl;
			  cout<<"|"<<endl;
			  cout<<"|->Repertoire en cours : "<<fichier<<endl;
			  cout<<endl; 
			  cout<<"Entrez votre choix : "; 
			  cin.get(reponse); 
			  tompon; 

       switch (reponse) 
           { 
			       case '1': 
				   saisie(); 
				   break; 

				   case '2': 
				   lect.lister();
					   
				   break; 

			       case '3' : 
			       lect.ajouter(); 
					  
			       break;
				   
				   case '4' : 
				   lect.chercher(); 
				   break; 

					case '5' : 
					lect.supr(); 
					break; 

					
					case '6' : 
					charge();
					break; 

					case '7' : 
					listefichiers();
					break; 

					case '8' : 
					sortir();
					break; 

					default :	
					system("cls");
					  
           } 

       }while(1); 
} 

void erreur(char *message) 
{ 
   cout<<"Erreur"<<message; 
       exit(-1); 
} 

void charge() 
{ 
	suivifichier = false;
	lect.copiefichierdsclasse();
	lect.lister();
  // ifstream charg (fichier); 
  // if (fichier==NULL) 
     //  erreur(" de Personne"); 

  // charg.close(); 
} 

void saisie() 
{ 
   system("cls");

   if(suivifichier==false)
   {
   cout<<"Saisir le nom du fichier"<<endl; 
   cin>>fichier;
   suivifichier = true;
   strcat(fichier,extention);
   }
   
   tompon;
   

   ofstream sav=(fichier); //creation de l'objet sav puis ouvre le fichier 

   if (fichier==NULL) 
   erreur(" d'eriture dans le fichier "); 

   char buffer[50]; 
   char buffer1[200]; 
   char putain[4]="non"; 
   char rep; 
   char fin='n'; 

   do 
   { 
/*==========================NOM==========================*/ 
cout<<"Nom : "; 
cin.getline(buffer,50); 
repertoire.nom=(char**) realloc (repertoire.nom,(max+1)*sizeof(char*)); 
repertoire.nom[max]=(char*) malloc (strlen(buffer)+1); 
strcpy(repertoire.nom[max],buffer); 

/*==========================PRENOM========================*/ 
cout<<"Prenom : "; 
cin.getline(buffer,50); 
repertoire.prenom=(char**) realloc (repertoire.prenom,(max+1)*sizeof(char*)); 
repertoire.prenom[max]=(char*) malloc (strlen(buffer)+1); 
strcpy(repertoire.prenom[max],buffer); 

/*==========================PHONE=========================*/ 
cout<<"Numero de telephone :"; 
cin.getline(buffer,50); 
repertoire.phone=(char**) realloc (repertoire.phone,(max+1)*sizeof(char*)); 
repertoire.phone[max]=(char*) malloc (strlen(buffer)+1); 
strcpy(repertoire.phone[max],buffer); 

/*==========================COMMENTAIRE====================*/ 
cout<<"Avez vous des commentaires sur la personne ? o/n : "; 
cin>>rep; 
tompon; 

   if(rep =='o') 
   { 

   cout<<"Commentaire : "; 

   cin.getline(buffer1,200); 

   repertoire.coment=(char**) realloc (repertoire.coment,(max+1)*sizeof(char*)); 

   repertoire.coment[max]=(char*) malloc (strlen(buffer1)+1); 

   strcpy(repertoire.coment[max],buffer1); //copie buffer dans repertoire 

   } 
   else 
   if(rep == 'n') 
   { 
   repertoire.coment=(char**) realloc (repertoire.coment,(max+1)*sizeof(char*)); 

   repertoire.coment[max]=(char*) malloc (5); 
   strcpy(repertoire.coment[max],putain); 
   } 

/*===================TRIER TOUT CE BORDEL=====================*/ 
char *pst=NULL; 

   for(int j=max;j>0;j--) 
   for(int k=0;k<j;k++) 

   if(stricmp(repertoire.nom[k],repertoire.nom[k+1]) >0) 
       { 
           pst=repertoire.nom[k]; 
           repertoire.nom[k]=repertoire.nom[k+1]; 
           repertoire.nom[k+1]=pst; 

           pst=repertoire.prenom[k]; 
           repertoire.prenom[k]=repertoire.prenom[k+1]; 
           repertoire.prenom[k+1]=pst; 

           pst=repertoire.phone[k]; 
           repertoire.phone[k]=repertoire.phone[k+1]; 
           repertoire.phone[k+1]=pst; 

           pst=repertoire.coment[k]; 
           repertoire.coment[k]=repertoire.coment[k+1]; 
           repertoire.coment[k+1]=pst; 

       } 

           cout<<"Continuer la saisie ? o/n : "; 
           cin>>fin; 
           tompon; 
           max++; 

   }while(fin!='n'); 

/*====================Rangez ds le dossier=====================*/ 
   for(int h=0; h<max; h++) 
   { 
	   sav<<repertoire.nom[h]<<","; 
	   sav<<repertoire.prenom[h]<<","; 
	   sav<<repertoire.phone[h]<<","; 
	   sav<<repertoire.coment[h]<<","<<endl;
   } 
   

   sav.close();//fermeture du fichier 

			if(repertoire.nom!=NULL) 
			for(int i=0;i<max;i++) 
			free(repertoire.nom[i]); 
			free(repertoire.nom); 

			if(repertoire.prenom!=NULL) 
			for(int f=0;f<max;f++) 
			free(repertoire.prenom[f]); 
			free(repertoire.prenom); 

			if(repertoire.phone!=NULL) 
			for(int g=0;g<max;g++) 
			free(repertoire.phone[g]); 
			free(repertoire.phone); 

			if(repertoire.coment!=NULL) 
			for(int p=0;p<max;p++) 
			free(repertoire.coment[p]); 
			free(repertoire.coment); 

	system("cls");

} 

/*====================CHERCHER=====================*/ 
void Personne::chercher() 
{

char* a=new char(10);
int u = 0; 

bool trouve = false ;
int nblignesaute = copiefichierdsclasse();
 
		do{
				u=0;
				cout<<"Tapez le nom de la personne a chercher"<<endl;
				cout<<"Terminez par 0"<<endl; 
				cin>>a;
				trouve = false;
			do
			{

				if( strcmp(a,nom[u])==0 )
				{
					trouve = true;
					
						afficheetoile();

					cout<<"Nom<"<<" :"<<nom[u]<<endl; 
					cout<<"Prenom<"<<" :"<<prenom[u]<<endl;
					cout<<"Telephone<"<<" :"<<telephone[u]<<endl;
					cout<<"Comentaire<"<<" :"<<commentaire[u]<<endl;
				
					
					
				}
				else
				{
					u++;

				}
					
			}while((trouve==false) && (u<nblignesaute+1));

			if(trouve==false)
			{
			cout<<"La recherche n'a pas ete effectue ou aucun resultat ne reponde a vos criteres."<<endl;
				
			}	

		}while(*a!='0');
	system("cls");

tompon; 

} 

/*====================SORTIR=====================*/ 
void sortir() 
{ 
   cout<<"Salut  |:p)"<<endl;

     
    printf("A la prochaine |:p)[< \n");

    for(int xor=0;xor<30000;xor++)
    {
        Sleep(50/100);
        printf("/\r");
        Sleep(50/100);
        printf("-\r");
        Sleep(50/100);
        printf("|\r");
        printf("-\r");

    }

   _exit(1); 
} 

/*====================SUPPRIMER=====================*/ 
void Personne::supr() 
{ 

	ecrifichier(copiefichierdsclasse());
		
	tompon; 

} 

/*====================ECRIRE DS LE FICHIER=====================*/ 
void Personne::ecrifichier(int nbligne) 
{
	int u=0;
	bool trouve = false ;
	char* a=new char(10);

	ofstream sav=(fichier);

		do{
				
				u=0;
				cout<<"Tapez le nom de la personne a supprimer"<<endl;
				cout<<"Terminez par 0"<<endl; 
				cin>>a;
				trouve = false;
				
			
			do
			{

				if( strcmp(a,nom[u])==0 )
				{
					trouve = true;
				
					for(int h=u;h<nbligne+1;h++)
					{
					nom[h]=nom[h+1];
					prenom[h]=prenom[h+1];
					telephone[h]=telephone[h+1];
					commentaire[h]=commentaire[h+1];
					}

					 for(int q=0; q<nbligne-1; q++) 
						{ 
							sav<<nom[q]<<","; 
							sav<<prenom[q]<<","; 
							sav<<telephone[q]<<","; 
							sav<<commentaire[q]<<","<<endl;
						} 
					 
					   sav.close();			
					
				}
				else
				{
					u++;

				}
				

				
			}while((trouve==false) && (u<nbligne+1));

		}while(*a!='0');

			cout<<"Suppression reussie"<<endl;

}

/*====================Ajouter=====================*/ 
void Personne::ajouter() 
{
system("cls");
int beta=copiefichierdsclasse();

char reponse ='o';

	
			while(reponse=='o')
			{
				cout<<"Saisir nom"<<endl;
				cin>>nom[beta];

				cout<<"Saisir prenom"<<endl;
				cin>>prenom[beta];

				cout<<"Saisir telephone"<<endl;
				cin>>telephone[beta];

				cout<<"Saisir commentaire"<<endl;
				gets(commentaire[beta]); //grace a gets on gere les espace
										//car l'espace est considere commme
										//un caraceter de remplissage
										//par cin 

				globalbeta=beta++;
				globalbeta++;
				tompon; 
				cout<<"Voulez vous ajouter une autre personne ?"<<endl;
				cin>>reponse;

			}

			triage(beta);

		//tompon; 
}

/*====================trier=====================*/ 
void Personne::triage(int maxnb)
{

	char *pst=NULL; 

	for(int j=maxnb+1;j>0;j--)
	{
		for(int k=0;k<j;k++)
		{

		  if(stricmp(nom[k],nom[k+1])>0) 
		   { 
			   pst=nom[k]; 
			   nom[k]=nom[k+1]; 
			   nom[k+1]=pst; 

			   pst=prenom[k]; 
			   prenom[k]=prenom[k+1]; 
			   prenom[k+1]=pst; 

			   pst=telephone[k]; 
			   telephone[k]=telephone[k+1]; 
			   telephone[k+1]=pst; 

			   pst=commentaire[k]; 
			   commentaire[k]=commentaire[k+1]; 
			   commentaire[k+1]=pst; 

		   } 
		}
	}

	recopier(fichier);
	system("cls");
	tompon; 
}

/*====================copie le fichier ds la classe=====================*/ 
int Personne::copiefichierdsclasse()
{
//	system("cls");

char ch; 
char *tabfichier = (char*) malloc(1*sizeof(char));
char tm2nom[50];
char tmprenom[50];
char tmtel[50];
char tmcomt[50]; 

int i = 0 ; 
int j = 0 ; 
int f = 0 ; 
int d = 0 ; 
int nbdebut = 0;
int arepartir = 0;
int nbvirgule = 0; 
int e =0;
int u = 0; 
int beta=0; 
int alfa = 0; 
int contevir = 0;
int nblignesaute =0; 

   if(suivifichier == false)
   {
   cout<<"Quel fichier voulez ouvrir?"<<endl; 
   cout<<"Fichier :"; 
   cin>>fichier; 
   cout<<endl;
   suivifichier = true;
   strcat(fichier,extention);  
   }

	
   
   nomfichierglobal = fichier;

   ifstream list (fichier); 

   	while( list.get(ch) )
		{ 

  • (tabfichier+d)=ch;
d++; j++; tabfichier = (char*) realloc(tabfichier,d+1*sizeof(char)); } tabfichier[d]='\0'; list.close(); for(i=0;i<j;i++) { if(tabfichier[i]==',') { contevir++; arepartir = i - nbvirgule; nbvirgule = i; nbdebut = i - arepartir; for(f=nbdebut;f<i;f++) { if(tabfichier[f]==',') { f++; } if(tabfichier[f]=='\n') { f++; nblignesaute++; } if(contevir==1 && tabfichier[f]!=',' && tabfichier[f]!='\n') { if(f==i-1) { tm2nom[e]=tabfichier[f]; tm2nom[e+1]='\0'; }else tm2nom[e]=tabfichier[f]; }else if(contevir==2 && tabfichier[f]!=',' && tabfichier[f]!='\n') { if(f==i-1) { tmprenom[e]=tabfichier[f]; tmprenom[e+1]='\0'; }else tmprenom[e]=tabfichier[f]; }else if(contevir==3 && tabfichier[f]!=',' && tabfichier[f]!='\n') { if(f==i-1) { tmtel[e]=tabfichier[f]; tmtel[e+1]='\0'; }else tmtel[e]=tabfichier[f]; }else if(contevir==4 && tabfichier[f]!=',' && tabfichier[f]!='\n') { if(f==i-1) { tmcomt[e]=tabfichier[f]; tmcomt[e+1]='\0'; }else tmcomt[e]=tabfichier[f]; } e++; } switch(contevir) { case 1: strcpy(nom[beta],*(&tm2nom)); e=0; break; case 2: strcpy(prenom[beta],*(&tmprenom)); e=0; break; case 3 : strcpy(telephone[beta],*(&tmtel)); e=0; break; case 4 : strcpy(commentaire[beta],*(&tmcomt)); e=0; beta++; contevir=0; break; } for(alfa=0;alfa<49;alfa++){ tm2nom[alfa]=' '; tmprenom[alfa]=' '; tmtel[alfa]=' '; tmcomt[alfa]=' ';} } } free(tabfichier); return beta; } void Personne::recopier(char* fichier) { ofstream sav=(fichier); for(int q=0; q<globalbeta; q++) { sav<<nom[q]<<","; sav<<prenom[q]<<","; sav<<telephone[q]<<","; sav<<commentaire[q]<<","<<endl; } sav.close(); } /*===================LISTER LE CONTENU DU FICHIER=====================*/ void Personne::lister() { system("cls"); int d =0; int verif = 0; d = copiefichierdsclasse(); for(int i=0;i<d;i++) { cout<<"Nom : "<<nom[i]<<endl; cout<<"Prenom : "<<prenom[i]<<endl; cout<<"Telephone : "<<telephone[i]<<endl; cout<<"Commentaire : "<<commentaire[i]<<endl; cout<<endl; } tompon; tompon; system("cls"); } /*===================LISTER LES FICHIERS=====================*/ void listefichiers() { HANDLE hdlfff; LPCTSTR dir = "*.txt"; WIN32_FIND_DATA IpFindFileData; hdlfff = FindFirstFile(dir,&IpFindFileData); cout<<IpFindFileData.cFileName<<"\n"; while (FindNextFile(hdlfff,&IpFindFileData)) { cout<<IpFindFileData.cFileName<<"\n";} tompon; system("cls"); FindClose(hdlfff); } /*===================L4ETOILE=====================*/ void afficheetoile() { for(int xor=0;xor<20000;xor++) { Sleep(50/100); printf("/\r"); Sleep(50/100); printf("-\r"); Sleep(50/100); printf("|\r"); printf("-\r"); } }

Conclusion :


Ici se trouve le code principal . Dans le zip le reste ...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
60
Date d'inscription
dimanche 8 décembre 2002
Statut
Membre
Dernière intervention
1 juillet 2004

tu sais que kan tu inclus fstream.h, cout et cin sont dedans ...
Messages postés
88
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
27 mars 2006

Bon il ny a plus de pb pour liberer la memoire
pb: chercher ds le fichier tout les nom commencant par une lettre defini
Messages postés
88
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
27 mars 2006

il y a un pb au niveau de la liberation de memoire je ne comprend pas ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.