Structure c, fichier

wicky-james -  
Wicky-james Messages postés 45 Statut Membre -
Bonjour je voudrais ajouter certaine contrainte dans ma structure je n'arrive pas malgré les videos que pu regarder sur youtube(langage_c structure et acces au fichier; les fichiers en langage c(fopen,fclose)), je n'arrive pas realiser le travaille.
contrainte;
que le nom entrer ne soit pas déjà enregistrer qu'il redemande d'entrer un nouveau nom;
qu'on fasse une recherche et afficher les information:
je ne veux que ça pour l'instant les reste je voudrais m’améliorer.

#include <stdio.h>
#include <stdlib.h>
#define MAX 30
#include <string.h>
#include <windows.h>
int i, nb;
// declaration de la structure
typedef struct Vente{
char description_article[MAX];
float prix_unitaire;
float montant;
int quantite;
char nom_client[MAX];
};
struct Vente vt[MAX];

// methode d'enregidtrement
void EnregistrerVente(){
system("cls"); // pour netoyer le fichier
char nom_client;
// creation du ficier virtuel
FILE * fiche;
fiche = fopen(fichier, "a");
printf("\t veuillez entrer les prescriptions demander \n\n");
printf("-------------------------------------------------------------------------- \n\n");
printf("\n entrer le nom du client:");
scanf("%s",&vt[i].nom_client);
fflush(stdin);
if(fiche == 1){
perror("Fichier n'existe pas");
exit(0);
}
while(nom_client== "vt.[i]nom_client")
{
printf("\n ce nom existe deja");
printf("\n veuiller entrer un nouveau nom:");
scanf("%s",&nom_client);
}
printf("\t--------------------------------------------------- \n\n");
printf("Entrer la description de l'article : \n");
scanf("%s", &vt[i].description_article[i]);
fflush(stdin);
printf("Entrer le montant du produits : \n");
scanf("%f", &vt[i].montant);
fflush(stdin);
printf("Entrer le prix unitaire : \n");
scanf("%f", &vt[i].prix_unitaire);
fflush(stdin);
printf("Entrer la quantite : \n");
scanf("%d", &vt[i].quantite);
fflush(stdin);
//printf("le resulta est%2.f",*montant_total.);
// Lecture du fichier
//fwrite(&vt,sizeof (vt), 1, fiche);
fprintf(fiche, "\n %s \n",vt[i].description_article);
fprintf(fiche, " %2.f \n",vt[i].prix_unitaire);
fprintf(fiche, " %d \n",vt[i].quantite);
fprintf(fiche, " %s \n",vt[i].nom_client);
//fprintf(fiche, "%2.f\n",vt[i].montant_total);
// fermeture du fichier
fclose(fiche);
return 0;
}

1 réponse

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,
    Pour vérifier si un fichier existe, il n'y a pas de fonction dans la norme à ma connaissance. Il faut utiliser des librairies spécifiques, sinon on peut écrire une fonction simple qui ouvrira le fichier si n'existe pas et ouverture écriture possible, sinon retournera une erreur non nulle.
    #include <stdio.h>
    #include <errno.h>
    
    int tryOpen( const char name[] , FILE **pf ) {
    	int   ret = 0;
    	FILE* file = fopen(name, "r+");  // ouverture en mode modification
    
    	if ( file != NULL ) {
    		// le fichier a pu être ouvert pour modification
    		fclose( file );
    		file = NULL;
    		ret = EEXIST; // erreur il existe déjà
    	}
    	else {
    		file = fopen(name, "wt"); // ouverture en mode écriture texte
    		if ( file == NULL ) {
    			// impossible : la cause est écrite dans errno
    			// EINVAL: nom de fichier non valide
    			// EACCES: fichier en lecture seule ou protégé
    			// ENOENT: nom réservé, ou répertoire n'existe pas
    			// EBADF : impossible d'écrire
    			ret = errno;
    		}
    		// sinon on a ouvert le fichier
    	}
    	if ( pf != NULL )
    		*pf = file; // transmettre le fichier ouvert
    	else if ( file != NULL )
    		fclose( file );
    	return ret;
    }
    0
    1. Wicky-james Messages postés 45 Statut Membre
       
      merci pour l'info vous m'aviez un peu aider pour la question librairie, mais je voulu tout simplement afficher la liste de tout les enregistrement effectuer.
      je voulu au premier lieu ne pas laisser entre un nom existant. ca n'a pas marche.


      void Enregistrer_Vente(){
      system("cls"); // pour netoyer le fichier
      int a;
      // creation du ficier virtuel
      FILE * fiche;
      fiche = fopen(fichier, "wt");

      printf("combien de vente voulez vous enregistrer\n");
      scanf("%d",&a);

      if (a<=0)
      {
      printf("l'enregistrement annule ,\nle nombre ne pas doit etre inferieur a zero , réessayer");
      }

      for (i=1;i<=a; i++)
      {
      printf("Entrer le nom du client : \n");
      scanf("%s", &vt[i].nom_client);
      printf("Entrer la description de l'article : \n");
      scanf("%s", &vt[i].description_article);
      fflush(stdin);
      printf("Entrer le prix unitaire : \n");
      scanf("%f", &vt[i].prix_unitaire);
      fflush(stdin);
      printf("Entrer la quantite : \n");
      scanf("%d", &vt[i].quantite);
      fflush(stdin);
      vt[MAX].montant=vt[i].prix_unitaire*vt[i].quantite;
      printf("le montant total: %f \n\n" , vt[MAX ].montant);
      printf("Enregistrement effectuee: \n");
      printf("---------------------------------\n");
      printf("---------------------------------\n\n");
      fprintf(fiche, "Nom:%s\n",vt[i].nom_client);
      fprintf(fiche, " La description de l'article est : %s \n",vt[i].description_article);
      fprintf(fiche, " Le prix unitaire est ::%f \n",vt[i].prix_unitaire);
      fprintf(fiche, " La quantite est : %d \n",vt[i].quantite);
      fprintf(fiche, " Le montant %f \n",vt[MAX].montant);
      }
      fclose(fiche);


      return (main());
      }

      void Afficher()
      {
      system("cls");
      FILE * fiche, * fichef;
      fiche = fopen(fichier, "rt"); //j'ouvre le fichier en mode lecture pour effectuer la recherche
      fichef = fopen(four, "rt");
      if(!fiche && !fichef)
      {
      printf("Impossible d'ouvrir le fichier en lecture\n");
      exit(0);
      }

      printf("__________L’affichage de la liste des clients, produits, fournisseur ______________\n");

      gotoxy(1,1);
      printf("Nom client\n");
      gotoxy(2,1);
      printf(" produit\n");
      gotoxy(14,2);
      printf("\e Founisseur \n");
      gotoxy(24,2);
      printf(" produit\n");

      printf("\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e \e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e- - -\n");
      int i;
      i=6;

      while(!feof(fiche),(fichef))
      {
      //textbackground(1);
      fscanf(fiche,"%s \n",vt[i].nom_client);
      gotoxy(3,i);
      fscanf(fiche,"%s \n",vt[i].description_article);
      gotoxy(2,i);
      printf(fichef,"%s \n",ach[i].nom_fournisseur);
      gotoxy(14,i);
      printf(fichef,"%s \n",ach[i].description_article);
      gotoxy(24,i);
      i++;

      printf("\n");
      fclose(fiche);
      fclose(fichef);
      return (main());

      }
      }




      0