1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
|
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
struct fournisseur
{
long idFournisseur;
char nomFournisseur[50];
char villeFournisseur[40];
};
int fct_menu_fichier();
//bloc fonction fichier fournisseur
int fct_menu_fournisseur();
int fct_menu_update_fournisseur();
void encodage_fournisseur (struct fournisseur *);
void affichestructure(struct fournisseur *);
//FILE * f_open_File(const char *);
FILE * f_open_File(const char *nom,const char *mode);
void recherche(struct fournisseur *,char*pfournisseur);
//int recherche(struct fournisseur *pvec,char*pfournisseur);
void fct_update(struct fournisseur *pvec,char*pfournisseur);
//----------------------------------------------------------------------
int main()
{
FILE *fp; //pointeur de fichier
int menu;
//bloc file fournisseur
char NomModif[50];
struct fournisseur pvec;
do
{
system("cls");
switch(menu= fct_menu_fichier())
{
case 1:
do
{
switch (menu= fct_menu_fournisseur())
{
case 1:
system("cls");
printf("encodage d'un nouveau fournisseur\n");
printf("-----------------------------------------\n");
fp= f_open_File("fournisseur.txt","ab");//ouverture du fichier en lecture et ecriture
encodage_fournisseur (&pvec);
fwrite(&pvec,sizeof(struct fournisseur),1,fp);//ecrire dans fichier
fclose(fp);
break;
case 2:
system("cls");
printf("Modification fiche fournisseur\n");
printf("entre le nom du fournisseur dont vous souhaitez faire la modification: \n");
fflush(stdin);
gets(NomModif);
fct_update(&pvec,NomModif);
break;
case 3:
system("cls");
printf("--------------liste des fournisseurs------------------\n");
fp= f_open_File("fournisseur.txt","rb");//ouvre le fichier en écriture
// fseek(fp,0,0) ;//placement debut fichier
while(fread(&pvec,sizeof(struct fournisseur),1,fp)!=0)
{
affichestructure (&pvec);
}
fclose(fp);//ferme le fichier
break;
case 4:
system("cls");
menu= fct_menu_fichier();
break;
}
}while(menu!=4);
break;//case 1 du menu principal
}
}while(menu!=4);
return 0;
}
//I :
//P : Creation du menu ,demande d'entrer l'action que veut effectuer l'utilisateur
//O : Le choix menu de l'utilisateur
int fct_menu_fichier(void)
{
int choix;
printf("----------------Menu Principal-------------------\n\n");
printf("Sur quel fichier souhaitez_vous travailler?\n");
printf("-----------------------------------------------\n");
printf("1 fournisseur\n2 produit\n3 achat\n4 sortir du programme\n");
printf("Entre le numero de l'operation a effecteur: \n");
fflush(stdin);
scanf("%d",&choix);
return choix;
}
//I :
//P : Creation du menu specifique au fichier fournisseur ,demande d'entrer l'action que veut effectuer l'utilisateur
//O : Le choix menu de l'utilisateur
int fct_menu_fournisseur(void)
{
int choix;
printf("----------------Menu Fournisseur-------------------\n\n");
printf("Ques souhaitez-vous faire?\n");
printf("1 A jouter fournisseur\n2 modifier fiche fournisseur\n3 afficher liste fournisseur\n4 retourner au menu principal\n\n");
printf("Entre le numero de l'operation a effecteur: \n");
fflush(stdin);
scanf("%d",&choix);
return choix;
}
//I :Prend le pointeur de structure en paramètre
//P : va encoder les données spécifique au fournisseur entré par l'utilisateur
//O :
void encodage_fournisseur (struct fournisseur *pvec)
{
//FILE *fp;
// fp= f_open_File("rb");
int ret=0;
do
{
printf("entre l'id fournisseur: ");
fflush(stdin);
ret= scanf("%ld",&(pvec->idFournisseur));
//test si id n'est pas plus petit que 13 chiffres
/* if(pvec->idFournisseur<=12)
{
ret=0;
}
//test si id existe deja
while(fread(pvec,sizeof(struct fournisseur),1,fp)!=0&&((strcmp(pvec->idFournisseur,pvec->idFournisseur)<0)||(strcmp(pvec->idFournisseur,pvec->idFournisseur)>0)))
{
}
if(strcmp(pvec->idFournisseur,pvec->idFournisseur)==0)
{
printf("id deja existant\n");
fclose(fp);
ret=0;
}
else
{
ret=1;
}*/
}while(ret!=1);//faire en sorte que l'id ne se repete pas
printf("entre nom du fournisseur: ");
fflush(stdin);
gets(pvec->nomFournisseur);
printf("entre la situation géographique(ville)/n: ");
fflush(stdin);
gets(pvec->villeFournisseur);
}
//I:prend le pointeur de structure en paramètre
//P:va afficher les données de chaque structure contenues dans le fichier
//O:
void affichestructure(struct fournisseur *pvec)
{
printf("----------------------------------------------------\n\n");
printf("ID\t\tFournisseur\tVille\n");
printf("-----------------------------------------------------\n\n");
printf("%ld\t",pvec->idFournisseur);
printf("%s\t\t ",pvec->nomFournisseur);
printf("%s\t\n\n",pvec->villeFournisseur);
}
//I: prend le mode d'ouverture du fichier en paramètre
//P:ouvre le fichier selon le choix du user et le creer s'il n'existe pas
//O:retourne le pointeur de fichier
FILE * f_open_File(const char *nom,const char *mode)
{
FILE *fp;
fp=fopen(nom,mode);
//si fichier n'existe pas creer et ouvre selon le choix du user
if(fp==NULL)
{
fp= fopen("fournisseur.txt","wb");
fclose(fp);//ferme le fichier
fp=fopen(nom,mode);//reouverture dans le mode choisi par user
}
return fp;
}
//I:prend le pointeurde fichier et la saisie de l'utilisateur necessaire a la recherche en paramètre
//P:va rechercher le nom du fournisseur saisi si il le trouve il il affiche les données
//O:
void recherche(struct fournisseur *pvec,char*pfournisseur)
{
FILE *fp;
fp= f_open_File("fournisseur.txt","rb");
while(fread(pvec,sizeof(struct fournisseur),1,fp)!=0&&((strcmp(pfournisseur,pvec->nomFournisseur)<0)||(strcmp(pfournisseur,pvec->nomFournisseur)>0)))
{
}
if((strcmp(pfournisseur,pvec->nomFournisseur)==0))
{
/* printf("**********************************************\n\n");
printf("id: %ld\tnom: %s\tville: %s\n",pvec->idFournisseur,pvec->nomFournisseur,pvec->villeFournisseur);
printf("***********************************************\n\n");*/
}
else
{
/* printf("**********************************************\n\n");
printf("Fournisseur inexistant\n");
printf("**********************************************\n\n");*/
}
fclose(fp);
}
//I :Prend le pointeur de structure et la saisie de l'utilisateur en paramètre
//P : effectue une compraison de la saisie avec les données dans le fichier si saisie existe il demande d'effectuer la modification si non il demande si l'on veut creer le fournisseur
// dans les deux cas si choix est Non retour au menu du fichier cible
//O :
void fct_update(struct fournisseur *pvec,char*pfournisseur)
{
char choix;
int cpt=0;
FILE *fp;
fp= f_open_File("fournisseur.txt","rb+");//lecture et ecriture
while(fread(pvec,sizeof(struct fournisseur),1,fp)!=0&&((strcmp(pfournisseur,pvec->nomFournisseur)<0)||(strcmp(pfournisseur,pvec->nomFournisseur)>0)))
{
cpt++;
// printf("cpt=%d\n",cpt);
}
if(strcmp(pfournisseur,pvec->nomFournisseur)==0)
{
printf("id: %ld\tnom: %s\tville: %s\n",pvec->idFournisseur,pvec->nomFournisseur,pvec->villeFournisseur);
printf("voulez-vous vraiment modifier la fiche fournisseur? O/N\n");
fflush(stdin);
scanf("%c",&choix);
if(choix=='O'||choix=='o')
{
printf("modification de la fiche fournisseur\n");
fseek(fp,cpt,0);//probleme de modification pour ce qui est la suite du premier
// fseek(fp,(sizeof(long)+50+40)*(cpt),SEEK_CUR);//cpt-1 mais ne fonction pas du tout si je place la struct fournisseur en parametre cela ne fonctionne pas
// fseek(fp,sizeof(struct fournisseur)*(cpt-1),SEEK_CUR);//ici l'id ne s'affiche pas correctement les autres oui mais a la fin du fichier//le premier s'écrase mais pas bon id
fseek(fp,sizeof(struct fournisseur)*(cpt),SEEK_CUR);//idem que le precedent sauf que j'ai caract bizzare en plus
encodage_fournisseur (pvec);
fwrite(pvec,sizeof(struct fournisseur),1,fp);//ecrire dans fichier
fclose(fp);
}
else
{
printf("Annulation de la modification de la fiche fournisseur\n");
fclose(fp);
}
}
else
{
printf("Impossible de le modifier Fournisseur inexistant\n\n");
printf("Souhaitez-vous le creer? O/N\n");
fflush(stdin);
scanf("%c",&choix);
if(choix=='O'||choix=='o')
{
printf("Création du fournisseur\n");
fp= f_open_File("fournisseur.txt","ab");//ouverture du fichier en lecture et ecriture
encodage_fournisseur (pvec);
fwrite(pvec,sizeof(struct fournisseur),1,fp);//ecrire dans fichier
fclose(fp);
}
else
{
printf("retour menu\n");
fclose(fp);
}
}
} |