Structure c, fichier

Fermé
wicky-james - 24 juin 2017 à 18:12
Wicky-james Messages postés 36 Date d'inscription vendredi 14 novembre 2014 Statut Membre Dernière intervention 9 juin 2020 - 30 juin 2017 à 20:50
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

Dalfab Messages postés 669 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 24 septembre 2022 90
25 juin 2017 à 14:00
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
Wicky-james Messages postés 36 Date d'inscription vendredi 14 novembre 2014 Statut Membre Dernière intervention 9 juin 2020
30 juin 2017 à 20:50
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